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
477 rsv->rc = rc; in uwb_rsv_alloc()
496 struct uwb_rsv *uwb_rsv_create(struct uwb_rc *rc, uwb_rsv_cb_f cb, void *pal_priv) in uwb_rsv_create() argument
500 rsv = uwb_rsv_alloc(rc); in uwb_rsv_create()
519 uwb_drp_avail_release(rsv->rc, &rsv->mv.companion_mas); in uwb_rsv_remove()
520 uwb_drp_avail_release(rsv->rc, &rsv->mas); in uwb_rsv_remove()
558 struct uwb_rc *rc = rsv->rc; in uwb_rsv_establish() local
560 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_establish()
563 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_establish()
573 uwb_drp_available(rc, &available); in uwb_rsv_establish()
584 ret = uwb_drp_avail_reserve_pending(rc, &rsv->mas); in uwb_rsv_establish()
593 list_add_tail(&rsv->rc_node, &rc->reservations); in uwb_rsv_establish()
594 rsv->owner = &rc->uwb_dev; in uwb_rsv_establish()
598 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_establish()
624 struct uwb_rc *rc = rsv->rc; in uwb_rsv_try_move() local
625 struct uwb_drp_backoff_win *bow = &rc->bow; in uwb_rsv_try_move()
626 struct device *dev = &rc->uwb_dev.dev; in uwb_rsv_try_move()
640 uwb_drp_avail_reserve_pending(rc, &mv->companion_mas); in uwb_rsv_try_move()
653 void uwb_rsv_handle_drp_avail_change(struct uwb_rc *rc) in uwb_rsv_handle_drp_avail_change() argument
655 struct uwb_drp_backoff_win *bow = &rc->bow; in uwb_rsv_handle_drp_avail_change()
662 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_handle_drp_avail_change()
665 uwb_drp_available(rc, &mas); in uwb_rsv_handle_drp_avail_change()
685 struct uwb_rc *rc = rsv->rc; in uwb_rsv_terminate() local
687 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_terminate()
692 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_terminate()
745 static struct uwb_rsv *uwb_rsv_new_target(struct uwb_rc *rc, in uwb_rsv_new_target() argument
753 rsv = uwb_rsv_alloc(rc); in uwb_rsv_new_target()
757 rsv->rc = rc; in uwb_rsv_new_target()
761 rsv->target.dev = &rc->uwb_dev; in uwb_rsv_new_target()
762 uwb_dev_get(&rc->uwb_dev); in uwb_rsv_new_target()
772 mutex_lock(&rc->uwb_dev.mutex); in uwb_rsv_new_target()
773 list_for_each_entry(pal, &rc->pals, node) { in uwb_rsv_new_target()
779 mutex_unlock(&rc->uwb_dev.mutex); in uwb_rsv_new_target()
781 list_add_tail(&rsv->rc_node, &rc->reservations); in uwb_rsv_new_target()
787 && uwb_drp_avail_reserve_pending(rc, &rsv->mas) == -EBUSY) { in uwb_rsv_new_target()
807 bitmap_andnot(mas->bm, rsv->mas.bm, rsv->rc->cnflt_alien_bitmap.bm, UWB_NUM_MAS); in uwb_rsv_get_usable_mas()
821 struct uwb_rsv *uwb_rsv_find(struct uwb_rc *rc, struct uwb_dev *src, in uwb_rsv_find() argument
826 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_find()
832 return uwb_rsv_new_target(rc, src, drp_ie); in uwb_rsv_find()
844 static bool uwb_rsv_update_all(struct uwb_rc *rc) in uwb_rsv_update_all() argument
849 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_update_all()
859 void uwb_rsv_queue_update(struct uwb_rc *rc) in uwb_rsv_queue_update() argument
863 queue_delayed_work(rc->rsv_workq, &rc->rsv_update_work, usecs_to_jiffies(delay_us)); in uwb_rsv_queue_update()
888 void uwb_rsv_sched_update(struct uwb_rc *rc) in uwb_rsv_sched_update() argument
890 spin_lock_irq(&rc->rsvs_lock); in uwb_rsv_sched_update()
891 if (!delayed_work_pending(&rc->rsv_update_work)) { in uwb_rsv_sched_update()
892 if (rc->set_drp_ie_pending > 0) { in uwb_rsv_sched_update()
893 rc->set_drp_ie_pending++; in uwb_rsv_sched_update()
896 uwb_rsv_queue_update(rc); in uwb_rsv_sched_update()
899 spin_unlock_irq(&rc->rsvs_lock); in uwb_rsv_sched_update()
908 struct uwb_rc *rc = container_of(work, struct uwb_rc, in uwb_rsv_update_work() local
912 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_update_work()
914 ie_updated = uwb_rsv_update_all(rc); in uwb_rsv_update_work()
916 if (!rc->drp_avail.ie_valid) { in uwb_rsv_update_work()
917 uwb_drp_avail_ie_update(rc); in uwb_rsv_update_work()
921 if (ie_updated && (rc->set_drp_ie_pending == 0)) in uwb_rsv_update_work()
922 uwb_rc_send_all_drp_ie(rc); in uwb_rsv_update_work()
924 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_update_work()
929 struct uwb_rc *rc = container_of(work, struct uwb_rc, in uwb_rsv_alien_bp_work() local
933 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_alien_bp_work()
935 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rsv_alien_bp_work()
941 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_alien_bp_work()
948 queue_work(rsv->rc->rsv_workq, &rsv->handle_timeout_work); in uwb_rsv_timer()
957 void uwb_rsv_remove_all(struct uwb_rc *rc) in uwb_rsv_remove_all() argument
961 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
962 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_remove_all()
968 rc->set_drp_ie_pending = 0; in uwb_rsv_remove_all()
969 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
971 cancel_delayed_work_sync(&rc->rsv_update_work); in uwb_rsv_remove_all()
972 flush_workqueue(rc->rsv_workq); in uwb_rsv_remove_all()
974 mutex_lock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
975 list_for_each_entry_safe(rsv, t, &rc->reservations, rc_node) { in uwb_rsv_remove_all()
978 mutex_unlock(&rc->rsvs_mutex); in uwb_rsv_remove_all()
981 void uwb_rsv_init(struct uwb_rc *rc) in uwb_rsv_init() argument
983 INIT_LIST_HEAD(&rc->reservations); in uwb_rsv_init()
984 INIT_LIST_HEAD(&rc->cnflt_alien_list); in uwb_rsv_init()
985 mutex_init(&rc->rsvs_mutex); in uwb_rsv_init()
986 spin_lock_init(&rc->rsvs_lock); in uwb_rsv_init()
987 INIT_DELAYED_WORK(&rc->rsv_update_work, uwb_rsv_update_work); in uwb_rsv_init()
988 INIT_DELAYED_WORK(&rc->rsv_alien_bp_work, uwb_rsv_alien_bp_work); in uwb_rsv_init()
989 rc->bow.can_reserve_extra_mases = true; in uwb_rsv_init()
990 rc->bow.total_expired = 0; in uwb_rsv_init()
991 rc->bow.window = UWB_DRP_BACKOFF_WIN_MIN >> 1; in uwb_rsv_init()
992 init_timer(&rc->bow.timer); in uwb_rsv_init()
993 rc->bow.timer.function = uwb_rsv_backoff_win_timer; in uwb_rsv_init()
994 rc->bow.timer.data = (unsigned long)&rc->bow; in uwb_rsv_init()
996 bitmap_complement(rc->uwb_dev.streams, rc->uwb_dev.streams, UWB_NUM_STREAMS); in uwb_rsv_init()
999 int uwb_rsv_setup(struct uwb_rc *rc) in uwb_rsv_setup() argument
1003 snprintf(name, sizeof(name), "%s_rsvd", dev_name(&rc->uwb_dev.dev)); in uwb_rsv_setup()
1004 rc->rsv_workq = create_singlethread_workqueue(name); in uwb_rsv_setup()
1005 if (rc->rsv_workq == NULL) in uwb_rsv_setup()
1011 void uwb_rsv_cleanup(struct uwb_rc *rc) in uwb_rsv_cleanup() argument
1013 uwb_rsv_remove_all(rc); in uwb_rsv_cleanup()
1014 destroy_workqueue(rc->rsv_workq); in uwb_rsv_cleanup()