void ath_net80211_uapsd_creditupdate(ieee80211_handle_t ieee) { #ifdef MAGPIE_HIF_GMAC struct ieee80211com *ic = NET80211_HANDLE(ieee); struct ath_softc_net80211 *scn = ATH_SOFTC_NET80211(ic); ieee80211_iterate_node(ic, ath_net80211_drain_uapsd, scn); #endif }
int wlan_set_device_param(wlan_dev_t ic, ieee80211_device_param param, u_int32_t val) { int retval=EOK; switch(param) { case IEEE80211_DEVICE_TX_CHAIN_MASK: case IEEE80211_DEVICE_TX_CHAIN_MASK_LEGACY: if(ic->ic_set_chain_mask(ic,param,val) == 0) { ic->ic_tx_chainmask = val; } else { retval=EINVAL; } break; case IEEE80211_DEVICE_RX_CHAIN_MASK: case IEEE80211_DEVICE_RX_CHAIN_MASK_LEGACY: if(ic->ic_set_chain_mask(ic,param,val) == 0) { ic->ic_rx_chainmask = val; } else { retval=EINVAL; } break; case IEEE80211_DEVICE_PROTECTION_MODE: if (val > IEEE80211_PROT_RTSCTS) { retval=EINVAL; } else { ic->ic_protmode = val; } break; case IEEE80211_DEVICE_NUM_TX_CHAIN: case IEEE80211_DEVICE_NUM_RX_CHAIN: case IEEE80211_DEVICE_COUNTRYCODE: /* read only */ retval=EINVAL; break; case IEEE80211_DEVICE_BMISS_LIMIT: ic->ic_bmisstimeout = val * ic->ic_intval; break; case IEEE80211_DEVICE_BLKDFSCHAN: if (val == 0) { ieee80211_ic_block_dfschan_clear(ic); } else { ieee80211_ic_block_dfschan_set(ic); } break; case IEEE80211_DEVICE_GREEN_AP_PS_ENABLE: ic->ic_green_ap_set_enable(ic, val); break; case IEEE80211_DEVICE_GREEN_AP_PS_TIMEOUT: ic->ic_green_ap_set_transition_time(ic, val); break; case IEEE80211_DEVICE_GREEN_AP_PS_ON_TIME: ic->ic_green_ap_set_on_time(ic, val); break; case IEEE80211_DEVICE_GREEN_AP_ENABLE_PRINT: ic->ic_green_ap_set_print_level(ic, val); break; case IEEE80211_DEVICE_CWM_EXTPROTMODE: if (val < IEEE80211_CWM_EXTPROTMAX) { ic->ic_cwm_set_extprotmode(ic, val); } else { retval = EINVAL; } break; case IEEE80211_DEVICE_CWM_EXTPROTSPACING: if (val < IEEE80211_CWM_EXTPROTSPACINGMAX) { ic->ic_cwm_set_extprotspacing(ic, val); } else { retval = EINVAL; } break; case IEEE80211_DEVICE_CWM_ENABLE: ic->ic_cwm_set_enable(ic, val); break; case IEEE80211_DEVICE_CWM_EXTBUSYTHRESHOLD: ic->ic_cwm_set_extbusythreshold(ic, val); break; case IEEE80211_DEVICE_DOTH: if (val == 0) { ieee80211_ic_doth_clear(ic); } else { ieee80211_ic_doth_set(ic); } break; #if UMAC_SUPPORT_TDLS_CHAN_SWITCH case IEEE80211_DEVICE_OFF_CHANNEL_SUPPORT: if (val == 0) { ieee80211_ic_off_channel_support_clear(ic); } else { if (ic->ic_tsf_timer) { ieee80211_ic_off_channel_support_set(ic); } else { printk("%s: Cannot enable off-channel support ic_tsf_timer=%p", __func__, ic->ic_tsf_timer); } } break; #endif case IEEE80211_DEVICE_ADDBA_MODE: ic->ic_addba_mode = val; /* * Clear any user defined ADDBA response codes before switching modes. */ ieee80211_iterate_node(ic, ieee80211_addba_clearresponse, ic); break; case IEEE80211_DEVICE_MULTI_CHANNEL: if (!val) { /* Disable Multi-Channel */ retval = ieee80211_resmgr_setmode(ic->ic_resmgr, IEEE80211_RESMGR_MODE_SINGLE_CHANNEL); } else if (ic->ic_caps_ext & IEEE80211_CEXT_MULTICHAN) { retval = ieee80211_resmgr_setmode(ic->ic_resmgr, IEEE80211_RESMGR_MODE_MULTI_CHANNEL); } else { printk("%s: Unable to enable Multi-Channel Scheduling since device/driver don't support it.\n", __func__); retval = EINVAL; } break; case IEEE80211_DEVICE_MAX_AMSDU_SIZE: ic->ic_amsdu_max_size = val; break; #if ATH_SUPPORT_IBSS_HT case IEEE80211_DEVICE_HT20ADHOC: if (val == 0) { ieee80211_ic_ht20Adhoc_clear(ic); } else { ieee80211_ic_ht20Adhoc_set(ic); } break; case IEEE80211_DEVICE_HT40ADHOC: if (val == 0) { ieee80211_ic_ht40Adhoc_clear(ic); } else { ieee80211_ic_ht40Adhoc_set(ic); } break; case IEEE80211_DEVICE_HTADHOCAGGR: if (val == 0) { ieee80211_ic_htAdhocAggr_clear(ic); } else { ieee80211_ic_htAdhocAggr_set(ic); } break; #endif /* end of #if ATH_SUPPORT_IBSS_HT */ case IEEE80211_DEVICE_PWRTARGET: ieee80211com_set_curchanmaxpwr(ic, val); break; case IEEE80211_DEVICE_P2P: if (val == 0) { ieee80211_ic_p2pDevEnable_clear(ic); } else if (ic->ic_caps_ext & IEEE80211_CEXT_P2P) { ieee80211_ic_p2pDevEnable_set(ic); } else { printk("%s: Unable to enable P2P since device/driver don't support it.\n", __func__); retval = EINVAL; } break; case IEEE80211_DEVICE_OVERRIDE_SCAN_PROBERESPONSE_IE: if (val) { ieee80211_ic_override_proberesp_ie_set(ic); } else { ieee80211_ic_override_proberesp_ie_clear(ic); } break; case IEEE80211_DEVICE_2G_CSA: if (val == 0) { ieee80211_ic_2g_csa_clear(ic); } else { ieee80211_ic_2g_csa_set(ic); } break; default: printk("%s: Error: invalid param=%d.\n", __func__, param); } return retval; }