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()
980 int vcap_admin_rule_count(struct vcap_admin *admin, int cid) in vcap_admin_rule_count() argument
987 list_for_each_entry(elem, &admin->rules, list) { in vcap_admin_rule_count()
988 mutex_lock(&admin->lock); in vcap_admin_rule_count()
992 mutex_unlock(&admin->lock); in vcap_admin_rule_count()
1104 if (ri->admin->w32be) { in vcap_copy_to_client_actionfield()
1206 if (ri->admin->w32be) { in vcap_copy_to_client_keyfield()
1434 struct vcap_admin *admin = ri->admin; in vcap_decode_actionset() local
1437 enum vcap_type vt = admin->vtype; in vcap_decode_actionset()
1444 actstream = admin->cache.actionstream; in vcap_decode_actionset()
1478 struct vcap_admin *admin = ri->admin; in vcap_decode_keyset() local
1481 enum vcap_type vt = admin->vtype; in vcap_decode_keyset()
1491 keystream = admin->cache.keystream; in vcap_decode_keyset()
1492 maskstream = admin->cache.maskstream; in vcap_decode_keyset()
1534 struct vcap_admin *admin = ri->admin; in vcap_read_rule() local
1545 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_READ, in vcap_read_rule()
1547 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1550 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1554 ri->vctrl->ops->cache_read(ri->ndev, admin, in vcap_read_rule()
1566 struct vcap_admin *admin = ri->admin; in vcap_write_rule() local
1576 ri->vctrl->ops->cache_write(ri->ndev, admin, in vcap_write_rule()
1579 ri->vctrl->ops->cache_write(ri->ndev, admin, in vcap_write_rule()
1582 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_WRITE, in vcap_write_rule()
1593 struct vcap_admin *admin = ri->admin; in vcap_write_counter() local
1595 admin->cache.counter = ctr->value; in vcap_write_counter()
1596 admin->cache.sticky = ctr->sticky; in vcap_write_counter()
1597 ri->vctrl->ops->cache_write(ri->ndev, admin, VCAP_SEL_COUNTER, in vcap_write_counter()
1599 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_WRITE, in vcap_write_counter()
1605 int vcap_chain_id_to_lookup(struct vcap_admin *admin, int cur_cid) in vcap_chain_id_to_lookup() argument
1607 int lookup_first = admin->vinst * admin->lookups_per_instance; in vcap_chain_id_to_lookup()
1608 int lookup_last = lookup_first + admin->lookups_per_instance; in vcap_chain_id_to_lookup()
1609 int cid_next = admin->first_cid + VCAP_CID_LOOKUP_SIZE; in vcap_chain_id_to_lookup()
1610 int cid = admin->first_cid; in vcap_chain_id_to_lookup()
1624 struct vcap_admin *admin; in vcap_find_admin() local
1629 list_for_each_entry(admin, &vctrl->list, list) { in vcap_find_admin()
1630 if (cid >= admin->first_cid && cid <= admin->last_cid) in vcap_find_admin()
1631 return admin; in vcap_find_admin()
1639 struct vcap_admin *admin, in vcap_admin_is_last() argument
1655 return admin == last; in vcap_admin_is_last()
1679 struct vcap_admin *admin; in vcap_is_next_lookup() local
1691 admin = vcap_find_admin(vctrl, dst_cid); in vcap_is_next_lookup()
1692 if (!admin) in vcap_is_next_lookup()
1700 static int vcap_rule_space(struct vcap_admin *admin, int size) in vcap_rule_space() argument
1702 if (admin->last_used_addr - size < admin->first_valid_addr) { in vcap_rule_space()
1704 __func__, __LINE__, size, admin->first_valid_addr); in vcap_rule_space()
1715 enum vcap_type vt = ri->admin->vtype; in vcap_add_type_keyfield()
1748 enum vcap_type vt = ri->admin->vtype; in vcap_add_type_actionfield()
1875 vtype = ri->admin->vtype; in _vcap_rule_find_keysets()
1953 vtype = ri->admin->vtype; in vcap_rule_find_actionsets()
1997 if (!ri->admin) { in vcap_val_rule()
2021 ret = ri->vctrl->ops->validate_keyset(ri->ndev, ri->admin, rule, in vcap_val_rule()
2058 ri->vctrl->ops->add_default_fields(ri->ndev, ri->admin, rule); in vcap_val_rule()
2064 return vcap_rule_space(ri->admin, ri->size); in vcap_val_rule()
2102 int sw_count = ri->vctrl->vcaps[ri->admin->vtype].sw_count; in vcap_insert_rule()
2104 struct vcap_admin *admin = ri->admin; in vcap_insert_rule() local
2115 list_for_each_entry(iter, &admin->rules, list) { in vcap_insert_rule()
2123 ri->addr = vcap_next_rule_addr(admin->last_used_addr, ri); in vcap_insert_rule()
2124 admin->last_used_addr = ri->addr; in vcap_insert_rule()
2131 list_add_tail(&duprule->list, &admin->rules); in vcap_insert_rule()
2153 list_for_each_entry_continue(elem, &admin->rules, list) { in vcap_insert_rule()
2159 move->addr = admin->last_used_addr; in vcap_insert_rule()
2161 move->offset = admin->last_used_addr - addr; in vcap_insert_rule()
2162 admin->last_used_addr = addr; in vcap_insert_rule()
2169 ri->vctrl->ops->move(ri->ndev, ri->admin, move->addr, in vcap_move_rules()
2178 struct vcap_admin *admin; in vcap_is_chain_used() local
2180 list_for_each_entry(admin, &vctrl->list, list) in vcap_is_chain_used()
2181 list_for_each_entry(eport, &admin->enabled, list) in vcap_is_chain_used()
2194 struct vcap_admin *admin; in vcap_get_next_chain() local
2196 list_for_each_entry(admin, &vctrl->list, list) { in vcap_get_next_chain()
2197 list_for_each_entry(eport, &admin->enabled, list) { in vcap_get_next_chain()
2214 struct vcap_admin *admin; in vcap_path_exist() local
2221 list_for_each_entry(admin, &vctrl->list, list) { in vcap_path_exist()
2222 list_for_each_entry(elem, &admin->enabled, list) { in vcap_path_exist()
2269 mutex_lock(&ri->admin->lock); in vcap_add_rule()
2288 ri->vctrl->ops->init(ri->ndev, ri->admin, ri->addr, ri->size); in vcap_add_rule()
2305 mutex_unlock(&ri->admin->lock); in vcap_add_rule()
2317 struct vcap_admin *admin; in vcap_alloc_rule() local
2326 admin = vcap_find_admin(vctrl, vcap_chain_id); in vcap_alloc_rule()
2327 if (!admin) in vcap_alloc_rule()
2330 if (vctrl->vcaps[admin->vtype].rows == 0) in vcap_alloc_rule()
2333 mutex_lock(&admin->lock); in vcap_alloc_rule()
2341 maxsize = vctrl->vcaps[admin->vtype].sw_count; /* worst case rule size */ in vcap_alloc_rule()
2342 if (vcap_rule_space(admin, maxsize)) { in vcap_alloc_rule()
2364 ri->admin = admin; /* refer to the vcap instance */ in vcap_alloc_rule()
2372 mutex_unlock(&admin->lock); in vcap_alloc_rule()
2378 mutex_unlock(&admin->lock); in vcap_alloc_rule()
2449 mutex_unlock(&elem->admin->lock); in vcap_get_rule()
2486 mutex_unlock(&ri->admin->lock); in vcap_mod_rule()
2506 struct vcap_admin *admin = ri->admin; in vcap_fill_rule_gap() local
2512 if (list_is_first(&ri->list, &admin->rules)) in vcap_fill_rule_gap()
2513 offset = admin->last_valid_addr + 1 - ri->addr - ri->size; in vcap_fill_rule_gap()
2517 list_for_each_entry_continue(elem, &admin->rules, list) in vcap_fill_rule_gap()
2522 list_for_each_entry_continue(elem, &admin->rules, list) in vcap_fill_rule_gap()
2526 move.addr = admin->last_used_addr; in vcap_fill_rule_gap()
2527 move.count = ri->addr - admin->last_used_addr - gap; in vcap_fill_rule_gap()
2540 struct vcap_admin *admin; in vcap_del_rule() local
2554 admin = ri->admin; in vcap_del_rule()
2556 if (ri->addr > admin->last_used_addr) in vcap_del_rule()
2561 vctrl->ops->init(ndev, admin, admin->last_used_addr, ri->size + gap); in vcap_del_rule()
2565 if (list_empty(&admin->rules)) { in vcap_del_rule()
2566 admin->last_used_addr = admin->last_valid_addr + 1; in vcap_del_rule()
2568 elem = list_last_entry(&admin->rules, struct vcap_rule_internal, in vcap_del_rule()
2570 admin->last_used_addr = elem->addr; in vcap_del_rule()
2573 mutex_unlock(&admin->lock); in vcap_del_rule()
2579 int vcap_del_rules(struct vcap_control *vctrl, struct vcap_admin *admin) in vcap_del_rules() argument
2588 mutex_lock(&admin->lock); in vcap_del_rules()
2589 list_for_each_entry_safe(ri, next_ri, &admin->rules, list) { in vcap_del_rules()
2590 vctrl->ops->init(ri->ndev, admin, ri->addr, ri->size); in vcap_del_rules()
2594 admin->last_used_addr = admin->last_valid_addr; in vcap_del_rules()
2597 list_for_each_entry_safe(eport, next_eport, &admin->enabled, list) { in vcap_del_rules()
2601 mutex_unlock(&admin->lock); in vcap_del_rules()
2626 enum vcap_type vt = ri->admin->vtype; in vcap_lookup_keyfield()
2657 enum vcap_type vt = ri->admin->vtype; in vcap_keyfield_match_keyset()
2825 enum vcap_type vt = ri->admin->vtype; in vcap_actionfield_match_actionset()
2925 struct vcap_admin *admin = ri->admin; in vcap_read_counter() local
2927 ri->vctrl->ops->update(ri->ndev, admin, VCAP_CMD_READ, VCAP_SEL_COUNTER, in vcap_read_counter()
2929 ri->vctrl->ops->cache_read(ri->ndev, admin, VCAP_SEL_COUNTER, in vcap_read_counter()
2931 ctr->value = admin->cache.counter; in vcap_read_counter()
2932 ctr->sticky = admin->cache.sticky; in vcap_read_counter()
3011 struct vcap_admin *admin; in vcap_enable_rules() local
3014 list_for_each_entry(admin, &vctrl->list, list) { in vcap_enable_rules()
3015 if (!(chain >= admin->first_cid && chain <= admin->last_cid)) in vcap_enable_rules()
3019 mutex_lock(&admin->lock); in vcap_enable_rules()
3020 list_for_each_entry(ri, &admin->rules, list) { in vcap_enable_rules()
3037 mutex_unlock(&admin->lock); in vcap_enable_rules()
3060 ri->vctrl->ops->init(ri->ndev, ri->admin, ri->addr, ri->size); in vcap_disable_rule()
3069 struct vcap_admin *admin; in vcap_disable_rules() local
3072 list_for_each_entry(admin, &vctrl->list, list) { in vcap_disable_rules()
3073 if (!(chain >= admin->first_cid && chain <= admin->last_cid)) in vcap_disable_rules()
3077 mutex_lock(&admin->lock); in vcap_disable_rules()
3078 list_for_each_entry(ri, &admin->rules, list) { in vcap_disable_rules()
3092 mutex_unlock(&admin->lock); in vcap_disable_rules()
3104 struct vcap_admin *admin; in vcap_is_enabled() local
3106 list_for_each_entry(admin, &vctrl->list, list) in vcap_is_enabled()
3107 list_for_each_entry(eport, &admin->enabled, list) in vcap_is_enabled()
3119 struct vcap_admin *admin; in vcap_enable() local
3124 admin = vcap_find_admin(vctrl, dst_cid); in vcap_enable()
3125 if (!admin) in vcap_enable()
3136 mutex_lock(&admin->lock); in vcap_enable()
3137 list_add_tail(&eport->list, &admin->enabled); in vcap_enable()
3138 mutex_unlock(&admin->lock); in vcap_enable()
3143 admin = vcap_find_admin(vctrl, dst_cid); in vcap_enable()
3144 if (!admin) in vcap_enable()
3159 struct vcap_admin *found = NULL, *admin; in vcap_disable() local
3162 list_for_each_entry(admin, &vctrl->list, list) { in vcap_disable()
3163 list_for_each_entry(elem, &admin->enabled, list) { in vcap_disable()
3166 found = admin; in vcap_disable()
3180 admin = vcap_find_admin(vctrl, dst_cid); in vcap_disable()
3181 if (!admin) in vcap_disable()
3232 struct vcap_admin *admin; in vcap_is_last_chain() local
3238 admin = vcap_find_admin(vctrl, cid); in vcap_is_last_chain()
3239 if (!admin) in vcap_is_last_chain()
3242 if (!vcap_admin_is_last(vctrl, admin, ingress)) in vcap_is_last_chain()
3246 lookup = vcap_chain_id_to_lookup(admin, cid); in vcap_is_last_chain()
3247 return lookup == admin->lookups - 1; in vcap_is_last_chain()
3273 mutex_lock(&ri->admin->lock); in vcap_rule_set_counter()
3275 mutex_unlock(&ri->admin->lock); in vcap_rule_set_counter()
3294 mutex_lock(&ri->admin->lock); in vcap_rule_get_counter()
3296 mutex_unlock(&ri->admin->lock); in vcap_rule_get_counter()
3324 enum vcap_type vt = ri->admin->vtype; in vcap_rule_get_untyped_keyset()
3344 enum vcap_type vt = ri->admin->vtype; in vcap_rule_get_keysets()
3389 struct vcap_admin *admin; in vcap_get_rule_count_by_cookie() local
3397 list_for_each_entry(admin, &vctrl->list, list) { in vcap_get_rule_count_by_cookie()
3398 mutex_lock(&admin->lock); in vcap_get_rule_count_by_cookie()
3399 list_for_each_entry(ri, &admin->rules, list) { in vcap_get_rule_count_by_cookie()
3415 mutex_unlock(&admin->lock); in vcap_get_rule_count_by_cookie()
3420 mutex_unlock(&admin->lock); in vcap_get_rule_count_by_cookie()
3524 fields = vcap_keyfields(ri->vctrl, ri->admin->vtype, in vcap_filter_rule_keys()