/*----------------------------------------------------------------------------*/ VOID mboxSendMsg(IN P_ADAPTER_T prAdapter, IN ENUM_MBOX_ID_T eMboxId, IN P_MSG_HDR_T prMsg, IN EUNM_MSG_SEND_METHOD_T eMethod) { P_MBOX_T prMbox; KAL_SPIN_LOCK_DECLARATION(); ASSERT(eMboxId < MBOX_ID_TOTAL_NUM); ASSERT(prMsg); ASSERT(prAdapter); prMbox = &(prAdapter->arMbox[eMboxId]); switch (eMethod) { case MSG_SEND_METHOD_BUF: KAL_ACQUIRE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); LINK_INSERT_TAIL(&prMbox->rLinkHead, &prMsg->rLinkEntry); KAL_RELEASE_SPIN_LOCK(prAdapter, SPIN_LOCK_MAILBOX); /* to wake up main service thread */ GLUE_SET_EVENT(prAdapter->prGlueInfo); break; case MSG_SEND_METHOD_UNBUF: MBOX_HNDL_MSG(prAdapter, prMsg); break; default: ASSERT(0); break; } }
/*----------------------------------------------------------------------------*/ WLAN_STATUS wlanoidSendSetQueryP2PCmd(IN P_ADAPTER_T prAdapter, UINT_8 ucCID, BOOLEAN fgSetQuery, BOOLEAN fgNeedResp, BOOLEAN fgIsOid, PFN_CMD_DONE_HANDLER pfCmdDoneHandler, PFN_CMD_TIMEOUT_HANDLER pfCmdTimeoutHandler, UINT_32 u4SetQueryInfoLen, PUINT_8 pucInfoBuffer, OUT PVOID pvSetQueryBuffer, IN UINT_32 u4SetQueryBufferLen) { P_GLUE_INFO_T prGlueInfo; P_CMD_INFO_T prCmdInfo; P_WIFI_CMD_T prWifiCmd; UINT_8 ucCmdSeqNum; ASSERT(prAdapter); prGlueInfo = prAdapter->prGlueInfo; ASSERT(prGlueInfo); DEBUGFUNC("wlanoidSendSetQueryP2PCmd"); DBGLOG(REQ, TRACE, ("Command ID = 0x%08X\n", ucCID)); prCmdInfo = cmdBufAllocateCmdInfo(prAdapter, (CMD_HDR_SIZE + u4SetQueryInfoLen)); if (!prCmdInfo) { DBGLOG(INIT, ERROR, ("Allocate CMD_INFO_T ==> FAILED.\n")); return WLAN_STATUS_FAILURE; } /* increase command sequence number */ ucCmdSeqNum = nicIncreaseCmdSeqNum(prAdapter); DBGLOG(REQ, TRACE, ("ucCmdSeqNum =%d\n", ucCmdSeqNum)); /* Setup common CMD Info Packet */ prCmdInfo->eCmdType = COMMAND_TYPE_NETWORK_IOCTL; prCmdInfo->eNetworkType = NETWORK_TYPE_P2P_INDEX; prCmdInfo->u2InfoBufLen = (UINT_16) (CMD_HDR_SIZE + u4SetQueryInfoLen); prCmdInfo->pfCmdDoneHandler = pfCmdDoneHandler; prCmdInfo->pfCmdTimeoutHandler = pfCmdTimeoutHandler; prCmdInfo->fgIsOid = fgIsOid; prCmdInfo->ucCID = ucCID; prCmdInfo->fgSetQuery = fgSetQuery; prCmdInfo->fgNeedResp = fgNeedResp; prCmdInfo->fgDriverDomainMCR = FALSE; prCmdInfo->ucCmdSeqNum = ucCmdSeqNum; prCmdInfo->u4SetInfoLen = u4SetQueryInfoLen; prCmdInfo->pvInformationBuffer = pvSetQueryBuffer; prCmdInfo->u4InformationBufferLength = u4SetQueryBufferLen; /* Setup WIFI_CMD_T (no payload) */ prWifiCmd = (P_WIFI_CMD_T) (prCmdInfo->pucInfoBuffer); prWifiCmd->u2TxByteCount_UserPriority = prCmdInfo->u2InfoBufLen; prWifiCmd->ucCID = prCmdInfo->ucCID; prWifiCmd->ucSetQuery = prCmdInfo->fgSetQuery; prWifiCmd->ucSeqNum = prCmdInfo->ucCmdSeqNum; if (u4SetQueryInfoLen > 0 && pucInfoBuffer != NULL) { kalMemCopy(prWifiCmd->aucBuffer, pucInfoBuffer, u4SetQueryInfoLen); } /* insert into prCmdQueue */ kalEnqueueCommand(prGlueInfo, (P_QUE_ENTRY_T) prCmdInfo); /* wakeup txServiceThread later */ GLUE_SET_EVENT(prGlueInfo); return WLAN_STATUS_PENDING; }