Lines Matching refs:rc
46 struct uwb_rc *rc = dev_get_drvdata(dev); in uwb_rc_index_match() local
48 if (rc->index == *index) in uwb_rc_index_match()
56 struct uwb_rc *rc = NULL; in uwb_rc_find_by_index() local
60 rc = dev_get_drvdata(dev); in uwb_rc_find_by_index()
64 return rc; in uwb_rc_find_by_index()
85 struct uwb_rc *rc = container_of(uwb_dev, struct uwb_rc, uwb_dev); in uwb_rc_sys_release() local
87 uwb_rc_ie_release(rc); in uwb_rc_sys_release()
88 kfree(rc); in uwb_rc_sys_release()
92 void uwb_rc_init(struct uwb_rc *rc) in uwb_rc_init() argument
94 struct uwb_dev *uwb_dev = &rc->uwb_dev; in uwb_rc_init()
97 rc->uwb_dev.dev.class = &uwb_rc_class; in uwb_rc_init()
98 rc->uwb_dev.dev.release = uwb_rc_sys_release; in uwb_rc_init()
99 uwb_rc_neh_create(rc); in uwb_rc_init()
100 rc->beaconing = -1; in uwb_rc_init()
101 rc->scan_type = UWB_SCAN_DISABLED; in uwb_rc_init()
102 INIT_LIST_HEAD(&rc->notifs_chain.list); in uwb_rc_init()
103 mutex_init(&rc->notifs_chain.mutex); in uwb_rc_init()
104 INIT_LIST_HEAD(&rc->uwb_beca.list); in uwb_rc_init()
105 mutex_init(&rc->uwb_beca.mutex); in uwb_rc_init()
106 uwb_drp_avail_init(rc); in uwb_rc_init()
107 uwb_rc_ie_init(rc); in uwb_rc_init()
108 uwb_rsv_init(rc); in uwb_rc_init()
109 uwb_rc_pal_init(rc); in uwb_rc_init()
116 struct uwb_rc *rc; in uwb_rc_alloc() local
117 rc = kzalloc(sizeof(*rc), GFP_KERNEL); in uwb_rc_alloc()
118 if (rc == NULL) in uwb_rc_alloc()
120 uwb_rc_init(rc); in uwb_rc_alloc()
121 return rc; in uwb_rc_alloc()
132 struct uwb_rc *rc = uwb_dev->rc; in ASIE_show() local
140 mutex_lock(&rc->ies_mutex); in ASIE_show()
142 ptr = rc->ies->IEData; in ASIE_show()
143 len = le16_to_cpu(rc->ies->wIELength); in ASIE_show()
155 mutex_unlock(&rc->ies_mutex); in ASIE_show()
168 struct uwb_rc *rc = uwb_dev->rc; in ASIE_store() local
176 uwb_rc_ie_rm(rc, UWB_APP_SPEC_IE); in ASIE_store()
215 uwb_rc_ie_rm(rc, UWB_APP_SPEC_IE); in ASIE_store()
217 result = uwb_rc_ie_add(rc, ie, ie->length + sizeof(struct uwb_ie_hdr)); in ASIE_store()
238 static int uwb_rc_sys_add(struct uwb_rc *rc) in uwb_rc_sys_add() argument
240 return sysfs_create_group(&rc->uwb_dev.dev.kobj, &rc_attr_group); in uwb_rc_sys_add()
244 static void __uwb_rc_sys_rm(struct uwb_rc *rc) in __uwb_rc_sys_rm() argument
246 sysfs_remove_group(&rc->uwb_dev.dev.kobj, &rc_attr_group); in __uwb_rc_sys_rm()
259 int uwb_rc_mac_addr_setup(struct uwb_rc *rc) in uwb_rc_mac_addr_setup() argument
262 struct device *dev = &rc->uwb_dev.dev; in uwb_rc_mac_addr_setup()
263 struct uwb_dev *uwb_dev = &rc->uwb_dev; in uwb_rc_mac_addr_setup()
267 result = uwb_rc_mac_addr_get(rc, &addr); in uwb_rc_mac_addr_setup()
277 result = uwb_rc_mac_addr_set(rc, &addr); in uwb_rc_mac_addr_setup()
291 static int uwb_rc_setup(struct uwb_rc *rc) in uwb_rc_setup() argument
294 struct device *dev = &rc->uwb_dev.dev; in uwb_rc_setup()
296 result = uwb_radio_setup(rc); in uwb_rc_setup()
301 result = uwb_rc_mac_addr_setup(rc); in uwb_rc_setup()
306 result = uwb_rc_dev_addr_assign(rc); in uwb_rc_setup()
311 result = uwb_rc_ie_setup(rc); in uwb_rc_setup()
316 result = uwb_rsv_setup(rc); in uwb_rc_setup()
321 uwb_dbg_add_rc(rc); in uwb_rc_setup()
325 uwb_rc_ie_release(rc); in uwb_rc_setup()
342 int uwb_rc_add(struct uwb_rc *rc, struct device *parent_dev, void *priv) in uwb_rc_add() argument
348 rc->index = uwb_rc_new_index(); in uwb_rc_add()
350 dev = &rc->uwb_dev.dev; in uwb_rc_add()
351 dev_set_name(dev, "uwb%d", rc->index); in uwb_rc_add()
353 rc->priv = priv; in uwb_rc_add()
355 init_waitqueue_head(&rc->uwbd.wq); in uwb_rc_add()
356 INIT_LIST_HEAD(&rc->uwbd.event_list); in uwb_rc_add()
357 spin_lock_init(&rc->uwbd.event_list_lock); in uwb_rc_add()
359 uwbd_start(rc); in uwb_rc_add()
361 result = rc->start(rc); in uwb_rc_add()
365 result = uwb_rc_setup(rc); in uwb_rc_add()
371 result = uwb_dev_add(&rc->uwb_dev, parent_dev, rc); in uwb_rc_add()
375 result = uwb_rc_sys_add(rc); in uwb_rc_add()
382 uwb_mac_addr_print(macbuf, sizeof(macbuf), &rc->uwb_dev.mac_addr); in uwb_rc_add()
383 uwb_dev_addr_print(devbuf, sizeof(devbuf), &rc->uwb_dev.dev_addr); in uwb_rc_add()
387 rc->ready = 1; in uwb_rc_add()
391 uwb_dev_rm(&rc->uwb_dev); in uwb_rc_add()
394 rc->stop(rc); in uwb_rc_add()
396 uwbd_stop(rc); in uwb_rc_add()
406 return __uwb_dev_offair(uwb_dev, uwb_dev->rc); in uwb_dev_offair_helper()
412 void uwb_rc_rm(struct uwb_rc *rc) in uwb_rc_rm() argument
414 rc->ready = 0; in uwb_rc_rm()
416 uwb_dbg_del_rc(rc); in uwb_rc_rm()
417 uwb_rsv_remove_all(rc); in uwb_rc_rm()
418 uwb_radio_shutdown(rc); in uwb_rc_rm()
420 rc->stop(rc); in uwb_rc_rm()
422 uwbd_stop(rc); in uwb_rc_rm()
423 uwb_rc_neh_destroy(rc); in uwb_rc_rm()
425 uwb_dev_lock(&rc->uwb_dev); in uwb_rc_rm()
426 rc->priv = NULL; in uwb_rc_rm()
427 rc->cmd = NULL; in uwb_rc_rm()
428 uwb_dev_unlock(&rc->uwb_dev); in uwb_rc_rm()
429 mutex_lock(&rc->uwb_beca.mutex); in uwb_rc_rm()
430 uwb_dev_for_each(rc, uwb_dev_offair_helper, NULL); in uwb_rc_rm()
431 __uwb_rc_sys_rm(rc); in uwb_rc_rm()
432 mutex_unlock(&rc->uwb_beca.mutex); in uwb_rc_rm()
433 uwb_rsv_cleanup(rc); in uwb_rc_rm()
434 uwb_beca_release(rc); in uwb_rc_rm()
435 uwb_dev_rm(&rc->uwb_dev); in uwb_rc_rm()
442 struct uwb_rc *rc = dev_get_drvdata(dev); in find_rc_try_get() local
444 if (rc == NULL) { in find_rc_try_get()
448 if (rc == target_rc) { in find_rc_try_get()
449 if (rc->ready == 0) in find_rc_try_get()
466 struct uwb_rc *rc = NULL; in __uwb_rc_try_get() local
471 rc = dev_get_drvdata(dev); in __uwb_rc_try_get()
472 __uwb_rc_get(rc); in __uwb_rc_try_get()
476 return rc; in __uwb_rc_try_get()
485 static inline struct uwb_rc *uwb_rc_get(struct uwb_rc *rc) in uwb_rc_get() argument
487 if (rc->ready == 0) in uwb_rc_get()
489 uwb_dev_get(&rc->uwb_dev); in uwb_rc_get()
490 return rc; in uwb_rc_get()
496 struct uwb_rc *rc = dev_get_drvdata(dev); in find_rc_grandpa() local
498 if (rc->uwb_dev.dev.parent->parent == grandpa_dev) { in find_rc_grandpa()
499 rc = uwb_rc_get(rc); in find_rc_grandpa()
524 struct uwb_rc *rc = NULL; in uwb_rc_get_by_grandpa() local
529 rc = dev_get_drvdata(dev); in uwb_rc_get_by_grandpa()
533 return rc; in uwb_rc_get_by_grandpa()
545 struct uwb_rc *rc = dev_get_drvdata(dev); in find_rc_dev() local
547 if (rc == NULL) { in find_rc_dev()
551 if (!uwb_dev_addr_cmp(&rc->uwb_dev.dev_addr, addr)) { in find_rc_dev()
552 rc = uwb_rc_get(rc); in find_rc_dev()
561 struct uwb_rc *rc = NULL; in uwb_rc_get_by_dev() local
565 rc = dev_get_drvdata(dev); in uwb_rc_get_by_dev()
569 return rc; in uwb_rc_get_by_dev()
579 void uwb_rc_put(struct uwb_rc *rc) in uwb_rc_put() argument
581 __uwb_rc_put(rc); in uwb_rc_put()