/* * This API is used to send the HCI command to controller and return * with a HCI Command Complete event. * For HCI SDIO transport, this will be internally defined. */ A_STATUS SendHCICommandWaitCommandComplete(AR3K_CONFIG_INFO *pConfig, A_UINT8 *pHCICommand, int CmdLength, A_UINT8 **ppEventBuffer, A_UINT8 **ppBufferToFree) { if(CmdLength == 0) { return A_ERROR; } Hci_log("COM Write -->",pHCICommand,CmdLength); PSAcked = FALSE; if(PSHciWritepacket(pConfig,pHCICommand,CmdLength) == 0) { /* If the controller is not available, return Error */ return A_ERROR; } //add_timer(&psCmdTimer); wait_event_interruptible(HciEvent,(PSAcked == TRUE)); if(NULL != HciEventpacket) { *ppEventBuffer = HciEventpacket; *ppBufferToFree = HciEventpacket; } else { /* Did not get an event from controller. return error */ *ppBufferToFree = NULL; return A_ERROR; } return A_OK; }
/* * This API is used to send the HCI command to controller and return * with a HCI Command Complete event. * For HCI SDIO transport, this will be internally defined. */ int SendHCICommandWaitCommandComplete(struct ar3k_config_info *pConfig, u8 *pHCICommand, int CmdLength, u8 **ppEventBuffer, u8 **ppBufferToFree) { if(CmdLength == 0) { return A_ERROR; } Hci_log("COM Write -->",pHCICommand,CmdLength); PSAcked = false; if(PSHciWritepacket(pConfig,pHCICommand,CmdLength) == 0) { /* If the controller is not available, return Error */ return A_ERROR; } //add_timer(&psCmdTimer); wait_event_interruptible(HciEvent,(PSAcked == true)); if(NULL != HciEventpacket) { *ppEventBuffer = HciEventpacket; *ppBufferToFree = HciEventpacket; } else { /* Did not get an event from controller. return error */ *ppBufferToFree = NULL; return A_ERROR; } return 0; }