p2p_fsm.h 78 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174
  1. /*
  2. ** Id: //Department/DaVinci/TRUNK/WiFi_P2P_Driver/include/mgmt/p2p_fsm.h#23
  3. */
  4. /*! \file p2p_fsm.h
  5. \brief Declaration of functions and finite state machine for P2P Module.
  6. Declaration of functions and finite state machine for P2P Module.
  7. */
  8. /*
  9. ** Log: p2p_fsm.h
  10. **
  11. ** 09 12 2012 wcpadmin
  12. ** [ALPS00276400] Remove MTK copyright and legal header on GPL/LGPL related packages
  13. ** .
  14. **
  15. ** 08 14 2012 yuche.tsai
  16. ** NULL
  17. ** Fix compile error.
  18. **
  19. ** 07 26 2012 yuche.tsai
  20. ** [ALPS00324337] [ALPS.JB][Hot-Spot] Driver update for Hot-Spot
  21. ** Update driver code of ALPS.JB for hot-spot.
  22. **
  23. ** 07 19 2012 yuche.tsai
  24. ** NULL
  25. ** Code update for JB.
  26. *
  27. * 07 18 2012 yuche.tsai
  28. * NULL
  29. * add one file.
  30. *
  31. * 12 02 2011 yuche.tsai
  32. * NULL
  33. * Resolve class 3 error issue under AP mode.
  34. *
  35. * data frame may TX before Assoc Response TX.
  36. *
  37. * 11 11 2011 yuche.tsai
  38. * NULL
  39. * Fix work thread cancel issue.
  40. *
  41. * 11 11 2011 yuche.tsai
  42. * NULL
  43. * Fix default device name issue.
  44. *
  45. * 11 09 2011 yuche.tsai
  46. * [WCXRP00001093] [Need Patch][Volunteer Patch] Service Discovery 2.0 state transition issue.
  47. * Fix SD2.0 issue which may cause KE. (Monkey test)
  48. *
  49. * 11 08 2011 yuche.tsai
  50. * [WCXRP00001094] [Volunteer Patch][Driver] Driver version & supplicant version
  51. * query & set support for service discovery version check.
  52. * Add support for driver version query & p2p supplicant verseion set.
  53. * For new service discovery mechanism sync.
  54. *
  55. * 10 18 2011 yuche.tsai
  56. * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
  57. * Support Channel Query.
  58. *
  59. * 10 18 2011 yuche.tsai
  60. * [WCXRP00001045] [WiFi Direct][Driver] Check 2.1 branch.
  61. * New 2.1 branch
  62. *
  63. * 09 01 2011 yuche.tsai
  64. * NULL
  65. * Fix channel stay interval.
  66. * Sync channel stay interval & channel request interval under AP mode..
  67. *
  68. * 08 30 2011 yuche.tsai
  69. * [WCXRP00000953] [Volunteer Patch][Driver] Hot Spot Channel ASSERT issue.
  70. * Fix hot spot FW assert issue when under concurrent case. (DBG enable only)
  71. *
  72. * 08 16 2011 cp.wu
  73. * [WCXRP00000934] [MT6620 Wi-Fi][Driver][P2P] Wi-Fi hot spot with auto sparse channel residence
  74. * auto channel decision for 2.4GHz hot spot mode
  75. *
  76. * 08 16 2011 yuche.tsai
  77. * NULL
  78. * Fix scan policy for Active LISTEN scan.
  79. *
  80. * 08 09 2011 yuche.tsai
  81. * [WCXRP00000919] [Volunteer Patch][WiFi Direct][Driver] Invitation New Feature.
  82. * Invitation Feature add on.
  83. *
  84. * 08 02 2011 yuche.tsai
  85. * [WCXRP00000896] [Volunteer Patch][WiFi Direct][Driver] GO with multiple client,
  86. * TX deauth to a disconnecting device issue.
  87. * Support TX Deauth Issue.
  88. *
  89. * 07 26 2011 yuche.tsai
  90. * [WCXRP00000875] [Volunteer Patch][WiFi Direct][Driver] MT6620 IOT issue with realtek test bed solution.
  91. * Turn off persistent group support for V2.0 release.
  92. *
  93. * 07 18 2011 yuche.tsai
  94. * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
  95. * Fix compile error.
  96. *
  97. * 07 18 2011 yuche.tsai
  98. * [WCXRP00000856] [Volunteer Patch][WiFi Direct][Driver] MT6620 WiFi Direct IOT Issue with BCM solution.
  99. * Fix MT6620 WiFi Direct IOT Issue with BCM solution.
  100. *
  101. * 07 11 2011 yuche.tsai
  102. * [WCXRP00000845] [Volunteer Patch][WiFi Direct] WiFi Direct Device Connection Robustness
  103. * Enhance Connection Robustness.
  104. *
  105. * 07 08 2011 yuche.tsai
  106. * [WCXRP00000841] [Volunteer Patch][WiFi Direct] Group Owner Setting.
  107. * Update GO configure parameter.
  108. *
  109. * 07 05 2011 yuche.tsai
  110. * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
  111. * Disable enhancement II for debugging.
  112. *
  113. * 07 05 2011 yuche.tsai
  114. * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
  115. * Refine compile flag.
  116. *
  117. * 07 05 2011 yuche.tsai
  118. * [WCXRP00000821] [Volunteer Patch][WiFi Direct][Driver] WiFi Direct Connection Speed Issue
  119. * Add wifi direct connection enhancement method I, II & VI.
  120. *
  121. * 06 20 2011 yuche.tsai
  122. * [WCXRP00000799] [Volunteer Patch][MT6620][Driver] Connection Indication Twice Issue.
  123. * Fix connection indication twice issue.
  124. *
  125. * 06 07 2011 yuche.tsai
  126. * [WCXRP00000763] [Volunteer Patch][MT6620][Driver] RX Service Discovery Frame under AP mode Issue
  127. * Fix RX SD request under AP mode issue.
  128. *
  129. * 05 04 2011 yuche.tsai
  130. * NULL
  131. * Support partial persistent group function.
  132. *
  133. * 04 20 2011 terry.wu
  134. * [WCXRP00000660] [MT6620 Wi-Fi][Driver] Remove flag CFG_WIFI_DIRECT_MOVED
  135. * Remove CFG_WIFI_DIRECT_MOVED.
  136. *
  137. * 04 08 2011 yuche.tsai
  138. * [WCXRP00000624] [Volunteer Patch][MT6620][Driver] Add device discoverability support for GO.
  139. * Add device discoverability support.
  140. *
  141. * 03 25 2011 yuche.tsai
  142. * NULL
  143. * Improve some error handleing.
  144. *
  145. * 03 22 2011 george.huang
  146. * [WCXRP00000504] [MT6620 Wi-Fi][FW] Support Sigma CAPI for power saving related command
  147. * link with supplicant commands
  148. *
  149. * 03 22 2011 yuche.tsai
  150. * NULL
  151. * 1.Shorten the LISTEN interval.
  152. * 2. Fix IF address issue when we are GO
  153. * 3. Fix LISTEN channel issue.
  154. *
  155. * 03 21 2011 yuche.tsai
  156. * NULL
  157. * Change P2P Connection Request Flow.
  158. *
  159. * 03 19 2011 yuche.tsai
  160. * [WCXRP00000584] [Volunteer Patch][MT6620][Driver] Add beacon timeout support for WiFi Direct.
  161. * Add beacon timeout support.
  162. *
  163. * 03 19 2011 yuche.tsai
  164. * [WCXRP00000581] [Volunteer Patch][MT6620][Driver] P2P IE in Assoc Req Issue
  165. * Append P2P IE in Assoc Req, so that GC can be discovered in probe response of GO.
  166. *
  167. * 03 18 2011 yuche.tsai
  168. * [WCXRP00000574] [Volunteer Patch][MT6620][Driver] Modify P2P FSM Connection Flow
  169. * Modify connection flow after Group Formation Complete, or device connect to a GO.
  170. * Instead of request channel & connect directly, we use scan to allocate channel bandwidth & connect after RX BCN.
  171. *
  172. * 03 15 2011 yuche.tsai
  173. * [WCXRP00000560] [Volunteer Patch][MT6620][Driver] P2P Connection from UI using KEY/DISPLAY issue
  174. * Fix some configure method issue.
  175. *
  176. * 03 10 2011 yuche.tsai
  177. * NULL
  178. * Add P2P API.
  179. *
  180. * 03 07 2011 yuche.tsai
  181. * [WCXRP00000502] [Volunteer Patch][MT6620][Driver] Fix group ID issue when doing Group Formation.
  182. * .
  183. *
  184. * 03 07 2011 wh.su
  185. * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
  186. * rename the define to anti_pviracy.
  187. *
  188. * 03 05 2011 wh.su
  189. * [WCXRP00000506] [MT6620 Wi-Fi][Driver][FW] Add Security check related code
  190. * add the code to get the check rsponse and indicate to app.
  191. *
  192. * 03 01 2011 yuche.tsai
  193. * [WCXRP00000501] [Volunteer Patch][MT6620][Driver] No common channel issue when doing GO formation
  194. * Update channel issue when doing GO formation..
  195. *
  196. * 03 01 2011 yuche.tsai
  197. * [WCXRP00000245] 1. Invitation Request/Response.
  198. 2. Provision Discovery Request/Response
  199. * Update Service Discovery Related wlanoid function.
  200. *
  201. * 02 18 2011 wh.su
  202. * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
  203. * fixed the ioctl setting that index not map to spec defined config method.
  204. *
  205. * 02 18 2011 yuche.tsai
  206. * [WCXRP00000480] [Volunteer Patch][MT6620][Driver] WCS IE format issue
  207. * Fix WSC IE BE format issue.
  208. *
  209. * 02 17 2011 wh.su
  210. * [WCXRP00000471] [MT6620 Wi-Fi][Driver] Add P2P Provison discovery append Config Method attribute at WSC IE
  211. * append the WSC IE config method attribute at provision discovery request.
  212. *
  213. * 02 11 2011 yuche.tsai
  214. * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
  215. * Add two function prototype.
  216. *
  217. * 02 10 2011 yuche.tsai
  218. * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
  219. * Support Disassoc & Deauthentication for Hot-Spot.
  220. *
  221. * 02 09 2011 yuche.tsai
  222. * [WCXRP00000245] 1. Invitation Request/Response.
  223. 2. Provision Discovery Request/Response
  224. * Add Service Discovery Indication Related code.
  225. *
  226. * 02 09 2011 yuche.tsai
  227. * [WCXRP00000431] [Volunteer Patch][MT6620][Driver] Add MLME support for deauthentication under AP(Hot-Spot) mode.
  228. * Add Support for MLME deauthentication for Hot-Spot.
  229. *
  230. * 02 09 2011 yuche.tsai
  231. * [WCXRP00000429] [Volunteer Patch][MT6620][Driver] Hot Spot Client Limit Issue
  232. * Fix Client Limit Issue.
  233. *
  234. * 01 26 2011 yuche.tsai
  235. * [WCXRP00000245] 1. Invitation Request/Response.
  236. 2. Provision Discovery Request/Response
  237. * Add Service Discovery Function.
  238. *
  239. * 01 25 2011 terry.wu
  240. * [WCXRP00000393] [MT6620 Wi-Fi][Driver] Add new module insert parameter
  241. * Add a new module parameter to indicate current runnig mode, P2P or AP.
  242. *
  243. * 01 19 2011 george.huang
  244. * [WCXRP00000355] [MT6620 Wi-Fi] Set WMM-PS related setting with qualifying AP capability
  245. * Null NOA attribute setting when no related parameters.
  246. *
  247. * 01 12 2011 yuche.tsai
  248. * [WCXRP00000352] [Volunteer Patch][MT6620][Driver] P2P Statsion Record Client List Issue
  249. * Modify some behavior of AP mode.
  250. *
  251. * 12 22 2010 yuche.tsai
  252. * [WCXRP00000245] 1. Invitation Request/Response.
  253. 2. Provision Discovery Request/Response
  254. * Fix Compile Error.
  255. *
  256. * 12 15 2010 yuche.tsai
  257. * [WCXRP00000245] 1. Invitation Request/Response.
  258. 2. Provision Discovery Request/Response
  259. * Refine Connection Flow.
  260. *
  261. * 12 08 2010 yuche.tsai
  262. * [WCXRP00000244] [MT6620][Driver] Add station record type for each client when in AP mode.
  263. * Change STA Type under AP mode. We would tell if client is a P2P device or a legacy client
  264. * by checking the P2P IE in assoc req frame.
  265. *
  266. * 12 02 2010 yuche.tsai
  267. * NULL
  268. * Update P2P Connection Policy for Invitation.
  269. *
  270. * 12 02 2010 yuche.tsai
  271. * NULL
  272. * Update P2P Connection Policy for Invitation & Provision Discovery.
  273. *
  274. * 11 30 2010 yuche.tsai
  275. * NULL
  276. * Invitation & Provision Discovery Indication.
  277. *
  278. * 11 30 2010 yuche.tsai
  279. * NULL
  280. * Update Configure Method indication & selection for Provision Discovery & GO_NEGO_REQ
  281. *
  282. * 11 29 2010 yuche.tsai
  283. * NULL
  284. * Update P2P related function for INVITATION & PROVISION DISCOVERY.
  285. *
  286. * 11 26 2010 george.huang
  287. * [WCXRP00000152] [MT6620 Wi-Fi] AP mode power saving function
  288. * Update P2P PS for NOA function.
  289. *
  290. * 11 25 2010 yuche.tsai
  291. * NULL
  292. * Update Code for Invitation Related Function.
  293. *
  294. * 11 17 2010 wh.su
  295. * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID[WCXRP00000179] [MT6620 Wi-Fi][FW]
  296. * Set the Tx lowest rate at wlan table for normal operation
  297. * fixed some ASSERT check.
  298. *
  299. * 11 04 2010 wh.su
  300. * [WCXRP00000164] [MT6620 Wi-Fi][Driver] Support the p2p random SSID
  301. * adding the p2p random ssid support.
  302. *
  303. * 10 20 2010 wh.su
  304. * [WCXRP00000124] [MT6620 Wi-Fi] [Driver] Support the dissolve P2P Group
  305. * Add the code to support disconnect p2p group
  306. *
  307. * 10 08 2010 wh.su
  308. * [WCXRP00000085] [MT6620 Wif-Fi] [Driver] update the modified p2p state machine
  309. * update the frog's new p2p state machine.
  310. *
  311. * 10 04 2010 wh.su
  312. * [WCXRP00000081] [MT6620][Driver] Fix the compiling error at WinXP while enable P2P
  313. * fixed compiling error while enable p2p.
  314. *
  315. * 09 21 2010 kevin.huang
  316. * [WCXRP00000054] [MT6620 Wi-Fi][Driver] Restructure driver for second Interface
  317. * Isolate P2P related function for Hardware Software Bundle
  318. *
  319. * 09 10 2010 wh.su
  320. * NULL
  321. * fixed the compiling error at WinXP.
  322. *
  323. * 09 07 2010 wh.su
  324. * NULL
  325. * adding the code for beacon/probe req/ probe rsp wsc ie at p2p.
  326. *
  327. * 09 03 2010 kevin.huang
  328. * NULL
  329. * Refine #include sequence and solve recursive/nested #include issue
  330. *
  331. * 08 26 2010 yuche.tsai
  332. * NULL
  333. * Add connection abort message event prototype.
  334. *
  335. * 08 20 2010 kevin.huang
  336. * NULL
  337. * Modify AAA Module for changing STA STATE 3 at p2p/bowRunEventAAAComplete()
  338. *
  339. * 08 16 2010 yuche.tsai
  340. * NULL
  341. * Fix P2P Intended Interface Address Bug.
  342. * Extend GO Nego Timeout Time.
  343. *
  344. * 08 16 2010 yuche.tsai
  345. * NULL
  346. * Extend Listen Interval default value & remove deprecated variable.
  347. *
  348. * 08 16 2010 kevin.huang
  349. * NULL
  350. * Refine AAA functions
  351. *
  352. * 08 12 2010 kevin.huang
  353. * NULL
  354. * Refine bssProcessProbeRequest() and bssSendBeaconProbeResponse()
  355. *
  356. * 08 12 2010 yuche.tsai
  357. * NULL
  358. * Add function prototype for join complete.
  359. *
  360. * 08 11 2010 yuche.tsai
  361. * NULL
  362. * Add some function proto type for P2P FSM under provisioning phase..
  363. *
  364. * 08 11 2010 yuche.tsai
  365. * NULL
  366. * Change P2P data structure for supporting
  367. * 1. P2P Device discovery.
  368. * 2. P2P Group Negotiation.
  369. * 3. P2P JOIN
  370. *
  371. * 08 05 2010 yuche.tsai
  372. * NULL
  373. * Check-in P2P Device Discovery Feature.
  374. *
  375. * 08 03 2010 george.huang
  376. * NULL
  377. * handle event for updating NOA parameters indicated from FW
  378. *
  379. * 08 02 2010 yuche.tsai
  380. * NULL
  381. * P2P Group Negotiation Code Check in.
  382. *
  383. * 07 26 2010 yuche.tsai
  384. *
  385. * Update P2P FSM header file.
  386. *
  387. * 07 23 2010 cp.wu
  388. *
  389. * P2P/RSN/WAPI IEs need to be declared with compact structure.
  390. *
  391. * 07 21 2010 yuche.tsai
  392. *
  393. * Add for P2P Scan Result Parsing & Saving.
  394. *
  395. * 07 19 2010 yuche.tsai
  396. *
  397. * Update P2P FSM header file.
  398. *
  399. * 07 08 2010 cp.wu
  400. *
  401. * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
  402. *
  403. * 06 21 2010 yuche.tsai
  404. * [WPD00003839][MT6620 5931][P2P] Feature migration
  405. * Fix some P2P function prototype.
  406. *
  407. * 06 17 2010 yuche.tsai
  408. * [WPD00003839][MT6620 5931][P2P] Feature migration
  409. * First draft for migration P2P FSM from FW to Driver.
  410. *
  411. * 03 18 2010 kevin.huang
  412. * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
  413. * Rename CFG flag for P2P
  414. *
  415. * 02 26 2010 kevin.huang
  416. * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
  417. * Modify parameter of p2pStartGO
  418. *
  419. * 02 23 2010 kevin.huang
  420. * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
  421. * Add Wi-Fi Direct SSID and P2P GO Test Mode
  422. *
  423. * 02 04 2010 kevin.huang
  424. * [BORA00000603][WIFISYS] [New Feature] AAA Module Support
  425. * Add AAA Module Support, Revise Net Type to Net Type Index for array lookup
  426. */
  427. #ifndef _P2P_FSM_H
  428. #define _P2P_FSM_H
  429. /*******************************************************************************
  430. * C O M P I L E R F L A G S
  431. ********************************************************************************
  432. */
  433. #define CID52_53_54 0
  434. /*******************************************************************************
  435. * E X T E R N A L R E F E R E N C E S
  436. ********************************************************************************
  437. */
  438. /*******************************************************************************
  439. * C O N S T A N T S
  440. ********************************************************************************
  441. */
  442. /*******************************************************************************
  443. * D A T A T Y P E S
  444. ********************************************************************************
  445. */
  446. typedef enum _ENUM_P2P_STATE_T {
  447. P2P_STATE_IDLE = 0,
  448. P2P_STATE_SCAN,
  449. P2P_STATE_AP_CHANNEL_DETECT,
  450. P2P_STATE_REQING_CHANNEL,
  451. P2P_STATE_CHNL_ON_HAND, /* Requesting Channel to Send Specific Frame. */
  452. P2P_STATE_GC_JOIN, /* Sending Specific Frame. May extending channel by other event. */
  453. P2P_STATE_NUM
  454. } ENUM_P2P_STATE_T, *P_ENUM_P2P_STATE_T;
  455. typedef enum _ENUM_CHANNEL_REQ_TYPE_T {
  456. CHANNEL_REQ_TYPE_REMAIN_ON_CHANNEL,
  457. CHANNEL_REQ_TYPE_GC_JOIN_REQ,
  458. CHANNEL_REQ_TYPE_GO_START_BSS
  459. } ENUM_CHANNEL_REQ_TYPE_T, *P_ENUM_CHANNEL_REQ_TYPE_T;
  460. typedef enum _ENUM_BUFFER_TYPE_T {
  461. ENUM_FRAME_TYPE_EXTRA_IE_BEACON,
  462. ENUM_FRAME_TYPE_EXTRA_IE_ASSOC_RSP,
  463. ENUM_FRAME_TYPE_EXTRA_IE_PROBE_RSP,
  464. ENUM_FRAME_TYPE_PROBE_RSP_TEMPLATE,
  465. ENUM_FRAME_TYPE_BEACON_TEMPLATE,
  466. ENUM_FRAME_IE_NUM
  467. } ENUM_BUFFER_TYPE_T, *P_ENUM_BUFFER_TYPE_T;
  468. typedef enum _ENUM_HIDDEN_SSID_TYPE_T {
  469. ENUM_HIDDEN_SSID_NONE,
  470. ENUM_HIDDEN_SSID_LEN,
  471. ENUM_HIDDEN_SSID_ZERO_CONTENT,
  472. ENUM_HIDDEN_SSID_NUM
  473. } ENUM_HIDDEN_SSID_TYPE_T, *P_ENUM_HIDDEN_SSID_TYPE_T;
  474. typedef struct _P2P_SSID_STRUCT_T {
  475. UINT_8 aucSsid[32];
  476. UINT_8 ucSsidLen;
  477. } P2P_SSID_STRUCT_T, *P_P2P_SSID_STRUCT_T;
  478. typedef struct _P2P_STATION_INFO_T {
  479. UINT_32 u4InactiveTime;
  480. UINT_32 u4RxBytes; /* TODO: */
  481. UINT_32 u4TxBytes; /* TODO: */
  482. UINT_32 u4RxPackets; /* TODO: */
  483. UINT_32 u4TxPackets; /* TODO: */
  484. /* TODO: Add more for requirement. */
  485. } P2P_STATION_INFO_T, *P_P2P_STATION_INFO_T;
  486. typedef struct _AP_CRYPTO_SETTINGS_T {
  487. UINT_32 u4WpaVersion;
  488. UINT_32 u4CipherGroup;
  489. INT_32 i4NumOfCiphers;
  490. UINT_32 aucCiphersPairwise[5];
  491. INT_32 i4NumOfAkmSuites;
  492. UINT_32 aucAkmSuites[2];
  493. BOOLEAN fgIsControlPort;
  494. UINT_16 u2ControlPortBE;
  495. BOOLEAN fgIsControlPortEncrypt;
  496. } AP_CRYPTO_SETTINGS_T, *P_AP_CRYPTO_SETTINGS_T;
  497. /*-------------------- P2P FSM ACTION STRUCT ---------------------*/
  498. typedef struct _P2P_CHNL_REQ_INFO_T {
  499. BOOLEAN fgIsChannelRequested;
  500. UINT_8 ucSeqNumOfChReq;
  501. UINT_64 u8Cookie;
  502. UINT_8 ucReqChnlNum;
  503. ENUM_BAND_T eBand;
  504. ENUM_CHNL_EXT_T eChnlSco;
  505. UINT_32 u4MaxInterval;
  506. ENUM_CHANNEL_REQ_TYPE_T eChannelReqType;
  507. UINT_8 ucOriChnlNum;
  508. ENUM_BAND_T eOriBand;
  509. ENUM_CHNL_EXT_T eOriChnlSco;
  510. UINT_32 NFC_BEAM; /*NFC Beam + Indication */
  511. } P2P_CHNL_REQ_INFO_T, *P_P2P_CHNL_REQ_INFO_T;
  512. typedef struct _P2P_SCAN_REQ_INFO_T {
  513. ENUM_SCAN_TYPE_T eScanType;
  514. ENUM_SCAN_CHANNEL eChannelSet;
  515. UINT_16 u2PassiveDewellTime;
  516. UINT_8 ucSeqNumOfScnMsg;
  517. BOOLEAN fgIsAbort;
  518. BOOLEAN fgIsScanRequest;
  519. UINT_8 ucNumChannelList;
  520. RF_CHANNEL_INFO_T arScanChannelList[MAXIMUM_OPERATION_CHANNEL_LIST];
  521. UINT_32 u4BufLength;
  522. UINT_8 aucIEBuf[MAX_IE_LENGTH];
  523. P2P_SSID_STRUCT_T rSsidStruct; /* Currently we can only take one SSID scan request */
  524. BOOLEAN fgIsGOInitialDone;
  525. } P2P_SCAN_REQ_INFO_T, *P_P2P_SCAN_REQ_INFO_T;
  526. typedef struct _P2P_CONNECTION_REQ_INFO_T {
  527. BOOLEAN fgIsConnRequest;
  528. P2P_SSID_STRUCT_T rSsidStruct;
  529. UINT_8 aucBssid[MAC_ADDR_LEN];
  530. /* For ASSOC Req. */
  531. UINT_32 u4BufLength;
  532. UINT_8 aucIEBuf[MAX_IE_LENGTH];
  533. } P2P_CONNECTION_REQ_INFO_T, *P_P2P_CONNECTION_REQ_INFO_T;
  534. typedef struct _P2P_MGMT_TX_REQ_INFO_T {
  535. BOOLEAN fgIsMgmtTxRequested;
  536. P_MSDU_INFO_T prMgmtTxMsdu;
  537. UINT_64 u8Cookie;
  538. } P2P_MGMT_TX_REQ_INFO_T, *P_P2P_MGMT_TX_REQ_INFO_T;
  539. typedef struct _P2P_BEACON_UPDATE_INFO_T {
  540. PUINT_8 pucBcnHdr;
  541. UINT_32 u4BcnHdrLen;
  542. PUINT_8 pucBcnBody;
  543. UINT_32 u4BcnBodyLen;
  544. } P2P_BEACON_UPDATE_INFO_T, *P_P2P_BEACON_UPDATE_INFO_T;
  545. typedef struct _P2P_PROBE_RSP_UPDATE_INFO_T {
  546. P_MSDU_INFO_T prProbeRspMsduTemplate;
  547. } P2P_PROBE_RSP_UPDATE_INFO_T, *P_P2P_PROBE_RSP_UPDATE_INFO_T;
  548. typedef struct _P2P_ASSOC_RSP_UPDATE_INFO_T {
  549. PUINT_8 pucAssocRspExtIE;
  550. UINT_16 u2AssocIELen;
  551. } P2P_ASSOC_RSP_UPDATE_INFO_T, *P_P2P_ASSOC_RSP_UPDATE_INFO_T;
  552. typedef struct _P2P_JOIN_INFO_T {
  553. UINT_32 ucSeqNumOfReqMsg;
  554. UINT_8 ucAvailableAuthTypes;
  555. P_STA_RECORD_T prTargetStaRec;
  556. P2P_SSID_STRUCT_T rSsidStruct;
  557. BOOLEAN fgIsJoinComplete;
  558. /* For ASSOC Rsp. */
  559. UINT_32 u4BufLength;
  560. UINT_8 aucIEBuf[MAX_IE_LENGTH];
  561. } P2P_JOIN_INFO_T, *P_P2P_JOIN_INFO_T;
  562. #if CFG_SUPPORT_WFD
  563. #define WFD_FLAGS_DEV_INFO_VALID BIT(0) /* 1. WFD_DEV_INFO, 2. WFD_CTRL_PORT, 3. WFD_MAT_TP. */
  564. #define WFD_FLAGS_SINK_INFO_VALID BIT(1) /* 1. WFD_SINK_STATUS, 2. WFD_SINK_MAC. */
  565. #define WFD_FLAGS_ASSOC_MAC_VALID BIT(2) /* 1. WFD_ASSOC_MAC. */
  566. #define WFD_FLAGS_EXT_CAPABILITY_VALID BIT(3) /* 1. WFD_EXTEND_CAPABILITY. */
  567. struct _WFD_CFG_SETTINGS_T {
  568. UINT_32 u4WfdCmdType;
  569. UINT_8 ucWfdEnable;
  570. UINT_8 ucWfdCoupleSinkStatus;
  571. UINT_8 ucWfdSessionAvailable; /* 0: NA 1:Set 2:Clear */
  572. UINT_8 ucWfdSigmaMode;
  573. UINT_16 u2WfdDevInfo;
  574. UINT_16 u2WfdControlPort;
  575. UINT_16 u2WfdMaximumTp;
  576. UINT_16 u2WfdExtendCap;
  577. UINT_8 aucWfdCoupleSinkAddress[MAC_ADDR_LEN];
  578. UINT_8 aucWfdAssociatedBssid[MAC_ADDR_LEN];
  579. UINT_8 aucWfdVideoIp[4];
  580. UINT_8 aucWfdAudioIp[4];
  581. UINT_16 u2WfdVideoPort;
  582. UINT_16 u2WfdAudioPort;
  583. UINT_32 u4WfdFlag;
  584. UINT_32 u4WfdPolicy;
  585. UINT_32 u4WfdState;
  586. UINT_8 aucWfdSessionInformationIE[24 * 8];
  587. UINT_16 u2WfdSessionInformationIELen;
  588. UINT_8 aucReserved1[2];
  589. UINT_8 aucWfdPrimarySinkMac[MAC_ADDR_LEN];
  590. UINT_8 aucWfdSecondarySinkMac[MAC_ADDR_LEN];
  591. UINT_32 u4WfdAdvancedFlag;
  592. /* Group 1 64 bytes */
  593. UINT_8 aucWfdLocalIp[4];
  594. UINT_16 u2WfdLifetimeAc2; /* Unit is 2 TU */
  595. UINT_16 u2WfdLifetimeAc3; /* Unit is 2 TU */
  596. UINT_16 u2WfdCounterThreshold; /* Unit is ms */
  597. UINT_8 aucReverved2[54];
  598. /* Group 2 64 bytes */
  599. UINT_8 aucReverved3[64];
  600. /* Group 3 64 bytes */
  601. UINT_8 aucReverved4[64];
  602. };
  603. struct _WFD_DBG_CFG_SETTINGS_T {
  604. UINT_8 ucWfdDebugMode;
  605. UINT_16 u2WfdSNShowPeiroid;
  606. UINT_8 Reserved;
  607. };
  608. #endif
  609. struct _P2P_FSM_INFO_T {
  610. /* State related. */
  611. ENUM_P2P_STATE_T ePreviousState;
  612. ENUM_P2P_STATE_T eCurrentState;
  613. /* Channel related. */
  614. P2P_CHNL_REQ_INFO_T rChnlReqInfo;
  615. /* Scan related. */
  616. P2P_SCAN_REQ_INFO_T rScanReqInfo;
  617. /* Connection related. */
  618. P2P_CONNECTION_REQ_INFO_T rConnReqInfo;
  619. /* Mgmt tx related. */
  620. P2P_MGMT_TX_REQ_INFO_T rMgmtTxInfo;
  621. /* Beacon related. */
  622. P2P_BEACON_UPDATE_INFO_T rBcnContentInfo;
  623. /* Probe Response related. */
  624. P2P_PROBE_RSP_UPDATE_INFO_T rProbeRspContentInfo;
  625. /* Assoc Rsp related. */
  626. P2P_ASSOC_RSP_UPDATE_INFO_T rAssocRspContentInfo;
  627. /* GC Join related. */
  628. P2P_JOIN_INFO_T rJoinInfo;
  629. /* FSM Timer */
  630. /* TIMER_T rP2pFsmTimeoutTimer; */
  631. /* GC Target BSS. */
  632. P_BSS_DESC_T prTargetBss;
  633. /* GC Connection Request. */
  634. BOOLEAN fgIsConnectionRequested;
  635. BOOLEAN fgIsApMode;
  636. /* Channel grant interval. */
  637. UINT_32 u4GrantInterval;
  638. /* Packet filter for P2P module. */
  639. UINT_32 u4P2pPacketFilter;
  640. /* vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv Prepare for use vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv */
  641. /* Msg event queue. */
  642. LINK_T rMsgEventQueue;
  643. #if CFG_SUPPORT_WFD
  644. WFD_CFG_SETTINGS_T rWfdConfigureSettings;
  645. WFD_DBG_CFG_SETTINGS_T rWfdDebugSetting;
  646. #endif
  647. BOOLEAN fgIsWPSMode;
  648. };
  649. /*---------------- Messages -------------------*/
  650. typedef struct _MSG_P2P_SCAN_REQUEST_T {
  651. MSG_HDR_T rMsgHdr; /* Must be the first member */
  652. P_P2P_SSID_STRUCT_T prSSID;
  653. INT_32 i4SsidNum;
  654. UINT_32 u4NumChannel;
  655. PUINT_8 pucIEBuf;
  656. UINT_32 u4IELen;
  657. BOOLEAN fgIsAbort;
  658. RF_CHANNEL_INFO_T arChannelListInfo[1];
  659. } MSG_P2P_SCAN_REQUEST_T, *P_MSG_P2P_SCAN_REQUEST_T;
  660. typedef struct _MSG_P2P_CHNL_REQUEST_T {
  661. MSG_HDR_T rMsgHdr; /* Must be the first member */
  662. UINT_64 u8Cookie;
  663. UINT_32 u4Duration;
  664. ENUM_CHNL_EXT_T eChnlSco;
  665. RF_CHANNEL_INFO_T rChannelInfo;
  666. } MSG_P2P_CHNL_REQUEST_T, *P_MSG_P2P_CHNL_REQUEST_T;
  667. typedef struct _MSG_P2P_CHNL_ABORT_T {
  668. MSG_HDR_T rMsgHdr; /* Must be the first member */
  669. UINT_64 u8Cookie;
  670. } MSG_P2P_CHNL_ABORT_T, *P_MSG_P2P_CHNL_ABORT_T;
  671. typedef struct _MSG_P2P_CONNECTION_REQUEST_T {
  672. MSG_HDR_T rMsgHdr; /* Must be the first member */
  673. P2P_SSID_STRUCT_T rSsid;
  674. UINT_8 aucBssid[MAC_ADDR_LEN];
  675. ENUM_CHNL_EXT_T eChnlSco;
  676. RF_CHANNEL_INFO_T rChannelInfo;
  677. UINT_32 u4IELen;
  678. UINT_8 aucIEBuf[1];
  679. /* TODO: Auth Type, OPEN, SHARED, FT, EAP... */
  680. } MSG_P2P_CONNECTION_REQUEST_T, *P_MSG_P2P_CONNECTION_REQUEST_T;
  681. typedef struct _MSG_P2P_CONNECTION_ABORT_T {
  682. MSG_HDR_T rMsgHdr; /* Must be the first member. */
  683. UINT_8 aucTargetID[MAC_ADDR_LEN];
  684. UINT_16 u2ReasonCode;
  685. BOOLEAN fgSendDeauth;
  686. } MSG_P2P_CONNECTION_ABORT_T, *P_MSG_P2P_CONNECTION_ABORT_T;
  687. typedef struct _MSG_P2P_MGMT_TX_REQUEST_T {
  688. MSG_HDR_T rMsgHdr;
  689. P_MSDU_INFO_T prMgmtMsduInfo;
  690. UINT_64 u8Cookie; /* For indication. */
  691. BOOLEAN fgNoneCckRate;
  692. BOOLEAN fgIsWaitRsp;
  693. } MSG_P2P_MGMT_TX_REQUEST_T, *P_MSG_P2P_MGMT_TX_REQUEST_T;
  694. typedef struct _MSG_P2P_START_AP_T {
  695. MSG_HDR_T rMsgHdr;
  696. UINT_32 u4DtimPeriod;
  697. UINT_32 u4BcnInterval;
  698. UINT_8 aucSsid[32];
  699. UINT_16 u2SsidLen;
  700. UINT_8 ucHiddenSsidType;
  701. BOOLEAN fgIsPrivacy;
  702. AP_CRYPTO_SETTINGS_T rEncryptionSettings;
  703. INT_32 i4InactiveTimeout;
  704. } MSG_P2P_START_AP_T, *P_MSG_P2P_START_AP_T;
  705. typedef struct _MSG_P2P_BEACON_UPDATE_T {
  706. MSG_HDR_T rMsgHdr;
  707. UINT_32 u4BcnHdrLen;
  708. UINT_32 u4BcnBodyLen;
  709. PUINT_8 pucBcnHdr;
  710. PUINT_8 pucBcnBody;
  711. UINT_8 aucBuffer[1]; /* Header & Body are put here. */
  712. } MSG_P2P_BEACON_UPDATE_T, *P_MSG_P2P_BEACON_UPDATE_T;
  713. typedef struct _MSG_P2P_MGMT_FRAME_UPDATE_T {
  714. MSG_HDR_T rMsgHdr;
  715. ENUM_BUFFER_TYPE_T eBufferType;
  716. UINT_32 u4BufferLen;
  717. UINT_8 aucBuffer[1];
  718. } MSG_P2P_MGMT_FRAME_UPDATE_T, *P_MSG_P2P_MGMT_FRAME_UPDATE_T;
  719. typedef struct _MSG_P2P_SWITCH_OP_MODE_T {
  720. MSG_HDR_T rMsgHdr; /* Must be the first member */
  721. ENUM_OP_MODE_T eOpMode;
  722. } MSG_P2P_SWITCH_OP_MODE_T, *P_MSG_P2P_SWITCH_OP_MODE_T;
  723. typedef struct _MSG_P2P_MGMT_FRAME_REGISTER_T {
  724. MSG_HDR_T rMsgHdr; /* Must be the first member */
  725. UINT_16 u2FrameType;
  726. BOOLEAN fgIsRegister;
  727. } MSG_P2P_MGMT_FRAME_REGISTER_T, *P_MSG_P2P_MGMT_FRAME_REGISTER_T;
  728. typedef struct _MSG_P2P_NETDEV_REGISTER_T {
  729. MSG_HDR_T rMsgHdr; /* Must be the first member */
  730. BOOLEAN fgIsEnable;
  731. UINT_8 ucMode;
  732. } MSG_P2P_NETDEV_REGISTER_T, *P_MSG_P2P_NETDEV_REGISTER_T;
  733. #if CFG_SUPPORT_WFD
  734. typedef struct _MSG_WFD_CONFIG_SETTINGS_CHANGED_T {
  735. MSG_HDR_T rMsgHdr; /* Must be the first member */
  736. P_WFD_CFG_SETTINGS_T prWfdCfgSettings;
  737. } MSG_WFD_CONFIG_SETTINGS_CHANGED_T, *P_MSG_WFD_CONFIG_SETTINGS_CHANGED_T;
  738. #endif
  739. /*******************************************************************************
  740. * F U N C T I O N D E C L A R A T I O N S
  741. ********************************************************************************
  742. */
  743. VOID p2pFsmStateTransition(IN P_ADAPTER_T prAdapter, IN P_P2P_FSM_INFO_T prP2pFsmInfo, IN ENUM_P2P_STATE_T eNextState);
  744. VOID p2pFsmRunEventAbort(IN P_ADAPTER_T prAdapter, IN P_P2P_FSM_INFO_T prP2pFsmInfo);
  745. VOID p2pFsmRunEventScanRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  746. VOID p2pFsmRunEventMgmtFrameTx(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  747. VOID p2pFsmRunEventStartAP(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  748. VOID p2pFsmRunEventNetDeviceRegister(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  749. VOID p2pFsmRunEventUpdateMgmtFrame(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  750. VOID p2pFsmRunEventBeaconUpdate(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  751. VOID p2pFsmRunEventStopAP(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  752. VOID p2pFsmRunEventChannelRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  753. VOID p2pFsmRunEventChannelAbort(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  754. VOID p2pFsmRunEventDissolve(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  755. VOID p2pFsmRunEventSwitchOPMode(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  756. WLAN_STATUS
  757. p2pFsmRunEventMgmtFrameTxDone(IN P_ADAPTER_T prAdapter,
  758. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  759. VOID p2pFsmRunEventMgmtFrameRegister(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  760. #if CFG_SUPPORT_WFD
  761. VOID p2pFsmRunEventWfdSettingUpdate(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  762. #endif
  763. #if 0
  764. /* ////////////////////////////////////////////////////////////////////////////////////////////////////// */
  765. /* ///////////////////////////////////////////////////////////////////////////////////// */
  766. /* ///////////////////////////////////////////////////////////////////////////////////// */
  767. /* ///////////////////////////////////////////////////////////////////////////////////// */
  768. /* ///////////////////////////////////////////////////////////////////////////////////// */
  769. /* ////////////////////////////////////////////////////////////////////////////////////////////////////// */
  770. #endif
  771. /* 3 --------------- WFA P2P DEFAULT PARAMETERS --------------- */
  772. #define P2P_WILDCARD_SSID "DIRECT-"
  773. #define P2P_WILDCARD_SSID_LEN 7
  774. #define P2P_GROUP_ID_LEN 9
  775. #define P2P_DRIVER_VERSION 2 /* Update when needed. */
  776. #define P2P_DEFAULT_DEV_NAME "Wireless Client"
  777. #define P2P_DEFAULT_DEV_NAME_LEN 15
  778. #define P2P_DEFAULT_PRIMARY_CATEGORY_ID 10
  779. #define P2P_DEFAULT_PRIMARY_SUB_CATEGORY_ID 5
  780. #define P2P_DEFAULT_CONFIG_METHOD \
  781. (WPS_ATTRI_CFG_METHOD_PUSH_BUTTON | WPS_ATTRI_CFG_METHOD_KEYPAD | WPS_ATTRI_CFG_METHOD_DISPLAY)
  782. #define P2P_DEFAULT_LISTEN_CHANNEL 1
  783. #define P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT 0 /* NOTE(Kevin): Shall <= 16 */
  784. #define P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT 13
  785. #define P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE 51 /* Contains 6 sub-band. */
  786. #define P2P_GC_MAX_CACHED_SEC_DEV_TYPE_COUNT 8 /* NOTE(Kevin): Shall <= 16 */
  787. #define P2P_MAXIMUM_CLIENT_COUNT 8
  788. #define P2P_MAXIMUM_NOA_COUNT 8
  789. #define P2P_MAXIMUM_ATTRIBUTE_LEN 251
  790. #define P2P_CTWINDOW_DEFAULT 25 /* in TU=(1024usec) */
  791. #define P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE 768
  792. /* P2P 3.1.2.1.3 - Find Phase */
  793. #define P2P_MAX_DISCOVERABLE_INTERVAL 8 /* 3 */
  794. #define P2P_MIN_DISCOVERABLE_INTERVAL 5 /* 1 */
  795. #define P2P_LISTEN_SCAN_UNIT 100 /* MS */
  796. /* FSM Time Related constrain. */
  797. #define P2P_SERACH_STATE_PERIOD_MS 1000 /* Deprecated. */
  798. #define P2P_GO_CHANNEL_STAY_INTERVAL 1000
  799. #define P2P_GO_NEGO_TIMEOUT_MS 500
  800. #define P2P_CONNECTION_TIMEOUT_SEC 120
  801. #define P2P_INVITAION_TIMEOUT_MS 500 /* Timeout Wait Invitation Resonse. */
  802. #define P2P_PROVISION_DISCOVERY_TIMEOUT_MS 500 /* Timeout Wait Provision Discovery Resonse. */
  803. /* 3 --------------- WFA P2P IE --------------- */
  804. /* P2P 4.1.1 - P2P IE format */
  805. #define P2P_OUI_TYPE_LEN 4
  806. #define P2P_IE_OUI_HDR (ELEM_HDR_LEN + P2P_OUI_TYPE_LEN) /* == OFFSET_OF(IE_P2P_T,
  807. aucP2PAttributes[0]) */
  808. /* P2P 4.1.1 - General P2P Attribute */
  809. #define P2P_ATTRI_HDR_LEN 3 /* ID(1 octet) + Length(2 octets) */
  810. #define P2P_ATTRI_LEN_NOTICE_OF_ABSENCE (P2P_ATTRI_HDR_LEN + 2) /* 5 */
  811. /* P2P 4.1.1 - P2P Attribute ID definitions */
  812. #define P2P_ATTRI_ID_STATUS 0
  813. #define P2P_ATTRI_ID_REASON_CODE 1
  814. #define P2P_ATTRI_ID_P2P_CAPABILITY 2
  815. #define P2P_ATTRI_ID_P2P_DEV_ID 3
  816. #define P2P_ATTRI_ID_GO_INTENT 4
  817. #define P2P_ATTRI_ID_CFG_TIMEOUT 5
  818. #define P2P_ATTRI_ID_LISTEN_CHANNEL 6
  819. #define P2P_ATTRI_ID_P2P_GROUP_BSSID 7
  820. #define P2P_ATTRI_ID_EXT_LISTEN_TIMING 8
  821. #define P2P_ATTRI_ID_INTENDED_P2P_IF_ADDR 9
  822. #define P2P_ATTRI_ID_P2P_MANAGEABILITY 10
  823. #define P2P_ATTRI_ID_CHANNEL_LIST 11
  824. #define P2P_ATTRI_ID_NOTICE_OF_ABSENCE 12
  825. #define P2P_ATTRI_ID_P2P_DEV_INFO 13
  826. #define P2P_ATTRI_ID_P2P_GROUP_INFO 14
  827. #define P2P_ATTRI_ID_P2P_GROUP_ID 15
  828. #define P2P_ATTRI_ID_P2P_INTERFACE 16
  829. #define P2P_ATTRI_ID_OPERATING_CHANNEL 17
  830. #define P2P_ATTRI_ID_INVITATION_FLAG 18
  831. #define P2P_ATTRI_ID_VENDOR_SPECIFIC 221
  832. /* Maximum Length of P2P Attributes */
  833. #define P2P_ATTRI_MAX_LEN_STATUS 1 /* 0 */
  834. #define P2P_ATTRI_MAX_LEN_REASON_CODE 1 /* 1 */
  835. #define P2P_ATTRI_MAX_LEN_P2P_CAPABILITY 2 /* 2 */
  836. #define P2P_ATTRI_MAX_LEN_P2P_DEV_ID 6 /* 3 */
  837. #define P2P_ATTRI_MAX_LEN_GO_INTENT 1 /* 4 */
  838. #define P2P_ATTRI_MAX_LEN_CFG_TIMEOUT 2 /* 5 */
  839. #if CID52_53_54
  840. #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */
  841. #else
  842. #define P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL 5 /* 6 */
  843. #endif
  844. #define P2P_ATTRI_MAX_LEN_P2P_GROUP_BSSID 6 /* 7 */
  845. #define P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING 4 /* 8 */
  846. #define P2P_ATTRI_MAX_LEN_INTENDED_P2P_IF_ADDR 6 /* 9 */
  847. #define P2P_ATTRI_MAX_LEN_P2P_MANAGEABILITY 1 /* 10 */
  848. /* #define P2P_ATTRI_MAX_LEN_CHANNEL_LIST 3 + (n* (2 + num_of_ch)) */ /* 11 */
  849. #define P2P_ATTRI_LEN_CHANNEL_LIST 3 /* 11 */
  850. #define P2P_ATTRI_LEN_CHANNEL_ENTRY 2 /* 11 */
  851. /* #define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE 2 + (n* (13)) */ /* 12 */
  852. #define P2P_ATTRI_MAX_LEN_NOTICE_OF_ABSENCE (2 + (P2P_MAXIMUM_NOA_COUNT*(13))) /* 12 */
  853. #define P2P_ATTRI_MAX_LEN_P2P_DEV_INFO (17 + (8 * (8)) + 36) /* 13 */
  854. /* #define P2P_ATTRI_MAX_LEN_P2P_GROUP_INFO n* (25 + (m* (8)) + 32) */ /* 14 */
  855. #define P2P_ATTRI_MAX_LEN_P2P_GROUP_ID 38 /* 15 */
  856. #define P2P_ATTRI_MAX_LEN_P2P_INTERFACE 253 /* 7 + 6* [0~41] */ /* 16 */
  857. #if CID52_53_54
  858. #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */
  859. #else
  860. #define P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL 5 /* 17 */
  861. #endif
  862. #define P2P_ATTRI_MAX_LEN_INVITATION_FLAGS 1 /* 18 */
  863. /* P2P 4.1.2 - P2P Status definitions */
  864. #define P2P_STATUS_SUCCESS 0
  865. #define P2P_STATUS_FAIL_INFO_IS_CURRENTLY_UNAVAILABLE 1
  866. #define P2P_STATUS_FAIL_INCOMPATIBLE_PARAM 2
  867. #define P2P_STATUS_FAIL_LIMIT_REACHED 3
  868. #define P2P_STATUS_FAIL_INVALID_PARAM 4
  869. #define P2P_STATUS_FAIL_UNABLE_ACCOMMODATE_REQ 5
  870. #define P2P_STATUS_FAIL_PREVIOUS_PROTOCOL_ERR 6
  871. #define P2P_STATUS_FAIL_NO_COMMON_CHANNELS 7
  872. #define P2P_STATUS_FAIL_UNKNOWN_P2P_GROUP 8
  873. #define P2P_STATUS_FAIL_SAME_INTENT_VALUE_15 9
  874. #define P2P_STATUS_FAIL_INCOMPATIBLE_PROVISION_METHOD 10
  875. #define P2P_STATUS_FAIL_REJECTED_BY_USER 11
  876. /* P2P 4.1.3 - P2P Minor Reason Code definitions */
  877. #define P2P_REASON_SUCCESS 0
  878. #define P2P_REASON_DISASSOCIATED_DUE_CROSS_CONNECTION 1
  879. #define P2P_REASON_DISASSOCIATED_DUE_UNMANAGEABLE 2
  880. #define P2P_REASON_DISASSOCIATED_DUE_NO_P2P_COEXIST_PARAM 3
  881. #define P2P_REASON_DISASSOCIATED_DUE_MANAGEABLE 4
  882. /* P2P 4.1.4 - Device Capability Bitmap definitions */
  883. #define P2P_DEV_CAPABILITY_SERVICE_DISCOVERY BIT(0)
  884. #define P2P_DEV_CAPABILITY_CLIENT_DISCOVERABILITY BIT(1)
  885. #define P2P_DEV_CAPABILITY_CONCURRENT_OPERATION BIT(2)
  886. #define P2P_DEV_CAPABILITY_P2P_INFRA_MANAGED BIT(3)
  887. #define P2P_DEV_CAPABILITY_P2P_DEVICE_LIMIT BIT(4)
  888. #define P2P_DEV_CAPABILITY_P2P_INVITATION_PROCEDURE BIT(5)
  889. /* P2P 4.1.4 - Group Capability Bitmap definitions */
  890. #define P2P_GROUP_CAPABILITY_P2P_GROUP_OWNER BIT(0)
  891. #define P2P_GROUP_CAPABILITY_PERSISTENT_P2P_GROUP BIT(1)
  892. #define P2P_GROUP_CAPABILITY_P2P_GROUP_LIMIT BIT(2)
  893. #define P2P_GROUP_CAPABILITY_INTRA_BSS_DISTRIBUTION BIT(3)
  894. #define P2P_GROUP_CAPABILITY_CROSS_CONNECTION BIT(4)
  895. #define P2P_GROUP_CAPABILITY_PERSISTENT_RECONNECT BIT(5)
  896. #define P2P_GROUP_CAPABILITY_GROUP_FORMATION BIT(6)
  897. /* P2P 4.1.6 - GO Intent field definitions */
  898. #define P2P_GO_INTENT_TIE_BREAKER_FIELD BIT(0)
  899. #define P2P_GO_INTENT_VALUE_MASK BITS(1, 7)
  900. #define P2P_GO_INTENT_VALUE_OFFSET 1
  901. /* P2P 4.1.12 - Manageability Bitmap definitions */
  902. #define P2P_DEVICE_MANAGEMENT BIT(0)
  903. /* P2P 4.1.14 - CTWindow and OppPS Parameters definitions */
  904. #define P2P_CTW_OPPPS_PARAM_OPPPS_FIELD BIT(7)
  905. #define P2P_CTW_OPPPS_PARAM_CTWINDOW_MASK BITS(0, 6)
  906. #define ELEM_MAX_LEN_P2P_FOR_PROBE_REQ \
  907. (P2P_OUI_TYPE_LEN + \
  908. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
  909. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_ID) + \
  910. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_LISTEN_CHANNEL) + \
  911. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_OPERATING_CHANNEL))
  912. #define ELEM_MAX_LEN_P2P_FOR_ASSOC_REQ \
  913. (P2P_OUI_TYPE_LEN + \
  914. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_CAPABILITY) + \
  915. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_EXT_LISTEN_TIMING) + \
  916. (P2P_ATTRI_HDR_LEN + P2P_ATTRI_MAX_LEN_P2P_DEV_INFO))
  917. /* P2P 4.1.16 - P2P Client Infor Descriptor */
  918. #define P2P_CLIENT_INFO_DESC_HDR_LEN 1 /* Length(1 octets) */
  919. /* P2P 4.1.20 - P2P Invitation Flags Attribute*/
  920. #define P2P_INVITATION_FLAGS_INVITATION_TYPE BIT(0)
  921. #define P2P_INVITATION_TYPE_INVITATION 0
  922. #define P2P_INVITATION_TYPE_REINVOKE 1
  923. /* 3 --------------- WPS Data Element Definitions --------------- */
  924. /* P2P 4.2.2 - General WSC Attribute */
  925. #define WSC_ATTRI_HDR_LEN 4 /* ID(2 octet) + Length(2 octets) */
  926. #define WSC_ATTRI_MAX_LEN_VERSION 1
  927. #define WSC_ATTRI_MAX_LEN_DEVICE_PASSWORD_ID 2
  928. #define WSC_ATTRI_LEN_CONFIG_METHOD 2
  929. /* WPS 11 - Data Element Definitions */
  930. #define WPS_ATTRI_ID_VERSION 0x104A
  931. #define WPS_ATTRI_ID_CONFIGURATION_METHODS 0x1008
  932. #define WPS_ATTRI_ID_DEVICE_PASSWORD 0x1012
  933. #define WPS_ATTRI_ID_DEVICE_NAME 0x1011
  934. #define WPS_ATTRI_ID_PRI_DEVICE_TYPE 0x1054
  935. #define WPS_ATTRI_ID_SEC_DEVICE_TYPE 0x1055
  936. #define WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE 300
  937. #define WPS_ATTRI_MAX_LEN_DEVICE_NAME 32 /* 0x1011 */
  938. #define WPS_ATTRI_CFG_METHOD_USBA BIT(0)
  939. #define WPS_ATTRI_CFG_METHOD_ETHERNET BIT(1)
  940. #define WPS_ATTRI_CFG_METHOD_LABEL BIT(2)
  941. #define WPS_ATTRI_CFG_METHOD_DISPLAY BIT(3)
  942. #define WPS_ATTRI_CFG_METHOD_EXT_NFC BIT(4)
  943. #define WPS_ATTRI_CFG_METHOD_INT_NFC BIT(5)
  944. #define WPS_ATTRI_CFG_METHOD_NFC_IF BIT(6)
  945. #define WPS_ATTRI_CFG_METHOD_PUSH_BUTTON BIT(7)
  946. #define WPS_ATTRI_CFG_METHOD_KEYPAD BIT(8)
  947. #define P2P_FLAGS_PROVISION_COMPLETE 0x00000001
  948. #define P2P_FLAGS_PROVISION_DISCOVERY_COMPLETE 0x00000002
  949. #define P2P_FLAGS_PROVISION_DISCOVERY_WAIT_RESPONSE 0x00000004
  950. #define P2P_FLAGS_PROVISION_DISCOVERY_RESPONSE_WAIT 0x00000008
  951. #define P2P_FLAGS_MASK_PROVISION 0x00000017
  952. #define P2P_FLAGS_MASK_PROVISION_COMPLETE 0x00000015
  953. #define P2P_FLAGS_PROVISION_DISCOVERY_INDICATED 0x00000010
  954. #define P2P_FLAGS_INVITATION_TOBE_GO 0x00000100
  955. #define P2P_FLAGS_INVITATION_TOBE_GC 0x00000200
  956. #define P2P_FLAGS_INVITATION_SUCCESS 0x00000400
  957. #define P2P_FLAGS_INVITATION_WAITING_TARGET 0x00000800
  958. #define P2P_FLAGS_MASK_INVITATION 0x00000F00
  959. #define P2P_FLAGS_FORMATION_ON_GOING 0x00010000
  960. #define P2P_FLAGS_FORMATION_LOCAL_PWID_RDY 0x00020000
  961. #define P2P_FLAGS_FORMATION_TARGET_PWID_RDY 0x00040000
  962. #define P2P_FLAGS_FORMATION_COMPLETE 0x00080000
  963. #define P2P_FLAGS_MASK_FORMATION 0x000F0000
  964. #define P2P_FLAGS_DEVICE_DISCOVER_REQ 0x00100000
  965. #define P2P_FLAGS_DEVICE_DISCOVER_DONE 0x00200000
  966. #define P2P_FLAGS_DEVICE_INVITATION_WAIT 0x00400000
  967. #define P2P_FLAGS_DEVICE_SERVICE_DISCOVER_WAIT 0x00800000
  968. #define P2P_FLAGS_MASK_DEVICE_DISCOVER 0x00F00000
  969. #define P2P_FLAGS_DEVICE_FORMATION_REQUEST 0x01000000
  970. /* MACRO for flag operation */
  971. #define SET_FLAGS(_FlagsVar, _BitsToSet) \
  972. {(_FlagsVar) = ((_FlagsVar) | (_BitsToSet))}
  973. #define TEST_FLAGS(_FlagsVar, _BitsToCheck) \
  974. (((_FlagsVar) & (_BitsToCheck)) == (_BitsToCheck))
  975. #define CLEAR_FLAGS(_FlagsVar, _BitsToClear) \
  976. {(_FlagsVar) &= ~(_BitsToClear)}
  977. #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_I 0
  978. #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_II 0
  979. #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_III 0
  980. #define CFG_DISABLE_WIFI_DIRECT_ENHANCEMENT_IV 0
  981. #define CFG_DISABLE_DELAY_PROVISION_DISCOVERY 0
  982. #define CFG_CONNECTION_POLICY_2_0 0
  983. /* Device Password ID */
  984. enum wps_dev_password_id {
  985. DEV_PW_DEFAULT = 0x0000,
  986. DEV_PW_USER_SPECIFIED = 0x0001,
  987. DEV_PW_MACHINE_SPECIFIED = 0x0002,
  988. DEV_PW_REKEY = 0x0003,
  989. DEV_PW_PUSHBUTTON = 0x0004,
  990. DEV_PW_REGISTRAR_SPECIFIED = 0x0005
  991. };
  992. /*******************************************************************************
  993. * D A T A T Y P E S
  994. ********************************************************************************
  995. */
  996. #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
  997. #pragma pack(1)
  998. #endif
  999. /* 3 --------------- WFA P2P IE and Attributes --------------- */
  1000. /* P2P 4.1.1 - P2P Information Element */
  1001. typedef struct _IE_P2P_T {
  1002. UINT_8 ucId; /* Element ID */
  1003. UINT_8 ucLength; /* Length */
  1004. UINT_8 aucOui[3]; /* OUI */
  1005. UINT_8 ucOuiType; /* OUI Type */
  1006. UINT_8 aucP2PAttributes[1]; /* P2P Attributes */
  1007. } __KAL_ATTRIB_PACKED__ IE_P2P_T, *P_IE_P2P_T;
  1008. /* P2P 4.1.1 - General P2P Attribute */
  1009. typedef struct _P2P_ATTRIBUTE_T {
  1010. UINT_8 ucId; /* Attribute ID */
  1011. UINT_16 u2Length; /* Length */
  1012. UINT_8 aucBody[1]; /* Body field */
  1013. } __KAL_ATTRIB_PACKED__ P2P_ATTRIBUTE_T, ATTRIBUTE_HDR_T, *P_P2P_ATTRIBUTE_T, *P_ATTRIBUTE_HDR_T;
  1014. /* P2P 4.1.2 - P2P Status Attribute */
  1015. typedef struct _P2P_ATTRI_STATUS_T {
  1016. UINT_8 ucId; /* Attribute ID */
  1017. UINT_16 u2Length; /* Length */
  1018. UINT_8 ucStatusCode; /* Status Code */
  1019. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_STATUS_T, *P_P2P_ATTRI_STATUS_T;
  1020. /* P2P 4.1.3 - P2P Minor Reason Code Attribute */
  1021. typedef struct _P2P_ATTRI_REASON_T {
  1022. UINT_8 ucId; /* Attribute ID */
  1023. UINT_16 u2Length; /* Length */
  1024. UINT_8 ucMinorReasonCode; /* Minor Reason Code */
  1025. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_REASON_T, *P_P2P_ATTRI_REASON_T;
  1026. /* P2P 4.1.4 - P2P Capability Attribute */
  1027. typedef struct _P2P_ATTRI_CAPABILITY_T {
  1028. UINT_8 ucId; /* Attribute ID */
  1029. UINT_16 u2Length; /* Length */
  1030. UINT_8 ucDeviceCap; /* Device Capability Bitmap */
  1031. UINT_8 ucGroupCap; /* Group Capability Bitmap */
  1032. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CAPABILITY_T, *P_P2P_ATTRI_CAPABILITY_T;
  1033. /* P2P 4.1.5 - P2P Device ID Attribute */
  1034. typedef struct _P2P_ATTRI_DEV_ID_T {
  1035. UINT_8 ucId; /* Attribute ID */
  1036. UINT_16 u2Length; /* Length */
  1037. UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
  1038. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_ID_T, *P_P2P_ATTRI_DEV_ID_T;
  1039. /* P2P 4.1.6 - Group Owner Intent Attribute */
  1040. typedef struct _P2P_ATTRI_GO_INTENT_T {
  1041. UINT_8 ucId; /* Attribute ID */
  1042. UINT_16 u2Length; /* Length */
  1043. UINT_8 ucGOIntent; /* Group Owner Intent */
  1044. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GO_INTENT_T, *P_P2P_ATTRI_GO_INTENT_T;
  1045. /* P2P 4.1.7 - Configuration Timeout Attribute */
  1046. typedef struct _P2P_ATTRI_CFG_TIMEOUT_T {
  1047. UINT_8 ucId; /* Attribute ID */
  1048. UINT_16 u2Length; /* Length */
  1049. UINT_8 ucGOCfgTimeout; /* GO Configuration Timeout */
  1050. UINT_8 ucClientCfgTimeout; /* Client Configuration Timeout */
  1051. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CFG_TIMEOUT_T, *P_P2P_ATTRI_CFG_TIMEOUT_T;
  1052. /* P2P 4.1.8 - Listen Channel Attribute */
  1053. typedef struct _P2P_ATTRI_LISTEN_CHANNEL_T {
  1054. UINT_8 ucId; /* Attribute ID */
  1055. UINT_16 u2Length; /* Length */
  1056. UINT_8 aucCountryString[3]; /* Country String */
  1057. UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
  1058. UINT_8 ucChannelNumber; /* Channel Number */
  1059. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_LISTEN_CHANNEL_T, *P_P2P_ATTRI_LISTEN_CHANNEL_T;
  1060. /* P2P 4.1.9 - P2P Group BSSID Attribute */
  1061. typedef struct _P2P_ATTRI_GROUP_BSSID_T {
  1062. UINT_8 ucId; /* Attribute ID */
  1063. UINT_16 u2Length; /* Length */
  1064. UINT_8 aucBssid[MAC_ADDR_LEN]; /* P2P Group BSSID */
  1065. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_BSSID_T, *P_P2P_ATTRI_GROUP_BSSID_T;
  1066. /* P2P 4.1.10 - Extended Listen Timing Attribute */
  1067. typedef struct _P2P_ATTRI_EXT_LISTEN_TIMING_T {
  1068. UINT_8 ucId; /* Attribute ID */
  1069. UINT_16 u2Length; /* Length */
  1070. UINT_16 u2AvailPeriod; /* Availability Period */
  1071. UINT_16 u2AvailInterval; /* Availability Interval */
  1072. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_EXT_LISTEN_TIMING_T, *P_P2P_ATTRI_EXT_LISTEN_TIMING_T;
  1073. /* P2P 4.1.11 - Intended P2P Interface Address Attribute */
  1074. typedef struct _P2P_ATTRI_INTENDED_IF_ADDR_T {
  1075. UINT_8 ucId; /* Attribute ID */
  1076. UINT_16 u2Length; /* Length */
  1077. UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */
  1078. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTENDED_IF_ADDR_T, *P_P2P_ATTRI_INTENDED_IF_ADDR_T;
  1079. /* P2P 4.1.12 - P2P Manageability Attribute */
  1080. typedef struct _P2P_ATTRI_MANAGEABILITY_T {
  1081. UINT_8 ucId; /* Attribute ID */
  1082. UINT_16 u2Length; /* Length */
  1083. UINT_8 ucManageability; /* P2P Manageability Bitmap */
  1084. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_MANAGEABILITY_T, *P_P2P_ATTRI_MANAGEABILITY_T;
  1085. /* P2P 4.1.13 - Channel List Attribute */
  1086. typedef struct _P2P_ATTRI_CHANNEL_LIST_T {
  1087. UINT_8 ucId; /* Attribute ID */
  1088. UINT_16 u2Length; /* Length */
  1089. UINT_8 aucCountryString[3]; /* Country String */
  1090. UINT_8 aucChannelEntry[1]; /* Channel Entry List */
  1091. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_CHANNEL_T, *P_P2P_ATTRI_CHANNEL_T;
  1092. typedef struct _CHANNEL_ENTRY_FIELD_T {
  1093. UINT_8 ucRegulatoryClass; /* Regulatory Class */
  1094. UINT_8 ucNumberOfChannels; /* Number Of Channels */
  1095. UINT_8 aucChannelList[1]; /* Channel List */
  1096. } __KAL_ATTRIB_PACKED__ CHANNEL_ENTRY_FIELD_T, *P_CHANNEL_ENTRY_FIELD_T;
  1097. /* P2P 4.1.14 - Notice of Absence Attribute */
  1098. typedef struct _P2P_ATTRI_NOA_T {
  1099. UINT_8 ucId; /* Attribute ID */
  1100. UINT_16 u2Length; /* Length */
  1101. UINT_8 ucIndex; /* Index */
  1102. UINT_8 ucCTWOppPSParam; /* CTWindow and OppPS Parameters */
  1103. UINT_8 aucNoADesc[1]; /* NoA Descriptor */
  1104. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_NOA_T, *P_P2P_ATTRI_NOA_T;
  1105. typedef struct _NOA_DESCRIPTOR_T {
  1106. UINT_8 ucCountType; /* Count/Type */
  1107. UINT_32 u4Duration; /* Duration */
  1108. UINT_32 u4Interval; /* Interval */
  1109. UINT_32 u4StartTime; /* Start Time */
  1110. } __KAL_ATTRIB_PACKED__ NOA_DESCRIPTOR_T, *P_NOA_DESCRIPTOR_T;
  1111. typedef struct _P2P_ATTRI_DEV_INFO_T {
  1112. UINT_8 ucId; /* Attribute ID */
  1113. UINT_16 u2Length; /* Length */
  1114. UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
  1115. UINT_16 u2ConfigMethodsBE; /* Config Method */
  1116. DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */
  1117. UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */
  1118. DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */
  1119. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_DEV_INFO_T, *P_P2P_ATTRI_DEV_INFO_T;
  1120. /* WPS 7.1 & 11 WPS TLV Data Format - Device Name */
  1121. typedef struct _DEVICE_NAME_TLV_T {
  1122. UINT_16 u2Id; /* WPS Attribute Type */
  1123. UINT_16 u2Length; /* Data Length */
  1124. UINT_8 aucName[32]; /* Device Name */ /* TODO: Fixme */
  1125. } __KAL_ATTRIB_PACKED__ DEVICE_NAME_TLV_T, *P_DEVICE_NAME_TLV_T;
  1126. /* P2P 4.1.16 - P2P Group Info Attribute */
  1127. typedef struct _P2P_CLIENT_INFO_DESC_T {
  1128. UINT_8 ucLength; /* Length */
  1129. UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
  1130. UINT_8 aucIfAddr[MAC_ADDR_LEN]; /* P2P Interface Address */
  1131. UINT_8 ucDeviceCap; /* Device Capability Bitmap */
  1132. UINT_16 u2ConfigMethodsBE; /* Config Method */
  1133. DEVICE_TYPE_T rPrimaryDevTypeBE; /* Primary Device Type */
  1134. UINT_8 ucNumOfSecondaryDevType; /* Number of Secondary Device Types */
  1135. DEVICE_TYPE_T arSecondaryDevTypeListBE[1]; /* Secondary Device Type List */
  1136. } __KAL_ATTRIB_PACKED__ P2P_CLIENT_INFO_DESC_T, *P_P2P_CLIENT_INFO_DESC_T;
  1137. typedef struct _P2P_ATTRI_GROUP_INFO_T {
  1138. UINT_8 ucId; /* Attribute ID */
  1139. UINT_16 u2Length; /* Length */
  1140. P2P_CLIENT_INFO_DESC_T arClientDesc[1]; /* P2P Client Info Descriptors */
  1141. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_INFO_T, *P_P2P_ATTRI_GROUP_INFO_T;
  1142. /* P2P 4.1.17 - P2P Group ID Attribute */
  1143. typedef struct _P2P_ATTRI_GROUP_ID_T {
  1144. UINT_8 ucId; /* Attribute ID */
  1145. UINT_16 u2Length; /* Length */
  1146. UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
  1147. UINT_8 aucSSID[ELEM_MAX_LEN_SSID]; /* SSID */
  1148. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_GROUP_ID_T, *P_P2P_ATTRI_GROUP_ID_T;
  1149. /* P2P 4.1.18 - P2P Interface Attribute */
  1150. typedef struct _P2P_ATTRI_INTERFACE_T {
  1151. UINT_8 ucId; /* Attribute ID */
  1152. UINT_16 u2Length; /* Length */
  1153. UINT_8 aucDevAddr[MAC_ADDR_LEN]; /* P2P Device Address */
  1154. UINT_8 ucIfAddrCount; /* P2P Interface Address Count */
  1155. UINT_8 aucIfAddrList[MAC_ADDR_LEN]; /* P2P Interface Address List */
  1156. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INTERFACE_T, *P_P2P_ATTRI_INTERFACE_T;
  1157. /* P2P 4.1.19 - Operating Channel Attribute */
  1158. typedef struct _P2P_ATTRI_OPERATING_CHANNEL_T {
  1159. UINT_8 ucId; /* Attribute ID */
  1160. UINT_16 u2Length; /* Length */
  1161. UINT_8 aucCountryString[3]; /* Country String */
  1162. UINT_8 ucOperatingClass; /* Operating Class from 802.11 Annex J/P802.11 REVmb 3.0 */
  1163. UINT_8 ucChannelNumber; /* Channel Number */
  1164. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_OPERATING_CHANNEL_T, *P_P2P_ATTRI_OPERATING_CHANNEL_T;
  1165. /* P2P 4.1.20 - Invitation Flags Attribute */
  1166. typedef struct _P2P_ATTRI_INVITATION_FLAG_T {
  1167. UINT_8 ucId; /* Attribute ID */
  1168. UINT_16 u2Length; /* Length */
  1169. UINT_8 ucInviteFlagsBitmap; /* Invitation Flags Bitmap */
  1170. } __KAL_ATTRIB_PACKED__ P2P_ATTRI_INVITATION_FLAG_T, *P_P2P_ATTRI_INVITATION_FLAG_T;
  1171. /* P2P 4.1.1 - General WSC Attribute */
  1172. typedef struct _WSC_ATTRIBUTE_T {
  1173. UINT_16 u2Id; /* Attribute ID */
  1174. UINT_16 u2Length; /* Length */
  1175. UINT_8 aucBody[1]; /* Body field */
  1176. } __KAL_ATTRIB_PACKED__ WSC_ATTRIBUTE_T, *P_WSC_ATTRIBUTE_T;
  1177. /* WSC 1.0 Table 28 */
  1178. typedef struct _WSC_ATTRI_VERSION_T {
  1179. UINT_16 u2Id; /* Attribute ID */
  1180. UINT_16 u2Length; /* Length */
  1181. UINT_8 ucVersion; /* Version 1.0 or 1.1 */
  1182. } __KAL_ATTRIB_PACKED__ WSC_ATTRI_VERSION_T, *P_WSC_ATTRI_VERSION_T;
  1183. typedef struct _WSC_ATTRI_DEVICE_PASSWORD_ID_T {
  1184. UINT_16 u2Id; /* Attribute ID */
  1185. UINT_16 u2Length; /* Length */
  1186. UINT_16 u2DevPasswordId; /* Device Password ID */
  1187. } __KAL_ATTRIB_PACKED__ WSC_ATTRI_DEVICE_PASSWORD_ID_T, *P_WSC_ATTRI_DEVICE_PASSWORD_ID_T;
  1188. typedef struct _WSC_ATTRI_CONFIGURATION_METHOD_T {
  1189. UINT_16 u2Id; /* Attribute ID */
  1190. UINT_16 u2Length; /* Length */
  1191. UINT_16 u2ConfigMethods; /* Configure Methods */
  1192. } __KAL_ATTRIB_PACKED__ WSC_ATTRI_CONFIGURATION_METHOD_T, *P_WSC_ATTRI_CONFIGURATION_METHOD_T;
  1193. #if defined(WINDOWS_DDK) || defined(WINDOWS_CE)
  1194. #pragma pack()
  1195. #endif
  1196. /* 3 --------------- WFA P2P Attributes Handler prototype --------------- */
  1197. typedef UINT_32(*PFN_APPEND_ATTRI_FUNC) (P_ADAPTER_T, BOOLEAN, PUINT_16, PUINT_8, UINT_16);
  1198. typedef VOID(*PFN_HANDLE_ATTRI_FUNC) (P_SW_RFB_T, P_P2P_ATTRIBUTE_T);
  1199. typedef VOID(*PFN_VERIFY_ATTRI_FUNC) (P_SW_RFB_T, P_P2P_ATTRIBUTE_T, PUINT_16);
  1200. typedef UINT_32(*PFN_CALCULATE_VAR_ATTRI_LEN_FUNC) (P_ADAPTER_T, P_STA_RECORD_T);
  1201. typedef struct _APPEND_VAR_ATTRI_ENTRY_T {
  1202. UINT_16 u2EstimatedFixedAttriLen; /* For fixed length */
  1203. PFN_CALCULATE_VAR_ATTRI_LEN_FUNC pfnCalculateVariableAttriLen;
  1204. PFN_APPEND_ATTRI_FUNC pfnAppendAttri;
  1205. } APPEND_VAR_ATTRI_ENTRY_T, *P_APPEND_VAR_ATTRI_ENTRY_T;
  1206. typedef enum _ENUM_CONFIG_METHOD_SEL {
  1207. ENUM_CONFIG_METHOD_SEL_AUTO,
  1208. ENUM_CONFIG_METHOD_SEL_USER,
  1209. ENUM_CONFIG_METHOD_SEL_NUM
  1210. } ENUM_CONFIG_METHOD_SEL, *P_ENUM_CONFIG_METHOD_SEL;
  1211. typedef enum _ENUM_P2P_FORMATION_POLICY {
  1212. ENUM_P2P_FORMATION_POLICY_AUTO = 0,
  1213. ENUM_P2P_FORMATION_POLICY_PASSIVE, /* Device would wait GO NEGO REQ instead of sending it actively. */
  1214. ENUM_P2P_FORMATION_POLICY_NUM
  1215. } ENUM_P2P_FORMATION_POLICY, P_ENUM_P2P_FORMATION_POLICY;
  1216. typedef enum _ENUM_P2P_INVITATION_POLICY {
  1217. ENUM_P2P_INVITATION_POLICY_USER = 0,
  1218. ENUM_P2P_INVITATION_POLICY_ACCEPT_FIRST,
  1219. ENUM_P2P_INVITATION_POLICY_DENY_ALL,
  1220. ENUM_P2P_INVITATION_POLICY_NUM
  1221. } ENUM_P2P_INVITATION_POLICY, P_ENUM_P2P_INVITATION_POLICY;
  1222. /* 3 --------------- Data Structure for P2P Operation --------------- */
  1223. /* 3 Session for CONNECTION SETTINGS of P2P */
  1224. struct _P2P_CONNECTION_SETTINGS_T {
  1225. UINT_8 ucDevNameLen;
  1226. UINT_8 aucDevName[WPS_ATTRI_MAX_LEN_DEVICE_NAME];
  1227. DEVICE_TYPE_T rPrimaryDevTypeBE;
  1228. ENUM_P2P_FORMATION_POLICY eFormationPolicy; /* Formation Policy. */
  1229. /*------------WSC Related Param---------------*/
  1230. UINT_16 u2ConfigMethodsSupport; /* Preferred configure method.
  1231. * Some device may not have keypad.
  1232. */
  1233. ENUM_CONFIG_METHOD_SEL eConfigMethodSelType;
  1234. UINT_16 u2TargetConfigMethod; /* Configure method selected by user or auto. */
  1235. UINT_16 u2LocalConfigMethod; /* Configure method of target. */
  1236. BOOLEAN fgIsPasswordIDRdy;
  1237. /*------------WSC Related Param---------------*/
  1238. UINT_8 ucClientConfigTimeout;
  1239. UINT_8 ucGoConfigTimeout;
  1240. UINT_8 ucSecondaryDevTypeCount;
  1241. #if P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT
  1242. DEVICE_TYPE_T arSecondaryDevTypeBE[P2P_MAX_SUPPORTED_SEC_DEV_TYPE_COUNT];
  1243. #endif
  1244. #if 0
  1245. UINT_8 ucRfChannelListCount;
  1246. #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
  1247. UINT_8 aucChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering
  1248. depends on 802.11mb Annex J. */
  1249. #endif
  1250. #else
  1251. UINT_8 ucRfChannelListSize;
  1252. #if P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE
  1253. UINT_8 aucChannelEntriesField[P2P_MAX_SUPPORTED_CHANNEL_LIST_SIZE];
  1254. #endif
  1255. #endif
  1256. /* Go Intent */
  1257. UINT_8 ucTieBreaker;
  1258. UINT_8 ucGoIntent;
  1259. /* For Device Capability */
  1260. BOOLEAN fgSupportServiceDiscovery;
  1261. BOOLEAN fgSupportClientDiscoverability;
  1262. BOOLEAN fgSupportConcurrentOperation;
  1263. BOOLEAN fgSupportInfraManaged;
  1264. BOOLEAN fgSupportInvitationProcedure;
  1265. /* For Group Capability */
  1266. BOOLEAN fgSupportPersistentP2PGroup;
  1267. BOOLEAN fgSupportIntraBSSDistribution;
  1268. BOOLEAN fgSupportCrossConnection;
  1269. BOOLEAN fgSupportPersistentReconnect;
  1270. BOOLEAN fgP2pGroupLimit;
  1271. BOOLEAN fgSupportOppPS;
  1272. UINT_16 u2CTWindow;
  1273. BOOLEAN fgIsScanReqIssued;
  1274. BOOLEAN fgIsServiceDiscoverIssued;
  1275. /*============ Target Device Connection Settings ============*/
  1276. /* Discover Target Device Info. */
  1277. BOOLEAN fgIsDevId;
  1278. BOOLEAN fgIsDevType;
  1279. /* Encryption mode of Target Device */
  1280. ENUM_PARAM_AUTH_MODE_T eAuthMode;
  1281. /* SSID
  1282. * 1. AP Mode, this is the desired SSID user specified.
  1283. * 2. Client Mode, this is the target SSID to be connected to.
  1284. */
  1285. UINT_8 aucSSID[ELEM_MAX_LEN_SSID];
  1286. UINT_8 ucSSIDLen;
  1287. /* Operating channel requested. */
  1288. UINT_8 ucOperatingChnl;
  1289. ENUM_BAND_T eBand;
  1290. /* Linten channel requested. */
  1291. UINT_8 ucListenChnl;
  1292. /* For device discover address/type. */
  1293. UINT_8 aucTargetDevAddr[MAC_ADDR_LEN]; /* P2P Device Address, for P2P Device Discovery & P2P Connection. */
  1294. #if CFG_ENABLE_WIFI_DIRECT
  1295. P_P2P_DEVICE_DESC_T prTargetP2pDesc;
  1296. #endif
  1297. UINT_8 ucLastStatus; /* P2P FSM would append status attribute according to this field. */
  1298. #if !CFG_DISABLE_DELAY_PROVISION_DISCOVERY
  1299. UINT_8 ucLastDialogToken;
  1300. UINT_8 aucIndicateDevAddr[MAC_ADDR_LEN];
  1301. #endif
  1302. #if 0
  1303. UINT_8 ucTargetRfChannelListCount;
  1304. #if P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT
  1305. UINT_8 aucTargetChannelList[P2P_MAX_SUPPORTED_CHANNEL_LIST_COUNT]; /* Channel Numbering
  1306. depends on 802.11mb Annex J. */
  1307. #endif
  1308. #endif
  1309. };
  1310. typedef struct _NOA_TIMING_T {
  1311. BOOLEAN fgIsInUse; /* Indicate if this entry is in use or not */
  1312. UINT_8 ucCount; /* Count */
  1313. UINT_8 aucReserved[2];
  1314. UINT_32 u4Duration; /* Duration */
  1315. UINT_32 u4Interval; /* Interval */
  1316. UINT_32 u4StartTime; /* Start Time */
  1317. } NOA_TIMING_T, *P_NOA_TIMING_T;
  1318. typedef enum _ENUM_P2P_IOCTL_T {
  1319. P2P_IOCTL_IDLE = 0,
  1320. P2P_IOCTL_DEV_DISCOVER,
  1321. P2P_IOCTL_INVITATION_REQ,
  1322. P2P_IOCTL_SERV_DISCOVER,
  1323. P2P_IOCTL_WAITING,
  1324. P2P_IOCTL_NUM
  1325. } ENUM_P2P_IOCTL_T;
  1326. /*---------------- Service Discovery Related -------------------*/
  1327. typedef enum _ENUM_SERVICE_TX_TYPE_T {
  1328. ENUM_SERVICE_TX_TYPE_BY_DA,
  1329. ENUM_SERVICE_TX_TYPE_BY_CHNL,
  1330. ENUM_SERVICE_TX_TYPE_NUM
  1331. } ENUM_SERVICE_TX_TYPE_T;
  1332. typedef struct _SERVICE_DISCOVERY_FRAME_DATA_T {
  1333. QUE_ENTRY_T rQueueEntry;
  1334. P_MSDU_INFO_T prSDFrame;
  1335. ENUM_SERVICE_TX_TYPE_T eServiceType;
  1336. UINT_8 ucSeqNum;
  1337. union {
  1338. UINT_8 ucChannelNum;
  1339. UINT_8 aucPeerAddr[MAC_ADDR_LEN];
  1340. } uTypeData;
  1341. BOOLEAN fgIsTxDoneIndicate;
  1342. } SERVICE_DISCOVERY_FRAME_DATA_T, *P_SERVICE_DISCOVERY_FRAME_DATA_T;
  1343. struct _P2P_FSM_INFO_T_DEPRECATED {
  1344. /* P2P FSM State */
  1345. ENUM_P2P_STATE_T eCurrentState;
  1346. /* Channel */
  1347. BOOLEAN fgIsChannelRequested;
  1348. ENUM_P2P_STATE_T ePreviousState;
  1349. ENUM_P2P_STATE_T eReturnState; /* Return state after current activity finished or abort. */
  1350. UINT_8 aucTargetIfAddr[PARAM_MAC_ADDR_LEN];
  1351. P_BSS_DESC_T prTargetBss; /* BSS of target P2P Device. For Connection/Service Discovery */
  1352. P_STA_RECORD_T prTargetStaRec;
  1353. BOOLEAN fgIsRsponseProbe; /* Indicate if P2P FSM can response probe request frame. */
  1354. /* Sequence number of requested message. */
  1355. UINT_8 ucSeqNumOfReqMsg; /* Used for SAA FSM request message. */
  1356. /* Channel Privilege */
  1357. UINT_8 ucSeqNumOfChReq; /* Used for Channel Request message. */
  1358. UINT_8 ucSeqNumOfScnMsg; /* Used for SCAN FSM request message. */
  1359. UINT_8 ucSeqNumOfCancelMsg;
  1360. UINT_8 ucDialogToken;
  1361. UINT_8 ucRxDialogToken;
  1362. /* Timer */
  1363. TIMER_T rDeviceDiscoverTimer; /* For device discovery time of each discovery request from user. */
  1364. TIMER_T rOperationListenTimer; /* For Find phase under operational state. */
  1365. TIMER_T rFSMTimer; /* A timer used for Action frame timeout usage. */
  1366. TIMER_T rRejoinTimer; /* A timer used for Action frame timeout usage. */
  1367. /* Flag to indicate Provisioning */
  1368. BOOLEAN fgIsConnectionRequested;
  1369. /* Current IOCTL. */
  1370. ENUM_P2P_IOCTL_T eP2pIOCTL;
  1371. UINT_8 ucAvailableAuthTypes; /* Used for AUTH_MODE_AUTO_SWITCH */
  1372. /*--------SERVICE DISCOVERY--------*/
  1373. QUE_T rQueueGASRx; /* Input Request/Response. */
  1374. QUE_T rQueueGASTx; /* Output Response. */
  1375. P_SERVICE_DISCOVERY_FRAME_DATA_T prSDRequest;
  1376. UINT_8 ucVersionNum; /* GAS packet sequence number for...Action Frame? */
  1377. UINT_8 ucGlobalSeqNum; /* Sequence Number of RX SD packet. */
  1378. /*--------Service DISCOVERY--------*/
  1379. /*--------DEVICE DISCOVERY---------*/
  1380. UINT_8 aucTargetGroupID[PARAM_MAC_ADDR_LEN];
  1381. UINT_16 u2TargetGroupSsidLen;
  1382. UINT_8 aucTargetSsid[32];
  1383. UINT_8 aucSearchingP2pDevice[PARAM_MAC_ADDR_LEN];
  1384. UINT_8 ucDLToken;
  1385. /*----------------------------------*/
  1386. /* Indicating Peer Status. */
  1387. UINT_32 u4Flags;
  1388. /*Indicating current running mode. */
  1389. BOOLEAN fgIsApMode;
  1390. /*------------INVITATION------------*/
  1391. ENUM_P2P_INVITATION_POLICY eInvitationRspPolicy;
  1392. /*----------------------------------*/
  1393. };
  1394. struct _P2P_SPECIFIC_BSS_INFO_T {
  1395. /* For GO(AP) Mode - Compose TIM IE */
  1396. UINT_16 u2SmallestAID;
  1397. UINT_16 u2LargestAID;
  1398. UINT_8 ucBitmapCtrl;
  1399. /* UINT_8 aucPartialVirtualBitmap[MAX_LEN_TIM_PARTIAL_BMP]; */
  1400. /* For GC/GO OppPS */
  1401. BOOLEAN fgEnableOppPS;
  1402. UINT_16 u2CTWindow;
  1403. /* For GC/GO NOA */
  1404. UINT_8 ucNoAIndex;
  1405. UINT_8 ucNoATimingCount; /* Number of NoA Timing */
  1406. NOA_TIMING_T arNoATiming[P2P_MAXIMUM_NOA_COUNT];
  1407. BOOLEAN fgIsNoaAttrExisted;
  1408. /* For P2P Device */
  1409. UINT_8 ucRegClass; /* Regulatory Class for channel. */
  1410. UINT_8 ucListenChannel; /* Linten Channel only on channels 1, 6 and 11 in the 2.4 GHz. */
  1411. UINT_8 ucPreferredChannel; /* Operating Channel, should be one of channel list
  1412. in p2p connection settings. */
  1413. ENUM_CHNL_EXT_T eRfSco;
  1414. ENUM_BAND_T eRfBand;
  1415. /* Extended Listen Timing. */
  1416. UINT_16 u2AvailabilityPeriod;
  1417. UINT_16 u2AvailabilityInterval;
  1418. #if 0 /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 2, 0) */
  1419. UINT_16 u2IELenForBCN;
  1420. UINT_8 aucBeaconIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
  1421. /* UINT_16 u2IELenForProbeRsp; */
  1422. /* UINT_8 aucProbeRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE]; */
  1423. UINT_16 u2IELenForAssocRsp;
  1424. UINT_8 aucAssocRspIECache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE + WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
  1425. #else
  1426. UINT_16 u2AttributeLen;
  1427. UINT_8 aucAttributesCache[P2P_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
  1428. UINT_16 u2WscAttributeLen;
  1429. UINT_8 aucWscAttributesCache[WPS_MAXIMUM_ATTRIBUTES_CACHE_SIZE];
  1430. #endif
  1431. UINT_8 aucGroupID[MAC_ADDR_LEN];
  1432. UINT_16 u2GroupSsidLen;
  1433. UINT_8 aucGroupSsid[ELEM_MAX_LEN_SSID];
  1434. PARAM_CUSTOM_NOA_PARAM_STRUCT_T rNoaParam;
  1435. PARAM_CUSTOM_OPPPS_PARAM_STRUCT_T rOppPsParam;
  1436. UINT_16 u2WpaIeLen;
  1437. UINT_8 aucWpaIeBuffer[ELEM_HDR_LEN + ELEM_MAX_LEN_WPA];
  1438. };
  1439. typedef struct _MSG_P2P_DEVICE_DISCOVER_T {
  1440. MSG_HDR_T rMsgHdr; /* Must be the first member */
  1441. UINT_32 u4DevDiscoverTime; /* 0: Infinite, 1~X: in unit of MS. */
  1442. BOOLEAN fgIsSpecificType;
  1443. #if CFG_ENABLE_WIFI_DIRECT
  1444. P2P_DEVICE_TYPE_T rTargetDeviceType;
  1445. #endif
  1446. UINT_8 aucTargetDeviceID[MAC_ADDR_LEN];
  1447. } MSG_P2P_DEVICE_DISCOVER_T, *P_MSG_P2P_DEVICE_DISCOVER_T;
  1448. typedef struct _MSG_P2P_INVITATION_REQUEST_T {
  1449. MSG_HDR_T rMsgHdr; /* Must be the first member */
  1450. UINT_8 aucDeviceID[MAC_ADDR_LEN]; /* Target Device ID to be invited. */
  1451. } MSG_P2P_INVITATION_REQUEST_T, *P_MSG_P2P_INVITATION_REQUEST_T;
  1452. typedef struct _MSG_P2P_FUNCTION_SWITCH_T {
  1453. MSG_HDR_T rMsgHdr; /* Must be the first member */
  1454. BOOLEAN fgIsFuncOn;
  1455. } MSG_P2P_FUNCTION_SWITCH_T, *P_MSG_P2P_FUNCTION_SWITCH_T;
  1456. typedef struct _MSG_P2P_SERVICE_DISCOVERY_REQUEST_T {
  1457. MSG_HDR_T rMsgHdr; /* Must be the first member */
  1458. UINT_8 aucDeviceID[MAC_ADDR_LEN];
  1459. BOOLEAN fgNeedTxDoneIndicate;
  1460. UINT_8 ucSeqNum;
  1461. } MSG_P2P_SERVICE_DISCOVERY_REQUEST_T, *P_MSG_P2P_SERVICE_DISCOVERY_REQUEST_T;
  1462. /*******************************************************************************
  1463. * P U B L I C D A T A
  1464. ********************************************************************************
  1465. */
  1466. /*******************************************************************************
  1467. * P R I V A T E D A T A
  1468. ********************************************************************************
  1469. */
  1470. /*******************************************************************************
  1471. * M A C R O S
  1472. ********************************************************************************
  1473. */
  1474. #define p2pChangeMediaState(_prAdapter, _eNewMediaState) \
  1475. do { \
  1476. (_prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX].eConnectionState = (_eNewMediaState));\
  1477. wfdChangeMediaState((_prAdapter), NETWORK_TYPE_P2P_INDEX, (_eNewMediaState)); \
  1478. } while (0)
  1479. #define ATTRI_ID(_fp) (((P_P2P_ATTRIBUTE_T) _fp)->ucId)
  1480. #define ATTRI_LEN(_fp) \
  1481. (((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[0]) | \
  1482. ((UINT_16) ((PUINT_8)&((P_P2P_ATTRIBUTE_T) _fp)->u2Length)[1] << 8))
  1483. #define ATTRI_SIZE(_fp) (P2P_ATTRI_HDR_LEN + ATTRI_LEN(_fp))
  1484. #define P2P_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
  1485. for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
  1486. (_u2Offset) += ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += ATTRI_SIZE(_pucAttriBuf)))
  1487. #define P2P_IE(_fp) ((P_IE_P2P_T) _fp)
  1488. #define WSC_ATTRI_ID(_fp) \
  1489. (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[0] << 8) | \
  1490. ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Id)[1]))
  1491. #define WSC_ATTRI_LEN(_fp) \
  1492. (((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
  1493. ((UINT_16) ((PUINT_8)&((P_WSC_ATTRIBUTE_T) _fp)->u2Length)[1]))
  1494. #define WSC_ATTRI_SIZE(_fp) (WSC_ATTRI_HDR_LEN + WSC_ATTRI_LEN(_fp))
  1495. #define WSC_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
  1496. for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
  1497. (_u2Offset) += WSC_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WSC_ATTRI_SIZE(_pucAttriBuf)))
  1498. #define WSC_IE(_fp) ((P_IE_P2P_T) _fp)
  1499. #define WFD_ATTRI_ID(_fp) (((P_WFD_ATTRIBUTE_T) _fp)->ucElemID)
  1500. #define WFD_ATTRI_LEN(_fp) \
  1501. (((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[0] << 8) | \
  1502. ((UINT_16) ((PUINT_8)&((P_WFD_ATTRIBUTE_T) _fp)->u2Length)[1]))
  1503. #define WFD_ATTRI_SIZE(_fp) (WFD_ATTRI_HDR_LEN + WFD_ATTRI_LEN(_fp))
  1504. #define WFD_ATTRI_FOR_EACH(_pucAttriBuf, _u2AttriBufLen, _u2Offset) \
  1505. for ((_u2Offset) = 0; ((_u2Offset) < (_u2AttriBufLen)); \
  1506. (_u2Offset) += WFD_ATTRI_SIZE(_pucAttriBuf), ((_pucAttriBuf) += WFD_ATTRI_SIZE(_pucAttriBuf)))
  1507. #if DBG
  1508. #define ASSERT_BREAK(_exp) \
  1509. { \
  1510. if (!(_exp)) { \
  1511. ASSERT(FALSE); \
  1512. break; \
  1513. } \
  1514. }
  1515. #else
  1516. #define ASSERT_BREAK(_exp)
  1517. #endif
  1518. /*******************************************************************************
  1519. * F U N C T I O N D E C L A R A T I O N S
  1520. ********************************************************************************
  1521. */
  1522. /*======P2P State======*/
  1523. VOID
  1524. p2pStateInit_LISTEN(IN P_ADAPTER_T prAdapter,
  1525. IN P_P2P_FSM_INFO_T prP2pFsmInfo,
  1526. IN P_P2P_SPECIFIC_BSS_INFO_T prSP2pBssInfo, IN UINT_8 ucListenChannel);
  1527. VOID p2pStateAbort_LISTEN(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgIsChannelExtenstion);
  1528. VOID p2pStateAbort_SEARCH_SCAN(IN P_ADAPTER_T prAdapter, IN BOOLEAN fgIsChannelExtenstion);
  1529. VOID p2pStateAbort_GO_OPERATION(IN P_ADAPTER_T prAdapter);
  1530. VOID p2pStateAbort_GC_OPERATION(IN P_ADAPTER_T prAdapter);
  1531. VOID
  1532. p2pStateInit_CONFIGURATION(IN P_ADAPTER_T prAdapter,
  1533. IN P_P2P_FSM_INFO_T prP2pFsmInfo,
  1534. IN P_BSS_INFO_T prP2pBssInfo, IN P_P2P_SPECIFIC_BSS_INFO_T prP2pSpecBssInfo);
  1535. VOID p2pStateAbort_CONFIGURATION(IN P_ADAPTER_T prAdapter);
  1536. VOID p2pStateInit_JOIN(IN P_ADAPTER_T prAdapter);
  1537. VOID p2pStateAbort_JOIN(IN P_ADAPTER_T prAdapter);
  1538. /*====== P2P Functions ======*/
  1539. VOID p2pFuncInitGO(IN P_ADAPTER_T prAdapter);
  1540. VOID
  1541. p2pFuncDisconnect(IN P_ADAPTER_T prAdapter,
  1542. IN P_STA_RECORD_T prStaRec, IN BOOLEAN fgSendDeauth, IN UINT_16 u2ReasonCode);
  1543. VOID
  1544. p2pFuncSwitchOPMode(IN P_ADAPTER_T prAdapter,
  1545. IN P_BSS_INFO_T prP2pBssInfo, IN ENUM_OP_MODE_T eOpMode, IN BOOLEAN fgSyncToFW);
  1546. VOID p2pFuncRunEventProvisioningComplete(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1547. WLAN_STATUS p2pFuncSetGroupID(IN P_ADAPTER_T prAdapter, IN PUINT_8 pucGroupID, IN PUINT_8 pucSsid, IN UINT_8 ucSsidLen);
  1548. WLAN_STATUS
  1549. p2pFuncSendDeviceDiscoverabilityReqFrame(IN P_ADAPTER_T prAdapter, IN UINT_8 aucDestAddr[], IN UINT_8 ucDialogToken);
  1550. WLAN_STATUS
  1551. p2pFuncSendDeviceDiscoverabilityRspFrame(IN P_ADAPTER_T prAdapter, IN UINT_8 aucDestAddr[], IN UINT_8 ucDialogToken);
  1552. UINT_8 p2pFuncGetVersionNumOfSD(IN P_ADAPTER_T prAdapter);
  1553. /*====== P2P FSM ======*/
  1554. VOID p2pFsmRunEventConnectionRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1555. VOID p2pFsmRunEventDeviceDiscoveryRequest(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1556. VOID p2pFsmRunEventDeviceDiscoveryAbort(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1557. VOID p2pFsmRunEventRxGroupNegotiationReqFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1558. WLAN_STATUS
  1559. p2pFsmRunEventGroupNegotiationRequestTxDone(IN P_ADAPTER_T prAdapter,
  1560. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1561. WLAN_STATUS
  1562. p2pFsmRunEventGroupNegotiationResponseTxDone(IN P_ADAPTER_T prAdapter,
  1563. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1564. WLAN_STATUS
  1565. p2pFsmRunEventGroupNegotiationConfirmTxDone(IN P_ADAPTER_T prAdapter,
  1566. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1567. WLAN_STATUS
  1568. p2pFsmRunEventProvisionDiscoveryRequestTxDone(IN P_ADAPTER_T prAdapter,
  1569. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1570. WLAN_STATUS
  1571. p2pFsmRunEventProvisionDiscoveryResponseTxDone(IN P_ADAPTER_T prAdapter,
  1572. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1573. WLAN_STATUS
  1574. p2pFsmRunEventInvitationRequestTxDone(IN P_ADAPTER_T prAdapter,
  1575. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1576. VOID p2pFsmRunEventRxDeauthentication(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_SW_RFB_T prSwRfb);
  1577. VOID p2pFsmRunEventRxDisassociation(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_SW_RFB_T prSwRfb);
  1578. VOID p2pFsmRunEventBeaconTimeout(IN P_ADAPTER_T prAdapter);
  1579. WLAN_STATUS
  1580. p2pFsmRunEventDeauthTxDone(IN P_ADAPTER_T prAdapter,
  1581. IN P_MSDU_INFO_T prMsduInfo, IN ENUM_TX_RESULT_CODE_T rTxDoneStatus);
  1582. #if 1
  1583. #endif
  1584. /* //////////////////////////////////////////////////////////////////////// */
  1585. /* //////////////////////////////////////////////////////////////////////// */
  1586. /* //////////////////////////////////////////////////////////////////////// */
  1587. /* //////////////////////////////////////////////////////////////////////// */
  1588. /* //////////////////////////////////////////////////////////////////////// */
  1589. /* //////////////////////////////////////////////////////////////////////// */
  1590. /* //////////////////////////////////////////////////////////////////////// */
  1591. /* //////////////////////////////////////////////////////////////////////// */
  1592. /* //////////////////////////////////////////////////////////////////////// */
  1593. /* //////////////////////////////////////////////////////////////////////// */
  1594. /* //////////////////////////////////////////////////////////////////////// */
  1595. /*======Mail Box Event Message=====*/
  1596. VOID p2pFsmRunEventConnectionAbort(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1597. VOID p2pFsmRunEventConnectionTrigger(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1598. VOID p2pFsmRunEventP2PFunctionSwitch(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1599. VOID p2pFsmRunEventChGrant(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1600. VOID p2pFsmRunEventJoinComplete(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1601. VOID p2pFsmRunEventConnectionPause(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1602. VOID
  1603. p2pIndicationOfMediaStateToHost(IN P_ADAPTER_T prAdapter,
  1604. IN ENUM_PARAM_MEDIA_STATE_T eConnectionState, IN UINT_8 aucTargetAddr[]);
  1605. VOID p2pUpdateBssInfoForJOIN(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec, IN P_SW_RFB_T prAssocRspSwRfb);
  1606. /*======Mail Box Event Message=====*/
  1607. VOID p2pFsmInit(IN P_ADAPTER_T prAdapter);
  1608. VOID p2pFsmUninit(IN P_ADAPTER_T prAdapter);
  1609. VOID p2pFsmSteps(IN P_ADAPTER_T prAdapter, IN ENUM_P2P_STATE_T eNextState);
  1610. VOID p2pStartGO(IN P_ADAPTER_T prAdapter);
  1611. VOID p2pAssignSsid(IN PUINT_8 pucSsid, IN PUINT_8 pucSsidLen);
  1612. VOID p2pFsmRunEventScanDone(IN P_ADAPTER_T prAdapter, IN P_MSG_HDR_T prMsgHdr);
  1613. VOID p2pFsmRunEventIOReqTimeout(IN P_ADAPTER_T prAdapter, IN UINT_32 u4Param);
  1614. VOID p2pFsmRunEventSearchPeriodTimeout(IN P_ADAPTER_T prAdapter, IN UINT_32 u4Param);
  1615. VOID p2pFsmRunEventFsmTimeout(IN P_ADAPTER_T prAdapter, IN ULONG u4Param);
  1616. VOID p2pFsmRunEventRejoinTimeout(IN P_ADAPTER_T prAdapter, IN UINT_32 u4Parm);
  1617. /*=============== P2P Function Related ================*/
  1618. /*=============== P2P Function Related ================*/
  1619. #if CFG_TEST_WIFI_DIRECT_GO
  1620. VOID p2pTest(IN P_ADAPTER_T prAdapter);
  1621. #endif /* CFG_TEST_WIFI_DIRECT_GO */
  1622. VOID p2pGenerateP2P_IEForBeacon(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
  1623. VOID p2pGenerateP2P_IEForAssocReq(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
  1624. VOID p2pGenerateP2P_IEForAssocRsp(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
  1625. VOID
  1626. p2pGenerateP2P_IEForProbeReq(IN P_ADAPTER_T prAdapter, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1627. UINT_32
  1628. p2pCalculateP2P_IELenForBeacon(IN P_ADAPTER_T prAdapter,
  1629. IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, IN P_STA_RECORD_T prStaRec);
  1630. UINT_32
  1631. p2pCalculateP2P_IELenForAssocRsp(IN P_ADAPTER_T prAdapter,
  1632. IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, IN P_STA_RECORD_T prStaRec);
  1633. UINT_32
  1634. p2pCalculateP2P_IELenForProbeReq(IN P_ADAPTER_T prAdapter,
  1635. IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, IN P_STA_RECORD_T prStaRec);
  1636. VOID p2pGenerateWSC_IEForProbeResp(IN P_ADAPTER_T prAdapter, IN P_MSDU_INFO_T prMsduInfo);
  1637. VOID
  1638. p2pGenerateWSC_IEForProbeReq(IN P_ADAPTER_T prAdapter, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1639. UINT_16 p2pCalculateWSC_IELenForProbeReq(IN P_ADAPTER_T prAdapter, IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex);
  1640. UINT_32
  1641. p2pCalculateWSC_IELenForProbeResp(IN P_ADAPTER_T prAdapter,
  1642. IN ENUM_NETWORK_TYPE_INDEX_T eNetTypeIndex, IN P_STA_RECORD_T prStaRec);
  1643. UINT_32
  1644. p2pAppendAttriStatus(IN P_ADAPTER_T prAdapter,
  1645. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1646. UINT_32
  1647. p2pAppendAttriCapability(IN P_ADAPTER_T prAdapter,
  1648. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1649. UINT_32
  1650. p2pAppendAttriGoIntent(IN P_ADAPTER_T prAdapter,
  1651. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1652. UINT_32
  1653. p2pAppendAttriCfgTimeout(IN P_ADAPTER_T prAdapter,
  1654. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1655. UINT_32
  1656. p2pAppendAttriGroupBssid(IN P_ADAPTER_T prAdapter,
  1657. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1658. UINT_32
  1659. p2pAppendAttriDeviceIDForBeacon(IN P_ADAPTER_T prAdapter,
  1660. IN BOOLEAN fgIsAssocFrame,
  1661. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1662. UINT_32
  1663. p2pAppendAttriDeviceIDForProbeReq(IN P_ADAPTER_T prAdapter,
  1664. IN BOOLEAN fgIsAssocFrame,
  1665. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1666. UINT_32
  1667. p2pAppendAttriDeviceIDForDeviceDiscoveryReq(IN P_ADAPTER_T prAdapter,
  1668. IN BOOLEAN fgIsAssocFrame,
  1669. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1670. UINT_32
  1671. p2pAppendAttriListenChannel(IN P_ADAPTER_T prAdapter,
  1672. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1673. UINT_32
  1674. p2pAppendAttriIntendP2pIfAddr(IN P_ADAPTER_T prAdapter,
  1675. IN BOOLEAN fgIsAssocFrame,
  1676. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1677. UINT_32
  1678. p2pAppendAttriChannelList(IN P_ADAPTER_T prAdapter,
  1679. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1680. UINT_32 p2pCalculateAttriLenChannelList(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1681. UINT_32
  1682. p2pAppendAttriNoA(IN P_ADAPTER_T prAdapter,
  1683. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1684. UINT_32
  1685. p2pAppendAttriDeviceInfo(IN P_ADAPTER_T prAdapter,
  1686. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1687. UINT_32 p2pCalculateAttriLenDeviceInfo(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1688. UINT_32
  1689. p2pAppendAttriGroupInfo(IN P_ADAPTER_T prAdapter,
  1690. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1691. UINT_32 p2pCalculateAttriLenGroupInfo(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1692. UINT_32
  1693. p2pAppendAttriP2pGroupID(IN P_ADAPTER_T prAdapter,
  1694. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1695. UINT_32
  1696. p2pAppendAttriOperatingChannel(IN P_ADAPTER_T prAdapter,
  1697. IN BOOLEAN fgIsAssocFrame,
  1698. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1699. UINT_32
  1700. p2pAppendAttriInvitationFlag(IN P_ADAPTER_T prAdapter,
  1701. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1702. VOID
  1703. p2pGenerateWscIE(IN P_ADAPTER_T prAdapter,
  1704. IN UINT_8 ucOuiType,
  1705. IN BOOLEAN fgIsAssocFrame,
  1706. IN PUINT_16 pu2Offset,
  1707. IN PUINT_8 pucBuf,
  1708. IN UINT_16 u2BufSize, IN APPEND_VAR_ATTRI_ENTRY_T arAppendAttriTable[], IN UINT_32 u4AttriTableSize);
  1709. UINT_32
  1710. p2pAppendAttriWSCConfigMethod(IN P_ADAPTER_T prAdapter,
  1711. IN BOOLEAN fgIsAssocFrame,
  1712. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1713. UINT_32
  1714. p2pAppendAttriWSCVersion(IN P_ADAPTER_T prAdapter,
  1715. IN BOOLEAN fgIsAssocFrame, IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1716. UINT_32
  1717. p2pAppendAttriWSCGONegReqDevPasswordId(IN P_ADAPTER_T prAdapter,
  1718. IN BOOLEAN fgIsAssocFrame,
  1719. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1720. UINT_32
  1721. p2pAppendAttriWSCGONegRspDevPasswordId(IN P_ADAPTER_T prAdapter,
  1722. IN BOOLEAN fgIsAssocFrame,
  1723. IN PUINT_16 pu2Offset, IN PUINT_8 pucBuf, IN UINT_16 u2BufSize);
  1724. WLAN_STATUS
  1725. p2pGetWscAttriList(IN P_ADAPTER_T prAdapter,
  1726. IN UINT_8 ucOuiType,
  1727. IN PUINT_8 pucIE, IN UINT_16 u2IELength, OUT PPUINT_8 ppucAttriList, OUT PUINT_16 pu2AttriListLen);
  1728. WLAN_STATUS
  1729. p2pGetAttriList(IN P_ADAPTER_T prAdapter,
  1730. IN UINT_8 ucOuiType,
  1731. IN PUINT_8 pucIE, IN UINT_16 u2IELength, OUT PPUINT_8 ppucAttriList, OUT PUINT_16 pu2AttriListLen);
  1732. VOID p2pRunEventAAATxFail(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1733. WLAN_STATUS p2pRunEventAAASuccess(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1734. WLAN_STATUS p2pRunEventAAAComplete(IN P_ADAPTER_T prAdapter, IN P_STA_RECORD_T prStaRec);
  1735. WLAN_STATUS p2pSendProbeResponseFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1736. BOOLEAN p2pFsmRunEventRxProbeRequestFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1737. VOID p2pFsmRunEventRxProbeResponseFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb, IN P_BSS_DESC_T prBssDesc);
  1738. WLAN_STATUS p2pRxPublicActionFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1739. WLAN_STATUS p2pRxActionFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1740. VOID p2pFsmRunEventRxGroupNegotiationRspFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1741. VOID p2pFsmRunEventRxGroupNegotiationCfmFrame(IN P_ADAPTER_T prAdapter, IN P_SW_RFB_T prSwRfb);
  1742. #if 0 /* frog */
  1743. BOOLEAN scanMatchFilterOfP2P(IN P_SW_RFB_T prSWRfb, IN PP_BSS_DESC_T pprBssDesc);
  1744. #endif /* frog */
  1745. VOID
  1746. p2pProcessEvent_UpdateNOAParam(IN P_ADAPTER_T prAdapter,
  1747. UINT_8 ucNetTypeIndex, P_EVENT_UPDATE_NOA_PARAMS_T prEventUpdateNoaParam);
  1748. VOID p2pFuncCompleteIOCTL(IN P_ADAPTER_T prAdapter, IN WLAN_STATUS rWlanStatus);
  1749. /*******************************************************************************
  1750. * F U N C T I O N S
  1751. ********************************************************************************
  1752. */
  1753. #ifndef _lint
  1754. /* Kevin: we don't have to call following function to inspect the data structure.
  1755. * It will check automatically while at compile time.
  1756. * We'll need this for porting driver to different RTOS.
  1757. */
  1758. static inline VOID p2pDataTypeCheck(VOID)
  1759. {
  1760. DATA_STRUCT_INSPECTING_ASSERT(sizeof(IE_P2P_T) == (2 + 4 + 1)); /* all UINT_8 */
  1761. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRIBUTE_T) == (3 + 1));
  1762. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_STATUS_T) == (3 + 1));
  1763. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_REASON_T) == (3 + 1));
  1764. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CAPABILITY_T) == (3 + 2));
  1765. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_ID_T) == (3 + 6));
  1766. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GO_INTENT_T) == (3 + 1));
  1767. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CFG_TIMEOUT_T) == (3 + 2));
  1768. #if CID52_53_54
  1769. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3 + 5));
  1770. #else
  1771. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_LISTEN_CHANNEL_T) == (3 + 5));
  1772. #endif
  1773. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_BSSID_T) == (3 + 6));
  1774. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_EXT_LISTEN_TIMING_T) == (3 + 4));
  1775. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTENDED_IF_ADDR_T) == (3 + 6));
  1776. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_MANAGEABILITY_T) == (3 + 1));
  1777. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_CHANNEL_T) == (3 + 4));
  1778. DATA_STRUCT_INSPECTING_ASSERT(sizeof(CHANNEL_ENTRY_FIELD_T) == 3);
  1779. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_NOA_T) == (3 + 3));
  1780. DATA_STRUCT_INSPECTING_ASSERT(sizeof(NOA_DESCRIPTOR_T) == 13);
  1781. DATA_STRUCT_INSPECTING_ASSERT(sizeof(DEVICE_TYPE_T) == 8);
  1782. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_DEV_INFO_T) == (3 + 6 + 2 + 8 + 1 + 8));
  1783. DATA_STRUCT_INSPECTING_ASSERT(sizeof(DEVICE_NAME_TLV_T) == (4 + 32));
  1784. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_CLIENT_INFO_DESC_T) == (1 + 6 + 6 + 1 + 2 + 8 + 1 + 8));
  1785. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_INFO_T) == (3 + (1 + 6 + 6 + 1 + 2 + 8 + 1 + 8)));
  1786. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_GROUP_ID_T) == (3 + 38));
  1787. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_INTERFACE_T) == (3 + 13));
  1788. #if CID52_53_54
  1789. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3 + 5));
  1790. #else
  1791. DATA_STRUCT_INSPECTING_ASSERT(sizeof(P2P_ATTRI_OPERATING_CHANNEL_T) == (3 + 5));
  1792. #endif
  1793. }
  1794. #endif /* _lint */
  1795. #endif /* _P2P_FSM_H */