#endif
unsigned int processDot11Hdr = 0;
-int bmienable = BMIENABLE_DEFAULT;
char ifname[IFNAMSIZ] = {0,};
module_param_string(ifname, ifname, sizeof(ifname), 0644);
module_param(wlaninitmode, int, 0644);
-module_param(bmienable, int, 0644);
module_param(bypasswmi, bool, 0644);
module_param(debuglevel, uint, 0644);
module_param(tspecCompliance, int, 0644);
}
source = "softmac file";
}
- A_FREE(macbuf);
+ kfree(macbuf);
}
A_RELEASE_FIRMWARE(softmac_entry);
}
strcpy(dev->name, name);
}
-#ifdef SET_MODULE_OWNER
- SET_MODULE_OWNER(dev);
-#endif
-
#ifdef CONFIG_CHECKSUM_OFFLOAD
if(csumOffload){
dev->features |= NETIF_F_IP_CSUM; /*advertise kernel capability to do TCP/UDP CSUM offload for IPV4*/
return;
}
+static int __ath6kl_init_netdev(struct net_device *dev)
+{
+ int r;
+
+ rtnl_lock();
+ r = ar6000_init(dev);
+ rtnl_unlock();
+
+ if (r) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000_avail: ar6000_init\n"));
+ return r;
+ }
+
+ return 0;
+}
+
+#ifdef HTC_RAW_INTERFACE
+static int ath6kl_init_netdev_wmi(struct net_device *dev)
+{
+ if (!eppingtest && bypasswmi)
+ return 0;
+
+ return __ath6kl_init_netdev(dev);
+}
+#else
+static int ath6kl_init_netdev_wmi(struct net_device *dev)
+{
+ return __ath6kl_init_netdev(dev);
+}
+#endif
+
+static int ath6kl_init_netdev(struct ar6_softc *ar)
+{
+ int r;
+
+ r = ar6000_sysfs_bmi_get_config(ar, wlaninitmode);
+ if (r) {
+ AR_DEBUG_PRINTF(ATH_DEBUG_ERR,
+ ("ar6000_avail: "
+ "ar6000_sysfs_bmi_get_config failed\n"));
+ return r;
+ }
+
+ return ath6kl_init_netdev_wmi(ar->arNetDev);
+}
+
/*
* HTC Event handlers
*/
#ifdef ATH6K_CONFIG_CFG80211
struct wireless_dev *wdev;
#endif /* ATH6K_CONFIG_CFG80211 */
- int init_status = 0;
+ int r = 0;
struct hif_device_os_device_info osDevInfo;
memset(&osDevInfo, 0, sizeof(osDevInfo));
BMIInit();
- if (bmienable) {
- ar6000_sysfs_bmi_init(ar);
- }
+ ar6000_sysfs_bmi_init(ar);
{
struct bmi_target_info targ_info;
- if (BMIGetTargetInfo(ar->arHifDevice, &targ_info) != 0) {
- init_status = A_ERROR;
+ r = BMIGetTargetInfo(ar->arHifDevice, &targ_info);
+ if (r)
goto avail_ev_failed;
- }
ar->arVersion.target_ver = targ_info.target_ver;
ar->arTargetType = targ_info.target_type;
- /* do any target-specific preparation that can be done through BMI */
- if (ar6000_prepare_target(ar->arHifDevice,
+ /* do any target-specific preparation that can be done through BMI */
+ r = ar6000_prepare_target(ar->arHifDevice,
targ_info.target_type,
- targ_info.target_ver) != 0) {
- init_status = A_ERROR;
+ targ_info.target_ver);
+ if (r)
goto avail_ev_failed;
- }
}
- if (ar6000_configure_target(ar) != 0) {
- init_status = A_ERROR;
+ r = ar6000_configure_target(ar);
+ if (r)
goto avail_ev_failed;
- }
A_MEMZERO(&htcInfo,sizeof(htcInfo));
htcInfo.pContext = ar;
ar->arHtcTarget = HTCCreate(ar->arHifDevice,&htcInfo);
- if (ar->arHtcTarget == NULL) {
- init_status = A_ERROR;
+ if (!ar->arHtcTarget) {
+ r = -ENOMEM;
goto avail_ev_failed;
}
#endif
#ifdef ATH_AR6K_11N_SUPPORT
- if((ar->aggr_cntxt = aggr_init(ar6000_alloc_netbufs)) == NULL) {
+ ar->aggr_cntxt = aggr_init(ar6000_alloc_netbufs);
+ if (!ar->aggr_cntxt) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("%s() Failed to initialize aggr.\n", __func__));
- init_status = A_ERROR;
+ r = -ENOMEM;
goto avail_ev_failed;
}
/* when the module is unloaded. */
ar6000_devices[device_index] = dev;
- /* Don't install the init function if BMI is requested */
- if (!bmienable) {
- ar6000_netdev_ops.ndo_init = ar6000_init;
- } else {
- AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("BMI enabled: %d\n", wlaninitmode));
- if ((wlaninitmode == WLAN_INIT_MODE_UDEV) ||
- (wlaninitmode == WLAN_INIT_MODE_DRV))
- {
- int status = 0;
- do {
- if ((status = ar6000_sysfs_bmi_get_config(ar, wlaninitmode)) != 0)
- {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000_avail: ar6000_sysfs_bmi_get_config failed\n"));
- break;
- }
-#ifdef HTC_RAW_INTERFACE
- if (!eppingtest && bypasswmi) {
- break; /* Don't call ar6000_init for ART */
- }
-#endif
- rtnl_lock();
- status = (ar6000_init(dev)==0) ? 0 : A_ERROR;
- rtnl_unlock();
- if (status) {
- AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000_avail: ar6000_init\n"));
- }
- } while (false);
-
- if (status) {
- init_status = status;
- goto avail_ev_failed;
- }
- }
+ AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("BMI enabled: %d\n", wlaninitmode));
+ if ((wlaninitmode == WLAN_INIT_MODE_UDEV) ||
+ (wlaninitmode == WLAN_INIT_MODE_DRV)) {
+ r = ath6kl_init_netdev(ar);
+ if (r)
+ goto avail_ev_failed;
}
/* This runs the init function if registered */
- if (register_netdev(dev)) {
+ r = register_netdev(dev);
+ if (r) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR,("ar6000_avail: register_netdev failed\n"));
ar6000_destroy(dev, 0);
- return A_ERROR;
+ return r;
}
is_netdev_registered = 1;
(unsigned long)ar));
avail_ev_failed :
- if (init_status) {
- if (bmienable) {
- ar6000_sysfs_bmi_deinit(ar);
- }
- }
+ if (r)
+ ar6000_sysfs_bmi_deinit(ar);
- return init_status;
+ return r;
}
static void ar6000_target_failure(void *Instance, int Status)
/* cleanup any allocated AMSDU buffers */
ar6000_cleanup_amsdu_rxbufs(ar);
- if (bmienable) {
- ar6000_sysfs_bmi_deinit(ar);
- }
+ ar6000_sysfs_bmi_deinit(ar);
/* Cleanup BMI */
BMICleanup();
#ifdef HTC_RAW_INTERFACE
if (ar->arRawHtc) {
- A_FREE(ar->arRawHtc);
+ kfree(ar->arRawHtc);
ar->arRawHtc = NULL;
}
#endif
memcpy(pmkcand->bssid.sa_data, info->bssid, ATH_MAC_LEN);
wrqu.data.length = sizeof(struct iw_pmkid_cand);
wireless_send_event(ar->arNetDev, IWEVPMKIDCAND, &wrqu, (char *)pmkcand);
- A_FREE(pmkcand);
+ kfree(pmkcand);
#else /* WIRELESS_EXT >= 18 */
snprintf(buf, sizeof(buf), "%s%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x",
tag,
A_MEMZERO(&wrqu, sizeof(wrqu));
wrqu.data.length = size;
wireless_send_event(ar->arNetDev, IWEVCUSTOM, &wrqu, buf);
- A_FREE(buf);
+ kfree(buf);
#endif
wrqu.data.length = size;
wireless_send_event(ar->arNetDev, IWEVGENIE, &wrqu, buf);
- A_FREE(buf);
+ kfree(buf);
#endif /* (WIRELESS_EXT >= 18) */