Lines Matching +full:client +full:- +full:id
1 // SPDX-License-Identifier: GPL-2.0+
2 // Copyright (c) 2016-2017 Hisilicon Limited.
14 * list. This is a non-critical code so other updations, if happen
28 void hnae3_set_client_init_flag(struct hnae3_client *client, in hnae3_set_client_init_flag() argument
32 if (!client || !ae_dev) in hnae3_set_client_init_flag()
35 switch (client->type) { in hnae3_set_client_init_flag()
37 hnae3_set_bit(ae_dev->flag, HNAE3_KNIC_CLIENT_INITED_B, inited); in hnae3_set_client_init_flag()
40 hnae3_set_bit(ae_dev->flag, HNAE3_ROCE_CLIENT_INITED_B, inited); in hnae3_set_client_init_flag()
48 static int hnae3_get_client_init_flag(struct hnae3_client *client, in hnae3_get_client_init_flag() argument
53 switch (client->type) { in hnae3_get_client_init_flag()
55 inited = hnae3_get_bit(ae_dev->flag, in hnae3_get_client_init_flag()
59 inited = hnae3_get_bit(ae_dev->flag, in hnae3_get_client_init_flag()
69 static int hnae3_init_client_instance(struct hnae3_client *client, in hnae3_init_client_instance() argument
74 /* check if this client matches the type of ae_dev */ in hnae3_init_client_instance()
75 if (!(hnae3_client_match(client->type) && in hnae3_init_client_instance()
76 hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B))) { in hnae3_init_client_instance()
80 ret = ae_dev->ops->init_client_instance(client, ae_dev); in hnae3_init_client_instance()
82 dev_err(&ae_dev->pdev->dev, in hnae3_init_client_instance()
83 "fail to instantiate client, ret = %d\n", ret); in hnae3_init_client_instance()
88 static void hnae3_uninit_client_instance(struct hnae3_client *client, in hnae3_uninit_client_instance() argument
91 /* check if this client matches the type of ae_dev */ in hnae3_uninit_client_instance()
92 if (!(hnae3_client_match(client->type) && in hnae3_uninit_client_instance()
93 hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B))) in hnae3_uninit_client_instance()
96 if (hnae3_get_client_init_flag(client, ae_dev)) { in hnae3_uninit_client_instance()
97 ae_dev->ops->uninit_client_instance(client, ae_dev); in hnae3_uninit_client_instance()
99 hnae3_set_client_init_flag(client, ae_dev, 0); in hnae3_uninit_client_instance()
103 int hnae3_register_client(struct hnae3_client *client) in hnae3_register_client() argument
108 if (!client) in hnae3_register_client()
109 return -ENODEV; in hnae3_register_client()
112 /* one system should only have one client for every type */ in hnae3_register_client()
114 if (client_tmp->type == client->type) in hnae3_register_client()
118 list_add_tail(&client->node, &hnae3_client_list); in hnae3_register_client()
120 /* initialize the client on every matched port */ in hnae3_register_client()
122 /* if the client could not be initialized on current port, for in hnae3_register_client()
125 int ret = hnae3_init_client_instance(client, ae_dev); in hnae3_register_client()
127 dev_err(&ae_dev->pdev->dev, in hnae3_register_client()
139 void hnae3_unregister_client(struct hnae3_client *client) in hnae3_unregister_client() argument
145 if (!client) in hnae3_unregister_client()
149 /* one system should only have one client for every type */ in hnae3_unregister_client()
151 if (client_tmp->type == client->type) { in hnae3_unregister_client()
159 pr_err("client %s does not exist!\n", client->name); in hnae3_unregister_client()
163 /* un-initialize the client on every matched port */ in hnae3_unregister_client()
165 hnae3_uninit_client_instance(client, ae_dev); in hnae3_unregister_client()
168 list_del(&client->node); in hnae3_unregister_client()
173 /* hnae3_register_ae_algo - register a AE algorithm to hnae3 framework
179 const struct pci_device_id *id; in hnae3_register_ae_algo() local
181 struct hnae3_client *client; in hnae3_register_ae_algo() local
189 list_add_tail(&ae_algo->node, &hnae3_ae_algo_list); in hnae3_register_ae_algo()
193 id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev); in hnae3_register_ae_algo()
194 if (!id) in hnae3_register_ae_algo()
197 if (!ae_algo->ops) { in hnae3_register_ae_algo()
198 dev_err(&ae_dev->pdev->dev, "ae_algo ops are null\n"); in hnae3_register_ae_algo()
201 ae_dev->ops = ae_algo->ops; in hnae3_register_ae_algo()
203 ret = ae_algo->ops->init_ae_dev(ae_dev); in hnae3_register_ae_algo()
205 dev_err(&ae_dev->pdev->dev, in hnae3_register_ae_algo()
211 hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 1); in hnae3_register_ae_algo()
213 /* check the client list for the match with this ae_dev type and in hnae3_register_ae_algo()
214 * initialize the figure out client instance in hnae3_register_ae_algo()
216 list_for_each_entry(client, &hnae3_client_list, node) { in hnae3_register_ae_algo()
217 ret = hnae3_init_client_instance(client, ae_dev); in hnae3_register_ae_algo()
219 dev_err(&ae_dev->pdev->dev, in hnae3_register_ae_algo()
229 /* hnae3_unregister_ae_algo - unregisters a AE algorithm
234 const struct pci_device_id *id; in hnae3_unregister_ae_algo() local
236 struct hnae3_client *client; in hnae3_unregister_ae_algo() local
244 if (!hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B)) in hnae3_unregister_ae_algo()
247 id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev); in hnae3_unregister_ae_algo()
248 if (!id) in hnae3_unregister_ae_algo()
251 /* check the client list for the match with this ae_dev type and in hnae3_unregister_ae_algo()
252 * un-initialize the figure out client instance in hnae3_unregister_ae_algo()
254 list_for_each_entry(client, &hnae3_client_list, node) in hnae3_unregister_ae_algo()
255 hnae3_uninit_client_instance(client, ae_dev); in hnae3_unregister_ae_algo()
257 ae_algo->ops->uninit_ae_dev(ae_dev); in hnae3_unregister_ae_algo()
258 hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0); in hnae3_unregister_ae_algo()
259 ae_dev->ops = NULL; in hnae3_unregister_ae_algo()
262 list_del(&ae_algo->node); in hnae3_unregister_ae_algo()
267 /* hnae3_register_ae_dev - registers a AE device to hnae3 framework
273 const struct pci_device_id *id; in hnae3_register_ae_dev() local
275 struct hnae3_client *client; in hnae3_register_ae_dev() local
279 return -ENODEV; in hnae3_register_ae_dev()
283 list_add_tail(&ae_dev->node, &hnae3_ae_dev_list); in hnae3_register_ae_dev()
287 id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev); in hnae3_register_ae_dev()
288 if (!id) in hnae3_register_ae_dev()
291 if (!ae_algo->ops) { in hnae3_register_ae_dev()
292 dev_err(&ae_dev->pdev->dev, "ae_algo ops are null\n"); in hnae3_register_ae_dev()
293 ret = -EOPNOTSUPP; in hnae3_register_ae_dev()
296 ae_dev->ops = ae_algo->ops; in hnae3_register_ae_dev()
298 ret = ae_dev->ops->init_ae_dev(ae_dev); in hnae3_register_ae_dev()
300 dev_err(&ae_dev->pdev->dev, in hnae3_register_ae_dev()
306 hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 1); in hnae3_register_ae_dev()
310 /* check the client list for the match with this ae_dev type and in hnae3_register_ae_dev()
311 * initialize the figure out client instance in hnae3_register_ae_dev()
313 list_for_each_entry(client, &hnae3_client_list, node) { in hnae3_register_ae_dev()
314 ret = hnae3_init_client_instance(client, ae_dev); in hnae3_register_ae_dev()
316 dev_err(&ae_dev->pdev->dev, in hnae3_register_ae_dev()
326 list_del(&ae_dev->node); in hnae3_register_ae_dev()
333 /* hnae3_unregister_ae_dev - unregisters a AE device
338 const struct pci_device_id *id; in hnae3_unregister_ae_dev() local
340 struct hnae3_client *client; in hnae3_unregister_ae_dev() local
348 if (!hnae3_get_bit(ae_dev->flag, HNAE3_DEV_INITED_B)) in hnae3_unregister_ae_dev()
351 id = pci_match_id(ae_algo->pdev_id_table, ae_dev->pdev); in hnae3_unregister_ae_dev()
352 if (!id) in hnae3_unregister_ae_dev()
355 list_for_each_entry(client, &hnae3_client_list, node) in hnae3_unregister_ae_dev()
356 hnae3_uninit_client_instance(client, ae_dev); in hnae3_unregister_ae_dev()
358 ae_algo->ops->uninit_ae_dev(ae_dev); in hnae3_unregister_ae_dev()
359 hnae3_set_bit(ae_dev->flag, HNAE3_DEV_INITED_B, 0); in hnae3_unregister_ae_dev()
360 ae_dev->ops = NULL; in hnae3_unregister_ae_dev()
363 list_del(&ae_dev->node); in hnae3_unregister_ae_dev()