rtw_ioctl_rtl.c 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  4. *
  5. * This program is free software; you can redistribute it and/or modify it
  6. * under the terms of version 2 of the GNU General Public License as
  7. * published by the Free Software Foundation.
  8. *
  9. * This program is distributed in the hope that it will be useful, but WITHOUT
  10. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11. * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
  12. * more details.
  13. *
  14. * You should have received a copy of the GNU General Public License along with
  15. * this program; if not, write to the Free Software Foundation, Inc.,
  16. * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
  17. *
  18. *
  19. ******************************************************************************/
  20. #define _RTW_IOCTL_RTL_C_
  21. #include <drv_types.h>
  22. #ifdef CONFIG_MP_INCLUDED
  23. #include <rtw_mp_ioctl.h>
  24. #endif
  25. struct oid_obj_priv oid_rtl_seg_01_01[] = {
  26. {1, &oid_null_function}, /* 0x80 */
  27. {1, &oid_null_function}, /* 0x81 */
  28. {1, &oid_null_function}, /* 0x82 */
  29. {1, &oid_null_function}, /* 0x83 */ /* OID_RT_SET_SNIFFER_MODE */
  30. {1, &oid_rt_get_signal_quality_hdl}, /* 0x84 */
  31. {1, &oid_rt_get_small_packet_crc_hdl}, /* 0x85 */
  32. {1, &oid_rt_get_middle_packet_crc_hdl}, /* 0x86 */
  33. {1, &oid_rt_get_large_packet_crc_hdl}, /* 0x87 */
  34. {1, &oid_rt_get_tx_retry_hdl}, /* 0x88 */
  35. {1, &oid_rt_get_rx_retry_hdl}, /* 0x89 */
  36. {1, &oid_rt_pro_set_fw_dig_state_hdl}, /* 0x8A */
  37. {1, &oid_rt_pro_set_fw_ra_state_hdl} , /* 0x8B */
  38. {1, &oid_null_function}, /* 0x8C */
  39. {1, &oid_null_function}, /* 0x8D */
  40. {1, &oid_null_function}, /* 0x8E */
  41. {1, &oid_null_function}, /* 0x8F */
  42. {1, &oid_rt_get_rx_total_packet_hdl}, /* 0x90 */
  43. {1, &oid_rt_get_tx_beacon_ok_hdl}, /* 0x91 */
  44. {1, &oid_rt_get_tx_beacon_err_hdl}, /* 0x92 */
  45. {1, &oid_rt_get_rx_icv_err_hdl}, /* 0x93 */
  46. {1, &oid_rt_set_encryption_algorithm_hdl}, /* 0x94 */
  47. {1, &oid_null_function}, /* 0x95 */
  48. {1, &oid_rt_get_preamble_mode_hdl}, /* 0x96 */
  49. {1, &oid_null_function}, /* 0x97 */
  50. {1, &oid_rt_get_ap_ip_hdl}, /* 0x98 */
  51. {1, &oid_rt_get_channelplan_hdl}, /* 0x99 */
  52. {1, &oid_rt_set_preamble_mode_hdl}, /* 0x9A */
  53. {1, &oid_rt_set_bcn_intvl_hdl}, /* 0x9B */
  54. {1, &oid_null_function}, /* 0x9C */
  55. {1, &oid_rt_dedicate_probe_hdl}, /* 0x9D */
  56. {1, &oid_null_function}, /* 0x9E */
  57. {1, &oid_null_function}, /* 0x9F */
  58. {1, &oid_null_function}, /* 0xA0 */
  59. {1, &oid_null_function}, /* 0xA1 */
  60. {1, &oid_null_function}, /* 0xA2 */
  61. {1, &oid_null_function}, /* 0xA3 */
  62. {1, &oid_null_function}, /* 0xA4 */
  63. {1, &oid_null_function}, /* 0xA5 */
  64. {1, &oid_null_function}, /* 0xA6 */
  65. {1, &oid_rt_get_total_tx_bytes_hdl}, /* 0xA7 */
  66. {1, &oid_rt_get_total_rx_bytes_hdl}, /* 0xA8 */
  67. {1, &oid_rt_current_tx_power_level_hdl}, /* 0xA9 */
  68. {1, &oid_rt_get_enc_key_mismatch_count_hdl}, /* 0xAA */
  69. {1, &oid_rt_get_enc_key_match_count_hdl}, /* 0xAB */
  70. {1, &oid_rt_get_channel_hdl}, /* 0xAC */
  71. {1, &oid_rt_set_channelplan_hdl}, /* 0xAD */
  72. {1, &oid_rt_get_hardware_radio_off_hdl}, /* 0xAE */
  73. {1, &oid_null_function}, /* 0xAF */
  74. {1, &oid_null_function}, /* 0xB0 */
  75. {1, &oid_null_function}, /* 0xB1 */
  76. {1, &oid_null_function}, /* 0xB2 */
  77. {1, &oid_null_function}, /* 0xB3 */
  78. {1, &oid_rt_get_key_mismatch_hdl}, /* 0xB4 */
  79. {1, &oid_null_function}, /* 0xB5 */
  80. {1, &oid_null_function}, /* 0xB6 */
  81. {1, &oid_null_function}, /* 0xB7 */
  82. {1, &oid_null_function}, /* 0xB8 */
  83. {1, &oid_null_function}, /* 0xB9 */
  84. {1, &oid_null_function}, /* 0xBA */
  85. {1, &oid_rt_supported_wireless_mode_hdl}, /* 0xBB */
  86. {1, &oid_rt_get_channel_list_hdl}, /* 0xBC */
  87. {1, &oid_rt_get_scan_in_progress_hdl}, /* 0xBD */
  88. {1, &oid_null_function}, /* 0xBE */
  89. {1, &oid_null_function}, /* 0xBF */
  90. {1, &oid_null_function}, /* 0xC0 */
  91. {1, &oid_rt_forced_data_rate_hdl}, /* 0xC1 */
  92. {1, &oid_rt_wireless_mode_for_scan_list_hdl}, /* 0xC2 */
  93. {1, &oid_rt_get_bss_wireless_mode_hdl}, /* 0xC3 */
  94. {1, &oid_rt_scan_with_magic_packet_hdl}, /* 0xC4 */
  95. {1, &oid_null_function}, /* 0xC5 */
  96. {1, &oid_null_function}, /* 0xC6 */
  97. {1, &oid_null_function}, /* 0xC7 */
  98. {1, &oid_null_function}, /* 0xC8 */
  99. {1, &oid_null_function}, /* 0xC9 */
  100. {1, &oid_null_function}, /* 0xCA */
  101. {1, &oid_null_function}, /* 0xCB */
  102. {1, &oid_null_function}, /* 0xCC */
  103. {1, &oid_null_function}, /* 0xCD */
  104. {1, &oid_null_function}, /* 0xCE */
  105. {1, &oid_null_function}, /* 0xCF */
  106. };
  107. struct oid_obj_priv oid_rtl_seg_01_03[] = {
  108. {1, &oid_rt_ap_get_associated_station_list_hdl}, /* 0x00 */
  109. {1, &oid_null_function}, /* 0x01 */
  110. {1, &oid_rt_ap_switch_into_ap_mode_hdl}, /* 0x02 */
  111. {1, &oid_null_function}, /* 0x03 */
  112. {1, &oid_rt_ap_supported_hdl}, /* 0x04 */
  113. {1, &oid_rt_ap_set_passphrase_hdl}, /* 0x05 */
  114. };
  115. struct oid_obj_priv oid_rtl_seg_01_11[] = {
  116. {1, &oid_null_function}, /* 0xC0 OID_RT_PRO_RX_FILTER */
  117. {1, &oid_null_function}, /* 0xC1 OID_CE_USB_WRITE_REGISTRY */
  118. {1, &oid_null_function}, /* 0xC2 OID_CE_USB_READ_REGISTRY */
  119. {1, &oid_null_function}, /* 0xC3 OID_RT_PRO_SET_INITIAL_GAIN */
  120. {1, &oid_null_function}, /* 0xC4 OID_RT_PRO_SET_BB_RF_STANDBY_MODE */
  121. {1, &oid_null_function}, /* 0xC5 OID_RT_PRO_SET_BB_RF_SHUTDOWN_MODE */
  122. {1, &oid_null_function}, /* 0xC6 OID_RT_PRO_SET_TX_CHARGE_PUMP */
  123. {1, &oid_null_function}, /* 0xC7 OID_RT_PRO_SET_RX_CHARGE_PUMP */
  124. {1, &oid_rt_pro_rf_write_registry_hdl}, /* 0xC8 */
  125. {1, &oid_rt_pro_rf_read_registry_hdl}, /* 0xC9 */
  126. {1, &oid_null_function} /* 0xCA OID_RT_PRO_QUERY_RF_TYPE */
  127. };
  128. struct oid_obj_priv oid_rtl_seg_03_00[] = {
  129. {1, &oid_null_function}, /* 0x00 */
  130. {1, &oid_rt_get_connect_state_hdl}, /* 0x01 */
  131. {1, &oid_null_function}, /* 0x02 */
  132. {1, &oid_null_function}, /* 0x03 */
  133. {1, &oid_rt_set_default_key_id_hdl}, /* 0x04 */
  134. };
  135. /* ************** oid_rtl_seg_01_01 section start ************** */
  136. NDIS_STATUS oid_rt_pro_set_fw_dig_state_hdl(struct oid_par_priv *poid_par_priv)
  137. {
  138. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  139. #if 0
  140. PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
  141. _irqL oldirql;
  142. if (poid_par_priv->type_of_oid != SET_OID) {
  143. status = NDIS_STATUS_NOT_ACCEPTED;
  144. return status;
  145. }
  146. _irqlevel_changed_(&oldirql, LOWER);
  147. if (poid_par_priv->information_buf_len >= sizeof(struct setdig_parm)) {
  148. /* DEBUG_ERR(("===> oid_rt_pro_set_fw_dig_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); */
  149. if (!rtw_setfwdig_cmd(Adapter, *((unsigned char *)poid_par_priv->information_buf)))
  150. status = NDIS_STATUS_NOT_ACCEPTED;
  151. } else
  152. status = NDIS_STATUS_NOT_ACCEPTED;
  153. _irqlevel_changed_(&oldirql, RAISE);
  154. #endif
  155. return status;
  156. }
  157. /* ----------------------------------------------------------------------------- */
  158. NDIS_STATUS oid_rt_pro_set_fw_ra_state_hdl(struct oid_par_priv *poid_par_priv)
  159. {
  160. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  161. #if 0
  162. PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
  163. _irqL oldirql;
  164. if (poid_par_priv->type_of_oid != SET_OID) {
  165. status = NDIS_STATUS_NOT_ACCEPTED;
  166. return status;
  167. }
  168. _irqlevel_changed_(&oldirql, LOWER);
  169. if (poid_par_priv->information_buf_len >= sizeof(struct setra_parm)) {
  170. /* DEBUG_ERR(("===> oid_rt_pro_set_fw_ra_state_hdl. type:0x%02x.\n",*((unsigned char*)poid_par_priv->information_buf ))); */
  171. if (!rtw_setfwra_cmd(Adapter, *((unsigned char *)poid_par_priv->information_buf)))
  172. status = NDIS_STATUS_NOT_ACCEPTED;
  173. } else
  174. status = NDIS_STATUS_NOT_ACCEPTED;
  175. _irqlevel_changed_(&oldirql, RAISE);
  176. #endif
  177. return status;
  178. }
  179. /* ----------------------------------------------------------------------------- */
  180. NDIS_STATUS oid_rt_get_signal_quality_hdl(struct oid_par_priv *poid_par_priv)
  181. {
  182. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  183. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  184. /* DEBUG_ERR(("<**********************oid_rt_get_signal_quality_hdl\n")); */
  185. if (poid_par_priv->type_of_oid != QUERY_OID) {
  186. status = NDIS_STATUS_NOT_ACCEPTED;
  187. return status;
  188. }
  189. #if 0
  190. if (pMgntInfo->mAssoc || pMgntInfo->mIbss) {
  191. ulInfo = pAdapter->RxStats.SignalQuality;
  192. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  193. } else {
  194. ulInfo = 0xffffffff; /* It stands for -1 in 4-byte integer. */
  195. }
  196. break;
  197. #endif
  198. return status;
  199. }
  200. /* ------------------------------------------------------------------------------ */
  201. NDIS_STATUS oid_rt_get_small_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
  202. {
  203. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  204. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  205. if (poid_par_priv->type_of_oid != QUERY_OID) {
  206. status = NDIS_STATUS_NOT_ACCEPTED;
  207. return status;
  208. }
  209. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  210. *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_smallpacket_crcerr;
  211. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  212. } else
  213. status = NDIS_STATUS_INVALID_LENGTH;
  214. return status;
  215. }
  216. /* ------------------------------------------------------------------------------ */
  217. NDIS_STATUS oid_rt_get_middle_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
  218. {
  219. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  220. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  221. if (poid_par_priv->type_of_oid != QUERY_OID) {
  222. status = NDIS_STATUS_NOT_ACCEPTED;
  223. return status;
  224. }
  225. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  226. *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_middlepacket_crcerr;
  227. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  228. } else
  229. status = NDIS_STATUS_INVALID_LENGTH;
  230. return status;
  231. }
  232. /* ------------------------------------------------------------------------------ */
  233. NDIS_STATUS oid_rt_get_large_packet_crc_hdl(struct oid_par_priv *poid_par_priv)
  234. {
  235. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  236. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  237. if (poid_par_priv->type_of_oid != QUERY_OID) {
  238. status = NDIS_STATUS_NOT_ACCEPTED;
  239. return status;
  240. }
  241. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  242. *(ULONG *)poid_par_priv->information_buf = padapter->recvpriv.rx_largepacket_crcerr;
  243. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  244. } else
  245. status = NDIS_STATUS_INVALID_LENGTH;
  246. return status;
  247. }
  248. /* ------------------------------------------------------------------------------ */
  249. NDIS_STATUS oid_rt_get_tx_retry_hdl(struct oid_par_priv *poid_par_priv)
  250. {
  251. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  252. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  253. if (poid_par_priv->type_of_oid != QUERY_OID) {
  254. status = NDIS_STATUS_NOT_ACCEPTED;
  255. return status;
  256. }
  257. return status;
  258. }
  259. NDIS_STATUS oid_rt_get_rx_retry_hdl(struct oid_par_priv *poid_par_priv)
  260. {
  261. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  262. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  263. if (poid_par_priv->type_of_oid != QUERY_OID) {
  264. status = NDIS_STATUS_NOT_ACCEPTED;
  265. return status;
  266. }
  267. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  268. return status;
  269. }
  270. /* ------------------------------------------------------------------------------ */
  271. NDIS_STATUS oid_rt_get_rx_total_packet_hdl(struct oid_par_priv *poid_par_priv)
  272. {
  273. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  274. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  275. if (poid_par_priv->type_of_oid != QUERY_OID) {
  276. status = NDIS_STATUS_NOT_ACCEPTED;
  277. return status;
  278. }
  279. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  280. *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_pkts + padapter->recvpriv.rx_drop;
  281. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  282. } else
  283. status = NDIS_STATUS_INVALID_LENGTH;
  284. return status;
  285. }
  286. /* ------------------------------------------------------------------------------ */
  287. NDIS_STATUS oid_rt_get_tx_beacon_ok_hdl(struct oid_par_priv *poid_par_priv)
  288. {
  289. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  290. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  291. if (poid_par_priv->type_of_oid != QUERY_OID) {
  292. status = NDIS_STATUS_NOT_ACCEPTED;
  293. return status;
  294. }
  295. return status;
  296. }
  297. NDIS_STATUS oid_rt_get_tx_beacon_err_hdl(struct oid_par_priv *poid_par_priv)
  298. {
  299. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  300. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  301. if (poid_par_priv->type_of_oid != QUERY_OID) {
  302. status = NDIS_STATUS_NOT_ACCEPTED;
  303. return status;
  304. }
  305. return status;
  306. }
  307. /* ------------------------------------------------------------------------------ */
  308. NDIS_STATUS oid_rt_get_rx_icv_err_hdl(struct oid_par_priv *poid_par_priv)
  309. {
  310. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  311. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  312. if (poid_par_priv->type_of_oid != QUERY_OID) {
  313. status = NDIS_STATUS_NOT_ACCEPTED;
  314. return status;
  315. }
  316. if (poid_par_priv->information_buf_len >= sizeof(u32)) {
  317. /* _rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); */
  318. *(uint *)poid_par_priv->information_buf = padapter->recvpriv.rx_icv_err;
  319. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  320. } else
  321. status = NDIS_STATUS_INVALID_LENGTH ;
  322. return status;
  323. }
  324. /* ------------------------------------------------------------------------------ */
  325. NDIS_STATUS oid_rt_set_encryption_algorithm_hdl(struct oid_par_priv *poid_par_priv)
  326. {
  327. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  328. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  329. if (poid_par_priv->type_of_oid != SET_OID) {
  330. status = NDIS_STATUS_NOT_ACCEPTED;
  331. return status;
  332. }
  333. return status;
  334. }
  335. /* ------------------------------------------------------------------------------ */
  336. NDIS_STATUS oid_rt_get_preamble_mode_hdl(struct oid_par_priv *poid_par_priv)
  337. {
  338. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  339. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  340. ULONG preamblemode = 0 ;
  341. if (poid_par_priv->type_of_oid != QUERY_OID) {
  342. status = NDIS_STATUS_NOT_ACCEPTED;
  343. return status;
  344. }
  345. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  346. if (padapter->registrypriv.preamble == PREAMBLE_LONG)
  347. preamblemode = 0;
  348. else if (padapter->registrypriv.preamble == PREAMBLE_AUTO)
  349. preamblemode = 1;
  350. else if (padapter->registrypriv.preamble == PREAMBLE_SHORT)
  351. preamblemode = 2;
  352. *(ULONG *)poid_par_priv->information_buf = preamblemode ;
  353. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  354. } else
  355. status = NDIS_STATUS_INVALID_LENGTH ;
  356. return status;
  357. }
  358. /* ------------------------------------------------------------------------------ */
  359. NDIS_STATUS oid_rt_get_ap_ip_hdl(struct oid_par_priv *poid_par_priv)
  360. {
  361. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  362. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  363. if (poid_par_priv->type_of_oid != QUERY_OID) {
  364. status = NDIS_STATUS_NOT_ACCEPTED;
  365. return status;
  366. }
  367. return status;
  368. }
  369. NDIS_STATUS oid_rt_get_channelplan_hdl(struct oid_par_priv *poid_par_priv)
  370. {
  371. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  372. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  373. if (poid_par_priv->type_of_oid != QUERY_OID) {
  374. status = NDIS_STATUS_NOT_ACCEPTED;
  375. return status;
  376. }
  377. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  378. *(u16 *)poid_par_priv->information_buf = padapter->mlmepriv.ChannelPlan ;
  379. return status;
  380. }
  381. NDIS_STATUS oid_rt_set_channelplan_hdl(struct oid_par_priv *poid_par_priv)
  382. {
  383. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  384. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  385. if (poid_par_priv->type_of_oid != SET_OID) {
  386. status = NDIS_STATUS_NOT_ACCEPTED;
  387. return status;
  388. }
  389. padapter->mlmepriv.ChannelPlan = *(u16 *)poid_par_priv->information_buf ;
  390. return status;
  391. }
  392. /* ------------------------------------------------------------------------------ */
  393. NDIS_STATUS oid_rt_set_preamble_mode_hdl(struct oid_par_priv *poid_par_priv)
  394. {
  395. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  396. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  397. ULONG preamblemode = 0;
  398. if (poid_par_priv->type_of_oid != SET_OID) {
  399. status = NDIS_STATUS_NOT_ACCEPTED;
  400. return status;
  401. }
  402. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  403. preamblemode = *(ULONG *)poid_par_priv->information_buf ;
  404. if (preamblemode == 0)
  405. padapter->registrypriv.preamble = PREAMBLE_LONG;
  406. else if (preamblemode == 1)
  407. padapter->registrypriv.preamble = PREAMBLE_AUTO;
  408. else if (preamblemode == 2)
  409. padapter->registrypriv.preamble = PREAMBLE_SHORT;
  410. *(ULONG *)poid_par_priv->information_buf = preamblemode ;
  411. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  412. } else
  413. status = NDIS_STATUS_INVALID_LENGTH ;
  414. return status;
  415. }
  416. /* ------------------------------------------------------------------------------ */
  417. NDIS_STATUS oid_rt_set_bcn_intvl_hdl(struct oid_par_priv *poid_par_priv)
  418. {
  419. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  420. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  421. if (poid_par_priv->type_of_oid != SET_OID) {
  422. status = NDIS_STATUS_NOT_ACCEPTED;
  423. return status;
  424. }
  425. return status;
  426. }
  427. NDIS_STATUS oid_rt_dedicate_probe_hdl(struct oid_par_priv *poid_par_priv)
  428. {
  429. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  430. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  431. return status;
  432. }
  433. /* ------------------------------------------------------------------------------ */
  434. NDIS_STATUS oid_rt_get_total_tx_bytes_hdl(struct oid_par_priv *poid_par_priv)
  435. {
  436. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  437. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  438. if (poid_par_priv->type_of_oid != QUERY_OID) {
  439. status = NDIS_STATUS_NOT_ACCEPTED;
  440. return status;
  441. }
  442. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  443. *(u64 *)poid_par_priv->information_buf = padapter->xmitpriv.tx_bytes;
  444. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  445. } else
  446. status = NDIS_STATUS_INVALID_LENGTH ;
  447. return status;
  448. }
  449. /* ------------------------------------------------------------------------------ */
  450. NDIS_STATUS oid_rt_get_total_rx_bytes_hdl(struct oid_par_priv *poid_par_priv)
  451. {
  452. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  453. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  454. if (poid_par_priv->type_of_oid != QUERY_OID) {
  455. status = NDIS_STATUS_NOT_ACCEPTED;
  456. return status;
  457. }
  458. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  459. /* _rtw_memcpy(*(uint *)poid_par_priv->information_buf,padapter->recvpriv.rx_icv_err,sizeof(u32)); */
  460. *(u64 *)poid_par_priv->information_buf = padapter->recvpriv.rx_bytes;
  461. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  462. } else
  463. status = NDIS_STATUS_INVALID_LENGTH ;
  464. return status;
  465. }
  466. /* ------------------------------------------------------------------------------ */
  467. NDIS_STATUS oid_rt_current_tx_power_level_hdl(struct oid_par_priv *poid_par_priv)
  468. {
  469. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  470. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  471. return status;
  472. }
  473. NDIS_STATUS oid_rt_get_enc_key_mismatch_count_hdl(struct oid_par_priv *poid_par_priv)
  474. {
  475. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  476. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  477. if (poid_par_priv->type_of_oid != QUERY_OID) {
  478. status = NDIS_STATUS_NOT_ACCEPTED;
  479. return status;
  480. }
  481. return status;
  482. }
  483. NDIS_STATUS oid_rt_get_enc_key_match_count_hdl(struct oid_par_priv *poid_par_priv)
  484. {
  485. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  486. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  487. if (poid_par_priv->type_of_oid != QUERY_OID) {
  488. status = NDIS_STATUS_NOT_ACCEPTED;
  489. return status;
  490. }
  491. return status;
  492. }
  493. NDIS_STATUS oid_rt_get_channel_hdl(struct oid_par_priv *poid_par_priv)
  494. {
  495. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  496. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  497. struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
  498. NDIS_802_11_CONFIGURATION *pnic_Config;
  499. ULONG channelnum;
  500. if (poid_par_priv->type_of_oid != QUERY_OID) {
  501. status = NDIS_STATUS_NOT_ACCEPTED;
  502. return status;
  503. }
  504. if ((check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE) ||
  505. (check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == _TRUE))
  506. pnic_Config = &pmlmepriv->cur_network.network.Configuration;
  507. else
  508. pnic_Config = &padapter->registrypriv.dev_network.Configuration;
  509. channelnum = pnic_Config->DSConfig;
  510. *(ULONG *)poid_par_priv->information_buf = channelnum;
  511. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  512. return status;
  513. }
  514. NDIS_STATUS oid_rt_get_hardware_radio_off_hdl(struct oid_par_priv *poid_par_priv)
  515. {
  516. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  517. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  518. if (poid_par_priv->type_of_oid != QUERY_OID) {
  519. status = NDIS_STATUS_NOT_ACCEPTED;
  520. return status;
  521. }
  522. return status;
  523. }
  524. NDIS_STATUS oid_rt_get_key_mismatch_hdl(struct oid_par_priv *poid_par_priv)
  525. {
  526. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  527. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  528. if (poid_par_priv->type_of_oid != QUERY_OID) {
  529. status = NDIS_STATUS_NOT_ACCEPTED;
  530. return status;
  531. }
  532. return status;
  533. }
  534. NDIS_STATUS oid_rt_supported_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
  535. {
  536. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  537. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  538. ULONG ulInfo = 0 ;
  539. /* DEBUG_ERR(("<**********************oid_rt_supported_wireless_mode_hdl\n")); */
  540. if (poid_par_priv->type_of_oid != QUERY_OID) {
  541. status = NDIS_STATUS_NOT_ACCEPTED;
  542. return status;
  543. }
  544. if (poid_par_priv->information_buf_len >= sizeof(ULONG)) {
  545. ulInfo |= 0x0100; /* WIRELESS_MODE_B */
  546. ulInfo |= 0x0200; /* WIRELESS_MODE_G */
  547. ulInfo |= 0x0400; /* WIRELESS_MODE_A */
  548. *(ULONG *) poid_par_priv->information_buf = ulInfo;
  549. /* DEBUG_ERR(("<===oid_rt_supported_wireless_mode %x\n",ulInfo)); */
  550. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  551. } else
  552. status = NDIS_STATUS_INVALID_LENGTH;
  553. return status;
  554. }
  555. NDIS_STATUS oid_rt_get_channel_list_hdl(struct oid_par_priv *poid_par_priv)
  556. {
  557. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  558. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  559. if (poid_par_priv->type_of_oid != QUERY_OID) {
  560. status = NDIS_STATUS_NOT_ACCEPTED;
  561. return status;
  562. }
  563. return status;
  564. }
  565. NDIS_STATUS oid_rt_get_scan_in_progress_hdl(struct oid_par_priv *poid_par_priv)
  566. {
  567. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  568. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  569. if (poid_par_priv->type_of_oid != QUERY_OID) {
  570. status = NDIS_STATUS_NOT_ACCEPTED;
  571. return status;
  572. }
  573. return status;
  574. }
  575. NDIS_STATUS oid_rt_forced_data_rate_hdl(struct oid_par_priv *poid_par_priv)
  576. {
  577. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  578. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  579. return status;
  580. }
  581. NDIS_STATUS oid_rt_wireless_mode_for_scan_list_hdl(struct oid_par_priv *poid_par_priv)
  582. {
  583. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  584. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  585. return status;
  586. }
  587. NDIS_STATUS oid_rt_get_bss_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
  588. {
  589. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  590. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  591. if (poid_par_priv->type_of_oid != QUERY_OID) {
  592. status = NDIS_STATUS_NOT_ACCEPTED;
  593. return status;
  594. }
  595. return status;
  596. }
  597. NDIS_STATUS oid_rt_scan_with_magic_packet_hdl(struct oid_par_priv *poid_par_priv)
  598. {
  599. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  600. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  601. return status;
  602. }
  603. /* ************** oid_rtl_seg_01_01 section end ************** */
  604. /* ************** oid_rtl_seg_01_03 section start ************** */
  605. NDIS_STATUS oid_rt_ap_get_associated_station_list_hdl(struct oid_par_priv *poid_par_priv)
  606. {
  607. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  608. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  609. if (poid_par_priv->type_of_oid != QUERY_OID) {
  610. status = NDIS_STATUS_NOT_ACCEPTED;
  611. return status;
  612. }
  613. return status;
  614. }
  615. NDIS_STATUS oid_rt_ap_switch_into_ap_mode_hdl(struct oid_par_priv *poid_par_priv)
  616. {
  617. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  618. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  619. return status;
  620. }
  621. NDIS_STATUS oid_rt_ap_supported_hdl(struct oid_par_priv *poid_par_priv)
  622. {
  623. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  624. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  625. return status;
  626. }
  627. NDIS_STATUS oid_rt_ap_set_passphrase_hdl(struct oid_par_priv *poid_par_priv)
  628. {
  629. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  630. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  631. if (poid_par_priv->type_of_oid != SET_OID) {
  632. status = NDIS_STATUS_NOT_ACCEPTED;
  633. return status;
  634. }
  635. return status;
  636. }
  637. /* ************** oid_rtl_seg_01_03 section end ************** */
  638. /* **************** oid_rtl_seg_01_11 section start **************** */
  639. NDIS_STATUS oid_rt_pro_rf_write_registry_hdl(struct oid_par_priv *poid_par_priv)
  640. {
  641. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  642. PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
  643. _irqL oldirql;
  644. /* DEBUG_ERR(("<**********************oid_rt_pro_rf_write_registry_hdl\n")); */
  645. if (poid_par_priv->type_of_oid != SET_OID) { /* QUERY_OID */
  646. status = NDIS_STATUS_NOT_ACCEPTED;
  647. return status;
  648. }
  649. _irqlevel_changed_(&oldirql, LOWER);
  650. if (poid_par_priv->information_buf_len == (sizeof(unsigned long) * 3)) {
  651. /* RegOffsetValue - The offset of RF register to write. */
  652. /* RegDataWidth - The data width of RF register to write. */
  653. /* RegDataValue - The value to write. */
  654. /* RegOffsetValue = *((unsigned long*)InformationBuffer); */
  655. /* RegDataWidth = *((unsigned long*)InformationBuffer+1); */
  656. /* RegDataValue = *((unsigned long*)InformationBuffer+2); */
  657. if (!rtw_setrfreg_cmd(Adapter,
  658. *(unsigned char *)poid_par_priv->information_buf,
  659. (unsigned long)(*((unsigned long *)poid_par_priv->information_buf + 2))))
  660. status = NDIS_STATUS_NOT_ACCEPTED;
  661. } else
  662. status = NDIS_STATUS_INVALID_LENGTH;
  663. _irqlevel_changed_(&oldirql, RAISE);
  664. return status;
  665. }
  666. /* ------------------------------------------------------------------------------ */
  667. NDIS_STATUS oid_rt_pro_rf_read_registry_hdl(struct oid_par_priv *poid_par_priv)
  668. {
  669. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  670. #if 0
  671. PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
  672. _irqL oldirql;
  673. /* DEBUG_ERR(("<**********************oid_rt_pro_rf_read_registry_hdl\n")); */
  674. if (poid_par_priv->type_of_oid != SET_OID) { /* QUERY_OID */
  675. status = NDIS_STATUS_NOT_ACCEPTED;
  676. return status;
  677. }
  678. _irqlevel_changed_(&oldirql, LOWER);
  679. if (poid_par_priv->information_buf_len == (sizeof(unsigned long) * 3)) {
  680. if (Adapter->mppriv.act_in_progress == _TRUE)
  681. status = NDIS_STATUS_NOT_ACCEPTED;
  682. else {
  683. /* init workparam */
  684. Adapter->mppriv.act_in_progress = _TRUE;
  685. Adapter->mppriv.workparam.bcompleted = _FALSE;
  686. Adapter->mppriv.workparam.act_type = MPT_READ_RF;
  687. Adapter->mppriv.workparam.io_offset = *(unsigned long *)poid_par_priv->information_buf;
  688. Adapter->mppriv.workparam.io_value = 0xcccccccc;
  689. /* RegOffsetValue - The offset of RF register to read. */
  690. /* RegDataWidth - The data width of RF register to read. */
  691. /* RegDataValue - The value to read. */
  692. /* RegOffsetValue = *((unsigned long*)InformationBuffer); */
  693. /* RegDataWidth = *((unsigned long*)InformationBuffer+1); */
  694. /* RegDataValue = *((unsigned long*)InformationBuffer+2); */
  695. if (!rtw_getrfreg_cmd(Adapter,
  696. *(unsigned char *)poid_par_priv->information_buf,
  697. (unsigned char *)&Adapter->mppriv.workparam.io_value))
  698. status = NDIS_STATUS_NOT_ACCEPTED;
  699. }
  700. } else
  701. status = NDIS_STATUS_INVALID_LENGTH;
  702. _irqlevel_changed_(&oldirql, RAISE);
  703. #endif
  704. return status;
  705. }
  706. /* **************** oid_rtl_seg_01_11 section end**************** */
  707. /* ************** oid_rtl_seg_03_00 section start ************** */
  708. enum _CONNECT_STATE_ {
  709. CHECKINGSTATUS,
  710. ASSOCIATED,
  711. ADHOCMODE,
  712. NOTASSOCIATED
  713. };
  714. NDIS_STATUS oid_rt_get_connect_state_hdl(struct oid_par_priv *poid_par_priv)
  715. {
  716. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  717. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  718. struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
  719. ULONG ulInfo;
  720. if (poid_par_priv->type_of_oid != QUERY_OID) {
  721. status = NDIS_STATUS_NOT_ACCEPTED;
  722. return status;
  723. }
  724. /* nStatus==0 CheckingStatus */
  725. /* nStatus==1 Associated */
  726. /* nStatus==2 AdHocMode */
  727. /* nStatus==3 NotAssociated */
  728. if (check_fwstate(pmlmepriv, _FW_UNDER_LINKING) == _TRUE)
  729. ulInfo = CHECKINGSTATUS;
  730. else if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
  731. ulInfo = ASSOCIATED;
  732. else if (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == _TRUE)
  733. ulInfo = ADHOCMODE;
  734. else
  735. ulInfo = NOTASSOCIATED ;
  736. *(ULONG *)poid_par_priv->information_buf = ulInfo;
  737. *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  738. #if 0
  739. /* Rearrange the order to let the UI still shows connection when scan is in progress */
  740. if (pMgntInfo->mAssoc)
  741. ulInfo = 1;
  742. else if (pMgntInfo->mIbss)
  743. ulInfo = 2;
  744. else if (pMgntInfo->bScanInProgress)
  745. ulInfo = 0;
  746. else
  747. ulInfo = 3;
  748. ulInfoLen = sizeof(ULONG);
  749. #endif
  750. return status;
  751. }
  752. NDIS_STATUS oid_rt_set_default_key_id_hdl(struct oid_par_priv *poid_par_priv)
  753. {
  754. NDIS_STATUS status = NDIS_STATUS_SUCCESS;
  755. PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
  756. if (poid_par_priv->type_of_oid != SET_OID) {
  757. status = NDIS_STATUS_NOT_ACCEPTED;
  758. return status;
  759. }
  760. return status;
  761. }
  762. /* ************** oid_rtl_seg_03_00 section end ************** */