Lines Matching full:radio

235 	 * If we timed out, the AP or the local radio may be busy.  in wpa_supplicant_timeout()
655 * Need to remove any pending gas-query radio work before the in wpa_supplicant_cleanup()
658 * to cancel such pending radio works and once the pending gas-query in wpa_supplicant_cleanup()
659 * radio work eventually gets removed, the deinit notification call to in wpa_supplicant_cleanup()
662 if (wpa_s->radio) in wpa_supplicant_cleanup()
6626 /* freqs are specified for the radio work */ in wpas_get_bands()
6663 struct wpa_radio *radio; in radio_add_interface() local
6666 radio = iface->radio; in radio_add_interface()
6667 if (radio && os_strcmp(rn, radio->name) == 0) { in radio_add_interface()
6668 wpa_printf(MSG_DEBUG, "Add interface %s to existing radio %s", in radio_add_interface()
6670 dl_list_add(&radio->ifaces, &wpa_s->radio_list); in radio_add_interface()
6671 return radio; in radio_add_interface()
6677 wpa_printf(MSG_DEBUG, "Add interface %s to a new radio %s", in radio_add_interface()
6679 radio = os_zalloc(sizeof(*radio)); in radio_add_interface()
6680 if (radio == NULL) in radio_add_interface()
6684 os_strlcpy(radio->name, rn, sizeof(radio->name)); in radio_add_interface()
6685 dl_list_init(&radio->ifaces); in radio_add_interface()
6686 dl_list_init(&radio->work); in radio_add_interface()
6687 dl_list_add(&radio->ifaces, &wpa_s->radio_list); in radio_add_interface()
6689 return radio; in radio_add_interface()
6697 …wpa_dbg(work->wpa_s, MSG_INFO, "Freeing radio work '%s'@%p (started=%d) that is marked as scan_wor… in radio_work_free()
6705 …wpa_dbg(work->wpa_s, MSG_INFO, "Freeing radio work '%s'@%p (started=%d) that is marked as p2p_scan… in radio_work_free()
6712 work->wpa_s->radio->num_active_works--; in radio_work_free()
6716 work->wpa_s->radio->num_active_works); in radio_work_free()
6738 static struct wpa_radio_work * radio_work_get_next_work(struct wpa_radio *radio) in radio_work_get_next_work() argument
6744 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, list) { in radio_work_get_next_work()
6753 radio->num_active_works = 0; in radio_work_get_next_work()
6754 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, in radio_work_get_next_work()
6757 external_scan_running(radio) && in radio_work_get_next_work()
6770 * do not parallelize them with other radio works. in radio_work_get_next_work()
6773 "Do not parallelize radio work with %s", in radio_work_get_next_work()
6778 dl_list_for_each(tmp, &radio->work, struct wpa_radio_work, list) { in radio_work_get_next_work()
6801 * Check that the radio works are distinct and in radio_work_get_next_work()
6813 external_scan_running(radio) && in radio_work_get_next_work()
6826 /* Did not find a radio work to schedule in parallel. */ in radio_work_get_next_work()
6833 struct wpa_radio *radio = eloop_ctx; in radio_start_next_work() local
6838 work = dl_list_first(&radio->work, struct wpa_radio_work, list); in radio_start_next_work()
6840 radio->num_active_works = 0; in radio_start_next_work()
6844 wpa_s = dl_list_first(&radio->ifaces, struct wpa_supplicant, in radio_start_next_work()
6852 if (wpa_s && external_scan_running(wpa_s->radio)) { in radio_start_next_work()
6853 wpa_printf(MSG_DEBUG, "Delay radio work start until externally triggered scan completes"); in radio_start_next_work()
6858 if (radio->num_active_works < MAX_ACTIVE_WORKS) { in radio_start_next_work()
6860 work = radio_work_get_next_work(radio); in radio_start_next_work()
6870 "Starting radio work '%s'@%p after %ld.%06ld second wait", in radio_start_next_work()
6874 radio->num_active_works++; in radio_start_next_work()
6879 radio->num_active_works < MAX_ACTIVE_WORKS) in radio_start_next_work()
6885 * This function removes both started and pending radio works running on
6886 * the provided interface's radio.
6887 * Prior to the removal of the radio work, its callback (cb) is called with
6892 * @remove_all: 1 to remove all the works on this radio, 0 to remove only
6899 struct wpa_radio *radio = wpa_s->radio; in radio_remove_works() local
6901 dl_list_for_each_safe(work, tmp, &radio->work, struct wpa_radio_work, in radio_remove_works()
6910 wpa_dbg(wpa_s, MSG_DEBUG, "Remove radio work '%s'@%p%s", in radio_remove_works()
6924 struct wpa_radio *radio = wpa_s->radio; in radio_remove_pending_work() local
6926 dl_list_for_each(work, &radio->work, struct wpa_radio_work, list) { in radio_remove_pending_work()
6929 wpa_dbg(wpa_s, MSG_DEBUG, "Free pending radio work '%s'@%p%s", in radio_remove_pending_work()
6939 struct wpa_radio *radio = wpa_s->radio; in radio_remove_interface() local
6941 if (!radio) in radio_remove_interface()
6944 wpa_printf(MSG_DEBUG, "Remove interface %s from radio %s", in radio_remove_interface()
6945 wpa_s->ifname, radio->name); in radio_remove_interface()
6950 if (wpa_s == radio->external_scan_req_interface) in radio_remove_interface()
6951 radio->external_scan_req_interface = NULL; in radio_remove_interface()
6952 wpa_s->radio = NULL; in radio_remove_interface()
6953 if (!dl_list_empty(&radio->ifaces)) in radio_remove_interface()
6954 return; /* Interfaces remain for this radio */ in radio_remove_interface()
6956 wpa_printf(MSG_DEBUG, "Remove radio %s", radio->name); in radio_remove_interface()
6957 eloop_cancel_timeout(radio_start_next_work, radio, NULL); in radio_remove_interface()
6958 os_free(radio); in radio_remove_interface()
6964 struct wpa_radio *radio = wpa_s->radio; in radio_work_check_next() local
6966 if (dl_list_empty(&radio->work)) in radio_work_check_next()
6970 "External radio work in progress - delay start of pending item"); in radio_work_check_next()
6973 eloop_cancel_timeout(radio_start_next_work, radio, NULL); in radio_work_check_next()
6974 eloop_register_timeout(0, 0, radio_start_next_work, radio, NULL); in radio_work_check_next()
6979 * radio_add_work - Add a radio work item
6984 * @cb: Callback function for indicating when radio is available
6989 * exclusive radio control. Once the radio is available, the registered callback
6991 * radio operation has been completed, so that the radio is freed for other
6994 * the radio operation, i.e., it must free any resources allocated for the radio
6998 * offchannel operation will occur. This may allow multiple radio work
7001 * requires exclusive control of the radio.
7008 struct wpa_radio *radio = wpa_s->radio; in radio_add_work() local
7015 wpa_dbg(wpa_s, MSG_DEBUG, "Add radio work '%s'@%p", type, work); in radio_add_work()
7033 was_empty = dl_list_empty(&wpa_s->radio->work); in radio_add_work()
7035 dl_list_add(&wpa_s->radio->work, &work->list); in radio_add_work()
7037 dl_list_add_tail(&wpa_s->radio->work, &work->list); in radio_add_work()
7039 wpa_dbg(wpa_s, MSG_DEBUG, "First radio work item in the queue - schedule start immediately"); in radio_add_work()
7042 && radio->num_active_works < MAX_ACTIVE_WORKS) { in radio_add_work()
7044 "Try to schedule a radio work (num_active_works=%u)", in radio_add_work()
7045 radio->num_active_works); in radio_add_work()
7054 * radio_work_done - Indicate that a radio work item has been completed
7068 wpa_dbg(wpa_s, MSG_DEBUG, "Radio work '%s'@%p %s in %ld.%06ld seconds", in radio_work_done()
7081 struct wpa_radio *radio = wpa_s->radio; in radio_work_pending() local
7083 dl_list_for_each(work, &radio->work, struct wpa_radio_work, list) { in radio_work_pending()
7139 wpa_s->radio = radio_add_interface(wpa_s, rn); in wpas_init_driver()
7140 if (wpa_s->radio == NULL) in wpas_init_driver()
9005 * are using the same radio as the current interface, and in addition, get
9018 "Determining shared radio frequencies (max len %u)", len); in get_shared_radio_freqs_data()
9021 dl_list_for_each(ifs, &wpa_s->radio->ifaces, struct wpa_supplicant, in get_shared_radio_freqs_data()
9063 * are using the same radio as the current interface.