wmi.h 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281
  1. /*
  2. * Copyright (c) 2012 Qualcomm Atheros, Inc.
  3. * Copyright (c) 2006-2012 Wilocity .
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any
  6. * purpose with or without fee is hereby granted, provided that the above
  7. * copyright notice and this permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
  10. * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
  11. * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
  12. * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  13. * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  14. * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  15. * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  16. */
  17. /*
  18. * This file contains the definitions of the WMI protocol specified in the
  19. * Wireless Module Interface (WMI) for the Wilocity
  20. * MARLON 60 Gigabit wireless solution.
  21. * It includes definitions of all the commands and events.
  22. * Commands are messages from the host to the WM.
  23. * Events are messages from the WM to the host.
  24. */
  25. #ifndef __WILOCITY_WMI_H__
  26. #define __WILOCITY_WMI_H__
  27. /* General */
  28. #define WMI_MAC_LEN (6)
  29. #define WMI_PROX_RANGE_NUM (3)
  30. /* List of Commands */
  31. enum wmi_command_id {
  32. WMI_CONNECT_CMDID = 0x0001,
  33. WMI_DISCONNECT_CMDID = 0x0003,
  34. WMI_DISCONNECT_STA_CMDID = 0x0004,
  35. WMI_START_SCAN_CMDID = 0x0007,
  36. WMI_SET_BSS_FILTER_CMDID = 0x0009,
  37. WMI_SET_PROBED_SSID_CMDID = 0x000a,
  38. WMI_SET_LISTEN_INT_CMDID = 0x000b,
  39. WMI_BCON_CTRL_CMDID = 0x000f,
  40. WMI_ADD_CIPHER_KEY_CMDID = 0x0016,
  41. WMI_DELETE_CIPHER_KEY_CMDID = 0x0017,
  42. WMI_SET_APPIE_CMDID = 0x003f,
  43. WMI_SET_WSC_STATUS_CMDID = 0x0041,
  44. WMI_PXMT_RANGE_CFG_CMDID = 0x0042,
  45. WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x0043,
  46. WMI_FAST_MEM_ACC_MODE_CMDID = 0x0300,
  47. WMI_MEM_READ_CMDID = 0x0800,
  48. WMI_MEM_WR_CMDID = 0x0801,
  49. WMI_ECHO_CMDID = 0x0803,
  50. WMI_DEEP_ECHO_CMDID = 0x0804,
  51. WMI_CONFIG_MAC_CMDID = 0x0805,
  52. WMI_CONFIG_PHY_DEBUG_CMDID = 0x0806,
  53. WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x0808,
  54. WMI_PHY_GET_STATISTICS_CMDID = 0x0809,
  55. WMI_FS_TUNE_CMDID = 0x080a,
  56. WMI_CORR_MEASURE_CMDID = 0x080b,
  57. WMI_READ_RSSI_CMDID = 0x080c,
  58. WMI_TEMP_SENSE_CMDID = 0x080e,
  59. WMI_DC_CALIB_CMDID = 0x080f,
  60. WMI_SEND_TONE_CMDID = 0x0810,
  61. WMI_IQ_TX_CALIB_CMDID = 0x0811,
  62. WMI_IQ_RX_CALIB_CMDID = 0x0812,
  63. WMI_SET_UCODE_IDLE_CMDID = 0x0813,
  64. WMI_SET_WORK_MODE_CMDID = 0x0815,
  65. WMI_LO_LEAKAGE_CALIB_CMDID = 0x0816,
  66. WMI_MARLON_R_ACTIVATE_CMDID = 0x0817,
  67. WMI_MARLON_R_READ_CMDID = 0x0818,
  68. WMI_MARLON_R_WRITE_CMDID = 0x0819,
  69. WMI_MARLON_R_TXRX_SEL_CMDID = 0x081a,
  70. MAC_IO_STATIC_PARAMS_CMDID = 0x081b,
  71. MAC_IO_DYNAMIC_PARAMS_CMDID = 0x081c,
  72. WMI_SILENT_RSSI_CALIB_CMDID = 0x081d,
  73. WMI_RF_RX_TEST_CMDID = 0x081e,
  74. WMI_CFG_RX_CHAIN_CMDID = 0x0820,
  75. WMI_VRING_CFG_CMDID = 0x0821,
  76. WMI_VRING_BA_EN_CMDID = 0x0823,
  77. WMI_VRING_BA_DIS_CMDID = 0x0824,
  78. WMI_RCP_ADDBA_RESP_CMDID = 0x0825,
  79. WMI_RCP_DELBA_CMDID = 0x0826,
  80. WMI_SET_SSID_CMDID = 0x0827,
  81. WMI_GET_SSID_CMDID = 0x0828,
  82. WMI_SET_PCP_CHANNEL_CMDID = 0x0829,
  83. WMI_GET_PCP_CHANNEL_CMDID = 0x082a,
  84. WMI_SW_TX_REQ_CMDID = 0x082b,
  85. WMI_READ_MAC_RXQ_CMDID = 0x0830,
  86. WMI_READ_MAC_TXQ_CMDID = 0x0831,
  87. WMI_WRITE_MAC_RXQ_CMDID = 0x0832,
  88. WMI_WRITE_MAC_TXQ_CMDID = 0x0833,
  89. WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x0834,
  90. WMI_MLME_PUSH_CMDID = 0x0835,
  91. WMI_BEAMFORMING_MGMT_CMDID = 0x0836,
  92. WMI_BF_TXSS_MGMT_CMDID = 0x0837,
  93. WMI_BF_SM_MGMT_CMDID = 0x0838,
  94. WMI_BF_RXSS_MGMT_CMDID = 0x0839,
  95. WMI_SET_SECTORS_CMDID = 0x0849,
  96. WMI_MAINTAIN_PAUSE_CMDID = 0x0850,
  97. WMI_MAINTAIN_RESUME_CMDID = 0x0851,
  98. WMI_RS_MGMT_CMDID = 0x0852,
  99. WMI_RF_MGMT_CMDID = 0x0853,
  100. /* Performance monitoring commands */
  101. WMI_BF_CTRL_CMDID = 0x0862,
  102. WMI_NOTIFY_REQ_CMDID = 0x0863,
  103. WMI_GET_STATUS_CMDID = 0x0864,
  104. WMI_UNIT_TEST_CMDID = 0x0900,
  105. WMI_HICCUP_CMDID = 0x0901,
  106. WMI_FLASH_READ_CMDID = 0x0902,
  107. WMI_FLASH_WRITE_CMDID = 0x0903,
  108. WMI_SECURITY_UNIT_TEST_CMDID = 0x0904,
  109. /*P2P*/
  110. WMI_P2P_CFG_CMDID = 0x0910,
  111. WMI_PORT_ALLOCATE_CMDID = 0x0911,
  112. WMI_PORT_DELETE_CMDID = 0x0912,
  113. WMI_POWER_MGMT_CFG_CMDID = 0x0913,
  114. WMI_START_LISTEN_CMDID = 0x0914,
  115. WMI_START_SEARCH_CMDID = 0x0915,
  116. WMI_DISCOVERY_START_CMDID = 0x0916,
  117. WMI_DISCOVERY_STOP_CMDID = 0x0917,
  118. WMI_PCP_START_CMDID = 0x0918,
  119. WMI_PCP_STOP_CMDID = 0x0919,
  120. WMI_GET_PCP_FACTOR_CMDID = 0x091b,
  121. WMI_SET_MAC_ADDRESS_CMDID = 0xf003,
  122. WMI_ABORT_SCAN_CMDID = 0xf007,
  123. WMI_SET_PMK_CMDID = 0xf028,
  124. WMI_SET_PROMISCUOUS_MODE_CMDID = 0xf041,
  125. WMI_GET_PMK_CMDID = 0xf048,
  126. WMI_SET_PASSPHRASE_CMDID = 0xf049,
  127. WMI_SEND_ASSOC_RES_CMDID = 0xf04a,
  128. WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xf04b,
  129. WMI_EAPOL_TX_CMDID = 0xf04c,
  130. WMI_MAC_ADDR_REQ_CMDID = 0xf04d,
  131. WMI_FW_VER_CMDID = 0xf04e,
  132. };
  133. /*
  134. * Commands data structures
  135. */
  136. /*
  137. * WMI_CONNECT_CMDID
  138. */
  139. enum wmi_network_type {
  140. WMI_NETTYPE_INFRA = 0x01,
  141. WMI_NETTYPE_ADHOC = 0x02,
  142. WMI_NETTYPE_ADHOC_CREATOR = 0x04,
  143. WMI_NETTYPE_AP = 0x10,
  144. WMI_NETTYPE_P2P = 0x20,
  145. WMI_NETTYPE_WBE = 0x40, /* PCIE over 60g */
  146. };
  147. enum wmi_dot11_auth_mode {
  148. WMI_AUTH11_OPEN = 0x01,
  149. WMI_AUTH11_SHARED = 0x02,
  150. WMI_AUTH11_LEAP = 0x04,
  151. WMI_AUTH11_WSC = 0x08,
  152. };
  153. enum wmi_auth_mode {
  154. WMI_AUTH_NONE = 0x01,
  155. WMI_AUTH_WPA = 0x02,
  156. WMI_AUTH_WPA2 = 0x04,
  157. WMI_AUTH_WPA_PSK = 0x08,
  158. WMI_AUTH_WPA2_PSK = 0x10,
  159. WMI_AUTH_WPA_CCKM = 0x20,
  160. WMI_AUTH_WPA2_CCKM = 0x40,
  161. };
  162. enum wmi_crypto_type {
  163. WMI_CRYPT_NONE = 0x01,
  164. WMI_CRYPT_WEP = 0x02,
  165. WMI_CRYPT_TKIP = 0x04,
  166. WMI_CRYPT_AES = 0x08,
  167. WMI_CRYPT_AES_GCMP = 0x20,
  168. };
  169. enum wmi_connect_ctrl_flag_bits {
  170. WMI_CONNECT_ASSOC_POLICY_USER = 0x0001,
  171. WMI_CONNECT_SEND_REASSOC = 0x0002,
  172. WMI_CONNECT_IGNORE_WPA_GROUP_CIPHER = 0x0004,
  173. WMI_CONNECT_PROFILE_MATCH_DONE = 0x0008,
  174. WMI_CONNECT_IGNORE_AAC_BEACON = 0x0010,
  175. WMI_CONNECT_CSA_FOLLOW_BSS = 0x0020,
  176. WMI_CONNECT_DO_WPA_OFFLOAD = 0x0040,
  177. WMI_CONNECT_DO_NOT_DEAUTH = 0x0080,
  178. };
  179. #define WMI_MAX_SSID_LEN (32)
  180. struct wmi_connect_cmd {
  181. u8 network_type;
  182. u8 dot11_auth_mode;
  183. u8 auth_mode;
  184. u8 pairwise_crypto_type;
  185. u8 pairwise_crypto_len;
  186. u8 group_crypto_type;
  187. u8 group_crypto_len;
  188. u8 ssid_len;
  189. u8 ssid[WMI_MAX_SSID_LEN];
  190. u8 channel;
  191. u8 reserved0;
  192. u8 bssid[WMI_MAC_LEN];
  193. __le32 ctrl_flags;
  194. u8 dst_mac[WMI_MAC_LEN];
  195. u8 reserved1[2];
  196. } __packed;
  197. /*
  198. * WMI_DISCONNECT_STA_CMDID
  199. */
  200. struct wmi_disconnect_sta_cmd {
  201. u8 dst_mac[WMI_MAC_LEN];
  202. __le16 disconnect_reason;
  203. } __packed;
  204. /*
  205. * WMI_RECONNECT_CMDID
  206. */
  207. struct wmi_reconnect_cmd {
  208. u8 channel; /* hint */
  209. u8 reserved;
  210. u8 bssid[WMI_MAC_LEN]; /* mandatory if set */
  211. } __packed;
  212. /*
  213. * WMI_SET_PMK_CMDID
  214. */
  215. #define WMI_MIN_KEY_INDEX (0)
  216. #define WMI_MAX_KEY_INDEX (3)
  217. #define WMI_MAX_KEY_LEN (32)
  218. #define WMI_PASSPHRASE_LEN (64)
  219. #define WMI_PMK_LEN (32)
  220. struct wmi_set_pmk_cmd {
  221. u8 pmk[WMI_PMK_LEN];
  222. } __packed;
  223. /*
  224. * WMI_SET_PASSPHRASE_CMDID
  225. */
  226. struct wmi_set_passphrase_cmd {
  227. u8 ssid[WMI_MAX_SSID_LEN];
  228. u8 passphrase[WMI_PASSPHRASE_LEN];
  229. u8 ssid_len;
  230. u8 passphrase_len;
  231. } __packed;
  232. /*
  233. * WMI_ADD_CIPHER_KEY_CMDID
  234. */
  235. enum wmi_key_usage {
  236. WMI_KEY_USE_PAIRWISE = 0,
  237. WMI_KEY_USE_GROUP = 1,
  238. WMI_KEY_USE_TX = 2, /* default Tx Key - Static WEP only */
  239. };
  240. struct wmi_add_cipher_key_cmd {
  241. u8 key_index;
  242. u8 key_type;
  243. u8 key_usage; /* enum wmi_key_usage */
  244. u8 key_len;
  245. u8 key_rsc[8]; /* key replay sequence counter */
  246. u8 key[WMI_MAX_KEY_LEN];
  247. u8 key_op_ctrl; /* Additional Key Control information */
  248. u8 mac[WMI_MAC_LEN];
  249. } __packed;
  250. /*
  251. * WMI_DELETE_CIPHER_KEY_CMDID
  252. */
  253. struct wmi_delete_cipher_key_cmd {
  254. u8 key_index;
  255. u8 mac[WMI_MAC_LEN];
  256. } __packed;
  257. /*
  258. * WMI_START_SCAN_CMDID
  259. *
  260. * Start L1 scan operation
  261. *
  262. * Returned events:
  263. * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp.
  264. * - WMI_SCAN_COMPLETE_EVENTID
  265. */
  266. enum wmi_scan_type {
  267. WMI_LONG_SCAN = 0,
  268. WMI_SHORT_SCAN = 1,
  269. WMI_PBC_SCAN = 2,
  270. };
  271. struct wmi_start_scan_cmd {
  272. u8 reserved[8];
  273. __le32 home_dwell_time; /* Max duration in the home channel(ms) */
  274. __le32 force_scan_interval; /* Time interval between scans (ms)*/
  275. u8 scan_type; /* wmi_scan_type */
  276. u8 num_channels; /* how many channels follow */
  277. struct {
  278. u8 channel;
  279. u8 reserved;
  280. } channel_list[0]; /* channels ID's */
  281. /* 0 - 58320 MHz */
  282. /* 1 - 60480 MHz */
  283. /* 2 - 62640 MHz */
  284. } __packed;
  285. /*
  286. * WMI_SET_PROBED_SSID_CMDID
  287. */
  288. #define MAX_PROBED_SSID_INDEX (3)
  289. enum wmi_ssid_flag {
  290. WMI_SSID_FLAG_DISABLE = 0, /* disables entry */
  291. WMI_SSID_FLAG_SPECIFIC = 1, /* probes specified ssid */
  292. WMI_SSID_FLAG_ANY = 2, /* probes for any ssid */
  293. };
  294. struct wmi_probed_ssid_cmd {
  295. u8 entry_index; /* 0 to MAX_PROBED_SSID_INDEX */
  296. u8 flag; /* enum wmi_ssid_flag */
  297. u8 ssid_len;
  298. u8 ssid[WMI_MAX_SSID_LEN];
  299. } __packed;
  300. /*
  301. * WMI_SET_APPIE_CMDID
  302. * Add Application specified IE to a management frame
  303. */
  304. #define WMI_MAX_IE_LEN (1024)
  305. /*
  306. * Frame Types
  307. */
  308. enum wmi_mgmt_frame_type {
  309. WMI_FRAME_BEACON = 0,
  310. WMI_FRAME_PROBE_REQ = 1,
  311. WMI_FRAME_PROBE_RESP = 2,
  312. WMI_FRAME_ASSOC_REQ = 3,
  313. WMI_FRAME_ASSOC_RESP = 4,
  314. WMI_NUM_MGMT_FRAME,
  315. };
  316. struct wmi_set_appie_cmd {
  317. u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */
  318. u8 reserved;
  319. __le16 ie_len; /* Length of the IE to be added to MGMT frame */
  320. u8 ie_info[0];
  321. } __packed;
  322. /*
  323. * WMI_PXMT_RANGE_CFG_CMDID
  324. */
  325. struct wmi_pxmt_range_cfg_cmd {
  326. u8 dst_mac[WMI_MAC_LEN];
  327. __le16 range;
  328. } __packed;
  329. /*
  330. * WMI_PXMT_SNR2_RANGE_CFG_CMDID
  331. */
  332. struct wmi_pxmt_snr2_range_cfg_cmd {
  333. s8 snr2range_arr[WMI_PROX_RANGE_NUM-1];
  334. } __packed;
  335. /*
  336. * WMI_RF_MGMT_CMDID
  337. */
  338. enum wmi_rf_mgmt_type {
  339. WMI_RF_MGMT_W_DISABLE = 0,
  340. WMI_RF_MGMT_W_ENABLE = 1,
  341. WMI_RF_MGMT_GET_STATUS = 2,
  342. };
  343. struct wmi_rf_mgmt_cmd {
  344. __le32 rf_mgmt_type;
  345. } __packed;
  346. /*
  347. * WMI_RF_RX_TEST_CMDID
  348. */
  349. struct wmi_rf_rx_test_cmd {
  350. __le32 sector;
  351. } __packed;
  352. /*
  353. * WMI_CORR_MEASURE_CMDID
  354. */
  355. struct wmi_corr_measure_cmd {
  356. s32 freq_mhz;
  357. __le32 length_samples;
  358. __le32 iterations;
  359. } __packed;
  360. /*
  361. * WMI_SET_SSID_CMDID
  362. */
  363. struct wmi_set_ssid_cmd {
  364. __le32 ssid_len;
  365. u8 ssid[WMI_MAX_SSID_LEN];
  366. } __packed;
  367. /*
  368. * WMI_SET_PCP_CHANNEL_CMDID
  369. */
  370. struct wmi_set_pcp_channel_cmd {
  371. u8 channel;
  372. u8 reserved[3];
  373. } __packed;
  374. /*
  375. * WMI_BCON_CTRL_CMDID
  376. */
  377. struct wmi_bcon_ctrl_cmd {
  378. __le16 bcon_interval;
  379. __le16 frag_num;
  380. __le64 ss_mask;
  381. u8 network_type;
  382. u8 reserved;
  383. u8 disable_sec_offload;
  384. u8 disable_sec;
  385. } __packed;
  386. /******* P2P ***********/
  387. /*
  388. * WMI_PORT_ALLOCATE_CMDID
  389. */
  390. enum wmi_port_role {
  391. WMI_PORT_STA = 0,
  392. WMI_PORT_PCP = 1,
  393. WMI_PORT_AP = 2,
  394. WMI_PORT_P2P_DEV = 3,
  395. WMI_PORT_P2P_CLIENT = 4,
  396. WMI_PORT_P2P_GO = 5,
  397. };
  398. struct wmi_port_allocate_cmd {
  399. u8 mac[WMI_MAC_LEN];
  400. u8 port_role;
  401. u8 midid;
  402. } __packed;
  403. /*
  404. * WMI_PORT_DELETE_CMDID
  405. */
  406. struct wmi_delete_port_cmd {
  407. u8 mid;
  408. u8 reserved[3];
  409. } __packed;
  410. /*
  411. * WMI_P2P_CFG_CMDID
  412. */
  413. enum wmi_discovery_mode {
  414. WMI_DISCOVERY_MODE_NON_OFFLOAD = 0,
  415. WMI_DISCOVERY_MODE_OFFLOAD = 1,
  416. };
  417. struct wmi_p2p_cfg_cmd {
  418. u8 discovery_mode; /* wmi_discovery_mode */
  419. u8 channel;
  420. __le16 bcon_interval; /* base to listen/search duration calculation */
  421. } __packed;
  422. /*
  423. * WMI_POWER_MGMT_CFG_CMDID
  424. */
  425. enum wmi_power_source_type {
  426. WMI_POWER_SOURCE_BATTERY = 0,
  427. WMI_POWER_SOURCE_OTHER = 1,
  428. };
  429. struct wmi_power_mgmt_cfg_cmd {
  430. u8 power_source; /* wmi_power_source_type */
  431. u8 reserved[3];
  432. } __packed;
  433. /*
  434. * WMI_PCP_START_CMDID
  435. */
  436. struct wmi_pcp_start_cmd {
  437. __le16 bcon_interval;
  438. u8 reserved0[10];
  439. u8 network_type;
  440. u8 channel;
  441. u8 disable_sec_offload;
  442. u8 disable_sec;
  443. } __packed;
  444. /*
  445. * WMI_SW_TX_REQ_CMDID
  446. */
  447. struct wmi_sw_tx_req_cmd {
  448. u8 dst_mac[WMI_MAC_LEN];
  449. __le16 len;
  450. u8 payload[0];
  451. } __packed;
  452. /*
  453. * WMI_VRING_CFG_CMDID
  454. */
  455. struct wmi_sw_ring_cfg {
  456. __le64 ring_mem_base;
  457. __le16 ring_size;
  458. __le16 max_mpdu_size;
  459. } __packed;
  460. struct wmi_vring_cfg_schd {
  461. __le16 priority;
  462. __le16 timeslot_us;
  463. } __packed;
  464. enum wmi_vring_cfg_encap_trans_type {
  465. WMI_VRING_ENC_TYPE_802_3 = 0,
  466. WMI_VRING_ENC_TYPE_NATIVE_WIFI = 1,
  467. };
  468. enum wmi_vring_cfg_ds_cfg {
  469. WMI_VRING_DS_PBSS = 0,
  470. WMI_VRING_DS_STATION = 1,
  471. WMI_VRING_DS_AP = 2,
  472. WMI_VRING_DS_ADDR4 = 3,
  473. };
  474. enum wmi_vring_cfg_nwifi_ds_trans_type {
  475. WMI_NWIFI_TX_TRANS_MODE_NO = 0,
  476. WMI_NWIFI_TX_TRANS_MODE_AP2PBSS = 1,
  477. WMI_NWIFI_TX_TRANS_MODE_STA2PBSS = 2,
  478. };
  479. enum wmi_vring_cfg_schd_params_priority {
  480. WMI_SCH_PRIO_REGULAR = 0,
  481. WMI_SCH_PRIO_HIGH = 1,
  482. };
  483. #define CIDXTID_CID_POS (0)
  484. #define CIDXTID_CID_LEN (4)
  485. #define CIDXTID_CID_MSK (0xF)
  486. #define CIDXTID_TID_POS (4)
  487. #define CIDXTID_TID_LEN (4)
  488. #define CIDXTID_TID_MSK (0xF0)
  489. struct wmi_vring_cfg {
  490. struct wmi_sw_ring_cfg tx_sw_ring;
  491. u8 ringid; /* 0-23 vrings */
  492. u8 cidxtid;
  493. u8 encap_trans_type;
  494. u8 ds_cfg; /* 802.3 DS cfg */
  495. u8 nwifi_ds_trans_type;
  496. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0)
  497. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1)
  498. #define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1)
  499. #define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1)
  500. #define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1)
  501. #define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2)
  502. u8 mac_ctrl;
  503. #define VRING_CFG_TO_RESOLUTION_VALUE_POS (0)
  504. #define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6)
  505. #define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F)
  506. u8 to_resolution;
  507. u8 agg_max_wsize;
  508. struct wmi_vring_cfg_schd schd_params;
  509. } __packed;
  510. enum wmi_vring_cfg_cmd_action {
  511. WMI_VRING_CMD_ADD = 0,
  512. WMI_VRING_CMD_MODIFY = 1,
  513. WMI_VRING_CMD_DELETE = 2,
  514. };
  515. struct wmi_vring_cfg_cmd {
  516. __le32 action;
  517. struct wmi_vring_cfg vring_cfg;
  518. } __packed;
  519. /*
  520. * WMI_VRING_BA_EN_CMDID
  521. */
  522. struct wmi_vring_ba_en_cmd {
  523. u8 ringid;
  524. u8 agg_max_wsize;
  525. __le16 ba_timeout;
  526. } __packed;
  527. /*
  528. * WMI_VRING_BA_DIS_CMDID
  529. */
  530. struct wmi_vring_ba_dis_cmd {
  531. u8 ringid;
  532. u8 reserved;
  533. __le16 reason;
  534. } __packed;
  535. /*
  536. * WMI_NOTIFY_REQ_CMDID
  537. */
  538. struct wmi_notify_req_cmd {
  539. u8 cid;
  540. u8 year;
  541. u8 month;
  542. u8 day;
  543. __le32 interval_usec;
  544. u8 hour;
  545. u8 minute;
  546. u8 second;
  547. u8 miliseconds;
  548. } __packed;
  549. /*
  550. * WMI_CFG_RX_CHAIN_CMDID
  551. */
  552. enum wmi_sniffer_cfg_mode {
  553. WMI_SNIFFER_OFF = 0,
  554. WMI_SNIFFER_ON = 1,
  555. };
  556. enum wmi_sniffer_cfg_phy_info_mode {
  557. WMI_SNIFFER_PHY_INFO_DISABLED = 0,
  558. WMI_SNIFFER_PHY_INFO_ENABLED = 1,
  559. };
  560. enum wmi_sniffer_cfg_phy_support {
  561. WMI_SNIFFER_CP = 0,
  562. WMI_SNIFFER_DP = 1,
  563. WMI_SNIFFER_BOTH_PHYS = 2,
  564. };
  565. struct wmi_sniffer_cfg {
  566. __le32 mode; /* enum wmi_sniffer_cfg_mode */
  567. __le32 phy_info_mode; /* enum wmi_sniffer_cfg_phy_info_mode */
  568. __le32 phy_support; /* enum wmi_sniffer_cfg_phy_support */
  569. u8 channel;
  570. u8 reserved[3];
  571. } __packed;
  572. enum wmi_cfg_rx_chain_cmd_action {
  573. WMI_RX_CHAIN_ADD = 0,
  574. WMI_RX_CHAIN_DEL = 1,
  575. };
  576. enum wmi_cfg_rx_chain_cmd_decap_trans_type {
  577. WMI_DECAP_TYPE_802_3 = 0,
  578. WMI_DECAP_TYPE_NATIVE_WIFI = 1,
  579. };
  580. enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type {
  581. WMI_NWIFI_RX_TRANS_MODE_NO = 0,
  582. WMI_NWIFI_RX_TRANS_MODE_PBSS2AP = 1,
  583. WMI_NWIFI_RX_TRANS_MODE_PBSS2STA = 2,
  584. };
  585. enum wmi_cfg_rx_chain_cmd_reorder_type {
  586. WMI_RX_HW_REORDER = 0,
  587. WMI_RX_SW_REORDER = 1,
  588. };
  589. struct wmi_cfg_rx_chain_cmd {
  590. __le32 action;
  591. struct wmi_sw_ring_cfg rx_sw_ring;
  592. u8 mid;
  593. u8 decap_trans_type;
  594. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0)
  595. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1)
  596. #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1)
  597. u8 l2_802_3_offload_ctrl;
  598. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0)
  599. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1)
  600. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1)
  601. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1)
  602. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1)
  603. #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2)
  604. u8 l2_nwifi_offload_ctrl;
  605. u8 vlan_id;
  606. u8 nwifi_ds_trans_type;
  607. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0)
  608. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1)
  609. #define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1)
  610. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1)
  611. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1)
  612. #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2)
  613. u8 l3_l4_ctrl;
  614. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0)
  615. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1)
  616. #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1)
  617. #define RING_CTRL_OVERRIDE_WB_THRSH_POS (1)
  618. #define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1)
  619. #define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2)
  620. #define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2)
  621. #define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1)
  622. #define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4)
  623. #define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3)
  624. #define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1)
  625. #define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8)
  626. u8 ring_ctrl;
  627. __le16 prefetch_thrsh;
  628. __le16 wb_thrsh;
  629. __le32 itr_value;
  630. __le16 host_thrsh;
  631. u8 reorder_type;
  632. u8 reserved;
  633. struct wmi_sniffer_cfg sniffer_cfg;
  634. } __packed;
  635. /*
  636. * WMI_RCP_ADDBA_RESP_CMDID
  637. */
  638. struct wmi_rcp_addba_resp_cmd {
  639. u8 cidxtid;
  640. u8 dialog_token;
  641. __le16 status_code;
  642. __le16 ba_param_set; /* ieee80211_ba_parameterset field to send */
  643. __le16 ba_timeout;
  644. } __packed;
  645. /*
  646. * WMI_RCP_DELBA_CMDID
  647. */
  648. struct wmi_rcp_delba_cmd {
  649. u8 cidxtid;
  650. u8 reserved;
  651. __le16 reason;
  652. } __packed;
  653. /*
  654. * WMI_RCP_ADDBA_REQ_CMDID
  655. */
  656. struct wmi_rcp_addba_req_cmd {
  657. u8 cidxtid;
  658. u8 dialog_token;
  659. /* ieee80211_ba_parameterset field as it received */
  660. __le16 ba_param_set;
  661. __le16 ba_timeout;
  662. /* ieee80211_ba_seqstrl field as it received */
  663. __le16 ba_seq_ctrl;
  664. } __packed;
  665. /*
  666. * WMI_SET_MAC_ADDRESS_CMDID
  667. */
  668. struct wmi_set_mac_address_cmd {
  669. u8 mac[WMI_MAC_LEN];
  670. u8 reserved[2];
  671. } __packed;
  672. /*
  673. * WMI_EAPOL_TX_CMDID
  674. */
  675. struct wmi_eapol_tx_cmd {
  676. u8 dst_mac[WMI_MAC_LEN];
  677. __le16 eapol_len;
  678. u8 eapol[0];
  679. } __packed;
  680. /*
  681. * WMI_ECHO_CMDID
  682. *
  683. * Check FW is alive
  684. *
  685. * WMI_DEEP_ECHO_CMDID
  686. *
  687. * Check FW and ucode are alive
  688. *
  689. * Returned event: WMI_ECHO_RSP_EVENTID
  690. * same event for both commands
  691. */
  692. struct wmi_echo_cmd {
  693. __le32 value;
  694. } __packed;
  695. /*
  696. * WMI_TEMP_SENSE_CMDID
  697. *
  698. * Measure MAC and radio temperatures
  699. */
  700. struct wmi_temp_sense_cmd {
  701. __le32 measure_marlon_m_en;
  702. __le32 measure_marlon_r_en;
  703. } __packed;
  704. /*
  705. * WMI Events
  706. */
  707. /*
  708. * List of Events (target to host)
  709. */
  710. enum wmi_event_id {
  711. WMI_READY_EVENTID = 0x1001,
  712. WMI_CONNECT_EVENTID = 0x1002,
  713. WMI_DISCONNECT_EVENTID = 0x1003,
  714. WMI_SCAN_COMPLETE_EVENTID = 0x100a,
  715. WMI_REPORT_STATISTICS_EVENTID = 0x100b,
  716. WMI_RD_MEM_RSP_EVENTID = 0x1800,
  717. WMI_FW_READY_EVENTID = 0x1801,
  718. WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x0200,
  719. WMI_ECHO_RSP_EVENTID = 0x1803,
  720. WMI_FS_TUNE_DONE_EVENTID = 0x180a,
  721. WMI_CORR_MEASURE_EVENTID = 0x180b,
  722. WMI_READ_RSSI_EVENTID = 0x180c,
  723. WMI_TEMP_SENSE_DONE_EVENTID = 0x180e,
  724. WMI_DC_CALIB_DONE_EVENTID = 0x180f,
  725. WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811,
  726. WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812,
  727. WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815,
  728. WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816,
  729. WMI_MARLON_R_ACTIVATE_DONE_EVENTID = 0x1817,
  730. WMI_MARLON_R_READ_DONE_EVENTID = 0x1818,
  731. WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819,
  732. WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181a,
  733. WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181d,
  734. WMI_RF_RX_TEST_DONE_EVENTID = 0x181e,
  735. WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820,
  736. WMI_VRING_CFG_DONE_EVENTID = 0x1821,
  737. WMI_BA_STATUS_EVENTID = 0x1823,
  738. WMI_RCP_ADDBA_REQ_EVENTID = 0x1824,
  739. WMI_ADDBA_RESP_SENT_EVENTID = 0x1825,
  740. WMI_DELBA_EVENTID = 0x1826,
  741. WMI_GET_SSID_EVENTID = 0x1828,
  742. WMI_GET_PCP_CHANNEL_EVENTID = 0x182a,
  743. WMI_SW_TX_COMPLETE_EVENTID = 0x182b,
  744. WMI_READ_MAC_RXQ_EVENTID = 0x1830,
  745. WMI_READ_MAC_TXQ_EVENTID = 0x1831,
  746. WMI_WRITE_MAC_RXQ_EVENTID = 0x1832,
  747. WMI_WRITE_MAC_TXQ_EVENTID = 0x1833,
  748. WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834,
  749. WMI_BEAFORMING_MGMT_DONE_EVENTID = 0x1836,
  750. WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837,
  751. WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839,
  752. WMI_RS_MGMT_DONE_EVENTID = 0x1852,
  753. WMI_RF_MGMT_STATUS_EVENTID = 0x1853,
  754. WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838,
  755. WMI_RX_MGMT_PACKET_EVENTID = 0x1840,
  756. /* Performance monitoring events */
  757. WMI_DATA_PORT_OPEN_EVENTID = 0x1860,
  758. WMI_WBE_LINKDOWN_EVENTID = 0x1861,
  759. WMI_BF_CTRL_DONE_EVENTID = 0x1862,
  760. WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863,
  761. WMI_GET_STATUS_DONE_EVENTID = 0x1864,
  762. WMI_UNIT_TEST_EVENTID = 0x1900,
  763. WMI_FLASH_READ_DONE_EVENTID = 0x1902,
  764. WMI_FLASH_WRITE_DONE_EVENTID = 0x1903,
  765. /*P2P*/
  766. WMI_PORT_ALLOCATED_EVENTID = 0x1911,
  767. WMI_PORT_DELETED_EVENTID = 0x1912,
  768. WMI_LISTEN_STARTED_EVENTID = 0x1914,
  769. WMI_SEARCH_STARTED_EVENTID = 0x1915,
  770. WMI_DISCOVERY_STARTED_EVENTID = 0x1916,
  771. WMI_DISCOVERY_STOPPED_EVENTID = 0x1917,
  772. WMI_PCP_STARTED_EVENTID = 0x1918,
  773. WMI_PCP_STOPPED_EVENTID = 0x1919,
  774. WMI_PCP_FACTOR_EVENTID = 0x191a,
  775. WMI_SET_CHANNEL_EVENTID = 0x9000,
  776. WMI_ASSOC_REQ_EVENTID = 0x9001,
  777. WMI_EAPOL_RX_EVENTID = 0x9002,
  778. WMI_MAC_ADDR_RESP_EVENTID = 0x9003,
  779. WMI_FW_VER_EVENTID = 0x9004,
  780. };
  781. /*
  782. * Events data structures
  783. */
  784. enum wmi_fw_status {
  785. WMI_FW_STATUS_SUCCESS,
  786. WMI_FW_STATUS_FAILURE,
  787. };
  788. /*
  789. * WMI_RF_MGMT_STATUS_EVENTID
  790. */
  791. enum wmi_rf_status {
  792. WMI_RF_ENABLED = 0,
  793. WMI_RF_DISABLED_HW = 1,
  794. WMI_RF_DISABLED_SW = 2,
  795. WMI_RF_DISABLED_HW_SW = 3,
  796. };
  797. struct wmi_rf_mgmt_status_event {
  798. __le32 rf_status;
  799. } __packed;
  800. /*
  801. * WMI_GET_STATUS_DONE_EVENTID
  802. */
  803. struct wmi_get_status_done_event {
  804. __le32 is_associated;
  805. u8 cid;
  806. u8 reserved0[3];
  807. u8 bssid[WMI_MAC_LEN];
  808. u8 channel;
  809. u8 reserved1;
  810. u8 network_type;
  811. u8 reserved2[3];
  812. __le32 ssid_len;
  813. u8 ssid[WMI_MAX_SSID_LEN];
  814. __le32 rf_status;
  815. __le32 is_secured;
  816. } __packed;
  817. /*
  818. * WMI_FW_VER_EVENTID
  819. */
  820. struct wmi_fw_ver_event {
  821. u8 major;
  822. u8 minor;
  823. __le16 subminor;
  824. __le16 build;
  825. } __packed;
  826. /*
  827. * WMI_MAC_ADDR_RESP_EVENTID
  828. */
  829. struct wmi_mac_addr_resp_event {
  830. u8 mac[WMI_MAC_LEN];
  831. u8 auth_mode;
  832. u8 crypt_mode;
  833. __le32 offload_mode;
  834. } __packed;
  835. /*
  836. * WMI_EAPOL_RX_EVENTID
  837. */
  838. struct wmi_eapol_rx_event {
  839. u8 src_mac[WMI_MAC_LEN];
  840. __le16 eapol_len;
  841. u8 eapol[0];
  842. } __packed;
  843. /*
  844. * WMI_READY_EVENTID
  845. */
  846. enum wmi_phy_capability {
  847. WMI_11A_CAPABILITY = 1,
  848. WMI_11G_CAPABILITY = 2,
  849. WMI_11AG_CAPABILITY = 3,
  850. WMI_11NA_CAPABILITY = 4,
  851. WMI_11NG_CAPABILITY = 5,
  852. WMI_11NAG_CAPABILITY = 6,
  853. WMI_11AD_CAPABILITY = 7,
  854. WMI_11N_CAPABILITY_OFFSET = WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY,
  855. };
  856. struct wmi_ready_event {
  857. __le32 sw_version;
  858. __le32 abi_version;
  859. u8 mac[WMI_MAC_LEN];
  860. u8 phy_capability; /* enum wmi_phy_capability */
  861. u8 numof_additional_mids;
  862. } __packed;
  863. /*
  864. * WMI_NOTIFY_REQ_DONE_EVENTID
  865. */
  866. struct wmi_notify_req_done_event {
  867. __le32 status;
  868. __le64 tsf;
  869. __le32 snr_val;
  870. __le32 tx_tpt;
  871. __le32 tx_goodput;
  872. __le32 rx_goodput;
  873. __le16 bf_mcs;
  874. __le16 my_rx_sector;
  875. __le16 my_tx_sector;
  876. __le16 other_rx_sector;
  877. __le16 other_tx_sector;
  878. __le16 range;
  879. u8 sqi;
  880. u8 reserved[3];
  881. } __packed;
  882. /*
  883. * WMI_CONNECT_EVENTID
  884. */
  885. struct wmi_connect_event {
  886. u8 channel;
  887. u8 reserved0;
  888. u8 bssid[WMI_MAC_LEN];
  889. __le16 listen_interval;
  890. __le16 beacon_interval;
  891. u8 network_type;
  892. u8 reserved1[3];
  893. u8 beacon_ie_len;
  894. u8 assoc_req_len;
  895. u8 assoc_resp_len;
  896. u8 cid;
  897. u8 reserved2[3];
  898. u8 assoc_info[0];
  899. } __packed;
  900. /*
  901. * WMI_DISCONNECT_EVENTID
  902. */
  903. enum wmi_disconnect_reason {
  904. WMI_DIS_REASON_NO_NETWORK_AVAIL = 1,
  905. WMI_DIS_REASON_LOST_LINK = 2, /* bmiss */
  906. WMI_DIS_REASON_DISCONNECT_CMD = 3,
  907. WMI_DIS_REASON_BSS_DISCONNECTED = 4,
  908. WMI_DIS_REASON_AUTH_FAILED = 5,
  909. WMI_DIS_REASON_ASSOC_FAILED = 6,
  910. WMI_DIS_REASON_NO_RESOURCES_AVAIL = 7,
  911. WMI_DIS_REASON_CSERV_DISCONNECT = 8,
  912. WMI_DIS_REASON_INVALID_PROFILE = 10,
  913. WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH = 11,
  914. WMI_DIS_REASON_PROFILE_MISMATCH = 12,
  915. WMI_DIS_REASON_CONNECTION_EVICTED = 13,
  916. WMI_DIS_REASON_IBSS_MERGE = 14,
  917. };
  918. struct wmi_disconnect_event {
  919. __le16 protocol_reason_status; /* reason code, see 802.11 spec. */
  920. u8 bssid[WMI_MAC_LEN]; /* set if known */
  921. u8 disconnect_reason; /* see wmi_disconnect_reason_e */
  922. u8 assoc_resp_len;
  923. u8 assoc_info[0];
  924. } __packed;
  925. /*
  926. * WMI_SCAN_COMPLETE_EVENTID
  927. */
  928. struct wmi_scan_complete_event {
  929. __le32 status;
  930. } __packed;
  931. /*
  932. * WMI_BA_STATUS_EVENTID
  933. */
  934. enum wmi_vring_ba_status {
  935. WMI_BA_AGREED = 0,
  936. WMI_BA_NON_AGREED = 1,
  937. };
  938. struct wmi_vring_ba_status_event {
  939. __le16 status;
  940. u8 reserved[2];
  941. u8 ringid;
  942. u8 agg_wsize;
  943. __le16 ba_timeout;
  944. } __packed;
  945. /*
  946. * WMI_DELBA_EVENTID
  947. */
  948. struct wmi_delba_event {
  949. u8 cidxtid;
  950. u8 from_initiator;
  951. __le16 reason;
  952. } __packed;
  953. /*
  954. * WMI_VRING_CFG_DONE_EVENTID
  955. */
  956. struct wmi_vring_cfg_done_event {
  957. u8 ringid;
  958. u8 status;
  959. u8 reserved[2];
  960. __le32 tx_vring_tail_ptr;
  961. } __packed;
  962. /*
  963. * WMI_ADDBA_RESP_SENT_EVENTID
  964. */
  965. struct wmi_rcp_addba_resp_sent_event {
  966. u8 cidxtid;
  967. u8 reserved;
  968. __le16 status;
  969. } __packed;
  970. /*
  971. * WMI_RCP_ADDBA_REQ_EVENTID
  972. */
  973. struct wmi_rcp_addba_req_event {
  974. u8 cidxtid;
  975. u8 dialog_token;
  976. __le16 ba_param_set; /* ieee80211_ba_parameterset as it received */
  977. __le16 ba_timeout;
  978. __le16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */
  979. } __packed;
  980. /*
  981. * WMI_CFG_RX_CHAIN_DONE_EVENTID
  982. */
  983. enum wmi_cfg_rx_chain_done_event_status {
  984. WMI_CFG_RX_CHAIN_SUCCESS = 1,
  985. };
  986. struct wmi_cfg_rx_chain_done_event {
  987. __le32 rx_ring_tail_ptr; /* Rx V-Ring Tail pointer */
  988. __le32 status;
  989. } __packed;
  990. /*
  991. * WMI_WBE_LINKDOWN_EVENTID
  992. */
  993. enum wmi_wbe_link_down_event_reason {
  994. WMI_WBE_REASON_USER_REQUEST = 0,
  995. WMI_WBE_REASON_RX_DISASSOC = 1,
  996. WMI_WBE_REASON_BAD_PHY_LINK = 2,
  997. };
  998. struct wmi_wbe_link_down_event {
  999. u8 cid;
  1000. u8 reserved[3];
  1001. __le32 reason;
  1002. } __packed;
  1003. /*
  1004. * WMI_DATA_PORT_OPEN_EVENTID
  1005. */
  1006. struct wmi_data_port_open_event {
  1007. u8 cid;
  1008. u8 reserved[3];
  1009. } __packed;
  1010. /*
  1011. * WMI_GET_PCP_CHANNEL_EVENTID
  1012. */
  1013. struct wmi_get_pcp_channel_event {
  1014. u8 channel;
  1015. u8 reserved[3];
  1016. } __packed;
  1017. /*
  1018. * WMI_PORT_ALLOCATED_EVENTID
  1019. */
  1020. struct wmi_port_allocated_event {
  1021. u8 status; /* wmi_fw_status */
  1022. u8 reserved[3];
  1023. } __packed;
  1024. /*
  1025. * WMI_PORT_DELETED_EVENTID
  1026. */
  1027. struct wmi_port_deleted_event {
  1028. u8 status; /* wmi_fw_status */
  1029. u8 reserved[3];
  1030. } __packed;
  1031. /*
  1032. * WMI_LISTEN_STARTED_EVENTID
  1033. */
  1034. struct wmi_listen_started_event {
  1035. u8 status; /* wmi_fw_status */
  1036. u8 reserved[3];
  1037. } __packed;
  1038. /*
  1039. * WMI_SEARCH_STARTED_EVENTID
  1040. */
  1041. struct wmi_search_started_event {
  1042. u8 status; /* wmi_fw_status */
  1043. u8 reserved[3];
  1044. } __packed;
  1045. /*
  1046. * WMI_PCP_STARTED_EVENTID
  1047. */
  1048. struct wmi_pcp_started_event {
  1049. u8 status; /* wmi_fw_status */
  1050. u8 reserved[3];
  1051. } __packed;
  1052. /*
  1053. * WMI_PCP_FACTOR_EVENTID
  1054. */
  1055. struct wmi_pcp_factor_event {
  1056. __le32 pcp_factor;
  1057. } __packed;
  1058. /*
  1059. * WMI_SW_TX_COMPLETE_EVENTID
  1060. */
  1061. enum wmi_sw_tx_status {
  1062. WMI_TX_SW_STATUS_SUCCESS = 0,
  1063. WMI_TX_SW_STATUS_FAILED_NO_RESOURCES = 1,
  1064. WMI_TX_SW_STATUS_FAILED_TX = 2,
  1065. };
  1066. struct wmi_sw_tx_complete_event {
  1067. u8 status; /* enum wmi_sw_tx_status */
  1068. u8 reserved[3];
  1069. } __packed;
  1070. /*
  1071. * WMI_CORR_MEASURE_EVENTID
  1072. */
  1073. struct wmi_corr_measure_event {
  1074. s32 i;
  1075. s32 q;
  1076. s32 image_i;
  1077. s32 image_q;
  1078. } __packed;
  1079. /*
  1080. * WMI_READ_RSSI_EVENTID
  1081. */
  1082. struct wmi_read_rssi_event {
  1083. __le32 ina_rssi_adc_dbm;
  1084. } __packed;
  1085. /*
  1086. * WMI_GET_SSID_EVENTID
  1087. */
  1088. struct wmi_get_ssid_event {
  1089. __le32 ssid_len;
  1090. u8 ssid[WMI_MAX_SSID_LEN];
  1091. } __packed;
  1092. /*
  1093. * WMI_RX_MGMT_PACKET_EVENTID
  1094. */
  1095. struct wmi_rx_mgmt_info {
  1096. u8 mcs;
  1097. s8 snr;
  1098. u8 range;
  1099. u8 sqi;
  1100. __le16 stype;
  1101. __le16 status;
  1102. __le32 len;
  1103. u8 qid;
  1104. u8 mid;
  1105. u8 cid;
  1106. u8 channel; /* From Radio MNGR */
  1107. } __packed;
  1108. struct wmi_rx_mgmt_packet_event {
  1109. struct wmi_rx_mgmt_info info;
  1110. u8 payload[0];
  1111. } __packed;
  1112. /*
  1113. * WMI_ECHO_RSP_EVENTID
  1114. */
  1115. struct wmi_echo_event {
  1116. __le32 echoed_value;
  1117. } __packed;
  1118. /*
  1119. * WMI_TEMP_SENSE_DONE_EVENTID
  1120. *
  1121. * Measure MAC and radio temperatures
  1122. */
  1123. struct wmi_temp_sense_done_event {
  1124. __le32 marlon_m_t1000;
  1125. __le32 marlon_r_t1000;
  1126. } __packed;
  1127. #endif /* __WILOCITY_WMI_H__ */