Lines Matching refs:device

70 static int ib_device_check_mandatory(struct ib_device *device)  in ib_device_check_mandatory()  argument
100 if (!*(void **) ((void *) device + mandatory_table[i].offset)) { in ib_device_check_mandatory()
102 device->name, mandatory_table[i].name); in ib_device_check_mandatory()
112 struct ib_device *device; in __ib_device_get_by_name() local
114 list_for_each_entry(device, &device_list, core_list) in __ib_device_get_by_name()
115 if (!strncmp(name, device->name, IB_DEVICE_NAME_MAX)) in __ib_device_get_by_name()
116 return device; in __ib_device_get_by_name()
126 struct ib_device *device; in alloc_name() local
133 list_for_each_entry(device, &device_list, core_list) { in alloc_name()
134 if (!sscanf(device->name, name, &i)) in alloc_name()
139 if (!strncmp(buf, device->name, IB_DEVICE_NAME_MAX)) in alloc_name()
154 static int start_port(struct ib_device *device) in start_port() argument
156 return (device->node_type == RDMA_NODE_IB_SWITCH) ? 0 : 1; in start_port()
160 static int end_port(struct ib_device *device) in end_port() argument
162 return (device->node_type == RDMA_NODE_IB_SWITCH) ? in end_port()
163 0 : device->phys_port_cnt; in end_port()
190 void ib_dealloc_device(struct ib_device *device) in ib_dealloc_device() argument
192 if (device->reg_state == IB_DEV_UNINITIALIZED) { in ib_dealloc_device()
193 kfree(device); in ib_dealloc_device()
197 BUG_ON(device->reg_state != IB_DEV_UNREGISTERED); in ib_dealloc_device()
199 kobject_put(&device->dev.kobj); in ib_dealloc_device()
203 static int add_client_context(struct ib_device *device, struct ib_client *client) in add_client_context() argument
211 device->name, client->name); in add_client_context()
218 spin_lock_irqsave(&device->client_data_lock, flags); in add_client_context()
219 list_add(&context->list, &device->client_data_list); in add_client_context()
220 spin_unlock_irqrestore(&device->client_data_lock, flags); in add_client_context()
225 static int read_port_table_lengths(struct ib_device *device) in read_port_table_lengths() argument
235 num_ports = end_port(device) - start_port(device) + 1; in read_port_table_lengths()
237 device->pkey_tbl_len = kmalloc(sizeof *device->pkey_tbl_len * num_ports, in read_port_table_lengths()
239 device->gid_tbl_len = kmalloc(sizeof *device->gid_tbl_len * num_ports, in read_port_table_lengths()
241 if (!device->pkey_tbl_len || !device->gid_tbl_len) in read_port_table_lengths()
245 ret = ib_query_port(device, port_index + start_port(device), in read_port_table_lengths()
249 device->pkey_tbl_len[port_index] = tprops->pkey_tbl_len; in read_port_table_lengths()
250 device->gid_tbl_len[port_index] = tprops->gid_tbl_len; in read_port_table_lengths()
257 kfree(device->gid_tbl_len); in read_port_table_lengths()
258 kfree(device->pkey_tbl_len); in read_port_table_lengths()
273 int ib_register_device(struct ib_device *device, in ib_register_device() argument
281 if (strchr(device->name, '%')) { in ib_register_device()
282 ret = alloc_name(device->name); in ib_register_device()
287 if (ib_device_check_mandatory(device)) { in ib_register_device()
292 INIT_LIST_HEAD(&device->event_handler_list); in ib_register_device()
293 INIT_LIST_HEAD(&device->client_data_list); in ib_register_device()
294 spin_lock_init(&device->event_handler_lock); in ib_register_device()
295 spin_lock_init(&device->client_data_lock); in ib_register_device()
297 ret = read_port_table_lengths(device); in ib_register_device()
300 device->name); in ib_register_device()
304 ret = ib_device_register_sysfs(device, port_callback); in ib_register_device()
307 device->name); in ib_register_device()
308 kfree(device->gid_tbl_len); in ib_register_device()
309 kfree(device->pkey_tbl_len); in ib_register_device()
313 list_add_tail(&device->core_list, &device_list); in ib_register_device()
315 device->reg_state = IB_DEV_REGISTERED; in ib_register_device()
321 if (client->add && !add_client_context(device, client)) in ib_register_device()
322 client->add(device); in ib_register_device()
337 void ib_unregister_device(struct ib_device *device) in ib_unregister_device() argument
347 client->remove(device); in ib_unregister_device()
349 list_del(&device->core_list); in ib_unregister_device()
351 kfree(device->gid_tbl_len); in ib_unregister_device()
352 kfree(device->pkey_tbl_len); in ib_unregister_device()
356 ib_device_unregister_sysfs(device); in ib_unregister_device()
358 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_device()
359 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) in ib_unregister_device()
361 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_device()
363 device->reg_state = IB_DEV_UNREGISTERED; in ib_unregister_device()
382 struct ib_device *device; in ib_register_client() local
387 list_for_each_entry(device, &device_list, core_list) in ib_register_client()
388 if (client->add && !add_client_context(device, client)) in ib_register_client()
389 client->add(device); in ib_register_client()
408 struct ib_device *device; in ib_unregister_client() local
413 list_for_each_entry(device, &device_list, core_list) { in ib_unregister_client()
415 client->remove(device); in ib_unregister_client()
417 spin_lock_irqsave(&device->client_data_lock, flags); in ib_unregister_client()
418 list_for_each_entry_safe(context, tmp, &device->client_data_list, list) in ib_unregister_client()
423 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_unregister_client()
439 void *ib_get_client_data(struct ib_device *device, struct ib_client *client) in ib_get_client_data() argument
445 spin_lock_irqsave(&device->client_data_lock, flags); in ib_get_client_data()
446 list_for_each_entry(context, &device->client_data_list, list) in ib_get_client_data()
451 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_get_client_data()
466 void ib_set_client_data(struct ib_device *device, struct ib_client *client, in ib_set_client_data() argument
472 spin_lock_irqsave(&device->client_data_lock, flags); in ib_set_client_data()
473 list_for_each_entry(context, &device->client_data_list, list) in ib_set_client_data()
480 device->name, client->name); in ib_set_client_data()
483 spin_unlock_irqrestore(&device->client_data_lock, flags); in ib_set_client_data()
500 spin_lock_irqsave(&event_handler->device->event_handler_lock, flags); in ib_register_event_handler()
502 &event_handler->device->event_handler_list); in ib_register_event_handler()
503 spin_unlock_irqrestore(&event_handler->device->event_handler_lock, flags); in ib_register_event_handler()
520 spin_lock_irqsave(&event_handler->device->event_handler_lock, flags); in ib_unregister_event_handler()
522 spin_unlock_irqrestore(&event_handler->device->event_handler_lock, flags); in ib_unregister_event_handler()
541 spin_lock_irqsave(&event->device->event_handler_lock, flags); in ib_dispatch_event()
543 list_for_each_entry(handler, &event->device->event_handler_list, list) in ib_dispatch_event()
546 spin_unlock_irqrestore(&event->device->event_handler_lock, flags); in ib_dispatch_event()
558 int ib_query_device(struct ib_device *device, in ib_query_device() argument
561 return device->query_device(device, device_attr); in ib_query_device()
574 int ib_query_port(struct ib_device *device, in ib_query_port() argument
578 if (port_num < start_port(device) || port_num > end_port(device)) in ib_query_port()
581 return device->query_port(device, port_num, port_attr); in ib_query_port()
594 int ib_query_gid(struct ib_device *device, in ib_query_gid() argument
597 return device->query_gid(device, port_num, index, gid); in ib_query_gid()
610 int ib_query_pkey(struct ib_device *device, in ib_query_pkey() argument
613 return device->query_pkey(device, port_num, index, pkey); in ib_query_pkey()
626 int ib_modify_device(struct ib_device *device, in ib_modify_device() argument
630 if (!device->modify_device) in ib_modify_device()
633 return device->modify_device(device, device_modify_mask, in ib_modify_device()
649 int ib_modify_port(struct ib_device *device, in ib_modify_port() argument
653 if (!device->modify_port) in ib_modify_port()
656 if (port_num < start_port(device) || port_num > end_port(device)) in ib_modify_port()
659 return device->modify_port(device, port_num, port_modify_mask, in ib_modify_port()
673 int ib_find_gid(struct ib_device *device, union ib_gid *gid, in ib_find_gid() argument
679 for (port = start_port(device); port <= end_port(device); ++port) { in ib_find_gid()
680 for (i = 0; i < device->gid_tbl_len[port - start_port(device)]; ++i) { in ib_find_gid()
681 ret = ib_query_gid(device, port, i, &tmp_gid); in ib_find_gid()
705 int ib_find_pkey(struct ib_device *device, in ib_find_pkey() argument
712 for (i = 0; i < device->pkey_tbl_len[port_num - start_port(device)]; ++i) { in ib_find_pkey()
713 ret = ib_query_pkey(device, port_num, i, &tmp_pkey); in ib_find_pkey()