Lines Matching refs:block

16 static int prestera_flow_block_mall_cb(struct prestera_flow_block *block,
21 return prestera_mall_replace(block, f);
23 prestera_mall_destroy(block);
30 static int prestera_flow_block_flower_cb(struct prestera_flow_block *block,
35 return prestera_flower_replace(block, f);
37 prestera_flower_destroy(block, f);
40 return prestera_flower_stats(block, f);
42 return prestera_flower_tmplt_create(block, f);
44 prestera_flower_tmplt_destroy(block, f);
54 struct prestera_flow_block *block = cb_priv;
58 return prestera_flow_block_flower_cb(block, type_data);
60 return prestera_flow_block_mall_cb(block, type_data);
68 struct prestera_flow_block *block = cb_priv;
70 prestera_flower_template_cleanup(block);
72 WARN_ON(!list_empty(&block->template_list));
73 WARN_ON(!list_empty(&block->binding_list));
75 kfree(block);
83 struct prestera_flow_block *block;
85 block = kzalloc(sizeof(*block), GFP_KERNEL);
86 if (!block)
89 INIT_LIST_HEAD(&block->binding_list);
90 INIT_LIST_HEAD(&block->template_list);
91 block->net = net;
92 block->sw = sw;
93 block->mall.prio_min = UINT_MAX;
94 block->mall.prio_max = 0;
95 block->mall.bound = false;
96 block->ingress = ingress;
98 return block;
103 struct prestera_flow_block *block = cb_priv;
105 prestera_flow_block_destroy(block);
109 prestera_flow_block_is_bound(const struct prestera_flow_block *block)
111 return block->ruleset_zero;
115 prestera_flow_block_lookup(struct prestera_flow_block *block,
120 list_for_each_entry(binding, &block->binding_list, list)
127 static int prestera_flow_block_bind(struct prestera_flow_block *block,
140 if (prestera_flow_block_is_bound(block)) {
141 err = prestera_acl_ruleset_bind(block->ruleset_zero, port);
146 list_add(&binding->list, &block->binding_list);
154 static int prestera_flow_block_unbind(struct prestera_flow_block *block,
159 binding = prestera_flow_block_lookup(block, port);
165 if (prestera_flow_block_is_bound(block))
166 prestera_acl_ruleset_unbind(block->ruleset_zero, port);
178 struct prestera_flow_block *block;
181 block_cb = flow_block_cb_lookup(f->block,
184 block = prestera_flow_block_create(sw, f->net, ingress);
185 if (!block)
189 sw, block,
192 prestera_flow_block_destroy(block);
196 block->block_cb = block_cb;
199 block = flow_block_cb_priv(block_cb);
205 return block;
208 static void prestera_flow_block_put(struct prestera_flow_block *block)
210 struct flow_block_cb *block_cb = block->block_cb;
216 prestera_flow_block_destroy(block);
223 struct prestera_flow_block *block;
228 block = prestera_flow_block_get(sw, f, &register_block, ingress);
229 if (IS_ERR(block))
230 return PTR_ERR(block);
232 block_cb = block->block_cb;
234 err = prestera_flow_block_bind(block, port);
244 port->ingress_flow_block = block;
246 port->egress_flow_block = block;
251 prestera_flow_block_put(block);
260 struct prestera_flow_block *block;
264 block_cb = flow_block_cb_lookup(f->block, prestera_flow_block_cb, sw);
268 block = flow_block_cb_priv(block_cb);
270 prestera_mall_destroy(block);
272 err = prestera_flow_block_unbind(block, port);