Lines Matching refs:wusbhc
34 int wusbhc_sec_create(struct wusbhc *wusbhc) in wusbhc_sec_create() argument
44 wusbhc->wq_security = create_singlethread_workqueue("wusbd_security"); in wusbhc_sec_create()
45 if (wusbhc->wq_security == NULL) { in wusbhc_sec_create()
50 wusbhc->gtk.descr.bLength = sizeof(wusbhc->gtk.descr) + in wusbhc_sec_create()
51 sizeof(wusbhc->gtk.data); in wusbhc_sec_create()
52 wusbhc->gtk.descr.bDescriptorType = USB_DT_KEY; in wusbhc_sec_create()
53 wusbhc->gtk.descr.bReserved = 0; in wusbhc_sec_create()
54 wusbhc->gtk_index = 0; in wusbhc_sec_create()
56 INIT_WORK(&wusbhc->gtk_rekey_work, wusbhc_gtk_rekey_work); in wusbhc_sec_create()
63 void wusbhc_sec_destroy(struct wusbhc *wusbhc) in wusbhc_sec_destroy() argument
65 destroy_workqueue(wusbhc->wq_security); in wusbhc_sec_destroy()
81 static u32 wusbhc_next_tkid(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev) in wusbhc_next_tkid() argument
87 tkid = &wusbhc->gtk_tkid; in wusbhc_next_tkid()
90 tkid = &wusb_port_by_idx(wusbhc, wusb_dev->port_idx)->ptk_tkid; in wusbhc_next_tkid()
99 static void wusbhc_generate_gtk(struct wusbhc *wusbhc) in wusbhc_generate_gtk() argument
101 const size_t key_size = sizeof(wusbhc->gtk.data); in wusbhc_generate_gtk()
104 tkid = wusbhc_next_tkid(wusbhc, NULL); in wusbhc_generate_gtk()
106 wusbhc->gtk.descr.tTKID[0] = (tkid >> 0) & 0xff; in wusbhc_generate_gtk()
107 wusbhc->gtk.descr.tTKID[1] = (tkid >> 8) & 0xff; in wusbhc_generate_gtk()
108 wusbhc->gtk.descr.tTKID[2] = (tkid >> 16) & 0xff; in wusbhc_generate_gtk()
110 get_random_bytes(wusbhc->gtk.descr.bKeyData, key_size); in wusbhc_generate_gtk()
121 int wusbhc_sec_start(struct wusbhc *wusbhc) in wusbhc_sec_start() argument
123 const size_t key_size = sizeof(wusbhc->gtk.data); in wusbhc_sec_start()
126 wusbhc_generate_gtk(wusbhc); in wusbhc_sec_start()
128 result = wusbhc->set_gtk(wusbhc, wusbhc->gtk_tkid, in wusbhc_sec_start()
129 &wusbhc->gtk.descr.bKeyData, key_size); in wusbhc_sec_start()
131 dev_err(wusbhc->dev, "cannot set GTK for the host: %d\n", in wusbhc_sec_start()
143 void wusbhc_sec_stop(struct wusbhc *wusbhc) in wusbhc_sec_stop() argument
145 cancel_work_sync(&wusbhc->gtk_rekey_work); in wusbhc_sec_stop()
198 static int wusb_dev_set_gtk(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev) in wusb_dev_set_gtk() argument
201 u8 key_index = wusb_key_index(wusbhc->gtk_index, in wusb_dev_set_gtk()
209 &wusbhc->gtk.descr, wusbhc->gtk.descr.bLength, in wusb_dev_set_gtk()
215 int wusb_dev_sec_add(struct wusbhc *wusbhc, in wusb_dev_sec_add() argument
312 int wusb_dev_update_address(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev) in wusb_dev_update_address() argument
329 result = wusb_set_dev_addr(wusbhc, wusb_dev, 0); in wusb_dev_update_address()
346 result = wusb_set_dev_addr(wusbhc, wusb_dev, new_address); in wusb_dev_update_address()
362 int wusb_dev_4way_handshake(struct wusbhc *wusbhc, struct wusb_dev *wusb_dev, in wusb_dev_4way_handshake() argument
388 tkid = wusbhc_next_tkid(wusbhc, wusb_dev); in wusb_dev_4way_handshake()
446 ccm_n.src_addr = wusbhc->uwb_rc->uwb_dev.dev_addr; in wusb_dev_4way_handshake()
497 result = wusbhc->set_ptk(wusbhc, wusb_dev->port_idx, tkid, in wusb_dev_4way_handshake()
502 result = wusb_dev_set_gtk(wusbhc, wusb_dev); in wusb_dev_4way_handshake()
511 result = wusb_dev_update_address(wusbhc, wusb_dev); in wusb_dev_4way_handshake()
543 struct wusbhc *wusbhc = container_of(work, in wusbhc_gtk_rekey_work() local
544 struct wusbhc, gtk_rekey_work); in wusbhc_gtk_rekey_work()
545 size_t key_size = sizeof(wusbhc->gtk.data); in wusbhc_gtk_rekey_work()
550 mutex_lock(&wusbhc->mutex); in wusbhc_gtk_rekey_work()
552 wusbhc_generate_gtk(wusbhc); in wusbhc_gtk_rekey_work()
554 wusbhc->gtk_index = (wusbhc->gtk_index + 1) % (WUSB_KEY_INDEX_MAX + 1); in wusbhc_gtk_rekey_work()
560 for (port_idx = 0; port_idx < wusbhc->ports_max; port_idx++) { in wusbhc_gtk_rekey_work()
561 wusb_dev = wusbhc->port[port_idx].wusb_dev; in wusbhc_gtk_rekey_work()
569 mutex_unlock(&wusbhc->mutex); in wusbhc_gtk_rekey_work()
579 if (wusb_dev_set_gtk(wusbhc, wusb_dev) < 0) { in wusbhc_gtk_rekey_work()
588 mutex_lock(&wusbhc->mutex); in wusbhc_gtk_rekey_work()
589 wusbhc->set_gtk(wusbhc, wusbhc->gtk_tkid, in wusbhc_gtk_rekey_work()
590 &wusbhc->gtk.descr.bKeyData, key_size); in wusbhc_gtk_rekey_work()
591 mutex_unlock(&wusbhc->mutex); in wusbhc_gtk_rekey_work()
605 void wusbhc_gtk_rekey(struct wusbhc *wusbhc) in wusbhc_gtk_rekey() argument
614 queue_work(wusbhc->wq_security, &wusbhc->gtk_rekey_work); in wusbhc_gtk_rekey()