Lines Matching refs:wusb_dev

84 static void wusb_dev_free(struct wusb_dev *wusb_dev)  in wusb_dev_free()  argument
86 kfree(wusb_dev); in wusb_dev_free()
89 static struct wusb_dev *wusb_dev_alloc(struct wusbhc *wusbhc) in wusb_dev_alloc()
91 struct wusb_dev *wusb_dev; in wusb_dev_alloc() local
93 wusb_dev = kzalloc(sizeof(*wusb_dev), GFP_KERNEL); in wusb_dev_alloc()
94 if (wusb_dev == NULL) in wusb_dev_alloc()
97 wusb_dev->wusbhc = wusbhc; in wusb_dev_alloc()
99 INIT_WORK(&wusb_dev->devconnect_acked_work, wusbhc_devconnect_acked_work); in wusb_dev_alloc()
101 return wusb_dev; in wusb_dev_alloc()
103 wusb_dev_free(wusb_dev); in wusb_dev_alloc()
121 struct wusb_dev *dev_itr; in wusbhc_fill_cack_ie()
148 static struct wusb_dev *wusbhc_cack_add(struct wusbhc *wusbhc, in wusbhc_cack_add()
153 struct wusb_dev *wusb_dev; in wusbhc_cack_add() local
159 list_for_each_entry(wusb_dev, &wusbhc->cack_list, cack_node) in wusbhc_cack_add()
160 if (!memcmp(&wusb_dev->cdid, &dnc->CDID, in wusbhc_cack_add()
161 sizeof(wusb_dev->cdid))) in wusbhc_cack_add()
162 return wusb_dev; in wusbhc_cack_add()
164 wusb_dev = wusb_dev_alloc(wusbhc); in wusbhc_cack_add()
165 if (wusb_dev == NULL) in wusbhc_cack_add()
167 wusb_dev_init(wusb_dev); in wusbhc_cack_add()
168 wusb_dev->cdid = dnc->CDID; in wusbhc_cack_add()
169 wusb_dev->port_idx = port_idx; in wusbhc_cack_add()
178 bitmap_fill(wusb_dev->availability.bm, UWB_NUM_MAS); in wusbhc_cack_add()
190 result = wusb_set_dev_addr(wusbhc, wusb_dev, dev_addr); in wusbhc_cack_add()
194 wusb_dev->entry_ts = jiffies; in wusbhc_cack_add()
195 list_add_tail(&wusb_dev->cack_node, &wusbhc->cack_list); in wusbhc_cack_add()
199 return wusb_dev; in wusbhc_cack_add()
207 static void wusbhc_cack_rm(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev) in wusbhc_cack_rm() argument
209 list_del_init(&wusb_dev->cack_node); in wusbhc_cack_rm()
217 void wusbhc_devconnect_acked(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev) in wusbhc_devconnect_acked() argument
219 wusbhc_cack_rm(wusbhc, wusb_dev); in wusbhc_devconnect_acked()
228 struct wusb_dev *wusb_dev = container_of(work, struct wusb_dev, in wusbhc_devconnect_acked_work() local
230 struct wusbhc *wusbhc = wusb_dev->wusbhc; in wusbhc_devconnect_acked_work()
233 wusbhc_devconnect_acked(wusbhc, wusb_dev); in wusbhc_devconnect_acked_work()
236 wusb_dev_put(wusb_dev); in wusbhc_devconnect_acked_work()
271 struct wusb_dev *wusb_dev; in wusbhc_devconnect_ack() local
280 if (port->wusb_dev in wusbhc_devconnect_ack()
281 && memcmp(&dnc->CDID, &port->wusb_dev->cdid, sizeof(dnc->CDID)) == 0) in wusbhc_devconnect_ack()
306 wusb_dev = wusbhc_cack_add(wusbhc, dnc, pr_cdid, idx); in wusbhc_devconnect_ack()
307 if (wusb_dev == NULL) in wusbhc_devconnect_ack()
315 port->wusb_dev = wusb_dev; in wusbhc_devconnect_ack()
347 struct wusb_dev *wusb_dev = port->wusb_dev; in __wusbhc_dev_disconnect() local
353 if (wusb_dev) { in __wusbhc_dev_disconnect()
354 dev_dbg(wusbhc->dev, "disconnecting device from port %d\n", wusb_dev->port_idx); in __wusbhc_dev_disconnect()
355 if (!list_empty(&wusb_dev->cack_node)) in __wusbhc_dev_disconnect()
356 list_del_init(&wusb_dev->cack_node); in __wusbhc_dev_disconnect()
358 wusb_dev_put(wusb_dev); in __wusbhc_dev_disconnect()
360 port->wusb_dev = NULL; in __wusbhc_dev_disconnect()
393 struct wusb_dev *wusb_dev; in __wusbhc_keep_alive() local
406 wusb_dev = wusb_port->wusb_dev; in __wusbhc_keep_alive()
408 if (wusb_dev == NULL) in __wusbhc_keep_alive()
410 if (wusb_dev->usb_dev == NULL) in __wusbhc_keep_alive()
413 if (time_after(jiffies, wusb_dev->entry_ts + tt)) { in __wusbhc_keep_alive()
415 wusb_dev->addr); in __wusbhc_keep_alive()
417 } else if (time_after(jiffies, wusb_dev->entry_ts + tt/3)) { in __wusbhc_keep_alive()
419 ie->bDeviceAddress[keep_alives++] = wusb_dev->addr; in __wusbhc_keep_alive()
455 static struct wusb_dev *wusbhc_find_dev_by_addr(struct wusbhc *wusbhc, u8 addr) in wusbhc_find_dev_by_addr()
466 return wusb_port_by_idx(wusbhc, port)->wusb_dev; in wusbhc_find_dev_by_addr()
471 struct wusb_dev *wusb_dev = wusb_port_by_idx(wusbhc, p)->wusb_dev; in wusbhc_find_dev_by_addr() local
472 if (wusb_dev && wusb_dev->addr == addr) in wusbhc_find_dev_by_addr()
473 return wusb_dev; in wusbhc_find_dev_by_addr()
488 struct wusb_dev *wusb_dev; in wusbhc_handle_dn_alive() local
491 wusb_dev = wusbhc_find_dev_by_addr(wusbhc, srcaddr); in wusbhc_handle_dn_alive()
492 if (wusb_dev == NULL) { in wusbhc_handle_dn_alive()
496 wusb_dev->entry_ts = jiffies; in wusbhc_handle_dn_alive()
555 struct wusb_dev *wusb_dev; in wusbhc_handle_dn_disconnect() local
558 wusb_dev = wusbhc_find_dev_by_addr(wusbhc, srcaddr); in wusbhc_handle_dn_disconnect()
559 if (wusb_dev == NULL) { in wusbhc_handle_dn_disconnect()
564 wusb_dev->addr); in wusbhc_handle_dn_disconnect()
566 wusb_dev->port_idx)); in wusbhc_handle_dn_disconnect()
643 struct wusb_dev *wusb_dev; in __wusbhc_dev_disable() local
646 wusb_dev = wusb_port_by_idx(wusbhc, port_idx)->wusb_dev; in __wusbhc_dev_disable()
647 if (wusb_dev == NULL) { in __wusbhc_dev_disable()
660 ie->bDeviceAddress = wusb_dev->addr; in __wusbhc_dev_disable()
689 struct wusb_dev *wusb_dev, in wusb_dev_bos_grok() argument
725 if (cap_size != sizeof(*wusb_dev->wusb_cap_descr)) in wusb_dev_bos_grok()
729 sizeof(*wusb_dev->wusb_cap_descr)); in wusb_dev_bos_grok()
731 wusb_dev->wusb_cap_descr = itr; in wusb_dev_bos_grok()
760 struct wusb_dev *wusb_dev) in wusb_dev_bos_add() argument
797 result = wusb_dev_bos_grok(usb_dev, wusb_dev, bos, result); in wusb_dev_bos_add()
800 wusb_dev->bos = bos; in wusb_dev_bos_add()
806 wusb_dev->wusb_cap_descr = NULL; in wusb_dev_bos_add()
810 static void wusb_dev_bos_rm(struct wusb_dev *wusb_dev) in wusb_dev_bos_rm() argument
812 kfree(wusb_dev->bos); in wusb_dev_bos_rm()
813 wusb_dev->wusb_cap_descr = NULL; in wusb_dev_bos_rm()
841 struct wusb_dev *wusb_dev; in wusb_dev_add_ncb() local
855 wusb_dev = __wusb_dev_get_by_usb_dev(wusbhc, usb_dev); in wusb_dev_add_ncb()
858 if (wusb_dev == NULL) in wusb_dev_add_ncb()
860 wusb_dev->usb_dev = usb_get_dev(usb_dev); in wusb_dev_add_ncb()
861 usb_dev->wusb_dev = wusb_dev_get(wusb_dev); in wusb_dev_add_ncb()
862 result = wusb_dev_sec_add(wusbhc, usb_dev, wusb_dev); in wusb_dev_add_ncb()
868 result = wusb_dev_bos_add(usb_dev, wusb_dev); in wusb_dev_add_ncb()
873 result = wusb_dev_sysfs_add(wusbhc, usb_dev, wusb_dev); in wusb_dev_add_ncb()
877 wusb_dev_put(wusb_dev); in wusb_dev_add_ncb()
883 wusb_dev_bos_rm(wusb_dev); in wusb_dev_add_ncb()
885 wusb_dev_sec_rm(wusb_dev); in wusb_dev_add_ncb()
900 struct wusb_dev *wusb_dev = usb_dev->wusb_dev; in wusb_dev_rm_ncb() local
905 wusb_dev_sysfs_rm(wusb_dev); in wusb_dev_rm_ncb()
906 wusb_dev_bos_rm(wusb_dev); in wusb_dev_rm_ncb()
907 wusb_dev_sec_rm(wusb_dev); in wusb_dev_rm_ncb()
908 wusb_dev->usb_dev = NULL; in wusb_dev_rm_ncb()
909 usb_dev->wusb_dev = NULL; in wusb_dev_rm_ncb()
910 wusb_dev_put(wusb_dev); in wusb_dev_rm_ncb()
948 struct wusb_dev *__wusb_dev_get_by_usb_dev(struct wusbhc *wusbhc, in __wusb_dev_get_by_usb_dev()
951 struct wusb_dev *wusb_dev; in __wusb_dev_get_by_usb_dev() local
956 wusb_dev = wusb_port_by_idx(wusbhc, port_idx)->wusb_dev; in __wusb_dev_get_by_usb_dev()
957 if (wusb_dev != NULL) /* ops, device is gone */ in __wusb_dev_get_by_usb_dev()
958 wusb_dev_get(wusb_dev); in __wusb_dev_get_by_usb_dev()
959 return wusb_dev; in __wusb_dev_get_by_usb_dev()
965 struct wusb_dev *wusb_dev = container_of(_wusb_dev, struct wusb_dev, refcnt); in wusb_dev_destroy() local
967 list_del_init(&wusb_dev->cack_node); in wusb_dev_destroy()
968 wusb_dev_free(wusb_dev); in wusb_dev_destroy()
1052 if (wusbhc->port[i].wusb_dev) in wusbhc_devconnect_stop()
1069 int wusb_set_dev_addr(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev, u8 addr) in wusb_set_dev_addr() argument
1073 wusb_dev->addr = addr; in wusb_set_dev_addr()
1074 result = wusbhc->dev_info_set(wusbhc, wusb_dev); in wusb_set_dev_addr()
1077 "address\n", wusb_dev->port_idx); in wusb_set_dev_addr()
1080 wusb_dev->port_idx, in wusb_set_dev_addr()
1082 wusb_dev->addr); in wusb_set_dev_addr()