Lines Matching refs:local
13 static void prism2_info_commtallies16(local_info_t *local, unsigned char *buf, in prism2_info_commtallies16() argument
20 "info frame\n", local->dev->name, left); in prism2_info_commtallies16()
26 local->comm_tallies.name += le16_to_cpu(tallies->name) in prism2_info_commtallies16()
53 static void prism2_info_commtallies32(local_info_t *local, unsigned char *buf, in prism2_info_commtallies32() argument
60 "info frame\n", local->dev->name, left); in prism2_info_commtallies32()
66 local->comm_tallies.name += le32_to_cpu(tallies->name) in prism2_info_commtallies32()
93 static void prism2_info_commtallies(local_info_t *local, unsigned char *buf, in prism2_info_commtallies() argument
96 if (local->tallies32) in prism2_info_commtallies()
97 prism2_info_commtallies32(local, buf, left); in prism2_info_commtallies()
99 prism2_info_commtallies16(local, buf, left); in prism2_info_commtallies()
128 static void prism2_info_linkstatus(local_info_t *local, unsigned char *buf, in prism2_info_linkstatus() argument
136 local->last_join_time = 0; in prism2_info_linkstatus()
140 "length %d\n", local->dev->name, left); in prism2_info_linkstatus()
144 non_sta_mode = local->iw_mode == IW_MODE_MASTER || in prism2_info_linkstatus()
145 local->iw_mode == IW_MODE_REPEAT || in prism2_info_linkstatus()
146 local->iw_mode == IW_MODE_MONITOR; in prism2_info_linkstatus()
151 local->dev->name, val, hfa384x_linkstatus_str(val)); in prism2_info_linkstatus()
155 netif_carrier_on(local->dev); in prism2_info_linkstatus()
156 netif_carrier_on(local->ddev); in prism2_info_linkstatus()
161 set_bit(PRISM2_INFO_PENDING_LINKSTATUS, &local->pending_info); in prism2_info_linkstatus()
162 local->prev_link_status = val; in prism2_info_linkstatus()
163 schedule_work(&local->info_queue); in prism2_info_linkstatus()
167 static void prism2_host_roaming(local_info_t *local) in prism2_host_roaming() argument
170 struct net_device *dev = local->dev; in prism2_host_roaming()
175 if (local->last_join_time && in prism2_host_roaming()
176 time_before(jiffies, local->last_join_time + 10 * HZ)) { in prism2_host_roaming()
191 spin_lock_irqsave(&local->lock, flags); in prism2_host_roaming()
192 if (local->last_scan_results == NULL || in prism2_host_roaming()
193 local->last_scan_results_count == 0) { in prism2_host_roaming()
194 spin_unlock_irqrestore(&local->lock, flags); in prism2_host_roaming()
200 selected = &local->last_scan_results[0]; in prism2_host_roaming()
202 if (local->preferred_ap[0] || local->preferred_ap[1] || in prism2_host_roaming()
203 local->preferred_ap[2] || local->preferred_ap[3] || in prism2_host_roaming()
204 local->preferred_ap[4] || local->preferred_ap[5]) { in prism2_host_roaming()
207 dev->name, local->preferred_ap); in prism2_host_roaming()
208 for (i = 0; i < local->last_scan_results_count; i++) { in prism2_host_roaming()
209 entry = &local->last_scan_results[i]; in prism2_host_roaming()
210 if (memcmp(local->preferred_ap, entry->bssid, 6) == 0) in prism2_host_roaming()
222 spin_unlock_irqrestore(&local->lock, flags); in prism2_host_roaming()
227 if (local->func->set_rid(dev, HFA384X_RID_JOINREQUEST, &req, in prism2_host_roaming()
231 local->last_join_time = jiffies; in prism2_host_roaming()
235 static void hostap_report_scan_complete(local_info_t *local) in hostap_report_scan_complete() argument
243 wireless_send_event(local->dev, SIOCGIWSCAN, &wrqu, NULL); in hostap_report_scan_complete()
247 local->scan_timestamp = 0; in hostap_report_scan_complete()
252 static void prism2_info_scanresults(local_info_t *local, unsigned char *buf, in prism2_info_scanresults() argument
263 "length %d\n", local->dev->name, left); in prism2_info_scanresults()
286 spin_lock_irqsave(&local->lock, flags); in prism2_info_scanresults()
287 local->last_scan_type = PRISM2_SCAN; in prism2_info_scanresults()
288 prev = local->last_scan_results; in prism2_info_scanresults()
289 local->last_scan_results = results; in prism2_info_scanresults()
290 local->last_scan_results_count = new_count; in prism2_info_scanresults()
291 spin_unlock_irqrestore(&local->lock, flags); in prism2_info_scanresults()
294 hostap_report_scan_complete(local); in prism2_info_scanresults()
297 set_bit(PRISM2_INFO_PENDING_SCANRESULTS, &local->pending_info); in prism2_info_scanresults()
298 schedule_work(&local->info_queue); in prism2_info_scanresults()
303 static void prism2_info_hostscanresults(local_info_t *local, in prism2_info_hostscanresults() argument
312 wake_up_interruptible(&local->hostscan_wq); in prism2_info_hostscanresults()
316 "length %d\n", local->dev->name, left); in prism2_info_hostscanresults()
324 "hostscanresults\n", local->dev->name); in prism2_info_hostscanresults()
349 local->dev->name, left, result_size); in prism2_info_hostscanresults()
352 spin_lock_irqsave(&local->lock, flags); in prism2_info_hostscanresults()
353 local->last_scan_type = PRISM2_HOSTSCAN; in prism2_info_hostscanresults()
354 prev = local->last_scan_results; in prism2_info_hostscanresults()
355 local->last_scan_results = results; in prism2_info_hostscanresults()
356 local->last_scan_results_count = new_count; in prism2_info_hostscanresults()
357 spin_unlock_irqrestore(&local->lock, flags); in prism2_info_hostscanresults()
360 hostap_report_scan_complete(local); in prism2_info_hostscanresults()
366 void hostap_info_process(local_info_t *local, struct sk_buff *skb) in hostap_info_process() argument
381 prism2_info_commtallies(local, buf, left); in hostap_info_process()
386 prism2_info_linkstatus(local, buf, left); in hostap_info_process()
390 prism2_info_scanresults(local, buf, left); in hostap_info_process()
394 prism2_info_hostscanresults(local, buf, left); in hostap_info_process()
401 local->dev->name, le16_to_cpu(info->len), in hostap_info_process()
414 static void handle_info_queue_linkstatus(local_info_t *local) in handle_info_queue_linkstatus() argument
416 int val = local->prev_link_status; in handle_info_queue_linkstatus()
425 if (local->func->get_rid(local->dev, HFA384X_RID_CURRENTBSSID, in handle_info_queue_linkstatus()
426 local->bssid, ETH_ALEN, 1) < 0) { in handle_info_queue_linkstatus()
428 "LinkStatus event\n", local->dev->name); in handle_info_queue_linkstatus()
431 local->dev->name, in handle_info_queue_linkstatus()
432 (unsigned char *) local->bssid); in handle_info_queue_linkstatus()
433 if (local->wds_type & HOSTAP_WDS_AP_CLIENT) in handle_info_queue_linkstatus()
434 hostap_add_sta(local->ap, local->bssid); in handle_info_queue_linkstatus()
439 netif_carrier_on(local->dev); in handle_info_queue_linkstatus()
440 netif_carrier_on(local->ddev); in handle_info_queue_linkstatus()
441 memcpy(wrqu.ap_addr.sa_data, local->bssid, ETH_ALEN); in handle_info_queue_linkstatus()
443 netif_carrier_off(local->dev); in handle_info_queue_linkstatus()
444 netif_carrier_off(local->ddev); in handle_info_queue_linkstatus()
455 if (connected || local->prev_linkstatus_connected) in handle_info_queue_linkstatus()
456 wireless_send_event(local->dev, SIOCGIWAP, &wrqu, NULL); in handle_info_queue_linkstatus()
457 local->prev_linkstatus_connected = connected; in handle_info_queue_linkstatus()
461 static void handle_info_queue_scanresults(local_info_t *local) in handle_info_queue_scanresults() argument
463 if (local->host_roaming == 1 && local->iw_mode == IW_MODE_INFRA) in handle_info_queue_scanresults()
464 prism2_host_roaming(local); in handle_info_queue_scanresults()
466 if (local->host_roaming == 2 && local->iw_mode == IW_MODE_INFRA && in handle_info_queue_scanresults()
467 !is_zero_ether_addr(local->preferred_ap)) { in handle_info_queue_scanresults()
475 prism2_host_roaming(local); in handle_info_queue_scanresults()
484 local_info_t *local = container_of(work, local_info_t, info_queue); in handle_info_queue() local
487 &local->pending_info)) in handle_info_queue()
488 handle_info_queue_linkstatus(local); in handle_info_queue()
491 &local->pending_info)) in handle_info_queue()
492 handle_info_queue_scanresults(local); in handle_info_queue()
497 void hostap_info_init(local_info_t *local) in hostap_info_init() argument
499 skb_queue_head_init(&local->info_list); in hostap_info_init()
501 INIT_WORK(&local->info_queue, handle_info_queue); in hostap_info_init()