Lines Matching refs:rc

58 static void uwb_rc_set_drp_cmd_done(struct uwb_rc *rc, void *arg,  in uwb_rc_set_drp_cmd_done()  argument
66 dev_err(&rc->uwb_dev.dev, "SET-DRP-IE failed: %s (%d)\n", in uwb_rc_set_drp_cmd_done()
69 dev_err(&rc->uwb_dev.dev, "SET-DRP-IE: timeout\n"); in uwb_rc_set_drp_cmd_done()
71 spin_lock_irqsave(&rc->rsvs_lock, flags); in uwb_rc_set_drp_cmd_done()
72 if (rc->set_drp_ie_pending > 1) { in uwb_rc_set_drp_cmd_done()
73 rc->set_drp_ie_pending = 0; in uwb_rc_set_drp_cmd_done()
74 uwb_rsv_queue_update(rc); in uwb_rc_set_drp_cmd_done()
76 rc->set_drp_ie_pending = 0; in uwb_rc_set_drp_cmd_done()
78 spin_unlock_irqrestore(&rc->rsvs_lock, flags); in uwb_rc_set_drp_cmd_done()
101 int uwb_rc_send_all_drp_ie(struct uwb_rc *rc) in uwb_rc_send_all_drp_ie() argument
112 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rc_send_all_drp_ie()
123 num_bytes += sizeof(rc->drp_avail.ie); in uwb_rc_send_all_drp_ie()
134 memcpy(IEDataptr, &rc->drp_avail.ie, sizeof(rc->drp_avail.ie)); in uwb_rc_send_all_drp_ie()
138 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_rc_send_all_drp_ie()
155 result = uwb_rc_cmd_async(rc, "SET-DRP-IE", in uwb_rc_send_all_drp_ie()
160 rc->set_drp_ie_pending = 1; in uwb_rc_send_all_drp_ie()
177 int our_beacon_slot = rsv->rc->uwb_dev.beacon_slot; in evaluate_conflict_action()
255 struct uwb_rc *rc = rsv->rc; in handle_conflict_normal() local
257 struct uwb_drp_backoff_win *bow = &rc->bow; in handle_conflict_normal()
268 uwb_rsv_backoff_win_increment(rc); in handle_conflict_normal()
272 uwb_rsv_backoff_win_increment(rc); in handle_conflict_normal()
297 struct uwb_rc *rc = rsv->rc; in handle_conflict_expanding() local
298 struct uwb_drp_backoff_win *bow = &rc->bow; in handle_conflict_expanding()
313 uwb_rsv_backoff_win_increment(rc); in handle_conflict_expanding()
314 uwb_drp_avail_release(rsv->rc, in handle_conflict_expanding()
328 uwb_rsv_backoff_win_increment(rc); in handle_conflict_expanding()
330 uwb_drp_avail_release(rsv->rc, &rsv->mv.companion_mas); in handle_conflict_expanding()
345 static void uwb_drp_handle_conflict_rsv(struct uwb_rc *rc, struct uwb_rsv *rsv, in uwb_drp_handle_conflict_rsv() argument
375 static void uwb_drp_handle_all_conflict_rsv(struct uwb_rc *rc, in uwb_drp_handle_all_conflict_rsv() argument
382 list_for_each_entry(rsv, &rc->reservations, rc_node) { in uwb_drp_handle_all_conflict_rsv()
383 uwb_drp_handle_conflict_rsv(rc, rsv, drp_evt, drp_ie, in uwb_drp_handle_all_conflict_rsv()
388 static void uwb_drp_process_target_accepted(struct uwb_rc *rc, in uwb_drp_process_target_accepted() argument
411 if (uwb_drp_avail_reserve_pending(rc, mas) == -EBUSY) { in uwb_drp_process_target_accepted()
417 uwb_drp_handle_all_conflict_rsv(rc, drp_evt, in uwb_drp_process_target_accepted()
440 static void uwb_drp_process_target(struct uwb_rc *rc, struct uwb_rsv *rsv, in uwb_drp_process_target() argument
443 struct device *dev = &rc->uwb_dev.dev; in uwb_drp_process_target()
455 uwb_drp_process_target_accepted(rc, rsv, drp_evt, drp_ie, &mas); in uwb_drp_process_target()
470 uwb_drp_avail_release(rsv->rc, &mv->companion_mas); in uwb_drp_process_target()
528 static void uwb_drp_process_owner(struct uwb_rc *rc, struct uwb_rsv *rsv, in uwb_drp_process_owner() argument
532 struct device *dev = &rc->uwb_dev.dev; in uwb_drp_process_owner()
562 uwb_drp_handle_conflict_rsv(rc, rsv, drp_evt, drp_ie, &mas); in uwb_drp_process_owner()
583 struct uwb_rc *rc = cnflt->rc; in uwb_cnflt_update_work() local
587 mutex_lock(&rc->rsvs_mutex); in uwb_cnflt_update_work()
592 bitmap_zero(rc->cnflt_alien_bitmap.bm, UWB_NUM_MAS); in uwb_cnflt_update_work()
594 list_for_each_entry(c, &rc->cnflt_alien_list, rc_node) { in uwb_cnflt_update_work()
595 bitmap_or(rc->cnflt_alien_bitmap.bm, rc->cnflt_alien_bitmap.bm, in uwb_cnflt_update_work()
599 queue_delayed_work(rc->rsv_workq, &rc->rsv_alien_bp_work, in uwb_cnflt_update_work()
603 mutex_unlock(&rc->rsvs_mutex); in uwb_cnflt_update_work()
610 queue_work(cnflt->rc->rsv_workq, &cnflt->cnflt_update_work); in uwb_cnflt_timer()
617 static void uwb_drp_handle_alien_drp(struct uwb_rc *rc, struct uwb_ie_drp *drp_ie) in uwb_drp_handle_alien_drp() argument
619 struct device *dev = &rc->uwb_dev.dev; in uwb_drp_handle_alien_drp()
626 list_for_each_entry(cnflt, &rc->cnflt_alien_list, rc_node) { in uwb_drp_handle_alien_drp()
647 cnflt->rc = rc; in uwb_drp_handle_alien_drp()
652 list_add_tail(&cnflt->rc_node, &rc->cnflt_alien_list); in uwb_drp_handle_alien_drp()
655 bitmap_or(rc->cnflt_alien_bitmap.bm, rc->cnflt_alien_bitmap.bm, mas.bm, UWB_NUM_MAS); in uwb_drp_handle_alien_drp()
657 queue_delayed_work(rc->rsv_workq, &rc->rsv_alien_bp_work, usecs_to_jiffies(delay_us)); in uwb_drp_handle_alien_drp()
663 static void uwb_drp_process_not_involved(struct uwb_rc *rc, in uwb_drp_process_not_involved() argument
670 uwb_drp_handle_all_conflict_rsv(rc, drp_evt, drp_ie, &mas); in uwb_drp_process_not_involved()
673 static void uwb_drp_process_involved(struct uwb_rc *rc, struct uwb_dev *src, in uwb_drp_process_involved() argument
679 rsv = uwb_rsv_find(rc, src, drp_ie); in uwb_drp_process_involved()
699 uwb_drp_process_target(rc, rsv, drp_ie, drp_evt); in uwb_drp_process_involved()
701 uwb_drp_process_owner(rc, rsv, src, drp_ie, drp_evt); in uwb_drp_process_involved()
706 static bool uwb_drp_involves_us(struct uwb_rc *rc, struct uwb_ie_drp *drp_ie) in uwb_drp_involves_us() argument
708 return uwb_dev_addr_cmp(&rc->uwb_dev.dev_addr, &drp_ie->dev_addr) == 0; in uwb_drp_involves_us()
714 static void uwb_drp_process(struct uwb_rc *rc, struct uwb_rc_evt_drp *drp_evt, in uwb_drp_process() argument
718 uwb_drp_handle_alien_drp(rc, drp_ie); in uwb_drp_process()
719 else if (uwb_drp_involves_us(rc, drp_ie)) in uwb_drp_process()
720 uwb_drp_process_involved(rc, src, drp_evt, drp_ie); in uwb_drp_process()
722 uwb_drp_process_not_involved(rc, drp_evt, drp_ie); in uwb_drp_process()
728 static void uwb_drp_availability_process(struct uwb_rc *rc, struct uwb_dev *src, in uwb_drp_availability_process() argument
740 void uwb_drp_process_all(struct uwb_rc *rc, struct uwb_rc_evt_drp *drp_evt, in uwb_drp_process_all() argument
743 struct device *dev = &rc->uwb_dev.dev; in uwb_drp_process_all()
755 uwb_drp_availability_process(rc, src_dev, (struct uwb_ie_drp_avail *)ie_hdr); in uwb_drp_process_all()
758 uwb_drp_process(rc, drp_evt, src_dev, (struct uwb_ie_drp *)ie_hdr); in uwb_drp_process_all()
805 struct device *dev = &evt->rc->uwb_dev.dev; in uwbd_evt_handle_rc_drp()
806 struct uwb_rc *rc = evt->rc; in uwbd_evt_handle_rc_drp() local
831 src_dev = uwb_dev_get_by_devaddr(rc, &src_addr); in uwbd_evt_handle_rc_drp()
844 mutex_lock(&rc->rsvs_mutex); in uwbd_evt_handle_rc_drp()
847 uwb_drp_process_all(rc, drp_evt, ielength, src_dev); in uwbd_evt_handle_rc_drp()
849 mutex_unlock(&rc->rsvs_mutex); in uwbd_evt_handle_rc_drp()