Lines Matching refs:rc
108 struct device *dev = &rsv->rc->uwb_dev.dev; in uwb_rsv_dump()
149 struct uwb_rc *rc = rsv->rc; in uwb_rsv_get_stream() local
150 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_get_stream()
159 streams_bm = rc->uwb_dev.streams; in uwb_rsv_get_stream()
181 struct uwb_rc *rc = rsv->rc; in uwb_rsv_put_stream() local
182 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_put_stream()
190 streams_bm = rc->uwb_dev.streams; in uwb_rsv_put_stream()
204 struct uwb_rc *rc = container_of(bow, struct uwb_rc, bow); in uwb_rsv_backoff_win_timer() local
205 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_backoff_win_timer()
219 uwb_rsv_handle_drp_avail_change(rc); in uwb_rsv_backoff_win_timer()
222 void uwb_rsv_backoff_win_increment(struct uwb_rc *rc) in uwb_rsv_backoff_win_increment() argument
224 struct uwb_drp_backoff_win *bow = &rc->bow; in uwb_rsv_backoff_win_increment()
225 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_backoff_win_increment()
291 uwb_rsv_sched_update(rsv->rc); in uwb_rsv_state_update()
346 uwb_drp_avail_release(rsv->rc, &mv->companion_mas); in uwb_rsv_set_state()
349 uwb_drp_avail_reserve(rsv->rc, &rsv->mas); in uwb_rsv_set_state()
359 uwb_drp_avail_reserve(rsv->rc, &mv->companion_mas); in uwb_rsv_set_state()
377 uwb_drp_avail_reserve(rsv->rc, &rsv->mas); in uwb_rsv_set_state()
392 uwb_drp_avail_reserve(rsv->rc, &mv->companion_mas); in uwb_rsv_set_state()
396 dev_err(&rsv->rc->uwb_dev.dev, "unhandled state: %s (%d)\n", in uwb_rsv_set_state()
405 struct uwb_rc *rc = rsv->rc; in uwb_rsv_handle_timeout_work() local
407 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_handle_timeout_work()
448 uwb_drp_avail_release(rsv->rc, &rsv->mv.companion_mas); in uwb_rsv_handle_timeout_work()
459 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_handle_timeout_work()
462 static struct uwb_rsv *uwb_rsv_alloc(struct uwb_rc *rc) in uwb_rsv_alloc() argument
475 rsv->rc = rc; in uwb_rsv_alloc()
494 struct uwb_rsv *uwb_rsv_create(struct uwb_rc *rc, uwb_rsv_cb_f cb, void *pal_priv) in uwb_rsv_create() argument
498 rsv = uwb_rsv_alloc(rc); in uwb_rsv_create()
517 uwb_drp_avail_release(rsv->rc, &rsv->mv.companion_mas); in uwb_rsv_remove()
518 uwb_drp_avail_release(rsv->rc, &rsv->mas); in uwb_rsv_remove()
556 struct uwb_rc *rc = rsv->rc; in uwb_rsv_establish() local
558 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_establish()
561 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_establish()
571 uwb_drp_available(rc, &available); in uwb_rsv_establish()
582 ret = uwb_drp_avail_reserve_pending(rc, &rsv->mas); in uwb_rsv_establish()
591 list_add_tail(&rsv->rc_node, &rc->reservations); in uwb_rsv_establish()
592 rsv->owner = &rc->uwb_dev; in uwb_rsv_establish()
596 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_establish()
622 struct uwb_rc *rc = rsv->rc; in uwb_rsv_try_move() local
623 struct uwb_drp_backoff_win *bow = &rc->bow; in uwb_rsv_try_move()
624 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_try_move()
638 uwb_drp_avail_reserve_pending(rc, &mv->companion_mas); in uwb_rsv_try_move()
651 void uwb_rsv_handle_drp_avail_change(struct uwb_rc *rc) in uwb_rsv_handle_drp_avail_change() argument
653 struct uwb_drp_backoff_win *bow = &rc->bow; in uwb_rsv_handle_drp_avail_change()
660 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_handle_drp_avail_change()
663 uwb_drp_available(rc, &mas); in uwb_rsv_handle_drp_avail_change()
683 struct uwb_rc *rc = rsv->rc; in uwb_rsv_terminate() local
685 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_terminate()
690 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_terminate()
743 static struct uwb_rsv *uwb_rsv_new_target(struct uwb_rc *rc, in uwb_rsv_new_target() argument
751 rsv = uwb_rsv_alloc(rc); in uwb_rsv_new_target()
755 rsv->rc = rc; in uwb_rsv_new_target()
759 rsv->target.dev = &rc->uwb_dev; in uwb_rsv_new_target()
760 uwb_dev_get(&rc->uwb_dev); in uwb_rsv_new_target()
770 mutex_lock(&rc->uwb_dev.mutex); in uwb_rsv_new_target()
771 list_for_each_entry(pal, &rc->pals, node) { in uwb_rsv_new_target()
777 mutex_unlock(&rc->uwb_dev.mutex); in uwb_rsv_new_target()
779 list_add_tail(&rsv->rc_node, &rc->reservations); in uwb_rsv_new_target()
785 && uwb_drp_avail_reserve_pending(rc, &rsv->mas) == -EBUSY) { in uwb_rsv_new_target()
805 bitmap_andnot(mas->bm, rsv->mas.bm, rsv->rc->cnflt_alien_bitmap.bm, UWB_NUM_MAS); in uwb_rsv_get_usable_mas()
819 struct uwb_rsv *uwb_rsv_find(struct uwb_rc *rc, struct uwb_dev *src, in uwb_rsv_find() argument
824 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_find()
830 return uwb_rsv_new_target(rc, src, drp_ie); in uwb_rsv_find()
842 static bool uwb_rsv_update_all(struct uwb_rc *rc) in uwb_rsv_update_all() argument
847 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_update_all()
857 void uwb_rsv_queue_update(struct uwb_rc *rc) in uwb_rsv_queue_update() argument
861 queue_delayed_work(rc->rsv_workq, &rc->rsv_update_work, usecs_to_jiffies(delay_us)); in uwb_rsv_queue_update()
886 void uwb_rsv_sched_update(struct uwb_rc *rc) in uwb_rsv_sched_update() argument
888 spin_lock_irq(&rc->rsvs_lock); in uwb_rsv_sched_update()
889 if (!delayed_work_pending(&rc->rsv_update_work)) { in uwb_rsv_sched_update()
890 if (rc->set_drp_ie_pending > 0) { in uwb_rsv_sched_update()
891 rc->set_drp_ie_pending++; in uwb_rsv_sched_update()
894 uwb_rsv_queue_update(rc); in uwb_rsv_sched_update()
897 spin_unlock_irq(&rc->rsvs_lock); in uwb_rsv_sched_update()
906 struct uwb_rc *rc = container_of(work, struct uwb_rc, in uwb_rsv_update_work() local
910 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_update_work()
912 ie_updated = uwb_rsv_update_all(rc); in uwb_rsv_update_work()
914 if (!rc->drp_avail.ie_valid) { in uwb_rsv_update_work()
915 uwb_drp_avail_ie_update(rc); in uwb_rsv_update_work()
919 if (ie_updated && (rc->set_drp_ie_pending == 0)) in uwb_rsv_update_work()
920 uwb_rc_send_all_drp_ie(rc); in uwb_rsv_update_work()
922 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_update_work()
927 struct uwb_rc *rc = container_of(work, struct uwb_rc, in uwb_rsv_alien_bp_work() local
931 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_alien_bp_work()
933 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_alien_bp_work()
939 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_alien_bp_work()
946 queue_work(rsv->rc->rsv_workq, &rsv->handle_timeout_work); in uwb_rsv_timer()
955 void uwb_rsv_remove_all(struct uwb_rc *rc) in uwb_rsv_remove_all() argument
959 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
960 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_remove_all()
966 rc->set_drp_ie_pending = 0; in uwb_rsv_remove_all()
967 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
969 cancel_delayed_work_sync(&rc->rsv_update_work); in uwb_rsv_remove_all()
970 flush_workqueue(rc->rsv_workq); in uwb_rsv_remove_all()
972 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
973 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_remove_all()
976 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
979 void uwb_rsv_init(struct uwb_rc *rc) in uwb_rsv_init() argument
981 INIT_LIST_HEAD(&rc->reservations); in uwb_rsv_init()
982 INIT_LIST_HEAD(&rc->cnflt_alien_list); in uwb_rsv_init()
983 mutex_init(&rc->rsvs_mutex); in uwb_rsv_init()
984 spin_lock_init(&rc->rsvs_lock); in uwb_rsv_init()
985 INIT_DELAYED_WORK(&rc->rsv_update_work, uwb_rsv_update_work); in uwb_rsv_init()
986 INIT_DELAYED_WORK(&rc->rsv_alien_bp_work, uwb_rsv_alien_bp_work); in uwb_rsv_init()
987 rc->bow.can_reserve_extra_mases = true; in uwb_rsv_init()
988 rc->bow.total_expired = 0; in uwb_rsv_init()
989 rc->bow.window = UWB_DRP_BACKOFF_WIN_MIN >> 1; in uwb_rsv_init()
990 setup_timer(&rc->bow.timer, uwb_rsv_backoff_win_timer, in uwb_rsv_init()
991 (unsigned long)&rc->bow); in uwb_rsv_init()
993 bitmap_complement(rc->uwb_dev.streams, rc->uwb_dev.streams, UWB_NUM_STREAMS); in uwb_rsv_init()
996 int uwb_rsv_setup(struct uwb_rc *rc) in uwb_rsv_setup() argument
1000 snprintf(name, sizeof(name), "%s_rsvd", dev_name(&rc->uwb_dev.dev)); in uwb_rsv_setup()
1001 rc->rsv_workq = create_singlethread_workqueue(name); in uwb_rsv_setup()
1002 if (rc->rsv_workq == NULL) in uwb_rsv_setup()
1008 void uwb_rsv_cleanup(struct uwb_rc *rc) in uwb_rsv_cleanup() argument
1010 uwb_rsv_remove_all(rc); in uwb_rsv_cleanup()
1011 destroy_workqueue(rc->rsv_workq); in uwb_rsv_cleanup()