]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/staging/winbond/wblinux.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging-2.6
[linux-2.6-omap-h63xx.git] / drivers / staging / winbond / wblinux.c
index 2eade5a47b198aa61e671b1085b7fde258f5e4c4..4ed45e48831871c494eea1dfac594143fa230794 100644 (file)
@@ -25,11 +25,11 @@ EncapAtomicInc(PADAPTER Adapter, void* pAtomic)
 {
        PWBLINUX pWbLinux = &Adapter->WbLinux;
        u32     ltmp;
-       PULONG  pltmp = (PULONG)pAtomic;
-       OS_SPIN_LOCK_ACQUIRED( &pWbLinux->AtomicSpinLock );
+       u32 *   pltmp = (u32 *)pAtomic;
+       spin_lock_irq( &pWbLinux->AtomicSpinLock );
        (*pltmp)++;
        ltmp = (*pltmp);
-       OS_SPIN_LOCK_RELEASED( &pWbLinux->AtomicSpinLock );
+       spin_unlock_irq( &pWbLinux->AtomicSpinLock );
        return ltmp;
 }
 
@@ -38,11 +38,11 @@ EncapAtomicDec(PADAPTER Adapter, void* pAtomic)
 {
        PWBLINUX pWbLinux = &Adapter->WbLinux;
        u32     ltmp;
-       PULONG  pltmp = (PULONG)pAtomic;
-       OS_SPIN_LOCK_ACQUIRED( &pWbLinux->AtomicSpinLock );
+       u32 *   pltmp = (u32 *)pAtomic;
+       spin_lock_irq( &pWbLinux->AtomicSpinLock );
        (*pltmp)--;
        ltmp = (*pltmp);
-       OS_SPIN_LOCK_RELEASED( &pWbLinux->AtomicSpinLock );
+       spin_unlock_irq( &pWbLinux->AtomicSpinLock );
        return ltmp;
 }
 
@@ -51,8 +51,8 @@ WBLINUX_Initial(PADAPTER Adapter)
 {
        PWBLINUX pWbLinux = &Adapter->WbLinux;
 
-       OS_SPIN_LOCK_ALLOCATE( &pWbLinux->SpinLock );
-       OS_SPIN_LOCK_ALLOCATE( &pWbLinux->AtomicSpinLock );
+       spin_lock_init( &pWbLinux->SpinLock );
+       spin_lock_init( &pWbLinux->AtomicSpinLock );
        return TRUE;
 }
 
@@ -79,7 +79,6 @@ void
 WBLINUX_Destroy(PADAPTER Adapter)
 {
        WBLINUX_stop( Adapter );
-       OS_SPIN_LOCK_FREE( &pWbNdis->SpinLock );
 #ifdef _PE_USB_INI_DUMP_
        WBDEBUG(("[w35und] unregister_netdev!\n"));
 #endif
@@ -142,119 +141,118 @@ unsigned char
 WbWLanInitialize(PADAPTER Adapter)
 {
        phw_data_t      pHwData;
-       PUCHAR          pMacAddr, pMacAddr2;
+       u8              *pMacAddr;
+       u8              *pMacAddr2;
        u32             InitStep = 0;
        u8              EEPROM_region;
        u8              HwRadioOff;
 
-       do {
-               //
-               // Setting default value for Linux
-               //
-               Adapter->sLocalPara.region_INF = REGION_AUTO;
-               Adapter->sLocalPara.TxRateMode = RATE_AUTO;
-               psLOCAL->bMacOperationMode = MODE_802_11_BG;    // B/G mode
-               Adapter->Mds.TxRTSThreshold = DEFAULT_RTSThreshold;
-               Adapter->Mds.TxFragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD;
-               hal_set_phy_type( &Adapter->sHwData, RF_WB_242_1 );
-               Adapter->sLocalPara.MTUsize = MAX_ETHERNET_PACKET_SIZE;
-               psLOCAL->bPreambleMode = AUTO_MODE;
-               Adapter->sLocalPara.RadioOffStatus.boSwRadioOff = FALSE;
-               pHwData = &Adapter->sHwData;
-               hal_set_phy_type( pHwData, RF_DECIDE_BY_INF );
-
-               //
-               // Initial each module and variable
-               //
-               if (!WBLINUX_Initial(Adapter)) {
+       //
+       // Setting default value for Linux
+       //
+       Adapter->sLocalPara.region_INF = REGION_AUTO;
+       Adapter->sLocalPara.TxRateMode = RATE_AUTO;
+       psLOCAL->bMacOperationMode = MODE_802_11_BG;    // B/G mode
+       Adapter->Mds.TxRTSThreshold = DEFAULT_RTSThreshold;
+       Adapter->Mds.TxFragmentThreshold = DEFAULT_FRAGMENT_THRESHOLD;
+       hal_set_phy_type( &Adapter->sHwData, RF_WB_242_1 );
+       Adapter->sLocalPara.MTUsize = MAX_ETHERNET_PACKET_SIZE;
+       psLOCAL->bPreambleMode = AUTO_MODE;
+       Adapter->sLocalPara.RadioOffStatus.boSwRadioOff = FALSE;
+       pHwData = &Adapter->sHwData;
+       hal_set_phy_type( pHwData, RF_DECIDE_BY_INF );
+
+       //
+       // Initial each module and variable
+       //
+       if (!WBLINUX_Initial(Adapter)) {
 #ifdef _PE_USB_INI_DUMP_
-                       WBDEBUG(("[w35und]WBNDIS initialization failed\n"));
+               WBDEBUG(("[w35und]WBNDIS initialization failed\n"));
 #endif
-                       break;
-               }
+               goto error;
+       }
 
-               // Initial Software variable
-               Adapter->sLocalPara.ShutDowned = FALSE;
-
-               //added by ws for wep key error detection
-               Adapter->sLocalPara.bWepKeyError= FALSE;
-               Adapter->sLocalPara.bToSelfPacketReceived = FALSE;
-               Adapter->sLocalPara.WepKeyDetectTimerCount= 2 * 100; /// 2 seconds
-
-               // Initial USB hal
-               InitStep = 1;
-               pHwData = &Adapter->sHwData;
-               if (!hal_init_hardware(pHwData, Adapter))
-                       break;
-
-               EEPROM_region = hal_get_region_from_EEPROM( pHwData );
-               if (EEPROM_region != REGION_AUTO)
-                       psLOCAL->region = EEPROM_region;
-               else {
-                       if (psLOCAL->region_INF != REGION_AUTO)
-                               psLOCAL->region = psLOCAL->region_INF;
-                       else
-                               psLOCAL->region = REGION_USA;   //default setting
-               }
+       // Initial Software variable
+       Adapter->sLocalPara.ShutDowned = FALSE;
+
+       //added by ws for wep key error detection
+       Adapter->sLocalPara.bWepKeyError= FALSE;
+       Adapter->sLocalPara.bToSelfPacketReceived = FALSE;
+       Adapter->sLocalPara.WepKeyDetectTimerCount= 2 * 100; /// 2 seconds
+
+       // Initial USB hal
+       InitStep = 1;
+       pHwData = &Adapter->sHwData;
+       if (!hal_init_hardware(pHwData, Adapter))
+               goto error;
+
+       EEPROM_region = hal_get_region_from_EEPROM( pHwData );
+       if (EEPROM_region != REGION_AUTO)
+               psLOCAL->region = EEPROM_region;
+       else {
+               if (psLOCAL->region_INF != REGION_AUTO)
+                       psLOCAL->region = psLOCAL->region_INF;
+               else
+                       psLOCAL->region = REGION_USA;   //default setting
+       }
 
-               // Get Software setting flag from hal
-               Adapter->sLocalPara.boAntennaDiversity = FALSE;
-               if (hal_software_set(pHwData) & 0x00000001)
-                       Adapter->sLocalPara.boAntennaDiversity = TRUE;
-
-               //
-               // For TS module
-               //
-               InitStep = 2;
-
-               // For MDS module
-               InitStep = 3;
-               Mds_initial(Adapter);
-
-               //=======================================
-               // Initialize the SME, SCAN, MLME, ROAM
-               //=======================================
-               InitStep = 4;
-               InitStep = 5;
-               InitStep = 6;
-
-               // If no user-defined address in the registry, use the addresss "burned" on the NIC instead.
-               pMacAddr = Adapter->sLocalPara.ThisMacAddress;
-               pMacAddr2 = Adapter->sLocalPara.PermanentAddress;
-               hal_get_permanent_address( pHwData, Adapter->sLocalPara.PermanentAddress );// Reading ethernet address from EEPROM
-               if (OS_MEMORY_COMPARE(pMacAddr, "\x00\x00\x00\x00\x00\x00", MAC_ADDR_LENGTH )) // Is equal
-               {
-                       memcpy( pMacAddr, pMacAddr2, MAC_ADDR_LENGTH );
-               } else {
-                       // Set the user define MAC address
-                       hal_set_ethernet_address( pHwData, Adapter->sLocalPara.ThisMacAddress );
-               }
+       // Get Software setting flag from hal
+       Adapter->sLocalPara.boAntennaDiversity = FALSE;
+       if (hal_software_set(pHwData) & 0x00000001)
+               Adapter->sLocalPara.boAntennaDiversity = TRUE;
+
+       //
+       // For TS module
+       //
+       InitStep = 2;
+
+       // For MDS module
+       InitStep = 3;
+       Mds_initial(Adapter);
+
+       //=======================================
+       // Initialize the SME, SCAN, MLME, ROAM
+       //=======================================
+       InitStep = 4;
+       InitStep = 5;
+       InitStep = 6;
+
+       // If no user-defined address in the registry, use the addresss "burned" on the NIC instead.
+       pMacAddr = Adapter->sLocalPara.ThisMacAddress;
+       pMacAddr2 = Adapter->sLocalPara.PermanentAddress;
+       hal_get_permanent_address( pHwData, Adapter->sLocalPara.PermanentAddress );// Reading ethernet address from EEPROM
+       if (OS_MEMORY_COMPARE(pMacAddr, "\x00\x00\x00\x00\x00\x00", MAC_ADDR_LENGTH )) // Is equal
+       {
+               memcpy( pMacAddr, pMacAddr2, MAC_ADDR_LENGTH );
+       } else {
+               // Set the user define MAC address
+               hal_set_ethernet_address( pHwData, Adapter->sLocalPara.ThisMacAddress );
+       }
 
-               //get current antenna
-               psLOCAL->bAntennaNo = hal_get_antenna_number(pHwData);
+       //get current antenna
+       psLOCAL->bAntennaNo = hal_get_antenna_number(pHwData);
 #ifdef _PE_STATE_DUMP_
-               WBDEBUG(("Driver init, antenna no = %d\n", psLOCAL->bAntennaNo));
+       WBDEBUG(("Driver init, antenna no = %d\n", psLOCAL->bAntennaNo));
 #endif
-               hal_get_hw_radio_off( pHwData );
+       hal_get_hw_radio_off( pHwData );
 
-               // Waiting for HAL setting OK
-               while (!hal_idle(pHwData))
-                       OS_SLEEP(10000);
+       // Waiting for HAL setting OK
+       while (!hal_idle(pHwData))
+               OS_SLEEP(10000);
 
-               MTO_Init(Adapter);
+       MTO_Init(Adapter);
 
-               HwRadioOff = hal_get_hw_radio_off( pHwData );
-               psLOCAL->RadioOffStatus.boHwRadioOff = !!HwRadioOff;
+       HwRadioOff = hal_get_hw_radio_off( pHwData );
+       psLOCAL->RadioOffStatus.boHwRadioOff = !!HwRadioOff;
 
-               hal_set_radio_mode( pHwData, (unsigned char)(psLOCAL->RadioOffStatus.boSwRadioOff || psLOCAL->RadioOffStatus.boHwRadioOff) );
+       hal_set_radio_mode( pHwData, (unsigned char)(psLOCAL->RadioOffStatus.boSwRadioOff || psLOCAL->RadioOffStatus.boHwRadioOff) );
 
-               hal_driver_init_OK(pHwData) = 1; // Notify hal that the driver is ready now.
-               //set a tx power for reference.....
-//             sme_set_tx_power_level(Adapter, 12);    FIXME?
-               return TRUE;
-       }
-       while(FALSE);
+       hal_driver_init_OK(pHwData) = 1; // Notify hal that the driver is ready now.
+       //set a tx power for reference.....
+//     sme_set_tx_power_level(Adapter, 12);    FIXME?
+       return TRUE;
 
+error:
        switch (InitStep) {
        case 5:
        case 4: