| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653 |
- /*
- ** Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/common/wlan_p2p.c#8
- */
- /*! \file wlan_bow.c
- \brief This file contains the Wi-Fi Direct commands processing routines for
- MediaTek Inc. 802.11 Wireless LAN Adapters.
- */
- /*
- ** Log: wlan_p2p.c
- *
- * 07 17 2012 yuche.tsai
- * NULL
- * Compile no error before trial run.
- *
- * 11 24 2011 yuche.tsai
- * NULL
- * Fix P2P IOCTL of multicast address bug, add low power driver stop control.
- *
- * 11 22 2011 yuche.tsai
- * NULL
- * Update RSSI link quality of P2P Network query method. (Bug fix)
- *
- * 11 19 2011 yuche.tsai
- * NULL
- * Add RSSI support for P2P network.
- *
- * 11 08 2011 yuche.tsai
- * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version query & set support
- * for service discovery version check.
- * Add support for driver version query & p2p supplicant verseion set.
- * For new service discovery mechanism sync.
- *
- * 10 18 2011 yuche.tsai
- * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
- * Support Channel Query.
- *
- * 10 18 2011 yuche.tsai
- * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
- * New 2.1 branch
- *
- * 08 23 2011 yuche.tsai
- * NULL
- * Fix Multicast Issue of P2P.
- *
- * 04 27 2011 george.huang
- * [WCXRP00000684] [MT6620 Wi-Fi][Driver] Support P2P setting ARP filter
- * Support P2P ARP filter setting on early suspend/ late resume
- *
- * 04 08 2011 george.huang
- * [WCXRP00000621] [MT6620 Wi-Fi][Driver] Support P2P supplicant to set power mode
- * separate settings of P2P and AIS
- *
- * 03 22 2011 george.huang
- * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command
- * link with supplicant commands
- *
- * 03 17 2011 wh.su
- * [WCXRP00000571] [MT6620 Wi-Fi] [Driver] Not check the p2p role during set key
- * Skip the p2p role for adding broadcast key issue.
- *
- * 03 16 2011 wh.su
- * [WCXRP00000530] [MT6620 Wi-Fi] [Driver] skip doing p2pRunEventAAAComplete after send assoc response Tx Done
- * fixed compiling error while enable dbg.
- *
- * 03 08 2011 yuche.tsai
- * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format
- * issue[WCXRP00000509] [Volunteer Patch][MT6620][Driver] Kernal panic when remove p2p module.
- * .
- *
- * 03 07 2011 terry.wu
- * [WCXRP00000521] [MT6620 Wi-Fi][Driver] Remove non-standard debug message
- * Toggle non-standard debug messages to comments.
- *
- * 03 07 2011 wh.su
- * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
- * rename the define to anti_pviracy.
- *
- * 03 05 2011 wh.su
- * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
- * add the code to get the check rsponse and indicate to app.
- *
- * 03 02 2011 wh.su
- * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
- * Add Security check related code.
- *
- * 03 02 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Fix SD Request Query Length issue.
- *
- * 03 02 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Service Discovery Request.
- *
- * 03 01 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Update Service Discovery Wlan OID related function.
- *
- * 03 01 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Update Service Discovery Related wlanoid function.
- *
- * 02 09 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Add Service Discovery Indication Related code.
- *
- * 01 26 2011 yuche.tsai
- * [WCXRP00000245] 1. Invitation Request/Response.
- 2. Provision Discovery Request/Response
- * Add Service Discovery Function.
- *
- * 01 05 2011 cp.wu
- * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface
- * for supporting Wi-Fi Direct Service Discovery ioctl implementations for P2P Service Discovery
- *
- * 01 04 2011 cp.wu
- * [WCXRP00000338] [MT6620 Wi-Fi][Driver] Separate kalMemAlloc into kmalloc and vmalloc implementations to
- * ease physically continuous memory demands separate kalMemAlloc() into virtually-continuous
- * and physically-continuous type to ease slab system pressure
- *
- * 12 22 2010 cp.wu
- * [WCXRP00000283] [MT6620 Wi-Fi][Driver][Wi-Fi Direct] Implementation of interface
- * for supporting Wi-Fi Direct Service Discovery
- * 1. header file restructure for more clear module isolation
- * 2. add function interface definition for implementing Service Discovery callbacks
- *
- * 10 04 2010 cp.wu
- * [WCXRP00000077] [MT6620 Wi-Fi][Driver][FW] Eliminate use of ENUM_NETWORK_TYPE_T
- * and replaced by ENUM_NETWORK_TYPE_INDEX_T only remove ENUM_NETWORK_TYPE_T definitions
- *
- * 09 28 2010 wh.su
- * NULL
- * [WCXRP00000069][MT6620 Wi-Fi][Driver] Fix some code for phase 1 P2P Demo.
- *
- * 09 21 2010 kevin.huang
- * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface
- * Isolate P2P related function for Hardware Software Bundle
- *
- * 09 03 2010 kevin.huang
- * NULL
- * Refine #include sequence and solve recursive/nested #include issue
- *
- * 08 23 2010 cp.wu
- * NULL
- * revise constant definitions to be matched with implementation (original cmd-event definition is deprecated)
- *
- * 08 16 2010 cp.wu
- * NULL
- * add subroutines for P2P to set multicast list.
- *
- * 08 16 2010 george.huang
- * NULL
- * .
- *
- * 08 16 2010 george.huang
- * NULL
- * support wlanoidSetP2pPowerSaveProfile() in P2P
- *
- * 08 16 2010 george.huang
- * NULL
- * Support wlanoidSetNetworkAddress() for P2P
- *
- * 07 08 2010 cp.wu
- *
- * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
- *
- * 06 25 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * add API in que_mgt to retrieve sta-rec index for security frames.
- *
- * 06 24 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * 802.1x and bluetooth-over-Wi-Fi security frames are now delievered to firmware via command path instead of data path.
- *
- * 06 11 2010 cp.wu
- * [WPD00003833][MT6620 and MT5931] Driver migration
- * 1) migrate assoc.c.
- * 2) add ucTxSeqNum for tracking frames which needs TX-DONE awareness
- * 3) add configuration options for CNM_MEM and RSN modules
- * 4) add data path for management frames
- * 5) eliminate rPacketInfo of MSDU_INFO_T
- *
- * 06 06 2010 kevin.huang
- * [WPD00003832][MT6620 5931] Create driver base
- * [MT6620 5931] Create driver base
- *
- * 05 17 2010 cp.wu
- * [WPD00003831][MT6620 Wi-Fi] Add framework for Wi-Fi Direct support
- * 1) add timeout handler mechanism for pending command packets
- * 2) add p2p add/removal key
- *
- **
- */
- /******************************************************************************
- * C O M P I L E R F L A G S
- *******************************************************************************
- */
- /******************************************************************************
- * E X T E R N A L R E F E R E N C E S
- *******************************************************************************
- */
- #include "precomp.h"
- /******************************************************************************
- * C O N S T A N T S
- *******************************************************************************
- */
- /******************************************************************************
- * D A T A T Y P E S
- *******************************************************************************
- */
- /******************************************************************************
- * P U B L I C D A T A
- *******************************************************************************
- */
- /******************************************************************************
- * P R I V A T E D A T A
- *******************************************************************************
- */
- /******************************************************************************
- * M A C R O S
- *******************************************************************************
- */
- /******************************************************************************
- * F U N C T I O N D E C L A R A T I O N S
- *******************************************************************************
- */
- /******************************************************************************
- * F U N C T I O N S
- *******************************************************************************
- */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief command packet generation utility
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] ucCID Command ID
- * \param[in] fgSetQuery Set or Query
- * \param[in] fgNeedResp Need for response
- * \param[in] pfCmdDoneHandler Function pointer when command is done
- * \param[in] u4SetQueryInfoLen The length of the set/query buffer
- * \param[in] pucInfoBuffer Pointer to set/query buffer
- *
- *
- * \retval WLAN_STATUS_PENDING
- * \retval WLAN_STATUS_FAILURE
- */
- /*----------------------------------------------------------------------------*/
- 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(P2P, 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;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to set a key to Wi-Fi Direct driver
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_INVALID_DATA
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetAddP2PKey(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- CMD_802_11_KEY rCmdKey;
- P_PARAM_KEY_T prNewKey;
- DEBUGFUNC("wlanoidSetAddP2PKey");
- DBGLOG(REQ, INFO, "\n");
- ASSERT(prAdapter);
- ASSERT(pvSetBuffer);
- ASSERT(pu4SetInfoLen);
- prNewKey = (P_PARAM_KEY_T) pvSetBuffer;
- /* Verify the key structure length. */
- if (prNewKey->u4Length > u4SetBufferLen) {
- DBGLOG(REQ, WARN, "Invalid key structure length (%d) greater than total buffer length (%d)\n",
- (UINT_8) prNewKey->u4Length, (UINT_8) u4SetBufferLen);
- *pu4SetInfoLen = u4SetBufferLen;
- return WLAN_STATUS_INVALID_LENGTH;
- }
- /* Verify the key material length for key material buffer */
- else if (prNewKey->u4KeyLength > prNewKey->u4Length - OFFSET_OF(PARAM_KEY_T, aucKeyMaterial)) {
- DBGLOG(REQ, WARN, "Invalid key material length (%d)\n", (UINT_8) prNewKey->u4KeyLength);
- *pu4SetInfoLen = u4SetBufferLen;
- return WLAN_STATUS_INVALID_DATA;
- }
- /* Exception check */
- else if (prNewKey->u4KeyIndex & 0x0fffff00)
- return WLAN_STATUS_INVALID_DATA;
- /* Exception check, pairwise key must with transmit bit enabled */
- else if ((prNewKey->u4KeyIndex & BITS(30, 31)) == IS_UNICAST_KEY) {
- return WLAN_STATUS_INVALID_DATA;
- } else if (!(prNewKey->u4KeyLength == CCMP_KEY_LEN) && !(prNewKey->u4KeyLength == TKIP_KEY_LEN)) {
- return WLAN_STATUS_INVALID_DATA;
- }
- /* Exception check, pairwise key must with transmit bit enabled */
- else if ((prNewKey->u4KeyIndex & BITS(30, 31)) == BITS(30, 31)) {
- if (((prNewKey->u4KeyIndex & 0xff) != 0) ||
- ((prNewKey->arBSSID[0] == 0xff) && (prNewKey->arBSSID[1] == 0xff) && (prNewKey->arBSSID[2] == 0xff)
- && (prNewKey->arBSSID[3] == 0xff) && (prNewKey->arBSSID[4] == 0xff)
- && (prNewKey->arBSSID[5] == 0xff))) {
- return WLAN_STATUS_INVALID_DATA;
- }
- }
- *pu4SetInfoLen = u4SetBufferLen;
- /* fill CMD_802_11_KEY */
- kalMemZero(&rCmdKey, sizeof(CMD_802_11_KEY));
- rCmdKey.ucAddRemove = 1; /* add */
- rCmdKey.ucTxKey = ((prNewKey->u4KeyIndex & IS_TRANSMIT_KEY) == IS_TRANSMIT_KEY) ? 1 : 0;
- rCmdKey.ucKeyType = ((prNewKey->u4KeyIndex & IS_UNICAST_KEY) == IS_UNICAST_KEY) ? 1 : 0;
- if (kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */
- rCmdKey.ucIsAuthenticator = 0;
- } else { /* group owner */
- rCmdKey.ucIsAuthenticator = 1;
- }
- COPY_MAC_ADDR(rCmdKey.aucPeerAddr, prNewKey->arBSSID);
- rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX;
- if (prNewKey->u4KeyLength == CCMP_KEY_LEN)
- rCmdKey.ucAlgorithmId = CIPHER_SUITE_CCMP; /* AES */
- else if (prNewKey->u4KeyLength == TKIP_KEY_LEN)
- rCmdKey.ucAlgorithmId = CIPHER_SUITE_TKIP; /* TKIP */
- rCmdKey.ucKeyId = (UINT_8) (prNewKey->u4KeyIndex & 0xff);
- rCmdKey.ucKeyLen = (UINT_8) prNewKey->u4KeyLength;
- kalMemCopy(rCmdKey.aucKeyMaterial, (PUINT_8) prNewKey->aucKeyMaterial, rCmdKey.ucKeyLen);
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_ADD_REMOVE_KEY,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetCommon,
- NULL,
- sizeof(CMD_802_11_KEY), (PUINT_8) &rCmdKey, pvSetBuffer, u4SetBufferLen);
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to request Wi-Fi Direct driver to remove keys
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_DATA
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_INVALID_DATA
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetRemoveP2PKey(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- CMD_802_11_KEY rCmdKey;
- P_PARAM_REMOVE_KEY_T prRemovedKey;
- DEBUGFUNC("wlanoidSetRemoveP2PKey");
- ASSERT(prAdapter);
- if (u4SetBufferLen < sizeof(PARAM_REMOVE_KEY_T))
- return WLAN_STATUS_INVALID_LENGTH;
- ASSERT(pvSetBuffer);
- prRemovedKey = (P_PARAM_REMOVE_KEY_T) pvSetBuffer;
- /* Check bit 31: this bit should always 0 */
- if (prRemovedKey->u4KeyIndex & IS_TRANSMIT_KEY) {
- /* Bit 31 should not be set */
- DBGLOG(REQ, ERROR, "invalid key index: 0x%08x\n", prRemovedKey->u4KeyIndex);
- return WLAN_STATUS_INVALID_DATA;
- }
- /* Check bits 8 ~ 29 should always be 0 */
- if (prRemovedKey->u4KeyIndex & BITS(8, 29)) {
- /* Bit 31 should not be set */
- DBGLOG(REQ, ERROR, "invalid key index: 0x%08x\n", prRemovedKey->u4KeyIndex);
- return WLAN_STATUS_INVALID_DATA;
- }
- /* There should not be any key operation for P2P Device */
- if (kalP2PGetRole(prAdapter->prGlueInfo) == 0)
- ; /* return WLAN_STATUS_NOT_ACCEPTED; */
- kalMemZero((PUINT_8) &rCmdKey, sizeof(CMD_802_11_KEY));
- rCmdKey.ucAddRemove = 0; /* remove */
- if (kalP2PGetRole(prAdapter->prGlueInfo) == 1) { /* group client */
- rCmdKey.ucIsAuthenticator = 0;
- } else { /* group owner */
- rCmdKey.ucIsAuthenticator = 1;
- }
- kalMemCopy(rCmdKey.aucPeerAddr, (PUINT_8) prRemovedKey->arBSSID, MAC_ADDR_LEN);
- rCmdKey.ucNetType = NETWORK_TYPE_P2P_INDEX;
- rCmdKey.ucKeyId = (UINT_8) (prRemovedKey->u4KeyIndex & 0x000000ff);
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_ADD_REMOVE_KEY,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetCommon,
- NULL,
- sizeof(CMD_802_11_KEY), (PUINT_8) &rCmdKey, pvSetBuffer, u4SetBufferLen);
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief Setting the IP address for pattern search function.
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \return WLAN_STATUS_SUCCESS
- * \return WLAN_STATUS_ADAPTER_NOT_READY
- * \return WLAN_STATUS_INVALID_LENGTH
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2pNetworkAddress(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS;
- UINT_32 i, j;
- P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList;
- P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST) pvSetBuffer;
- P_PARAM_NETWORK_ADDRESS prNetworkAddress;
- P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp;
- UINT_32 u4IpAddressCount, u4CmdSize;
- DEBUGFUNC("wlanoidSetP2pNetworkAddress");
- DBGLOG(P2P, TRACE, "\n");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = 4;
- if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST))
- return WLAN_STATUS_INVALID_DATA;
- *pu4SetInfoLen = 0;
- u4IpAddressCount = 0;
- prNetworkAddress = prNetworkAddressList->arAddress;
- for (i = 0; i < prNetworkAddressList->u4AddressCount; i++) {
- if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP &&
- prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) {
- u4IpAddressCount++;
- }
- prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((ULONG) prNetworkAddress +
- (ULONG) (prNetworkAddress->u2AddressLength +
- OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress)));
- }
- /* construct payload of command packet */
- u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) +
- sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount;
- prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE);
- if (prCmdNetworkAddressList == NULL)
- return WLAN_STATUS_FAILURE;
- /* fill P_CMD_SET_NETWORK_ADDRESS_LIST */
- prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX;
- prCmdNetworkAddressList->ucAddressCount = (UINT_8) u4IpAddressCount;
- prNetworkAddress = prNetworkAddressList->arAddress;
- for (i = 0, j = 0; i < prNetworkAddressList->u4AddressCount; i++) {
- if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP &&
- prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) {
- prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP) prNetworkAddress->aucAddress;
- kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr,
- &(prNetAddrIp->in_addr), sizeof(UINT_32));
- j++;
- }
- prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((ULONG) prNetworkAddress +
- (ULONG) (prNetworkAddress->u2AddressLength +
- OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress)));
- }
- rStatus = wlanSendSetQueryCmd(prAdapter,
- CMD_ID_SET_IP_ADDRESS,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetIpAddress,
- nicOidCmdTimeoutCommon,
- u4CmdSize, (PUINT_8) prCmdNetworkAddressList, pvSetBuffer, u4SetBufferLen);
- kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize);
- return rStatus;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is used to query the power save profile.
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[out] pvQueryBuf A pointer to the buffer that holds the result of
- * the query.
- * \param[in] u4QueryBufLen The length of the query buffer.
- * \param[out] pu4QueryInfoLen If the call is successful, returns the number of
- * bytes written into the query buffer. If the call
- * failed due to invalid length of the query buffer,
- * returns the amount of storage needed.
- *
- * \return WLAN_STATUS_SUCCESS
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidQueryP2pPowerSaveProfile(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- DEBUGFUNC("wlanoidQueryP2pPowerSaveProfile");
- ASSERT(prAdapter);
- ASSERT(pu4QueryInfoLen);
- if (u4QueryBufferLen != 0) {
- ASSERT(pvQueryBuffer);
- *(PPARAM_POWER_MODE) pvQueryBuffer =
- (PARAM_POWER_MODE) (prAdapter->rWlanInfo.arPowerSaveMode[NETWORK_TYPE_P2P_INDEX].ucPsProfile);
- *pu4QueryInfoLen = sizeof(PARAM_POWER_MODE);
- }
- return WLAN_STATUS_SUCCESS;
- }
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is used to set the power save profile.
- *
- * \param[in] pvAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2pPowerSaveProfile(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS status;
- PARAM_POWER_MODE ePowerMode;
- DEBUGFUNC("wlanoidSetP2pPowerSaveProfile");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = sizeof(PARAM_POWER_MODE);
- if (u4SetBufferLen < sizeof(PARAM_POWER_MODE)) {
- DBGLOG(REQ, WARN, "Invalid length %u\n", u4SetBufferLen);
- return WLAN_STATUS_INVALID_LENGTH;
- } else if (*(PPARAM_POWER_MODE) pvSetBuffer >= Param_PowerModeMax) {
- WARNLOG(("Invalid power mode %d\n", *(PPARAM_POWER_MODE) pvSetBuffer));
- return WLAN_STATUS_INVALID_DATA;
- }
- ePowerMode = *(PPARAM_POWER_MODE) pvSetBuffer;
- if (prAdapter->fgEnCtiaPowerMode) {
- if (ePowerMode == Param_PowerModeCAM) {
- /*Todo:: Nothing*/
- /*Todo:: Nothing*/
- } else {
- /* User setting to PS mode (Param_PowerModeMAX_PSP or Param_PowerModeFast_PSP) */
- if (prAdapter->u4CtiaPowerMode == 0) {
- /* force to keep in CAM mode */
- ePowerMode = Param_PowerModeCAM;
- } else if (prAdapter->u4CtiaPowerMode == 1) {
- ePowerMode = Param_PowerModeMAX_PSP;
- } else if (prAdapter->u4CtiaPowerMode == 2) {
- ePowerMode = Param_PowerModeFast_PSP;
- }
- }
- }
- status = nicConfigPowerSaveProfile(prAdapter, NETWORK_TYPE_P2P_INDEX, ePowerMode, TRUE);
- return status;
- } /* end of wlanoidSetP2pPowerSaveProfile() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is used to set the power save profile.
- *
- * \param[in] pvAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2pSetNetworkAddress(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS;
- UINT_32 i, j;
- P_CMD_SET_NETWORK_ADDRESS_LIST prCmdNetworkAddressList;
- P_PARAM_NETWORK_ADDRESS_LIST prNetworkAddressList = (P_PARAM_NETWORK_ADDRESS_LIST) pvSetBuffer;
- P_PARAM_NETWORK_ADDRESS prNetworkAddress;
- P_PARAM_NETWORK_ADDRESS_IP prNetAddrIp;
- UINT_32 u4IpAddressCount, u4CmdSize;
- PUINT_8 pucBuf = (PUINT_8) pvSetBuffer;
- DEBUGFUNC("wlanoidSetP2pSetNetworkAddress");
- DBGLOG(P2P, TRACE, "\n");
- DBGLOG(P2P, INFO, "wlanoidSetP2pSetNetworkAddress (%d)\n", (INT_16) u4SetBufferLen);
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = 4;
- if (u4SetBufferLen < sizeof(PARAM_NETWORK_ADDRESS_LIST))
- return WLAN_STATUS_INVALID_DATA;
- *pu4SetInfoLen = 0;
- u4IpAddressCount = 0;
- prNetworkAddress = prNetworkAddressList->arAddress;
- for (i = 0; i < prNetworkAddressList->u4AddressCount; i++) {
- if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP &&
- prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) {
- u4IpAddressCount++;
- }
- prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((ULONG) prNetworkAddress +
- (ULONG) (prNetworkAddress->u2AddressLength +
- OFFSET_OF(PARAM_NETWORK_ADDRESS, aucAddress)));
- }
- /* construct payload of command packet */
- u4CmdSize = OFFSET_OF(CMD_SET_NETWORK_ADDRESS_LIST, arNetAddress) +
- sizeof(IPV4_NETWORK_ADDRESS) * u4IpAddressCount;
- if (u4IpAddressCount == 0)
- u4CmdSize = sizeof(CMD_SET_NETWORK_ADDRESS_LIST);
- prCmdNetworkAddressList = (P_CMD_SET_NETWORK_ADDRESS_LIST) kalMemAlloc(u4CmdSize, VIR_MEM_TYPE);
- if (prCmdNetworkAddressList == NULL)
- return WLAN_STATUS_FAILURE;
- /* fill P_CMD_SET_NETWORK_ADDRESS_LIST */
- prCmdNetworkAddressList->ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX;
- /* only to set IP address to FW once ARP filter is enabled */
- if (prAdapter->fgEnArpFilter) {
- prCmdNetworkAddressList->ucAddressCount = (UINT_8) u4IpAddressCount;
- prNetworkAddress = prNetworkAddressList->arAddress;
- DBGLOG(P2P, INFO, "u4IpAddressCount (%u)\n", u4IpAddressCount);
- for (i = 0, j = 0; i < prNetworkAddressList->u4AddressCount; i++) {
- if (prNetworkAddress->u2AddressType == PARAM_PROTOCOL_ID_TCP_IP &&
- prNetworkAddress->u2AddressLength == sizeof(PARAM_NETWORK_ADDRESS_IP)) {
- prNetAddrIp = (P_PARAM_NETWORK_ADDRESS_IP) prNetworkAddress->aucAddress;
- kalMemCopy(prCmdNetworkAddressList->arNetAddress[j].aucIpAddr,
- &(prNetAddrIp->in_addr), sizeof(UINT_32));
- j++;
- pucBuf = (PUINT_8) &prNetAddrIp->in_addr;
- DBGLOG(P2P, INFO, "prNetAddrIp->in_addr:%d:%d:%d:%d\n",
- (UINT_8) pucBuf[0], (UINT_8) pucBuf[1],
- (UINT_8) pucBuf[2], (UINT_8) pucBuf[3]);
- }
- prNetworkAddress = (P_PARAM_NETWORK_ADDRESS) ((ULONG) prNetworkAddress +
- (ULONG) (prNetworkAddress->u2AddressLength +
- OFFSET_OF(PARAM_NETWORK_ADDRESS,
- aucAddress)));
- }
- } else {
- prCmdNetworkAddressList->ucAddressCount = 0;
- }
- rStatus = wlanSendSetQueryCmd(prAdapter,
- CMD_ID_SET_IP_ADDRESS,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetIpAddress,
- nicOidCmdTimeoutCommon,
- u4CmdSize, (PUINT_8) prCmdNetworkAddressList, pvSetBuffer, u4SetBufferLen);
- kalMemFree(prCmdNetworkAddressList, VIR_MEM_TYPE, u4CmdSize);
- return rStatus;
- } /* end of wlanoidSetP2pSetNetworkAddress() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to set Multicast Address List.
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2PMulticastList(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- CMD_MAC_MCAST_ADDR rCmdMacMcastAddr;
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- /* The data must be a multiple of the Ethernet address size. */
- if ((u4SetBufferLen % MAC_ADDR_LEN)) {
- DBGLOG(REQ, WARN, "Invalid MC list length %u\n", u4SetBufferLen);
- *pu4SetInfoLen = (((u4SetBufferLen + MAC_ADDR_LEN) - 1) / MAC_ADDR_LEN) * MAC_ADDR_LEN;
- return WLAN_STATUS_INVALID_LENGTH;
- }
- *pu4SetInfoLen = u4SetBufferLen;
- /* Verify if we can support so many multicast addresses. */
- if ((u4SetBufferLen / MAC_ADDR_LEN) > MAX_NUM_GROUP_ADDR) {
- DBGLOG(REQ, WARN, "Too many MC addresses\n");
- return WLAN_STATUS_MULTICAST_FULL;
- }
- /* NOTE(Kevin): Windows may set u4SetBufferLen == 0 &&
- * pvSetBuffer == NULL to clear exist Multicast List.
- */
- if (u4SetBufferLen)
- ASSERT(pvSetBuffer);
- if (prAdapter->rAcpiState == ACPI_STATE_D3) {
- DBGLOG(REQ, WARN, "Fail in set multicast list! (Adapter not ready). ACPI=D%d, Radio=%d\n",
- prAdapter->rAcpiState, prAdapter->fgIsRadioOff);
- return WLAN_STATUS_ADAPTER_NOT_READY;
- }
- rCmdMacMcastAddr.u4NumOfGroupAddr = u4SetBufferLen / MAC_ADDR_LEN;
- rCmdMacMcastAddr.ucNetTypeIndex = NETWORK_TYPE_P2P_INDEX;
- kalMemCopy(rCmdMacMcastAddr.arAddress, pvSetBuffer, u4SetBufferLen);
- /* This CMD response is no need to complete the OID. Or the event would unsync. */
- return wlanoidSendSetQueryP2PCmd(prAdapter, CMD_ID_MAC_MCAST_ADDR, TRUE, FALSE, FALSE,
- nicCmdEventSetCommon,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_MAC_MCAST_ADDR),
- (PUINT_8) &rCmdMacMcastAddr, pvSetBuffer, u4SetBufferLen);
- } /* end of wlanoidSetP2PMulticastList() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to send GAS frame for P2P Service Discovery Request
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSendP2PSDRequest(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- if (u4SetBufferLen)
- ASSERT(pvSetBuffer);
- if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_REQUEST)) {
- *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_REQUEST);
- return WLAN_STATUS_BUFFER_TOO_SHORT;
- }
- /* rWlanStatus = p2pFsmRunEventSDRequest(prAdapter, (P_PARAM_P2P_SEND_SD_REQUEST)pvSetBuffer); */
- return rWlanStatus;
- } /* end of wlanoidSendP2PSDRequest() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to send GAS frame for P2P Service Discovery Response
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSendP2PSDResponse(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- if (u4SetBufferLen)
- ASSERT(pvSetBuffer);
- if (u4SetBufferLen < sizeof(PARAM_P2P_SEND_SD_RESPONSE)) {
- *pu4SetInfoLen = sizeof(PARAM_P2P_SEND_SD_RESPONSE);
- return WLAN_STATUS_BUFFER_TOO_SHORT;
- }
- /* rWlanStatus = p2pFsmRunEventSDResponse(prAdapter, (P_PARAM_P2P_SEND_SD_RESPONSE)pvSetBuffer); */
- return rWlanStatus;
- } /* end of wlanoidGetP2PSDRequest() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to get GAS frame for P2P Service Discovery Request
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[out] pvQueryBuffer A pointer to the buffer that holds the result of
- * the query.
- * \param[in] u4QueryBufferLen The length of the query buffer.
- * \param[out] pu4QueryInfoLen If the call is successful, returns the number of
- * bytes written into the query buffer. If the call
- * failed due to invalid length of the query buffer,
- * returns the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidGetP2PSDRequest(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- /*PUINT_8 pucPacketBuffer = NULL, pucTA = NULL;*/
- /* PUINT_8 pucChannelNum = NULL; */
- /*PUINT_16 pu2PacketLength = NULL;*/
- /*P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T) NULL;*/
- /*UINT_8 ucVersionNum = 0;*/
- /* UINT_8 ucChannelNum = 0, ucSeqNum = 0; */
- ASSERT(prAdapter);
- ASSERT(pu4QueryInfoLen);
- if (u4QueryBufferLen)
- ASSERT(pvQueryBuffer);
- if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_REQUEST)) {
- *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_REQUEST);
- return WLAN_STATUS_BUFFER_TOO_SHORT;
- }
- DBGLOG(P2P, TRACE, "Get Service Discovery Request\n");
- #if 0
- ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter);
- if (ucVersionNum == 0) {
- P_PARAM_P2P_GET_SD_REQUEST prP2pGetSdReq = (P_PARAM_P2P_GET_SD_REQUEST) pvQueryBuffer;
- pucPacketBuffer = prP2pGetSdReq->aucPacketContent;
- pu2PacketLength = &prP2pGetSdReq->u2PacketLength;
- pucTA = &prP2pGetSdReq->rTransmitterAddr;
- } else {
- P_PARAM_P2P_GET_SD_REQUEST_EX prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST_EX) NULL;
- prP2pGetSdReqEx = (P_PARAM_P2P_GET_SD_REQUEST) pvQueryBuffer;
- pucPacketBuffer = prP2pGetSdReqEx->aucPacketContent;
- pu2PacketLength = &prP2pGetSdReqEx->u2PacketLength;
- pucTA = &prP2pGetSdReqEx->rTransmitterAddr;
- pucChannelNum = &prP2pGetSdReqEx->ucChannelNum;
- ucSeqNum = prP2pGetSdReqEx->ucSeqNum;
- }
- rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter,
- pucPacketBuffer,
- (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_REQUEST)),
- (PUINT_32) pu2PacketLength, pucChannelNum, ucSeqNum);
- #else
- *pu4QueryInfoLen = 0;
- return rWlanStatus;
- #endif
- /*
- prWlanHdr = (P_WLAN_MAC_HEADER_T) pucPacketBuffer;
- kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN);
- if (pu4QueryInfoLen) {
- if (ucVersionNum == 0)
- *pu4QueryInfoLen = (UINT_32) (sizeof(PARAM_P2P_GET_SD_REQUEST) + (*pu2PacketLength));
- else
- *pu4QueryInfoLen = (UINT_32) (sizeof(PARAM_P2P_GET_SD_REQUEST_EX) + (*pu2PacketLength));
- }
- return rWlanStatus;
- */
- } /* end of wlanoidGetP2PSDRequest() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to get GAS frame for P2P Service Discovery Response
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[out] pvQueryBuffer A pointer to the buffer that holds the result of
- * the query.
- * \param[in] u4QueryBufferLen The length of the query buffer.
- * \param[out] pu4QueryInfoLen If the call is successful, returns the number of
- * bytes written into the query buffer. If the call
- * failed due to invalid length of the query buffer,
- * returns the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidGetP2PSDResponse(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- /*P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T) NULL;*/
- /* UINT_8 ucSeqNum = 0, */
- /*UINT_8 ucVersionNum = 0;*/
- /*PUINT_8 pucPacketContent = (PUINT_8) NULL, pucTA = (PUINT_8) NULL;*/
- /*PUINT_16 pu2PacketLength = (PUINT_16) NULL;*/
- ASSERT(prAdapter);
- ASSERT(pu4QueryInfoLen);
- if (u4QueryBufferLen)
- ASSERT(pvQueryBuffer);
- if (u4QueryBufferLen < sizeof(PARAM_P2P_GET_SD_RESPONSE)) {
- *pu4QueryInfoLen = sizeof(PARAM_P2P_GET_SD_RESPONSE);
- return WLAN_STATUS_BUFFER_TOO_SHORT;
- }
- DBGLOG(P2P, TRACE, "Get Service Discovery Response\n");
- #if 0
- ucVersionNum = p2pFuncGetVersionNumOfSD(prAdapter);
- if (ucVersionNum == 0) {
- P_PARAM_P2P_GET_SD_RESPONSE prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_RESPONSE) NULL;
- prP2pGetSdRsp = (P_PARAM_P2P_GET_SD_REQUEST) pvQueryBuffer;
- pucPacketContent = prP2pGetSdRsp->aucPacketContent;
- pucTA = &prP2pGetSdRsp->rTransmitterAddr;
- pu2PacketLength = &prP2pGetSdRsp->u2PacketLength;
- } else {
- P_PARAM_P2P_GET_SD_RESPONSE_EX prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX) NULL;
- prP2pGetSdRspEx = (P_PARAM_P2P_GET_SD_RESPONSE_EX) pvQueryBuffer;
- pucPacketContent = prP2pGetSdRspEx->aucPacketContent;
- pucTA = &prP2pGetSdRspEx->rTransmitterAddr;
- pu2PacketLength = &prP2pGetSdRspEx->u2PacketLength;
- ucSeqNum = prP2pGetSdRspEx->ucSeqNum;
- }
- /* rWlanStatus = p2pFuncGetServiceDiscoveryFrame(prAdapter, */
- /* pucPacketContent, */
- /* (u4QueryBufferLen - sizeof(PARAM_P2P_GET_SD_RESPONSE)), */
- /* (PUINT_32)pu2PacketLength, */
- /* NULL, */
- /* ucSeqNum); */
- #else
- *pu4QueryInfoLen = 0;
- return rWlanStatus;
- #endif
- /*
- prWlanHdr = (P_WLAN_MAC_HEADER_T) pucPacketContent;
- kalMemCopy(pucTA, prWlanHdr->aucAddr2, MAC_ADDR_LEN);
- if (pu4QueryInfoLen) {
- if (ucVersionNum == 0)
- *pu4QueryInfoLen = (UINT_32) (sizeof(PARAM_P2P_GET_SD_RESPONSE) + *pu2PacketLength);
- else
- *pu4QueryInfoLen = (UINT_32) (sizeof(PARAM_P2P_GET_SD_RESPONSE_EX) + *pu2PacketLength);
- }
- return rWlanStatus;
- */
- } /* end of wlanoidGetP2PSDResponse() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to terminate P2P Service Discovery Phase
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2PTerminateSDPhase(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- P_PARAM_P2P_TERMINATE_SD_PHASE prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE) NULL;
- UINT_8 aucNullAddr[] = NULL_MAC_ADDR;
- do {
- if ((prAdapter == NULL) || (pu4SetInfoLen == NULL))
- break;
- if ((u4SetBufferLen) && (pvSetBuffer == NULL))
- break;
- if (u4SetBufferLen < sizeof(PARAM_P2P_TERMINATE_SD_PHASE)) {
- *pu4SetInfoLen = sizeof(PARAM_P2P_TERMINATE_SD_PHASE);
- rWlanStatus = WLAN_STATUS_BUFFER_TOO_SHORT;
- break;
- }
- prP2pTerminateSD = (P_PARAM_P2P_TERMINATE_SD_PHASE) pvSetBuffer;
- if (EQUAL_MAC_ADDR(prP2pTerminateSD->rPeerAddr, aucNullAddr)) {
- DBGLOG(P2P, TRACE, "Service Discovery Version 2.0\n");
- /* p2pFuncSetVersionNumOfSD(prAdapter, 2); */
- }
- /* rWlanStatus = p2pFsmRunEventSDAbort(prAdapter); */
- } while (FALSE);
- return rWlanStatus;
- } /* end of wlanoidSetP2PTerminateSDPhase() */
- #if CFG_SUPPORT_ANTI_PIRACY
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer Pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetSecCheckRequest(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- if (u4SetBufferLen)
- ASSERT(pvSetBuffer);
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_SEC_CHECK,
- FALSE,
- TRUE,
- TRUE,
- NULL,
- nicOidCmdTimeoutCommon,
- u4SetBufferLen, (PUINT_8) pvSetBuffer, pvSetBuffer, u4SetBufferLen);
- } /* end of wlanoidSetSecCheckRequest() */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is called to
- *
- * \param[in] prAdapter Pointer to the Adapter structure.
- * \param[out] pvQueryBuffer A pointer to the buffer that holds the result of
- * the query.
- * \param[in] u4QueryBufferLen The length of the query buffer.
- * \param[out] pu4QueryInfoLen If the call is successful, returns the number of
- * bytes written into the query buffer. If the call
- * failed due to invalid length of the query buffer,
- * returns the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- * \retval WLAN_STATUS_ADAPTER_NOT_READY
- * \retval WLAN_STATUS_MULTICAST_FULL
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidGetSecCheckResponse(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- WLAN_STATUS rWlanStatus = WLAN_STATUS_SUCCESS;
- /* P_WLAN_MAC_HEADER_T prWlanHdr = (P_WLAN_MAC_HEADER_T)NULL; */
- P_GLUE_INFO_T prGlueInfo;
- prGlueInfo = prAdapter->prGlueInfo;
- ASSERT(prAdapter);
- ASSERT(pu4QueryInfoLen);
- if (u4QueryBufferLen)
- ASSERT(pvQueryBuffer);
- if (u4QueryBufferLen > 256)
- u4QueryBufferLen = 256;
- *pu4QueryInfoLen = u4QueryBufferLen;
- #if DBG
- DBGLOG_MEM8(SEC, LOUD, prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen);
- #endif
- kalMemCopy((PUINT_8) (pvQueryBuffer + OFFSET_OF(IW_P2P_TRANSPORT_STRUCT, aucBuffer)),
- prGlueInfo->prP2PInfo->aucSecCheckRsp, u4QueryBufferLen);
- return rWlanStatus;
- } /* end of wlanoidGetSecCheckResponse() */
- #endif
- WLAN_STATUS
- wlanoidSetNoaParam(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- P_PARAM_CUSTOM_NOA_PARAM_STRUCT_T prNoaParam;
- CMD_CUSTOM_NOA_PARAM_STRUCT_T rCmdNoaParam;
- DEBUGFUNC("wlanoidSetNoaParam");
- DBGLOG(P2P, TRACE, "\n");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = sizeof(PARAM_CUSTOM_NOA_PARAM_STRUCT_T);
- if (u4SetBufferLen < sizeof(PARAM_CUSTOM_NOA_PARAM_STRUCT_T))
- return WLAN_STATUS_INVALID_LENGTH;
- ASSERT(pvSetBuffer);
- prNoaParam = (P_PARAM_CUSTOM_NOA_PARAM_STRUCT_T) pvSetBuffer;
- kalMemZero(&rCmdNoaParam, sizeof(CMD_CUSTOM_NOA_PARAM_STRUCT_T));
- rCmdNoaParam.u4NoaDurationMs = prNoaParam->u4NoaDurationMs;
- rCmdNoaParam.u4NoaIntervalMs = prNoaParam->u4NoaIntervalMs;
- rCmdNoaParam.u4NoaCount = prNoaParam->u4NoaCount;
- #if 0
- return wlanSendSetQueryCmd(prAdapter,
- CMD_ID_SET_NOA_PARAM,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetCommon,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_NOA_PARAM_STRUCT_T),
- (PUINT_8) &rCmdNoaParam, pvSetBuffer, u4SetBufferLen);
- #else
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_SET_NOA_PARAM,
- TRUE,
- FALSE,
- TRUE,
- NULL,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_NOA_PARAM_STRUCT_T),
- (PUINT_8) &rCmdNoaParam, pvSetBuffer, u4SetBufferLen);
- #endif
- }
- WLAN_STATUS
- wlanoidSetOppPsParam(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- P_PARAM_CUSTOM_OPPPS_PARAM_STRUCT_T prOppPsParam;
- CMD_CUSTOM_OPPPS_PARAM_STRUCT_T rCmdOppPsParam;
- DEBUGFUNC("wlanoidSetOppPsParam");
- DBGLOG(P2P, TRACE, "\n");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUCT_T);
- if (u4SetBufferLen < sizeof(PARAM_CUSTOM_OPPPS_PARAM_STRUCT_T))
- return WLAN_STATUS_INVALID_LENGTH;
- ASSERT(pvSetBuffer);
- prOppPsParam = (P_PARAM_CUSTOM_OPPPS_PARAM_STRUCT_T) pvSetBuffer;
- kalMemZero(&rCmdOppPsParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T));
- rCmdOppPsParam.u4CTwindowMs = prOppPsParam->u4CTwindowMs;
- #if 0
- return wlanSendSetQueryCmd(prAdapter,
- CMD_ID_SET_OPPPS_PARAM,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetCommon,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T),
- (PUINT_8) &rCmdOppPsParam, pvSetBuffer, u4SetBufferLen);
- #else
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_SET_NOA_PARAM,
- TRUE,
- FALSE,
- TRUE,
- NULL,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T),
- (PUINT_8) &rCmdOppPsParam, pvSetBuffer, u4SetBufferLen);
- #endif
- }
- WLAN_STATUS
- wlanoidSetUApsdParam(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- P_PARAM_CUSTOM_UAPSD_PARAM_STRUCT_T prUapsdParam;
- CMD_CUSTOM_UAPSD_PARAM_STRUCT_T rCmdUapsdParam;
- P_PM_PROFILE_SETUP_INFO_T prPmProfSetupInfo;
- P_BSS_INFO_T prBssInfo;
- DEBUGFUNC("wlanoidSetUApsdParam");
- DBGLOG(P2P, TRACE, "\n");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- *pu4SetInfoLen = sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUCT_T);
- if (u4SetBufferLen < sizeof(PARAM_CUSTOM_UAPSD_PARAM_STRUCT_T))
- return WLAN_STATUS_INVALID_LENGTH;
- ASSERT(pvSetBuffer);
- prBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX]);
- prPmProfSetupInfo = &prBssInfo->rPmProfSetupInfo;
- prUapsdParam = (P_PARAM_CUSTOM_UAPSD_PARAM_STRUCT_T) pvSetBuffer;
- kalMemZero(&rCmdUapsdParam, sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T));
- rCmdUapsdParam.fgEnAPSD = prUapsdParam->fgEnAPSD;
- prAdapter->rWifiVar.fgSupportUAPSD = prUapsdParam->fgEnAPSD;
- rCmdUapsdParam.fgEnAPSD_AcBe = prUapsdParam->fgEnAPSD_AcBe;
- rCmdUapsdParam.fgEnAPSD_AcBk = prUapsdParam->fgEnAPSD_AcBk;
- rCmdUapsdParam.fgEnAPSD_AcVo = prUapsdParam->fgEnAPSD_AcVo;
- rCmdUapsdParam.fgEnAPSD_AcVi = prUapsdParam->fgEnAPSD_AcVi;
- prPmProfSetupInfo->ucBmpDeliveryAC =
- ((prUapsdParam->fgEnAPSD_AcBe << 0) |
- (prUapsdParam->fgEnAPSD_AcBk << 1) |
- (prUapsdParam->fgEnAPSD_AcVi << 2) | (prUapsdParam->fgEnAPSD_AcVo << 3));
- prPmProfSetupInfo->ucBmpTriggerAC =
- ((prUapsdParam->fgEnAPSD_AcBe << 0) |
- (prUapsdParam->fgEnAPSD_AcBk << 1) |
- (prUapsdParam->fgEnAPSD_AcVi << 2) | (prUapsdParam->fgEnAPSD_AcVo << 3));
- rCmdUapsdParam.ucMaxSpLen = prUapsdParam->ucMaxSpLen;
- prPmProfSetupInfo->ucUapsdSp = prUapsdParam->ucMaxSpLen;
- #if 0
- return wlanSendSetQueryCmd(prAdapter,
- CMD_ID_SET_UAPSD_PARAM,
- TRUE,
- FALSE,
- TRUE,
- nicCmdEventSetCommon,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T),
- (PUINT_8) &rCmdUapsdParam, pvSetBuffer, u4SetBufferLen);
- #else
- return wlanoidSendSetQueryP2PCmd(prAdapter,
- CMD_ID_SET_UAPSD_PARAM,
- TRUE,
- FALSE,
- TRUE,
- NULL,
- nicOidCmdTimeoutCommon,
- sizeof(CMD_CUSTOM_OPPPS_PARAM_STRUCT_T),
- (PUINT_8) &rCmdUapsdParam, pvSetBuffer, u4SetBufferLen);
- #endif
- }
- WLAN_STATUS
- wlanoidQueryP2pOpChannel(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- WLAN_STATUS rResult = WLAN_STATUS_FAILURE;
- /* PUINT_8 pucOpChnl = (PUINT_8)pvQueryBuffer; */
- do {
- if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL))
- break;
- if ((u4QueryBufferLen) && (pvQueryBuffer == NULL))
- break;
- if (u4QueryBufferLen < sizeof(UINT_8)) {
- *pu4QueryInfoLen = sizeof(UINT_8);
- rResult = WLAN_STATUS_BUFFER_TOO_SHORT;
- break;
- }
- #if 0
- if (!p2pFuncGetCurrentOpChnl(prAdapter, pucOpChnl)) {
- rResult = WLAN_STATUS_INVALID_DATA;
- break;
- }
- #else
- rResult = WLAN_STATUS_INVALID_DATA;
- break;
- #endif
- /*
- *pu4QueryInfoLen = sizeof(UINT_8);
- rResult = WLAN_STATUS_SUCCESS;
- */
- } while (FALSE);
- return rResult;
- } /* wlanoidQueryP2pOpChannel */
- WLAN_STATUS
- wlanoidQueryP2pVersion(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- WLAN_STATUS rResult = WLAN_STATUS_FAILURE;
- /* PUINT_8 pucVersionNum = (PUINT_8)pvQueryBuffer; */
- do {
- if ((prAdapter == NULL) || (pu4QueryInfoLen == NULL))
- break;
- if ((u4QueryBufferLen) && (pvQueryBuffer == NULL))
- break;
- if (u4QueryBufferLen < sizeof(UINT_8)) {
- *pu4QueryInfoLen = sizeof(UINT_8);
- rResult = WLAN_STATUS_BUFFER_TOO_SHORT;
- break;
- }
- } while (FALSE);
- return rResult;
- } /* wlanoidQueryP2pVersion */
- WLAN_STATUS
- wlanoidSetP2pSupplicantVersion(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS rResult = WLAN_STATUS_FAILURE;
- UINT_8 ucVersionNum;
- do {
- if ((prAdapter == NULL) || (pu4SetInfoLen == NULL)) {
- rResult = WLAN_STATUS_INVALID_DATA;
- break;
- }
- if ((u4SetBufferLen) && (pvSetBuffer == NULL)) {
- rResult = WLAN_STATUS_INVALID_DATA;
- break;
- }
- *pu4SetInfoLen = sizeof(UINT_8);
- if (u4SetBufferLen < sizeof(UINT_8)) {
- rResult = WLAN_STATUS_INVALID_LENGTH;
- break;
- }
- ucVersionNum = *((PUINT_8) pvSetBuffer);
- rResult = WLAN_STATUS_SUCCESS;
- } while (FALSE);
- return rResult;
- } /* wlanoidSetP2pSupplicantVersion */
- /*----------------------------------------------------------------------------*/
- /*!
- * \brief This routine is used to set the WPS mode.
- *
- * \param[in] pvAdapter Pointer to the Adapter structure.
- * \param[in] pvSetBuffer A pointer to the buffer that holds the data to be set.
- * \param[in] u4SetBufferLen The length of the set buffer.
- * \param[out] pu4SetInfoLen If the call is successful, returns the number of
- * bytes read from the set buffer. If the call failed
- * due to invalid length of the set buffer, returns
- * the amount of storage needed.
- *
- * \retval WLAN_STATUS_SUCCESS
- * \retval WLAN_STATUS_INVALID_LENGTH
- */
- /*----------------------------------------------------------------------------*/
- WLAN_STATUS
- wlanoidSetP2pWPSmode(IN P_ADAPTER_T prAdapter,
- IN PVOID pvSetBuffer, IN UINT_32 u4SetBufferLen, OUT PUINT_32 pu4SetInfoLen)
- {
- WLAN_STATUS status;
- UINT_32 u4IsWPSmode = 0;
- DEBUGFUNC("wlanoidSetP2pWPSmode");
- ASSERT(prAdapter);
- ASSERT(pu4SetInfoLen);
- if (pvSetBuffer)
- u4IsWPSmode = *(PUINT_32) pvSetBuffer;
- else
- u4IsWPSmode = 0;
- if (u4IsWPSmode)
- prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 1;
- else
- prAdapter->rWifiVar.prP2pFsmInfo->fgIsWPSMode = 0;
- status = nicUpdateBss(prAdapter, NETWORK_TYPE_P2P_INDEX);
- return status;
- } /* end of wlanoidSetP2pWPSmode() */
- #if CFG_SUPPORT_P2P_RSSI_QUERY
- WLAN_STATUS
- wlanoidQueryP2pRssi(IN P_ADAPTER_T prAdapter,
- IN PVOID pvQueryBuffer, IN UINT_32 u4QueryBufferLen, OUT PUINT_32 pu4QueryInfoLen)
- {
- DEBUGFUNC("wlanoidQueryP2pRssi");
- ASSERT(prAdapter);
- ASSERT(pu4QueryInfoLen);
- if (u4QueryBufferLen)
- ASSERT(pvQueryBuffer);
- *pu4QueryInfoLen = sizeof(PARAM_RSSI);
- /* Check for query buffer length */
- if (u4QueryBufferLen < *pu4QueryInfoLen) {
- DBGLOG(REQ, WARN, "Too short length %u\n", u4QueryBufferLen);
- return WLAN_STATUS_BUFFER_TOO_SHORT;
- }
- if (prAdapter->fgIsP2pLinkQualityValid == TRUE &&
- (kalGetTimeTick() - prAdapter->rP2pLinkQualityUpdateTime) <= CFG_LINK_QUALITY_VALID_PERIOD) {
- PARAM_RSSI rRssi;
- rRssi = (PARAM_RSSI) prAdapter->rP2pLinkQuality.cRssi; /* ranged from (-128 ~ 30) in unit of dBm */
- if (rRssi > PARAM_WHQL_RSSI_MAX_DBM)
- rRssi = PARAM_WHQL_RSSI_MAX_DBM;
- else if (rRssi < PARAM_WHQL_RSSI_MIN_DBM)
- rRssi = PARAM_WHQL_RSSI_MIN_DBM;
- kalMemCopy(pvQueryBuffer, &rRssi, sizeof(PARAM_RSSI));
- return WLAN_STATUS_SUCCESS;
- }
- #ifdef LINUX
- return wlanSendSetQueryCmd(prAdapter,
- CMD_ID_GET_LINK_QUALITY,
- FALSE,
- TRUE,
- TRUE,
- nicCmdEventQueryLinkQuality,
- nicOidCmdTimeoutCommon,
- *pu4QueryInfoLen, pvQueryBuffer, pvQueryBuffer, u4QueryBufferLen);
- #else
- return wlanSendSetQueryCmd(prAdapter,
- CMD_ID_GET_LINK_QUALITY,
- FALSE,
- TRUE,
- TRUE,
- nicCmdEventQueryLinkQuality,
- nicOidCmdTimeoutCommon, 0, NULL, pvQueryBuffer, u4QueryBufferLen);
- #endif
- } /* wlanoidQueryP2pRssi */
- #endif
|