Lines Matching refs:admin

368 		      struct vcap_admin *admin,  in vcap_addr_keysets()  argument
372 enum vcap_type vt = admin->vtype; in vcap_addr_keysets()
378 vctrl->ops->update(ndev, admin, VCAP_CMD_READ, VCAP_SEL_ALL, addr); in vcap_addr_keysets()
379 vctrl->ops->cache_read(ndev, admin, VCAP_SEL_ENTRY, 0, in vcap_addr_keysets()
383 key |= ~admin->cache.keystream[idx]; in vcap_addr_keysets()
384 mask |= admin->cache.maskstream[idx]; in vcap_addr_keysets()
389 return vcap_find_keystream_keysets(vctrl, vt, admin->cache.keystream, in vcap_addr_keysets()
390 admin->cache.maskstream, false, 0, in vcap_addr_keysets()
451 int sw_width = ri->vctrl->vcaps[ri->admin->vtype].sw_width; in vcap_encode_keyfield()
452 struct vcap_cache_data *cache = &ri->admin->cache; in vcap_encode_keyfield()
503 int sw_width = vctrl->vcaps[ri->admin->vtype].sw_width; in vcap_encode_keyfield_typegroups()
504 struct vcap_cache_data *cache = &ri->admin->cache; in vcap_encode_keyfield_typegroups()
547 if (!ri->admin->w32be) { in vcap_copy_from_client_keyfield()
602 if (!ri->admin->w32be) { in vcap_copy_from_client_actionfield()
644 kf_table = vcap_keyfields(ri->vctrl, ri->admin->vtype, ri->data.keyset); in vcap_encode_rule_keyset()
651 tg_table = vcap_keyfield_typegroup(ri->vctrl, ri->admin->vtype, in vcap_encode_rule_keyset()
659 keyset_size = vcap_keyfield_count(ri->vctrl, ri->admin->vtype, in vcap_encode_rule_keyset()
744 int act_width = ri->vctrl->vcaps[ri->admin->vtype].act_width; in vcap_encode_actionfield()
746 struct vcap_cache_data *cache = &ri->admin->cache; in vcap_encode_actionfield()
784 int sw_width = ri->vctrl->vcaps[ri->admin->vtype].act_width; in vcap_encode_actionfield_typegroups()
785 struct vcap_cache_data *cache = &ri->admin->cache; in vcap_encode_actionfield_typegroups()
802 af_table = vcap_actionfields(ri->vctrl, ri->admin->vtype, in vcap_encode_rule_actionset()
810 tg_table = vcap_actionfield_typegroup(ri->vctrl, ri->admin->vtype, in vcap_encode_rule_actionset()
818 actionset_size = vcap_actionfield_count(ri->vctrl, ri->admin->vtype, in vcap_encode_rule_actionset()
880 ri->vctrl->ops->cache_erase(ri->admin); in vcap_erase_cache()
891 kset = vcap_keyfieldset(ri->vctrl, ri->admin->vtype, keyset); in vcap_set_rule_set_keyset()
896 sw_width = ri->vctrl->vcaps[ri->admin->vtype].sw_width; in vcap_set_rule_set_keyset()
911 aset = vcap_actionfieldset(ri->vctrl, ri->admin->vtype, actionset); in vcap_set_rule_set_actionset()
916 act_width = ri->vctrl->vcaps[ri->admin->vtype].act_width; in vcap_set_rule_set_actionset()
927 struct vcap_admin *admin; in vcap_rule_exists() local
930 list_for_each_entry(admin, &vctrl->list, list) in vcap_rule_exists()
931 list_for_each_entry(ri, &admin->rules, list) in vcap_rule_exists()
942 struct vcap_admin *admin; in vcap_get_locked_rule() local
945 list_for_each_entry(admin, &vctrl->list, list) { in vcap_get_locked_rule()
946 mutex_lock(&admin->lock); in vcap_get_locked_rule()
947 list_for_each_entry(ri, &admin->rules, list) in vcap_get_locked_rule()
950 mutex_unlock(&admin->lock); in vcap_get_locked_rule()
959 struct vcap_admin *admin; in vcap_lookup_rule_by_cookie() local
963 list_for_each_entry(admin, &vctrl->list, list) { in vcap_lookup_rule_by_cookie()
964 mutex_lock(&admin->lock); in vcap_lookup_rule_by_cookie()
965 list_for_each_entry(ri, &admin->rules, list) { in vcap_lookup_rule_by_cookie()
971 mutex_unlock(&admin->lock); in vcap_lookup_rule_by_cookie()
1071 if (ri->admin->w32be) { in vcap_copy_to_client_actionfield()
1173 if (ri->admin->w32be) { in vcap_copy_to_client_keyfield()
1401 struct vcap_admin *admin = ri->admin; in vcap_decode_actionset() local
1404 enum vcap_type vt = admin->vtype; in vcap_decode_actionset()
1411 actstream = admin->cache.actionstream; in vcap_decode_actionset()
1445 struct vcap_admin *admin = ri->admin; in vcap_decode_keyset() local
1448 enum vcap_type vt = admin->vtype; in vcap_decode_keyset()
1458 keystream = admin->cache.keystream; in vcap_decode_keyset()
1459 maskstream = admin->cache.maskstream; in vcap_decode_keyset()
1501 struct vcap_admin *admin = ri->admin; in vcap_read_rule() local
1512 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_READ, in vcap_read_rule()
1514 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1517 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1521 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1533 struct vcap_admin *admin = ri->admin; in vcap_write_rule() local
1543 ri->vctrl->ops->cache_write(ri->ndev, admin, in vcap_write_rule()
1546 ri->vctrl->ops->cache_write(ri->ndev, admin, in vcap_write_rule()
1549 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_WRITE, in vcap_write_rule()
1560 struct vcap_admin *admin = ri->admin; in vcap_write_counter() local
1562 admin->cache.counter = ctr->value; in vcap_write_counter()
1563 admin->cache.sticky = ctr->sticky; in vcap_write_counter()
1564 ri->vctrl->ops->cache_write(ri->ndev, admin, VCAP_SEL_COUNTER, in vcap_write_counter()
1566 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_WRITE, in vcap_write_counter()
1572 int vcap_chain_id_to_lookup(struct vcap_admin *admin, int cur_cid) in vcap_chain_id_to_lookup() argument
1574 int lookup_first = admin->vinst * admin->lookups_per_instance; in vcap_chain_id_to_lookup()
1575 int lookup_last = lookup_first + admin->lookups_per_instance; in vcap_chain_id_to_lookup()
1576 int cid_next = admin->first_cid + VCAP_CID_LOOKUP_SIZE; in vcap_chain_id_to_lookup()
1577 int cid = admin->first_cid; in vcap_chain_id_to_lookup()
1591 struct vcap_admin *admin; in vcap_find_admin() local
1596 list_for_each_entry(admin, &vctrl->list, list) { in vcap_find_admin()
1597 if (cid >= admin->first_cid && cid <= admin->last_cid) in vcap_find_admin()
1598 return admin; in vcap_find_admin()
1606 struct vcap_admin *admin, in vcap_admin_is_last() argument
1622 return admin == last; in vcap_admin_is_last()
1646 struct vcap_admin *admin; in vcap_is_next_lookup() local
1658 admin = vcap_find_admin(vctrl, dst_cid); in vcap_is_next_lookup()
1659 if (!admin) in vcap_is_next_lookup()
1667 static int vcap_rule_space(struct vcap_admin *admin, int size) in vcap_rule_space() argument
1669 if (admin->last_used_addr - size < admin->first_valid_addr) { in vcap_rule_space()
1671 __func__, __LINE__, size, admin->first_valid_addr); in vcap_rule_space()
1682 enum vcap_type vt = ri->admin->vtype; in vcap_add_type_keyfield()
1715 enum vcap_type vt = ri->admin->vtype; in vcap_add_type_actionfield()
1842 vtype = ri->admin->vtype; in _vcap_rule_find_keysets()
1920 vtype = ri->admin->vtype; in vcap_rule_find_actionsets()
1964 if (!ri->admin) { in vcap_val_rule()
1988 ret = ri->vctrl->ops->validate_keyset(ri->ndev, ri->admin, rule, in vcap_val_rule()
2025 ri->vctrl->ops->add_default_fields(ri->ndev, ri->admin, rule); in vcap_val_rule()
2031 return vcap_rule_space(ri->admin, ri->size); in vcap_val_rule()
2069 int sw_count = ri->vctrl->vcaps[ri->admin->vtype].sw_count; in vcap_insert_rule()
2071 struct vcap_admin *admin = ri->admin; in vcap_insert_rule() local
2082 list_for_each_entry(iter, &admin->rules, list) { in vcap_insert_rule()
2090 ri->addr = vcap_next_rule_addr(admin->last_used_addr, ri); in vcap_insert_rule()
2091 admin->last_used_addr = ri->addr; in vcap_insert_rule()
2098 list_add_tail(&duprule->list, &admin->rules); in vcap_insert_rule()
2120 list_for_each_entry_continue(elem, &admin->rules, list) { in vcap_insert_rule()
2126 move->addr = admin->last_used_addr; in vcap_insert_rule()
2128 move->offset = admin->last_used_addr - addr; in vcap_insert_rule()
2129 admin->last_used_addr = addr; in vcap_insert_rule()
2136 ri->vctrl->ops->move(ri->ndev, ri->admin, move->addr, in vcap_move_rules()
2145 struct vcap_admin *admin; in vcap_is_chain_used() local
2147 list_for_each_entry(admin, &vctrl->list, list) in vcap_is_chain_used()
2148 list_for_each_entry(eport, &admin->enabled, list) in vcap_is_chain_used()
2161 struct vcap_admin *admin; in vcap_get_next_chain() local
2163 list_for_each_entry(admin, &vctrl->list, list) { in vcap_get_next_chain()
2164 list_for_each_entry(eport, &admin->enabled, list) { in vcap_get_next_chain()
2181 struct vcap_admin *admin; in vcap_path_exist() local
2188 list_for_each_entry(admin, &vctrl->list, list) { in vcap_path_exist()
2189 list_for_each_entry(elem, &admin->enabled, list) { in vcap_path_exist()
2236 mutex_lock(&ri->admin->lock); in vcap_add_rule()
2255 ri->vctrl->ops->init(ri->ndev, ri->admin, ri->addr, ri->size); in vcap_add_rule()
2272 mutex_unlock(&ri->admin->lock); in vcap_add_rule()
2284 struct vcap_admin *admin; in vcap_alloc_rule() local
2293 admin = vcap_find_admin(vctrl, vcap_chain_id); in vcap_alloc_rule()
2294 if (!admin) in vcap_alloc_rule()
2297 if (vctrl->vcaps[admin->vtype].rows == 0) in vcap_alloc_rule()
2300 mutex_lock(&admin->lock); in vcap_alloc_rule()
2308 maxsize = vctrl->vcaps[admin->vtype].sw_count; /* worst case rule size */ in vcap_alloc_rule()
2309 if (vcap_rule_space(admin, maxsize)) { in vcap_alloc_rule()
2331 ri->admin = admin; /* refer to the vcap instance */ in vcap_alloc_rule()
2339 mutex_unlock(&admin->lock); in vcap_alloc_rule()
2345 mutex_unlock(&admin->lock); in vcap_alloc_rule()
2416 mutex_unlock(&elem->admin->lock); in vcap_get_rule()
2453 mutex_unlock(&ri->admin->lock); in vcap_mod_rule()
2473 struct vcap_admin *admin = ri->admin; in vcap_fill_rule_gap() local
2479 if (list_is_first(&ri->list, &admin->rules)) in vcap_fill_rule_gap()
2480 offset = admin->last_valid_addr + 1 - ri->addr - ri->size; in vcap_fill_rule_gap()
2484 list_for_each_entry_continue(elem, &admin->rules, list) in vcap_fill_rule_gap()
2489 list_for_each_entry_continue(elem, &admin->rules, list) in vcap_fill_rule_gap()
2493 move.addr = admin->last_used_addr; in vcap_fill_rule_gap()
2494 move.count = ri->addr - admin->last_used_addr - gap; in vcap_fill_rule_gap()
2507 struct vcap_admin *admin; in vcap_del_rule() local
2521 admin = ri->admin; in vcap_del_rule()
2523 if (ri->addr > admin->last_used_addr) in vcap_del_rule()
2528 vctrl->ops->init(ndev, admin, admin->last_used_addr, ri->size + gap); in vcap_del_rule()
2532 if (list_empty(&admin->rules)) { in vcap_del_rule()
2533 admin->last_used_addr = admin->last_valid_addr + 1; in vcap_del_rule()
2535 elem = list_last_entry(&admin->rules, struct vcap_rule_internal, in vcap_del_rule()
2537 admin->last_used_addr = elem->addr; in vcap_del_rule()
2540 mutex_unlock(&admin->lock); in vcap_del_rule()
2546 int vcap_del_rules(struct vcap_control *vctrl, struct vcap_admin *admin) in vcap_del_rules() argument
2555 mutex_lock(&admin->lock); in vcap_del_rules()
2556 list_for_each_entry_safe(ri, next_ri, &admin->rules, list) { in vcap_del_rules()
2557 vctrl->ops->init(ri->ndev, admin, ri->addr, ri->size); in vcap_del_rules()
2561 admin->last_used_addr = admin->last_valid_addr; in vcap_del_rules()
2564 list_for_each_entry_safe(eport, next_eport, &admin->enabled, list) { in vcap_del_rules()
2568 mutex_unlock(&admin->lock); in vcap_del_rules()
2593 enum vcap_type vt = ri->admin->vtype; in vcap_lookup_keyfield()
2624 enum vcap_type vt = ri->admin->vtype; in vcap_keyfield_match_keyset()
2792 enum vcap_type vt = ri->admin->vtype; in vcap_actionfield_match_actionset()
2880 struct vcap_admin *admin = ri->admin; in vcap_read_counter() local
2882 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_READ, VCAP_SEL_COUNTER, in vcap_read_counter()
2884 ri->vctrl->ops->cache_read(ri->ndev, admin, VCAP_SEL_COUNTER, in vcap_read_counter()
2886 ctr->value = admin->cache.counter; in vcap_read_counter()
2887 ctr->sticky = admin->cache.sticky; in vcap_read_counter()
2966 struct vcap_admin *admin; in vcap_enable_rules() local
2969 list_for_each_entry(admin, &vctrl->list, list) { in vcap_enable_rules()
2970 if (!(chain >= admin->first_cid && chain <= admin->last_cid)) in vcap_enable_rules()
2974 mutex_lock(&admin->lock); in vcap_enable_rules()
2975 list_for_each_entry(ri, &admin->rules, list) { in vcap_enable_rules()
2992 mutex_unlock(&admin->lock); in vcap_enable_rules()
3015 ri->vctrl->ops->init(ri->ndev, ri->admin, ri->addr, ri->size); in vcap_disable_rule()
3024 struct vcap_admin *admin; in vcap_disable_rules() local
3027 list_for_each_entry(admin, &vctrl->list, list) { in vcap_disable_rules()
3028 if (!(chain >= admin->first_cid && chain <= admin->last_cid)) in vcap_disable_rules()
3032 mutex_lock(&admin->lock); in vcap_disable_rules()
3033 list_for_each_entry(ri, &admin->rules, list) { in vcap_disable_rules()
3047 mutex_unlock(&admin->lock); in vcap_disable_rules()
3059 struct vcap_admin *admin; in vcap_is_enabled() local
3061 list_for_each_entry(admin, &vctrl->list, list) in vcap_is_enabled()
3062 list_for_each_entry(eport, &admin->enabled, list) in vcap_is_enabled()
3074 struct vcap_admin *admin; in vcap_enable() local
3079 admin = vcap_find_admin(vctrl, dst_cid); in vcap_enable()
3080 if (!admin) in vcap_enable()
3091 mutex_lock(&admin->lock); in vcap_enable()
3092 list_add_tail(&eport->list, &admin->enabled); in vcap_enable()
3093 mutex_unlock(&admin->lock); in vcap_enable()
3098 admin = vcap_find_admin(vctrl, dst_cid); in vcap_enable()
3099 if (!admin) in vcap_enable()
3114 struct vcap_admin *found = NULL, *admin; in vcap_disable() local
3117 list_for_each_entry(admin, &vctrl->list, list) { in vcap_disable()
3118 list_for_each_entry(elem, &admin->enabled, list) { in vcap_disable()
3121 found = admin; in vcap_disable()
3135 admin = vcap_find_admin(vctrl, dst_cid); in vcap_disable()
3136 if (!admin) in vcap_disable()
3187 struct vcap_admin *admin; in vcap_is_last_chain() local
3193 admin = vcap_find_admin(vctrl, cid); in vcap_is_last_chain()
3194 if (!admin) in vcap_is_last_chain()
3197 if (!vcap_admin_is_last(vctrl, admin, ingress)) in vcap_is_last_chain()
3201 lookup = vcap_chain_id_to_lookup(admin, cid); in vcap_is_last_chain()
3202 return lookup == admin->lookups - 1; in vcap_is_last_chain()
3228 mutex_lock(&ri->admin->lock); in vcap_rule_set_counter()
3230 mutex_unlock(&ri->admin->lock); in vcap_rule_set_counter()
3249 mutex_lock(&ri->admin->lock); in vcap_rule_get_counter()
3251 mutex_unlock(&ri->admin->lock); in vcap_rule_get_counter()
3279 enum vcap_type vt = ri->admin->vtype; in vcap_rule_get_untyped_keyset()
3299 enum vcap_type vt = ri->admin->vtype; in vcap_rule_get_keysets()
3344 struct vcap_admin *admin; in vcap_get_rule_count_by_cookie() local
3352 list_for_each_entry(admin, &vctrl->list, list) { in vcap_get_rule_count_by_cookie()
3353 mutex_lock(&admin->lock); in vcap_get_rule_count_by_cookie()
3354 list_for_each_entry(ri, &admin->rules, list) { in vcap_get_rule_count_by_cookie()
3370 mutex_unlock(&admin->lock); in vcap_get_rule_count_by_cookie()
3375 mutex_unlock(&admin->lock); in vcap_get_rule_count_by_cookie()
3460 fields = vcap_keyfields(ri->vctrl, ri->admin->vtype, in vcap_filter_rule_keys()