Exemple #1
0
/* Initializes the HTC layer */
A_STATUS HTCInit(HTC_INIT_INFO *pInitInfo)
{
    HTC_CALLBACKS htcCallbacks;

    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Enter\n"));
    if (HTCInitialized) {
        AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));
        return A_OK;
    }

    A_MEMCPY(&HTCInitInfo,pInitInfo,sizeof(HTC_INIT_INFO));

    A_MEMZERO(&htcCallbacks, sizeof(HTC_CALLBACKS));

        /* setup HIF layer callbacks */
    htcCallbacks.deviceInsertedHandler = HTCTargetInsertedHandler;
    htcCallbacks.deviceRemovedHandler = HTCTargetRemovedHandler;
        /* the device layer handles these */
    htcCallbacks.rwCompletionHandler = DevRWCompletionHandler;
    htcCallbacks.dsrHandler = DevDsrHandler;
    HIFInit(&htcCallbacks);
    HTCInitialized = TRUE;

    AR_DEBUG_PRINTF(ATH_DEBUG_TRC, ("HTCInit: Exit\n"));
    return A_OK;
}
Exemple #2
0
A_STATUS HIF_USBDeviceInserted(adf_os_handle_t os_hdl)
{
    void *hHIF = NULL;
    A_STATUS status = A_OK;

    hHIF = HIFInit(os_hdl);

    /* Inform HTC */
    if ( (hHIF != NULL) && htcDrvRegCallbacks.deviceInsertedHandler) {
        status = htcDrvRegCallbacks.deviceInsertedHandler(hHIF, os_hdl);
        if (A_SUCCESS(status))
            return A_OK;
        else
            return A_ERROR;
    }
    else {
        return A_ERROR;
    }
}
Exemple #3
0
A_STATUS HIF_USBDeviceInserted(struct _NIC_DEV *os_hdl)
{
    void *hHIF = NULL;
    A_STATUS status = A_OK;

    hHIF = HIFInit(os_hdl);

    /* Inform HTC */
    if ( (hHIF != NULL) && htcDrvRegCallbacks.deviceInsertedHandler) {
        status = htcDrvRegCallbacks.deviceInsertedHandler(hHIF, os_hdl);
        if (status == A_OK)
            return A_OK;
        else
            return A_ERROR;
    }
    else {
        return A_ERROR;
    }
}
Exemple #4
0
A_BOOL RunAR6kTest(A_UINT32 Channel, A_CHAR *pSSID, MTE_WIFI_TEST_STATUS *pTestStatus)
{         
    AR6K_FIRMWARE_INFO  firmware;
    A_STATUS            status = A_OK;
    
    A_MEMZERO(&firmware,sizeof(firmware));
    
    InitializeMTE();
    
    if (!GetFirmwareInfo(&firmware)) {
        DBG_LOG_PRINT(DBG_ZONE_ERR, ("Target Firmware missing!! Aborting.. \r\n"));   
        return FALSE;    
    }
    
    g_WifiMTE.SSIDLength = strlen(pSSID);
    A_ASSERT(g_WifiMTE.SSIDLength <= 32);
    A_MEMCPY(g_WifiMTE.SSID,pSSID,g_WifiMTE.SSIDLength);    
    
    A_ASSERT(Channel <= MAX_WIFI_CHANNELS);
    A_ASSERT(Channel > 0);
        /* look up the channel hint (in Mhz) */
    g_WifiMTE.WiFiChannel = g_ChannelLookUp[Channel];
    
    DBG_LOG_PRINT(DBG_ZONE_INIT, 
            ("Ar6k WiFi MTE Test Start..(SSID: %s , channel:%d) \r\n", g_WifiMTE.SSID, g_WifiMTE.WiFiChannel));
           
    do {
           
            /* init test status */
        g_WifiMTE.MteStatus = MTE_WIFI_STATUS_SDIO_INIT_FAILED;
                
        if (A_FAILED(HIFInit())) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** HIFInit Failed!!! \r\n"));
            break;    
        }
        
        BMIInit();

            /* all failures are setup failures this point forward */
        g_WifiMTE.MteStatus = MTE_WIFI_STATUS_SETUP_FAILED;
            
        g_WifiMTE.HifDevice = HIFGetDevice();
        
        DBG_LOG_PRINT(DBG_ZONE_ERR, ("Getting Target ID... \r\n"));
        status = BMIGetTargetInfo(g_WifiMTE.HifDevice, 
                                  &g_WifiMTE.TargetInfo);
                                        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to Get Target Information \r\n"));
            break;    
        }
        
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("TARGET_TYPE:0x%X  TARGET_VER : 0x%X \r\n",
               g_WifiMTE.TargetInfo.target_type, g_WifiMTE.TargetInfo.target_ver));        
        
        status = ar6000_prepare_target(g_WifiMTE.HifDevice,
                                       g_WifiMTE.TargetInfo.target_type,
                                       g_WifiMTE.TargetInfo.target_ver);
        
        if (A_FAILED(status)) {            
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to prepare target \r\n"));
            break;    
        }   
        
        status = ar6000_configure_clock (g_WifiMTE.HifDevice,
                                         g_WifiMTE.TargetInfo.target_type,
                                         g_WifiMTE.TargetInfo.target_ver,
                                         BOARD_XTAL_FREQ);
        
        if (A_FAILED(status)) {            
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to configure target XTAL \r\n"));
            break;    
        }   
                                 
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("Download Firmware ... (firmware length: %d, %s) (datapatch len: %d) \r\n",
               firmware.AthwlanLength, 
               firmware.AthwlanCompressed ? "COMPRESSED" : "UNCOMPRESSED",
               firmware.DataPatchLength));    
               
        status = DownloadFirmware(g_WifiMTE.HifDevice,
                                  g_WifiMTE.TargetInfo.target_type,
                                  g_WifiMTE.TargetInfo.target_ver,
                                  firmware.pAthwlan,
                                  firmware.AthwlanLength,
                                  firmware.AthwlanCompressed,
                                  firmware.pDataPatch,
                                  firmware.DataPatchLength);
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to download firmware \r\n"));
            break;    
        }   
        
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("Firmware Download Complete.. \r\n"));
        
        ar6000_enable_target_console(g_WifiMTE.HifDevice,g_WifiMTE.TargetInfo.target_type);
            
        status = ar6000_set_htc_params(g_WifiMTE.HifDevice,
                                       g_WifiMTE.TargetInfo.target_type,
                                       0,
                                       0);
                                       
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to set HTC Params \r\n"));
            break;    
        } 
        
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("Transferring EEPROM settings .. \r\n"));
        
        status = eeprom_ar6000_transfer(g_WifiMTE.HifDevice, g_WifiMTE.TargetInfo.target_type);
       
        if (A_FAILED(status)) {            
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to transfer EEPROM settings \r\n"));
            break;    
        }    
                                   
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("Starting Target .. \r\n"));      
               
        status = BMIDone(g_WifiMTE.HifDevice);       
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Target failed to start \r\n"));
            break;    
        }           
        
            /* from here on out, all mte failures are boot failures */
        g_WifiMTE.MteStatus = MTE_WIFI_STATUS_BOOT_FAILED;
        
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("Connecting HTC .. \r\n"));      
                
            /* connect HTC layer */
        g_WifiMTE.htcHandle =  HTCConnect(g_WifiMTE.HifDevice);
        
        if (g_WifiMTE.htcHandle == NULL) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** HTC connection failed \r\n"));    
            break;    
        }
            
        status = HTCConnectService(g_WifiMTE.htcHandle, 
                                   WMI_CONTROL_SVC,
                                   &g_WifiMTE.ControlEp);
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to connect to WMI control service \r\n"));
            break;    
        }           
        
        status = HTCConnectService(g_WifiMTE.htcHandle, 
                                   WMI_DATA_BE_SVC,
                                   &g_WifiMTE.DataEp);
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** Failed to connect to WMI best effort data service \r\n"));
            break;    
        }      
                              
        DBG_LOG_PRINT(DBG_ZONE_INIT, ("HTC is connected (wmi_ctrl:%d, data:%d) ... \r\n",
            g_WifiMTE.ControlEp, g_WifiMTE.DataEp));    
        
        status = HTCStart(g_WifiMTE.htcHandle);
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** failed to start HTC \r\n"));
            break;    
        }     
        
        status = WMIInit(g_WifiMTE.htcHandle,g_WifiMTE.ControlEp,g_WifiMTE.DataEp);
        
        if (A_FAILED(status)) {
            DBG_LOG_PRINT(DBG_ZONE_ERR, ("** failed to init WMI \r\n"));
            break;    
        }    
                
        status = RunConnectionTest();
                      
    } while (FALSE);
    
    pTestStatus->StatusCode = g_WifiMTE.MteStatus;
    pTestStatus->RSSI = g_WifiMTE.RSSI;    
    
    return (A_SUCCESS(status));
}