Lines Matching refs:device

96 static int ib_device_check_mandatory(struct ib_device *device)  in ib_device_check_mandatory()  argument
124 if (!*(void **) ((void *) device + mandatory_table[i].offset)) { in ib_device_check_mandatory()
126 device->name, mandatory_table[i].name); in ib_device_check_mandatory()
136 struct ib_device *device; in __ib_device_get_by_index() local
138 list_for_each_entry(device, &device_list, core_list) in __ib_device_get_by_index()
139 if (device->index == index) in __ib_device_get_by_index()
140 return device; in __ib_device_get_by_index()
150 struct ib_device *device; in ib_device_get_by_index() local
153 device = __ib_device_get_by_index(index); in ib_device_get_by_index()
154 if (device) in ib_device_get_by_index()
155 get_device(&device->dev); in ib_device_get_by_index()
158 return device; in ib_device_get_by_index()
163 struct ib_device *device; in __ib_device_get_by_name() local
165 list_for_each_entry(device, &device_list, core_list) in __ib_device_get_by_name()
166 if (!strncmp(name, device->name, IB_DEVICE_NAME_MAX)) in __ib_device_get_by_name()
167 return device; in __ib_device_get_by_name()
176 struct ib_device *device; in alloc_name() local
183 list_for_each_entry(device, &device_list, core_list) { in alloc_name()
184 if (!sscanf(device->name, name, &i)) in alloc_name()
189 if (!strncmp(buf, device->name, IB_DEVICE_NAME_MAX)) in alloc_name()
204 static void ib_device_release(struct device *device) in ib_device_release() argument
206 struct ib_device *dev = container_of(device, struct ib_device, dev); in ib_device_release()
221 static int ib_device_uevent(struct device *device, in ib_device_uevent() argument
224 struct ib_device *dev = container_of(device, struct ib_device, dev); in ib_device_uevent()
254 struct ib_device *device; in ib_alloc_device() local
259 device = kzalloc(size, GFP_KERNEL); in ib_alloc_device()
260 if (!device) in ib_alloc_device()
263 rdma_restrack_init(&device->res); in ib_alloc_device()
265 device->dev.class = &ib_class; in ib_alloc_device()
266 device_initialize(&device->dev); in ib_alloc_device()
268 dev_set_drvdata(&device->dev, device); in ib_alloc_device()
270 INIT_LIST_HEAD(&device->event_handler_list); in ib_alloc_device()
271 spin_lock_init(&device->event_handler_lock); in ib_alloc_device()
272 spin_lock_init(&device->client_data_lock); in ib_alloc_device()
273 INIT_LIST_HEAD(&device->client_data_list); in ib_alloc_device()
274 INIT_LIST_HEAD(&device->port_list); in ib_alloc_device()
276 return device; in ib_alloc_device()
286 void ib_dealloc_device(struct ib_device *device) in ib_dealloc_device() argument
288 WARN_ON(device->reg_state != IB_DEV_UNREGISTERED && in ib_dealloc_device()
289 device->reg_state != IB_DEV_UNINITIALIZED); in ib_dealloc_device()
290 rdma_restrack_clean(&device->res); in ib_dealloc_device()
291 put_device(&device->dev); in ib_dealloc_device()
295 static int add_client_context(struct ib_device *device, struct ib_client *client) in add_client_context() argument
309 spin_lock_irqsave(&device->client_data_lock, flags); in add_client_context()
310 list_add(&context->list, &device->client_data_list); in add_client_context()
311 spin_unlock_irqrestore(&device->client_data_lock, flags); in add_client_context()
323 static int read_port_immutable(struct ib_device *device) in read_port_immutable() argument
326 u8 start_port = rdma_start_port(device); in read_port_immutable()
327 u8 end_port = rdma_end_port(device); in read_port_immutable()
337 device->port_immutable = kcalloc(end_port + 1, in read_port_immutable()
338 sizeof(*device->port_immutable), in read_port_immutable()
340 if (!device->port_immutable) in read_port_immutable()
344 ret = device->get_port_immutable(device, port, in read_port_immutable()
345 &device->port_immutable[port]); in read_port_immutable()
349 if (verify_immutable(device, port)) in read_port_immutable()
364 static int setup_port_pkey_list(struct ib_device *device) in setup_port_pkey_list() argument
373 device->port_pkey_list = kcalloc(rdma_end_port(device) + 1, in setup_port_pkey_list()
374 sizeof(*device->port_pkey_list), in setup_port_pkey_list()
377 if (!device->port_pkey_list) in setup_port_pkey_list()
380 for (i = 0; i < (rdma_end_port(device) + 1); i++) { in setup_port_pkey_list()
381 spin_lock_init(&device->port_pkey_list[i].list_lock); in setup_port_pkey_list()
382 INIT_LIST_HEAD(&device->port_pkey_list[i].pkey_list); in setup_port_pkey_list()
456 int ib_register_device(struct ib_device *device, in ib_register_device() argument
463 struct device *parent = device->dev.parent; in ib_register_device()
465 WARN_ON_ONCE(device->dma_device); in ib_register_device()
466 if (device->dev.dma_ops) { in ib_register_device()
472 device->dma_device = &device->dev; in ib_register_device()
473 if (!device->dev.dma_mask) { in ib_register_device()
475 device->dev.dma_mask = parent->dma_mask; in ib_register_device()
479 if (!device->dev.coherent_dma_mask) { in ib_register_device()
481 device->dev.coherent_dma_mask = in ib_register_device()
492 device->dma_device = parent; in ib_register_device()
497 if (strchr(device->name, '%')) { in ib_register_device()
498 ret = alloc_name(device->name); in ib_register_device()
503 if (ib_device_check_mandatory(device)) { in ib_register_device()
508 ret = read_port_immutable(device); in ib_register_device()
511 device->name); in ib_register_device()
515 ret = setup_port_pkey_list(device); in ib_register_device()
521 ret = ib_cache_setup_one(device); in ib_register_device()
527 ret = ib_device_register_rdmacg(device); in ib_register_device()
533 memset(&device->attrs, 0, sizeof(device->attrs)); in ib_register_device()
534 ret = device->query_device(device, &device->attrs, &uhw); in ib_register_device()
540 ret = ib_device_register_sysfs(device, port_callback); in ib_register_device()
543 device->name); in ib_register_device()
547 device->reg_state = IB_DEV_REGISTERED; in ib_register_device()
550 if (!add_client_context(device, client) && client->add) in ib_register_device()
551 client->add(device); in ib_register_device()
553 device->index = __dev_new_index(); in ib_register_device()
555 list_add_tail(&device->core_list, &device_list); in ib_register_device()
561 ib_device_unregister_rdmacg(device); in ib_register_device()
563 ib_cache_cleanup_one(device); in ib_register_device()
564 ib_cache_release_one(device); in ib_register_device()
566 kfree(device->port_immutable); in ib_register_device()
579 void ib_unregister_device(struct ib_device *device) in ib_unregister_device() argument
587 list_del(&device->core_list); in ib_unregister_device()
588 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_device()
589 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) in ib_unregister_device()
591 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_device()
594 list_for_each_entry_safe(context, tmp, &device->client_data_list, in ib_unregister_device()
597 context->client->remove(device, context->data); in ib_unregister_device()
601 ib_device_unregister_rdmacg(device); in ib_unregister_device()
602 ib_device_unregister_sysfs(device); in ib_unregister_device()
606 ib_cache_cleanup_one(device); in ib_unregister_device()
608 ib_security_destroy_port_pkey_list(device); in ib_unregister_device()
609 kfree(device->port_pkey_list); in ib_unregister_device()
612 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_device()
613 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) in ib_unregister_device()
615 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_device()
618 device->reg_state = IB_DEV_UNREGISTERED; in ib_unregister_device()
637 struct ib_device *device; in ib_register_client() local
641 list_for_each_entry(device, &device_list, core_list) in ib_register_client()
642 if (!add_client_context(device, client) && client->add) in ib_register_client()
643 client->add(device); in ib_register_client()
666 struct ib_device *device; in ib_unregister_client() local
675 list_for_each_entry(device, &device_list, core_list) { in ib_unregister_client()
679 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_client()
680 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) in ib_unregister_client()
686 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_client()
690 client->remove(device, found_context ? in ib_unregister_client()
695 device->name, client->name); in ib_unregister_client()
700 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_client()
703 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_client()
719 void *ib_get_client_data(struct ib_device *device, struct ib_client *client) in ib_get_client_data() argument
725 spin_lock_irqsave(&device->client_data_lock, flags); in ib_get_client_data()
726 list_for_each_entry(context, &device->client_data_list, list) in ib_get_client_data()
731 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_get_client_data()
746 void ib_set_client_data(struct ib_device *device, struct ib_client *client, in ib_set_client_data() argument
752 spin_lock_irqsave(&device->client_data_lock, flags); in ib_set_client_data()
753 list_for_each_entry(context, &device->client_data_list, list) in ib_set_client_data()
760 device->name, client->name); in ib_set_client_data()
763 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_set_client_data()
780 spin_lock_irqsave(&event_handler->device->event_handler_lock, flags); in ib_register_event_handler()
782 &event_handler->device->event_handler_list); in ib_register_event_handler()
783 spin_unlock_irqrestore(&event_handler->device->event_handler_lock, flags); in ib_register_event_handler()
798 spin_lock_irqsave(&event_handler->device->event_handler_lock, flags); in ib_unregister_event_handler()
800 spin_unlock_irqrestore(&event_handler->device->event_handler_lock, flags); in ib_unregister_event_handler()
817 spin_lock_irqsave(&event->device->event_handler_lock, flags); in ib_dispatch_event()
819 list_for_each_entry(handler, &event->device->event_handler_list, list) in ib_dispatch_event()
822 spin_unlock_irqrestore(&event->device->event_handler_lock, flags); in ib_dispatch_event()
835 int ib_query_port(struct ib_device *device, in ib_query_port() argument
842 if (!rdma_is_port_valid(device, port_num)) in ib_query_port()
846 err = device->query_port(device, port_num, port_attr); in ib_query_port()
850 if (rdma_port_get_link_layer(device, port_num) != IB_LINK_LAYER_INFINIBAND) in ib_query_port()
853 err = device->query_gid(device, port_num, 0, &gid); in ib_query_port()
962 int ib_query_pkey(struct ib_device *device, in ib_query_pkey() argument
965 return device->query_pkey(device, port_num, index, pkey); in ib_query_pkey()
978 int ib_modify_device(struct ib_device *device, in ib_modify_device() argument
982 if (!device->modify_device) in ib_modify_device()
985 return device->modify_device(device, device_modify_mask, in ib_modify_device()
1001 int ib_modify_port(struct ib_device *device, in ib_modify_port() argument
1007 if (!rdma_is_port_valid(device, port_num)) in ib_modify_port()
1010 if (device->modify_port) in ib_modify_port()
1011 rc = device->modify_port(device, port_num, port_modify_mask, in ib_modify_port()
1014 rc = rdma_protocol_roce(device, port_num) ? 0 : -ENOSYS; in ib_modify_port()
1028 int ib_find_gid(struct ib_device *device, union ib_gid *gid, in ib_find_gid() argument
1034 for (port = rdma_start_port(device); port <= rdma_end_port(device); ++port) { in ib_find_gid()
1035 if (!rdma_protocol_ib(device, port)) in ib_find_gid()
1038 for (i = 0; i < device->port_immutable[port].gid_tbl_len; ++i) { in ib_find_gid()
1039 ret = rdma_query_gid(device, port, i, &tmp_gid); in ib_find_gid()
1063 int ib_find_pkey(struct ib_device *device, in ib_find_pkey() argument
1070 for (i = 0; i < device->port_immutable[port_num].pkey_tbl_len; ++i) { in ib_find_pkey()
1071 ret = ib_query_pkey(device, port_num, i, &tmp_pkey); in ib_find_pkey()