1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
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.
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
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
19 ******************************************************************************/
20 #define _RTW_MP_IOCTL_C_
22 #include <drv_types.h>
23 #include <rtw_mp_ioctl.h>
24 #include "../hal/phydm/phydm_precomp.h"
26 /* **************** oid_rtl_seg_81_85 section start **************** */
27 NDIS_STATUS oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
29 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
30 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
33 if (poid_par_priv->information_buf_len < sizeof(u8))
34 return NDIS_STATUS_INVALID_LENGTH;
36 if (poid_par_priv->type_of_oid == SET_OID)
37 Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf;
38 else if (poid_par_priv->type_of_oid == QUERY_OID) {
39 *(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
40 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
42 status = NDIS_STATUS_NOT_ACCEPTED;
47 /* **************** oid_rtl_seg_81_87_80 section start **************** */
48 NDIS_STATUS oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
53 struct bb_reg_param *pbbreg;
56 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
57 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
61 if (poid_par_priv->type_of_oid != SET_OID)
62 return NDIS_STATUS_NOT_ACCEPTED;
64 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
65 return NDIS_STATUS_INVALID_LENGTH;
67 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
69 offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
70 if (offset < BB_REG_BASE_ADDR)
71 offset |= BB_REG_BASE_ADDR;
73 value = pbbreg->value;
76 _irqlevel_changed_(&oldirql, LOWER);
77 write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
78 _irqlevel_changed_(&oldirql, RAISE);
83 /* ------------------------------------------------------------------------------ */
84 NDIS_STATUS oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
89 struct bb_reg_param *pbbreg;
92 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
93 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
97 if (poid_par_priv->type_of_oid != QUERY_OID)
98 return NDIS_STATUS_NOT_ACCEPTED;
100 if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
101 return NDIS_STATUS_INVALID_LENGTH;
103 pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
105 offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
106 if (offset < BB_REG_BASE_ADDR)
107 offset |= BB_REG_BASE_ADDR;
109 _irqlevel_changed_(&oldirql, LOWER);
110 value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
111 _irqlevel_changed_(&oldirql, RAISE);
113 pbbreg->value = value;
114 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
119 /* ------------------------------------------------------------------------------ */
120 NDIS_STATUS oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
122 #ifdef PLATFORM_OS_XP
125 struct rf_reg_param *pbbreg;
129 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
130 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
134 if (poid_par_priv->type_of_oid != SET_OID)
135 return NDIS_STATUS_NOT_ACCEPTED;
137 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
138 return NDIS_STATUS_INVALID_LENGTH;
140 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
142 if (pbbreg->path >= MAX_RF_PATH_NUMS)
143 return NDIS_STATUS_NOT_ACCEPTED;
144 if (pbbreg->offset > 0xFF)
145 return NDIS_STATUS_NOT_ACCEPTED;
146 if (pbbreg->value > 0xFFFFF)
147 return NDIS_STATUS_NOT_ACCEPTED;
149 path = (u8)pbbreg->path;
150 offset = (u8)pbbreg->offset;
151 value = pbbreg->value;
154 _irqlevel_changed_(&oldirql, LOWER);
155 write_rfreg(Adapter, path, offset, value);
156 _irqlevel_changed_(&oldirql, RAISE);
161 /* ------------------------------------------------------------------------------ */
162 NDIS_STATUS oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
164 #ifdef PLATFORM_OS_XP
167 struct rf_reg_param *pbbreg;
171 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
172 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
176 if (poid_par_priv->type_of_oid != QUERY_OID)
177 return NDIS_STATUS_NOT_ACCEPTED;
179 if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
180 return NDIS_STATUS_INVALID_LENGTH;
182 pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
184 if (pbbreg->path >= MAX_RF_PATH_NUMS)
185 return NDIS_STATUS_NOT_ACCEPTED;
186 if (pbbreg->offset > 0xFF)
187 return NDIS_STATUS_NOT_ACCEPTED;
189 path = (u8)pbbreg->path;
190 offset = (u8)pbbreg->offset;
192 _irqlevel_changed_(&oldirql, LOWER);
193 value = read_rfreg(Adapter, path, offset);
194 _irqlevel_changed_(&oldirql, RAISE);
196 pbbreg->value = value;
198 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
204 /* **************** oid_rtl_seg_81_87_00 section end****************
205 * ------------------------------------------------------------------------------ */
207 /* **************** oid_rtl_seg_81_80_00 section start ****************
208 * ------------------------------------------------------------------------------ */
209 NDIS_STATUS oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
211 #ifdef PLATFORM_OS_XP
214 u32 ratevalue;/* 4 */
215 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
216 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
220 if (poid_par_priv->type_of_oid != SET_OID)
221 return NDIS_STATUS_NOT_ACCEPTED;
223 if (poid_par_priv->information_buf_len != sizeof(u32))
224 return NDIS_STATUS_INVALID_LENGTH;
226 ratevalue = *((u32 *)poid_par_priv->information_buf); /* 4 */
227 if (ratevalue >= MPT_RATE_LAST)
228 return NDIS_STATUS_INVALID_DATA;
230 Adapter->mppriv.rateidx = ratevalue;
232 _irqlevel_changed_(&oldirql, LOWER);
233 SetDataRate(Adapter);
234 _irqlevel_changed_(&oldirql, RAISE);
239 /* ------------------------------------------------------------------------------ */
240 NDIS_STATUS oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
242 #ifdef PLATFORM_OS_XP
246 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
247 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
251 if (Adapter->registrypriv.mp_mode == 0)
252 return NDIS_STATUS_NOT_ACCEPTED;
254 if (poid_par_priv->type_of_oid != SET_OID)
255 return NDIS_STATUS_NOT_ACCEPTED;
257 _irqlevel_changed_(&oldirql, LOWER);
259 /* IQCalibrateBcut(Adapter); */
261 mode = *((u32 *)poid_par_priv->information_buf);
262 Adapter->mppriv.mode = mode;/* 1 for loopback */
264 if (mp_start_test(Adapter) == _FAIL) {
265 status = NDIS_STATUS_NOT_ACCEPTED;
270 _irqlevel_changed_(&oldirql, RAISE);
276 /* ------------------------------------------------------------------------------ */
277 NDIS_STATUS oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
279 #ifdef PLATFORM_OS_XP
282 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
283 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
287 if (poid_par_priv->type_of_oid != SET_OID)
288 return NDIS_STATUS_NOT_ACCEPTED;
290 _irqlevel_changed_(&oldirql, LOWER);
291 mp_stop_test(Adapter);
292 _irqlevel_changed_(&oldirql, RAISE);
298 /* ------------------------------------------------------------------------------ */
299 NDIS_STATUS oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
301 #ifdef PLATFORM_OS_XP
305 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
306 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
310 if (poid_par_priv->information_buf_len != sizeof(u32))
311 return NDIS_STATUS_INVALID_LENGTH;
313 if (poid_par_priv->type_of_oid == QUERY_OID) {
314 *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
315 return NDIS_STATUS_SUCCESS;
318 if (poid_par_priv->type_of_oid != SET_OID)
319 return NDIS_STATUS_NOT_ACCEPTED;
321 Channel = *((u32 *)poid_par_priv->information_buf);
323 return NDIS_STATUS_NOT_ACCEPTED;
324 Adapter->mppriv.channel = Channel;
326 _irqlevel_changed_(&oldirql, LOWER);
328 _irqlevel_changed_(&oldirql, RAISE);
333 /* ------------------------------------------------------------------------------ */
334 NDIS_STATUS oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
336 #ifdef PLATFORM_OS_XP
341 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
342 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
346 if (poid_par_priv->type_of_oid != SET_OID)
347 return NDIS_STATUS_NOT_ACCEPTED;
349 if (poid_par_priv->information_buf_len < sizeof(u32))
350 return NDIS_STATUS_INVALID_LENGTH;
352 bandwidth = *((u32 *)poid_par_priv->information_buf); /* 4 */
353 channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
355 if (bandwidth != CHANNEL_WIDTH_40)
356 bandwidth = CHANNEL_WIDTH_20;
357 padapter->mppriv.bandwidth = (u8)bandwidth;
358 padapter->mppriv.prime_channel_offset = (u8)channel_offset;
360 _irqlevel_changed_(&oldirql, LOWER);
361 SetBandwidth(padapter);
362 _irqlevel_changed_(&oldirql, RAISE);
368 /* ------------------------------------------------------------------------------ */
369 NDIS_STATUS oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
371 #ifdef PLATFORM_OS_XP
375 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
376 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
380 if (poid_par_priv->information_buf_len != sizeof(u32))
381 return NDIS_STATUS_INVALID_LENGTH;
383 if (poid_par_priv->type_of_oid == SET_OID) {
384 antenna = *(u32 *)poid_par_priv->information_buf;
386 Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
387 Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
389 _irqlevel_changed_(&oldirql, LOWER);
391 _irqlevel_changed_(&oldirql, RAISE);
393 antenna = (Adapter->mppriv.antenna_tx << 16) | Adapter->mppriv.antenna_rx;
394 *(u32 *)poid_par_priv->information_buf = antenna;
401 NDIS_STATUS oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
403 #ifdef PLATFORM_OS_XP
407 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
408 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
412 if (poid_par_priv->type_of_oid != SET_OID)
413 return NDIS_STATUS_NOT_ACCEPTED;
415 if (poid_par_priv->information_buf_len != sizeof(u32))
416 return NDIS_STATUS_INVALID_LENGTH;
418 tx_pwr_idx = *((u32 *)poid_par_priv->information_buf);
419 if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
420 return NDIS_STATUS_NOT_ACCEPTED;
422 Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
425 _irqlevel_changed_(&oldirql, LOWER);
427 _irqlevel_changed_(&oldirql, RAISE);
433 /* ------------------------------------------------------------------------------
434 * **************** oid_rtl_seg_81_80_20 section start ****************
435 * ------------------------------------------------------------------------------ */
436 NDIS_STATUS oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
438 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
439 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
442 if (poid_par_priv->type_of_oid != QUERY_OID) {
443 status = NDIS_STATUS_NOT_ACCEPTED;
447 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
448 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.tx_pktcount;
449 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
451 status = NDIS_STATUS_INVALID_LENGTH;
456 /* ------------------------------------------------------------------------------ */
457 NDIS_STATUS oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
459 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
460 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
463 if (poid_par_priv->type_of_oid != QUERY_OID) {
464 status = NDIS_STATUS_NOT_ACCEPTED;
467 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
468 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_pktcount;
469 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
471 status = NDIS_STATUS_INVALID_LENGTH;
476 /* ------------------------------------------------------------------------------ */
477 NDIS_STATUS oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
479 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
480 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
483 if (poid_par_priv->type_of_oid != QUERY_OID) {
484 status = NDIS_STATUS_NOT_ACCEPTED;
487 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
488 *(ULONG *)poid_par_priv->information_buf = Adapter->mppriv.rx_crcerrpktcount;
489 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
491 status = NDIS_STATUS_INVALID_LENGTH;
496 /* ------------------------------------------------------------------------------ */
498 NDIS_STATUS oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
500 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
501 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
504 if (poid_par_priv->type_of_oid != SET_OID) {
505 status = NDIS_STATUS_NOT_ACCEPTED;
509 Adapter->mppriv.tx_pktcount = 0;
514 /* ------------------------------------------------------------------------------ */
515 NDIS_STATUS oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
517 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
518 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
521 if (poid_par_priv->type_of_oid != SET_OID) {
522 status = NDIS_STATUS_NOT_ACCEPTED;
526 if (poid_par_priv->information_buf_len == sizeof(ULONG)) {
527 Adapter->mppriv.rx_pktcount = 0;
528 Adapter->mppriv.rx_crcerrpktcount = 0;
530 status = NDIS_STATUS_INVALID_LENGTH;
535 /* ------------------------------------------------------------------------------ */
536 NDIS_STATUS oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
538 #ifdef PLATFORM_OS_XP
541 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
542 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
545 if (poid_par_priv->type_of_oid != SET_OID) {
546 status = NDIS_STATUS_NOT_ACCEPTED;
550 _irqlevel_changed_(&oldirql, LOWER);
551 ResetPhyRxPktCount(Adapter);
552 _irqlevel_changed_(&oldirql, RAISE);
557 /* ------------------------------------------------------------------------------ */
558 NDIS_STATUS oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
560 #ifdef PLATFORM_OS_XP
563 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
564 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
568 if (poid_par_priv->type_of_oid != QUERY_OID)
569 return NDIS_STATUS_NOT_ACCEPTED;
571 if (poid_par_priv->information_buf_len != sizeof(ULONG))
572 return NDIS_STATUS_INVALID_LENGTH;
574 _irqlevel_changed_(&oldirql, LOWER);
575 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
576 _irqlevel_changed_(&oldirql, RAISE);
578 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
584 /* ------------------------------------------------------------------------------ */
585 NDIS_STATUS oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
587 #ifdef PLATFORM_OS_XP
590 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
591 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
595 if (poid_par_priv->type_of_oid != QUERY_OID)
596 return NDIS_STATUS_NOT_ACCEPTED;
599 if (poid_par_priv->information_buf_len != sizeof(ULONG))
600 return NDIS_STATUS_INVALID_LENGTH;
602 _irqlevel_changed_(&oldirql, LOWER);
603 *(ULONG *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
604 _irqlevel_changed_(&oldirql, RAISE);
606 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
612 /* **************** oid_rtl_seg_81_80_20 section end **************** */
613 NDIS_STATUS oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
615 #ifdef PLATFORM_OS_XP
619 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
620 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
624 if (poid_par_priv->type_of_oid != SET_OID)
625 return NDIS_STATUS_NOT_ACCEPTED;
627 bStartTest = *((u32 *)poid_par_priv->information_buf);
629 _irqlevel_changed_(&oldirql, LOWER);
630 SetContinuousTx(Adapter, (u8)bStartTest);
632 struct mp_priv *pmp_priv = &Adapter->mppriv;
633 if (pmp_priv->tx.stop == 0) {
634 pmp_priv->tx.stop = 1;
635 RTW_INFO("%s: pkt tx is running...\n", __func__);
638 pmp_priv->tx.stop = 0;
639 pmp_priv->tx.count = 1;
640 SetPacketTx(Adapter);
642 _irqlevel_changed_(&oldirql, RAISE);
648 NDIS_STATUS oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
650 #ifdef PLATFORM_OS_XP
654 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
655 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
659 if (poid_par_priv->type_of_oid != SET_OID)
660 return NDIS_STATUS_NOT_ACCEPTED;
662 bStartTest = *((u32 *)poid_par_priv->information_buf);
664 _irqlevel_changed_(&oldirql, LOWER);
665 SetSingleCarrierTx(Adapter, (u8)bStartTest);
667 struct mp_priv *pmp_priv = &Adapter->mppriv;
668 if (pmp_priv->tx.stop == 0) {
669 pmp_priv->tx.stop = 1;
670 RTW_INFO("%s: pkt tx is running...\n", __func__);
673 pmp_priv->tx.stop = 0;
674 pmp_priv->tx.count = 1;
675 SetPacketTx(Adapter);
677 _irqlevel_changed_(&oldirql, RAISE);
683 NDIS_STATUS oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
685 #ifdef PLATFORM_OS_XP
689 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
690 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
694 if (poid_par_priv->type_of_oid != SET_OID)
695 return NDIS_STATUS_NOT_ACCEPTED;
697 bStartTest = *((u32 *)poid_par_priv->information_buf);
699 _irqlevel_changed_(&oldirql, LOWER);
700 SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
702 struct mp_priv *pmp_priv = &Adapter->mppriv;
703 if (pmp_priv->tx.stop == 0) {
704 pmp_priv->tx.stop = 1;
705 RTW_INFO("%s: pkt tx is running...\n", __func__);
708 pmp_priv->tx.stop = 0;
709 pmp_priv->tx.count = 1;
710 SetPacketTx(Adapter);
712 _irqlevel_changed_(&oldirql, RAISE);
718 NDIS_STATUS oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
720 #ifdef PLATFORM_OS_XP
724 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
725 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
729 if (poid_par_priv->type_of_oid != SET_OID)
730 return NDIS_STATUS_NOT_ACCEPTED;
732 bStartTest = *((u32 *)poid_par_priv->information_buf);
734 _irqlevel_changed_(&oldirql, LOWER);
735 SetSingleToneTx(Adapter, (u8)bStartTest);
736 _irqlevel_changed_(&oldirql, RAISE);
742 NDIS_STATUS oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
747 NDIS_STATUS oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
749 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
751 #ifdef PLATFORM_OS_XP
754 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
756 if (poid_par_priv->type_of_oid != SET_OID)
757 return NDIS_STATUS_NOT_ACCEPTED;
759 _irqlevel_changed_(&oldirql, LOWER);
760 rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, 0);
761 _irqlevel_changed_(&oldirql, RAISE);
766 /* **************** oid_rtl_seg_81_80_00 section end ****************
767 * ------------------------------------------------------------------------------ */
768 NDIS_STATUS oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
771 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
773 #ifdef PLATFORM_OS_XP
776 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
778 PNDIS_802_11_SSID pssid;
781 if (poid_par_priv->type_of_oid != SET_OID)
782 return NDIS_STATUS_NOT_ACCEPTED;
784 *poid_par_priv->bytes_needed = (u32)sizeof(NDIS_802_11_SSID);
785 *poid_par_priv->bytes_rw = 0;
786 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
787 return NDIS_STATUS_INVALID_LENGTH;
789 pssid = (PNDIS_802_11_SSID)poid_par_priv->information_buf;
791 _irqlevel_changed_(&oldirql, LOWER);
793 if (mp_start_joinbss(Adapter, pssid) == _FAIL)
794 status = NDIS_STATUS_NOT_ACCEPTED;
796 _irqlevel_changed_(&oldirql, RAISE);
798 *poid_par_priv->bytes_rw = sizeof(NDIS_802_11_SSID);
806 /* ------------------------------------------------------------------------------ */
807 NDIS_STATUS oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
809 #ifdef PLATFORM_OS_XP
814 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
815 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
819 if (poid_par_priv->type_of_oid != QUERY_OID)
820 return NDIS_STATUS_NOT_ACCEPTED;
822 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
823 offset = RegRWStruct->offset;
824 width = RegRWStruct->width;
827 return NDIS_STATUS_NOT_ACCEPTED;
829 _irqlevel_changed_(&oldirql, LOWER);
833 RegRWStruct->value = rtw_read8(Adapter, offset);
836 RegRWStruct->value = rtw_read16(Adapter, offset);
840 RegRWStruct->value = rtw_read32(Adapter, offset);
844 _irqlevel_changed_(&oldirql, RAISE);
846 *poid_par_priv->bytes_rw = width;
851 /* ------------------------------------------------------------------------------ */
852 NDIS_STATUS oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
854 #ifdef PLATFORM_OS_XP
858 u32 offset, width, value;
859 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
860 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
864 if (poid_par_priv->type_of_oid != SET_OID)
865 return NDIS_STATUS_NOT_ACCEPTED;
867 RegRWStruct = (pRW_Reg)poid_par_priv->information_buf;
868 offset = RegRWStruct->offset;
869 width = RegRWStruct->width;
870 value = RegRWStruct->value;
873 return NDIS_STATUS_NOT_ACCEPTED;
875 _irqlevel_changed_(&oldirql, LOWER);
877 switch (RegRWStruct->width) {
880 status = NDIS_STATUS_NOT_ACCEPTED;
883 rtw_write8(padapter, offset, (u8)value);
886 if (value > 0xFFFF) {
887 status = NDIS_STATUS_NOT_ACCEPTED;
890 rtw_write16(padapter, offset, (u16)value);
893 rtw_write32(padapter, offset, value);
896 status = NDIS_STATUS_NOT_ACCEPTED;
900 _irqlevel_changed_(&oldirql, RAISE);
906 /* ------------------------------------------------------------------------------ */
907 NDIS_STATUS oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
910 #ifdef PLATFORM_OS_XP
913 pBurst_RW_Reg pBstRwReg;
914 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
915 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
919 if (poid_par_priv->type_of_oid != QUERY_OID)
920 return NDIS_STATUS_NOT_ACCEPTED;
922 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
924 _irqlevel_changed_(&oldirql, LOWER);
925 rtw_read_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
926 _irqlevel_changed_(&oldirql, RAISE);
928 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
937 /* ------------------------------------------------------------------------------ */
938 NDIS_STATUS oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
941 #ifdef PLATFORM_OS_XP
944 pBurst_RW_Reg pBstRwReg;
945 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
946 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
950 if (poid_par_priv->type_of_oid != SET_OID)
951 return NDIS_STATUS_NOT_ACCEPTED;
953 pBstRwReg = (pBurst_RW_Reg)poid_par_priv->information_buf;
955 _irqlevel_changed_(&oldirql, LOWER);
956 rtw_write_mem(padapter, pBstRwReg->offset, (u32)pBstRwReg->len, pBstRwReg->Data);
957 _irqlevel_changed_(&oldirql, RAISE);
966 /* ------------------------------------------------------------------------------ */
967 NDIS_STATUS oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
970 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
972 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
974 #ifdef PLATFORM_OS_XP
978 TX_CMD_Desc *TxCmd_Info;
981 if (poid_par_priv->type_of_oid != SET_OID)
982 return NDIS_STATUS_NOT_ACCEPTED;
985 TxCmd_Info = (TX_CMD_Desc *)poid_par_priv->information_buf;
988 _irqlevel_changed_(&oldirql, LOWER);
990 rtw_write32(Adapter, TxCmd_Info->offset + 0, (unsigned int)TxCmd_Info->TxCMD.value[0]);
991 rtw_write32(Adapter, TxCmd_Info->offset + 4, (unsigned int)TxCmd_Info->TxCMD.value[1]);
993 _irqlevel_changed_(&oldirql, RAISE);
1003 /* ------------------------------------------------------------------------------ */
1004 NDIS_STATUS oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
1007 #ifdef PLATFORM_OS_XP
1010 pEEPROM_RWParam pEEPROM;
1011 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1012 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1016 if (poid_par_priv->type_of_oid != QUERY_OID)
1017 return NDIS_STATUS_NOT_ACCEPTED;
1019 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1021 _irqlevel_changed_(&oldirql, LOWER);
1022 pEEPROM->value = eeprom_read16(padapter, (u16)(pEEPROM->offset >> 1));
1023 _irqlevel_changed_(&oldirql, RAISE);
1025 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1035 /* ------------------------------------------------------------------------------ */
1036 NDIS_STATUS oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
1039 #ifdef PLATFORM_OS_XP
1042 pEEPROM_RWParam pEEPROM;
1043 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1044 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1048 if (poid_par_priv->type_of_oid != SET_OID)
1049 return NDIS_STATUS_NOT_ACCEPTED;
1051 pEEPROM = (pEEPROM_RWParam)poid_par_priv->information_buf;
1053 _irqlevel_changed_(&oldirql, LOWER);
1054 eeprom_write16(padapter, (u16)(pEEPROM->offset >> 1), pEEPROM->value);
1055 _irqlevel_changed_(&oldirql, RAISE);
1057 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1065 /* ------------------------------------------------------------------------------ */
1066 NDIS_STATUS oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
1069 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1071 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1073 struct mp_wiparam *pwi_param;
1076 if (poid_par_priv->type_of_oid != QUERY_OID)
1077 return NDIS_STATUS_NOT_ACCEPTED;
1079 if (poid_par_priv->information_buf_len < sizeof(struct mp_wiparam))
1080 return NDIS_STATUS_INVALID_LENGTH;
1082 if (Adapter->mppriv.workparam.bcompleted == _FALSE)
1083 return NDIS_STATUS_NOT_ACCEPTED;
1085 pwi_param = (struct mp_wiparam *)poid_par_priv->information_buf;
1087 _rtw_memcpy(pwi_param, &Adapter->mppriv.workparam, sizeof(struct mp_wiparam));
1088 Adapter->mppriv.act_in_progress = _FALSE;
1089 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1097 /* ------------------------------------------------------------------------------ */
1098 NDIS_STATUS oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
1101 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1103 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1107 if (poid_par_priv->type_of_oid != QUERY_OID)
1108 return NDIS_STATUS_NOT_ACCEPTED;
1110 if (poid_par_priv->information_buf_len < sizeof(uint) * 2) {
1111 return NDIS_STATUS_INVALID_LENGTH;
1114 if (*(uint *)poid_par_priv->information_buf == 1) /* init==1 */
1115 Adapter->mppriv.rx_pktloss = 0;
1117 *((uint *)poid_par_priv->information_buf + 1) = Adapter->mppriv.rx_pktloss;
1118 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1126 /* ------------------------------------------------------------------------------ */
1127 NDIS_STATUS oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
1130 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1131 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1132 struct intf_hdl *pintfhdl = &pio_queue->intf;
1134 #ifdef PLATFORM_OS_XP
1137 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1139 #ifdef CONFIG_SDIO_HCI
1140 void (*_attrib_read)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1145 if (poid_par_priv->type_of_oid != QUERY_OID)
1146 return NDIS_STATUS_NOT_ACCEPTED;
1148 #ifdef CONFIG_SDIO_HCI
1149 _irqlevel_changed_(&oldirql, LOWER);
1151 u32 *plmem = (u32 *)poid_par_priv->information_buf + 2;
1152 _attrib_read = pintfhdl->io_ops._attrib_read;
1153 _attrib_read(pintfhdl, *((u32 *)poid_par_priv->information_buf),
1154 *((u32 *)poid_par_priv->information_buf + 1), (u8 *)plmem);
1155 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1157 _irqlevel_changed_(&oldirql, RAISE);
1166 /* ------------------------------------------------------------------------------ */
1167 NDIS_STATUS oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
1170 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1171 struct io_queue *pio_queue = (struct io_queue *)Adapter->pio_queue;
1172 struct intf_hdl *pintfhdl = &pio_queue->intf;
1174 #ifdef PLATFORM_OS_XP
1177 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1179 #ifdef CONFIG_SDIO_HCI
1180 void (*_attrib_write)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
1184 if (poid_par_priv->type_of_oid != SET_OID)
1185 return NDIS_STATUS_NOT_ACCEPTED;
1187 #ifdef CONFIG_SDIO_HCI
1188 _irqlevel_changed_(&oldirql, LOWER);
1190 u32 *plmem = (u32 *)poid_par_priv->information_buf + 2;
1191 _attrib_write = pintfhdl->io_ops._attrib_write;
1192 _attrib_write(pintfhdl, *(u32 *)poid_par_priv->information_buf,
1193 *((u32 *)poid_par_priv->information_buf + 1), (u8 *)plmem);
1195 _irqlevel_changed_(&oldirql, RAISE);
1204 /* ------------------------------------------------------------------------------ */
1205 NDIS_STATUS oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
1208 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1210 #ifdef PLATFORM_OS_XP
1213 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1217 if (poid_par_priv->type_of_oid != SET_OID)
1218 return NDIS_STATUS_NOT_ACCEPTED;
1220 _irqlevel_changed_(&oldirql, LOWER);
1222 if (rtw_setrfintfs_cmd(Adapter, *(unsigned char *)poid_par_priv->information_buf) == _FAIL)
1223 status = NDIS_STATUS_NOT_ACCEPTED;
1225 _irqlevel_changed_(&oldirql, RAISE);
1233 /* ------------------------------------------------------------------------------ */
1234 NDIS_STATUS oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
1237 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1239 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1242 if (poid_par_priv->type_of_oid != QUERY_OID)
1243 return NDIS_STATUS_NOT_ACCEPTED;
1245 _rtw_memcpy(poid_par_priv->information_buf, (unsigned char *)&Adapter->mppriv.rxstat, sizeof(struct recv_stat));
1246 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1254 /* ------------------------------------------------------------------------------ */
1255 NDIS_STATUS oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
1258 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1260 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1262 PCFG_DBG_MSG_STRUCT pdbg_msg;
1266 #if 0/*#ifdef CONFIG_DEBUG_RTL871X*/
1268 pdbg_msg = (PCFG_DBG_MSG_STRUCT)(poid_par_priv->information_buf);
1270 if (poid_par_priv->type_of_oid == SET_OID) {
1272 GlobalDebugLevel = pdbg_msg->DebugLevel;
1273 GlobalDebugComponents = (pdbg_msg->DebugComponent_H32 << 32) | pdbg_msg->DebugComponent_L32;
1275 pdbg_msg->DebugLevel = GlobalDebugLevel;
1276 pdbg_msg->DebugComponent_H32 = (u32)(GlobalDebugComponents >> 32);
1277 pdbg_msg->DebugComponent_L32 = (u32)GlobalDebugComponents;
1278 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1290 /* ------------------------------------------------------------------------------ */
1291 NDIS_STATUS oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
1293 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1295 #ifdef PLATFORM_OS_XP
1298 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1302 if (poid_par_priv->type_of_oid != SET_OID)
1303 return NDIS_STATUS_NOT_ACCEPTED;
1305 _irqlevel_changed_(&oldirql, LOWER);
1307 if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
1308 status = NDIS_STATUS_NOT_ACCEPTED;
1310 _irqlevel_changed_(&oldirql, RAISE);
1315 /* ----------------------------------------------------------------------------- */
1316 NDIS_STATUS oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
1318 #ifdef PLATFORM_OS_XP
1321 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1323 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1327 if (poid_par_priv->type_of_oid != QUERY_OID)
1328 return NDIS_STATUS_NOT_ACCEPTED;
1330 if (poid_par_priv->information_buf_len < sizeof(u32))
1331 return NDIS_STATUS_INVALID_LENGTH;
1333 _irqlevel_changed_(&oldirql, LOWER);
1334 GetThermalMeter(Adapter, &thermal);
1335 _irqlevel_changed_(&oldirql, RAISE);
1337 *(u32 *)poid_par_priv->information_buf = (u32)thermal;
1338 *poid_par_priv->bytes_rw = sizeof(u32);
1343 /* ----------------------------------------------------------------------------- */
1344 NDIS_STATUS oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
1347 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1349 #ifdef PLATFORM_OS_XP
1352 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1356 if (poid_par_priv->type_of_oid != SET_OID)
1357 return NDIS_STATUS_NOT_ACCEPTED;
1359 if (Adapter->mppriv.act_in_progress == _TRUE)
1360 return NDIS_STATUS_NOT_ACCEPTED;
1362 if (poid_par_priv->information_buf_len < sizeof(u8))
1363 return NDIS_STATUS_INVALID_LENGTH;
1365 /* init workparam */
1366 Adapter->mppriv.act_in_progress = _TRUE;
1367 Adapter->mppriv.workparam.bcompleted = _FALSE;
1368 Adapter->mppriv.workparam.act_type = MPT_READ_TSSI;
1369 Adapter->mppriv.workparam.io_offset = 0;
1370 Adapter->mppriv.workparam.io_value = 0xFFFFFFFF;
1372 _irqlevel_changed_(&oldirql, LOWER);
1374 if (!rtw_gettssi_cmd(Adapter, 0, (u8 *)&Adapter->mppriv.workparam.io_value))
1375 status = NDIS_STATUS_NOT_ACCEPTED;
1377 _irqlevel_changed_(&oldirql, RAISE);
1385 /* ------------------------------------------------------------------------------ */
1386 NDIS_STATUS oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
1388 #ifdef PLATFORM_OS_XP
1391 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1392 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1396 /* if (poid_par_priv->type_of_oid != SET_OID)
1397 * return NDIS_STATUS_NOT_ACCEPTED; */
1399 if (poid_par_priv->information_buf_len < sizeof(u8))
1400 return NDIS_STATUS_INVALID_LENGTH;
1402 _irqlevel_changed_(&oldirql, LOWER);
1403 if (poid_par_priv->type_of_oid == SET_OID) {
1406 enable = *(u8 *)poid_par_priv->information_buf;
1408 SetPowerTracking(Adapter, enable);
1410 GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
1411 _irqlevel_changed_(&oldirql, RAISE);
1416 /* ----------------------------------------------------------------------------- */
1417 NDIS_STATUS oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
1420 #ifdef PLATFORM_OS_XP
1424 u8 datarates[NumRates];
1426 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1427 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
1431 if (poid_par_priv->type_of_oid != SET_OID)
1432 return NDIS_STATUS_NOT_ACCEPTED;
1434 ratevalue = *((u32 *)poid_par_priv->information_buf);
1436 for (i = 0; i < NumRates; i++) {
1437 if (ratevalue == mpdatarate[i])
1438 datarates[i] = mpdatarate[i];
1440 datarates[i] = 0xff;
1443 _irqlevel_changed_(&oldirql, LOWER);
1445 if (rtw_setbasicrate_cmd(padapter, datarates) != _SUCCESS)
1446 status = NDIS_STATUS_NOT_ACCEPTED;
1448 _irqlevel_changed_(&oldirql, RAISE);
1457 /* ------------------------------------------------------------------------------ */
1458 NDIS_STATUS oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1461 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1463 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1466 if (poid_par_priv->type_of_oid != QUERY_OID)
1467 return NDIS_STATUS_NOT_ACCEPTED;
1469 if (poid_par_priv->information_buf_len < 8)
1470 return NDIS_STATUS_INVALID_LENGTH;
1472 *poid_par_priv->bytes_rw = 8;
1473 _rtw_memcpy(poid_par_priv->information_buf, &(adapter_to_pwrctl(Adapter)->pwr_mode), 8);
1474 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1483 /* ------------------------------------------------------------------------------ */
1484 NDIS_STATUS oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
1487 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1489 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1491 uint pwr_mode, smart_ps;
1495 if (poid_par_priv->type_of_oid != SET_OID)
1496 return NDIS_STATUS_NOT_ACCEPTED;
1498 *poid_par_priv->bytes_rw = 0;
1499 *poid_par_priv->bytes_needed = 8;
1501 if (poid_par_priv->information_buf_len < 8)
1502 return NDIS_STATUS_INVALID_LENGTH;
1504 pwr_mode = *(uint *)(poid_par_priv->information_buf);
1505 smart_ps = *(uint *)((int)poid_par_priv->information_buf + 4);
1507 *poid_par_priv->bytes_rw = 8;
1515 /* ------------------------------------------------------------------------------ */
1516 NDIS_STATUS oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1519 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1521 #ifdef PLATFORM_OS_XP
1524 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1526 struct setratable_parm *prate_table;
1530 if (poid_par_priv->type_of_oid != SET_OID)
1531 return NDIS_STATUS_NOT_ACCEPTED;
1533 *poid_par_priv->bytes_needed = sizeof(struct setratable_parm);
1534 if (poid_par_priv->information_buf_len < sizeof(struct setratable_parm))
1535 return NDIS_STATUS_INVALID_LENGTH;
1537 prate_table = (struct setratable_parm *)poid_par_priv->information_buf;
1539 _irqlevel_changed_(&oldirql, LOWER);
1540 res = rtw_setrttbl_cmd(Adapter, prate_table);
1541 _irqlevel_changed_(&oldirql, RAISE);
1544 status = NDIS_STATUS_FAILURE;
1552 /* ------------------------------------------------------------------------------ */
1553 NDIS_STATUS oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
1556 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1558 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1561 if (poid_par_priv->type_of_oid != QUERY_OID)
1562 return NDIS_STATUS_NOT_ACCEPTED;
1565 struct mp_wi_cntx *pmp_wi_cntx = &(Adapter->mppriv.wi_cntx);
1567 DEBUG_INFO(("===> Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1569 if (pmp_wi_cntx->bmp_wi_progress == _TRUE) {
1570 DEBUG_ERR(("\n mp workitem is progressing, not allow to set another workitem right now!!!\n"));
1571 Status = NDIS_STATUS_NOT_ACCEPTED;
1574 pmp_wi_cntx->bmp_wi_progress = _TRUE;
1575 pmp_wi_cntx->param.bcompleted = _FALSE;
1576 pmp_wi_cntx->param.act_type = MPT_GET_RATE_TABLE;
1577 pmp_wi_cntx->param.io_offset = 0x0;
1578 pmp_wi_cntx->param.bytes_cnt = sizeof(struct getratable_rsp);
1579 pmp_wi_cntx->param.io_value = 0xffffffff;
1581 res = rtw_getrttbl_cmd(Adapter, (struct getratable_rsp *)pmp_wi_cntx->param.data);
1582 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1583 if (res != _SUCCESS)
1584 Status = NDIS_STATUS_NOT_ACCEPTED;
1586 DEBUG_INFO(("\n <=== Set OID_RT_PRO_H2C_GET_RATE_TABLE.\n"));
1596 /* **************** oid_rtl_seg_87_12_00 section start **************** */
1597 NDIS_STATUS oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
1600 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1601 struct security_priv *psecuritypriv = &Adapter->securitypriv;
1603 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1605 ENCRY_CTRL_STATE encry_mode;
1608 *poid_par_priv->bytes_needed = sizeof(u8);
1609 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1610 return NDIS_STATUS_INVALID_LENGTH;
1612 if (poid_par_priv->type_of_oid == SET_OID) {
1613 encry_mode = *((u8 *)poid_par_priv->information_buf);
1614 switch (encry_mode) {
1617 Adapter->registrypriv.software_decrypt = _FALSE;
1618 Adapter->registrypriv.software_encrypt = _FALSE;
1620 psecuritypriv->sw_decrypt = _FALSE;
1621 psecuritypriv->sw_encrypt = _FALSE;
1626 Adapter->registrypriv.software_decrypt = _TRUE;
1627 Adapter->registrypriv.software_encrypt = _TRUE;
1629 psecuritypriv->sw_decrypt = _TRUE;
1630 psecuritypriv->sw_encrypt = _TRUE;
1633 case HW_ENCRY_SW_DECRY:
1635 Adapter->registrypriv.software_decrypt = _TRUE;
1636 Adapter->registrypriv.software_encrypt = _FALSE;
1638 psecuritypriv->sw_decrypt = _TRUE;
1639 psecuritypriv->sw_encrypt = _FALSE;
1642 case SW_ENCRY_HW_DECRY:
1644 Adapter->registrypriv.software_decrypt = _FALSE;
1645 Adapter->registrypriv.software_encrypt = _TRUE;
1647 psecuritypriv->sw_decrypt = _FALSE;
1648 psecuritypriv->sw_encrypt = _TRUE;
1655 if (Adapter->registrypriv.software_encrypt == _FALSE) {
1656 if (Adapter->registrypriv.software_decrypt == _FALSE)
1657 encry_mode = HW_CONTROL;
1659 encry_mode = HW_ENCRY_SW_DECRY;
1661 if (Adapter->registrypriv.software_decrypt == _FALSE)
1662 encry_mode = SW_ENCRY_HW_DECRY;
1664 encry_mode = SW_CONTROL;
1668 if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _FALSE))
1669 encry_mode = HW_CONTROL;
1670 else if ((psecuritypriv->sw_encrypt == _FALSE) && (psecuritypriv->sw_decrypt == _TRUE))
1671 encry_mode = HW_ENCRY_SW_DECRY;
1672 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _FALSE))
1673 encry_mode = SW_ENCRY_HW_DECRY;
1674 else if ((psecuritypriv->sw_encrypt == _TRUE) && (psecuritypriv->sw_decrypt == _TRUE))
1675 encry_mode = SW_CONTROL;
1679 *(u8 *)poid_par_priv->information_buf = encry_mode;
1680 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1689 /* ------------------------------------------------------------------------------ */
1690 NDIS_STATUS oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1693 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1695 #ifdef PLATFORM_OS_XP
1698 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1700 struct sta_info *psta = NULL;
1704 if (poid_par_priv->type_of_oid != SET_OID)
1705 return NDIS_STATUS_NOT_ACCEPTED;
1707 *poid_par_priv->bytes_needed = ETH_ALEN;
1708 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1709 return NDIS_STATUS_INVALID_LENGTH;
1711 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1714 _irqlevel_changed_(&oldirql, LOWER);
1716 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1718 if (psta == NULL) { /* the sta have been in sta_info_queue => do nothing */
1719 psta = rtw_alloc_stainfo(&Adapter->stapriv, macaddr);
1722 status = NDIS_STATUS_FAILURE;
1726 _irqlevel_changed_(&oldirql, RAISE);
1733 /* ------------------------------------------------------------------------------ */
1734 NDIS_STATUS oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
1737 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1739 #ifdef PLATFORM_OS_XP
1742 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1744 struct sta_info *psta = NULL;
1748 if (poid_par_priv->type_of_oid != SET_OID)
1749 return NDIS_STATUS_NOT_ACCEPTED;
1751 *poid_par_priv->bytes_needed = ETH_ALEN;
1752 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1753 return NDIS_STATUS_INVALID_LENGTH;
1755 macaddr = (UCHAR *) poid_par_priv->information_buf ;
1757 psta = rtw_get_stainfo(&Adapter->stapriv, macaddr);
1759 /* _enter_critical(&(Adapter->stapriv.sta_hash_lock), &irqL); */
1760 rtw_free_stainfo(Adapter, psta);
1761 /* _exit_critical(&(Adapter->stapriv.sta_hash_lock), &irqL); */
1769 /* ------------------------------------------------------------------------------ */
1771 static u32 mp_query_drv_var(_adapter *padapter, u8 offset, u32 var)
1773 #ifdef CONFIG_SDIO_HCI
1777 tmp_blk_num = rtw_read16(padapter, SDIO_RX0_RDYBLK_NUM);
1778 if (adapter_to_dvobj(padapter)->rxblknum != tmp_blk_num) {
1779 /* sd_recv_rxfifo(padapter); */
1784 if (offset <= 100) { /* For setting data rate and query data rate */
1785 if (offset == 100) { /* For query data rate */
1786 var = padapter->registrypriv.tx_rate;
1788 } else if (offset < 0x1d) { /* For setting data rate */
1789 padapter->registrypriv.tx_rate = offset;
1790 var = padapter->registrypriv.tx_rate;
1791 padapter->registrypriv.use_rate = _TRUE;
1792 } else { /* not use the data rate */
1793 padapter->registrypriv.use_rate = _FALSE;
1795 } else if (offset <= 110) { /* for setting debug level */
1796 if (offset == 110) { /* For query data rate */
1797 padapter->registrypriv.dbg_level = GlobalDebugLevel;
1798 var = padapter->registrypriv.dbg_level;
1799 } else if (offset < 110 && offset > 100) {
1800 padapter->registrypriv.dbg_level = GlobalDebugLevel = offset - 100;
1801 var = padapter->registrypriv.dbg_level;
1804 } else if (offset > 110 && offset < 116) {
1805 if (115 == offset) {
1809 adapter_to_dvobj(padapter)->tx_block_mode = 1;
1810 adapter_to_dvobj(padapter)->rx_block_mode = 1;
1813 adapter_to_dvobj(padapter)->tx_block_mode = 1;
1814 adapter_to_dvobj(padapter)->rx_block_mode = 0;
1817 adapter_to_dvobj(padapter)->tx_block_mode = 0;
1818 adapter_to_dvobj(padapter)->rx_block_mode = 1;
1821 adapter_to_dvobj(padapter)->tx_block_mode = 0;
1822 adapter_to_dvobj(padapter)->rx_block_mode = 0;
1831 } else if (offset >= 127) {
1835 chg_idx = offset - 0x80;
1836 tmp_dbg_comp = BIT(chg_idx);
1837 prnt_dbg_comp = padapter->registrypriv.dbg_component = GlobalDebugComponents;
1838 if (offset == 127) {
1839 /* prnt_dbg_comp=padapter->registrypriv.dbg_component= GlobalDebugComponents; */
1840 var = (u32)(padapter->registrypriv.dbg_component);
1841 prnt_dbg_comp = GlobalDebugComponents;
1842 prnt_dbg_comp = GlobalDebugComponents = padapter->registrypriv.dbg_component;
1845 prnt_dbg_comp = GlobalDebugComponents;
1846 prnt_dbg_comp = GlobalDebugComponents = padapter->registrypriv.dbg_component;
1848 if (GlobalDebugComponents & tmp_dbg_comp) {
1849 /* this bit is already set, now clear it */
1850 GlobalDebugComponents = GlobalDebugComponents & (~tmp_dbg_comp);
1852 /* this bit is not set, now set it. */
1853 GlobalDebugComponents = GlobalDebugComponents | tmp_dbg_comp;
1855 prnt_dbg_comp = GlobalDebugComponents;
1857 var = (u32)(GlobalDebugComponents);
1858 /* GlobalDebugComponents=padapter->registrypriv.dbg_component; */
1869 NDIS_STATUS oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
1872 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1874 #ifdef PLATFORM_OS_XP
1877 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1879 DR_VARIABLE_STRUCT *pdrv_var;
1882 if (poid_par_priv->type_of_oid != QUERY_OID)
1883 return NDIS_STATUS_NOT_ACCEPTED;
1885 *poid_par_priv->bytes_needed = sizeof(DR_VARIABLE_STRUCT);
1886 if (poid_par_priv->information_buf_len < *poid_par_priv->bytes_needed)
1887 return NDIS_STATUS_INVALID_LENGTH;
1890 pdrv_var = (struct _DR_VARIABLE_STRUCT_ *)poid_par_priv->information_buf;
1892 _irqlevel_changed_(&oldirql, LOWER);
1893 pdrv_var->variable = mp_query_drv_var(Adapter, pdrv_var->offset, pdrv_var->variable);
1894 _irqlevel_changed_(&oldirql, RAISE);
1896 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1904 /* ------------------------------------------------------------------------------ */
1905 NDIS_STATUS oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1908 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1910 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1913 if (poid_par_priv->information_buf_len < sizeof(UCHAR)) {
1914 status = NDIS_STATUS_INVALID_LENGTH;
1915 *poid_par_priv->bytes_needed = sizeof(UCHAR);
1919 if (poid_par_priv->type_of_oid == SET_OID) {
1920 Adapter->mppriv.rx_with_status = *(UCHAR *) poid_par_priv->information_buf;
1924 *(UCHAR *) poid_par_priv->information_buf = Adapter->mppriv.rx_with_status;
1925 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1928 /* *(u32 *)&Adapter->eeprompriv.mac_addr[0]=rtw_read32(Adapter, 0x10250050); */
1929 /* *(u16 *)&Adapter->eeprompriv.mac_addr[4]=rtw_read16(Adapter, 0x10250054); */
1933 return NDIS_STATUS_SUCCESS;
1935 /* ------------------------------------------------------------------------------ */
1936 NDIS_STATUS oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
1938 #ifdef PLATFORM_OS_XP
1941 PEFUSE_ACCESS_STRUCT pefuse;
1943 u16 addr = 0, cnts = 0, max_available_size = 0;
1944 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1945 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1948 if (poid_par_priv->type_of_oid != QUERY_OID)
1949 return NDIS_STATUS_NOT_ACCEPTED;
1951 if (poid_par_priv->information_buf_len < sizeof(EFUSE_ACCESS_STRUCT))
1952 return NDIS_STATUS_INVALID_LENGTH;
1954 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1955 addr = pefuse->start_addr;
1956 cnts = pefuse->cnts;
1957 data = pefuse->data;
1960 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
1962 if ((addr + cnts) > max_available_size) {
1963 return NDIS_STATUS_NOT_ACCEPTED;
1966 _irqlevel_changed_(&oldirql, LOWER);
1967 if (rtw_efuse_access(Adapter, _FALSE, addr, cnts, data) == _FAIL) {
1968 status = NDIS_STATUS_FAILURE;
1970 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1971 _irqlevel_changed_(&oldirql, RAISE);
1976 /* ------------------------------------------------------------------------------ */
1977 NDIS_STATUS oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
1979 #ifdef PLATFORM_OS_XP
1982 PEFUSE_ACCESS_STRUCT pefuse;
1984 u16 addr = 0, cnts = 0, max_available_size = 0;
1985 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
1986 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
1990 if (poid_par_priv->type_of_oid != SET_OID)
1991 return NDIS_STATUS_NOT_ACCEPTED;
1993 pefuse = (PEFUSE_ACCESS_STRUCT)poid_par_priv->information_buf;
1994 addr = pefuse->start_addr;
1995 cnts = pefuse->cnts;
1996 data = pefuse->data;
1999 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (PVOID)&max_available_size, _FALSE);
2001 if ((addr + cnts) > max_available_size) {
2002 return NDIS_STATUS_NOT_ACCEPTED;
2005 _irqlevel_changed_(&oldirql, LOWER);
2006 if (rtw_efuse_access(Adapter, _TRUE, addr, cnts, data) == _FAIL)
2007 status = NDIS_STATUS_FAILURE;
2008 _irqlevel_changed_(&oldirql, RAISE);
2013 /* ------------------------------------------------------------------------------ */
2014 NDIS_STATUS oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
2016 #ifdef PLATFORM_OS_XP
2019 PPGPKT_STRUCT ppgpkt;
2020 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2021 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2025 *poid_par_priv->bytes_rw = 0;
2027 if (poid_par_priv->information_buf_len < sizeof(PGPKT_STRUCT))
2028 return NDIS_STATUS_INVALID_LENGTH;
2030 ppgpkt = (PPGPKT_STRUCT)poid_par_priv->information_buf;
2032 _irqlevel_changed_(&oldirql, LOWER);
2034 if (poid_par_priv->type_of_oid == QUERY_OID) {
2036 Efuse_PowerSwitch(Adapter, _FALSE, _TRUE);
2037 if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, _FALSE) == _TRUE)
2038 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2040 status = NDIS_STATUS_FAILURE;
2041 Efuse_PowerSwitch(Adapter, _FALSE, _FALSE);
2044 Efuse_PowerSwitch(Adapter, _TRUE, _TRUE);
2045 if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, _FALSE) == _TRUE)
2046 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2048 status = NDIS_STATUS_FAILURE;
2049 Efuse_PowerSwitch(Adapter, _TRUE, _FALSE);
2052 _irqlevel_changed_(&oldirql, RAISE);
2058 /* ------------------------------------------------------------------------------ */
2059 NDIS_STATUS oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
2061 #ifdef PLATFORM_OS_XP
2066 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2067 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2070 if (poid_par_priv->type_of_oid != QUERY_OID)
2071 return NDIS_STATUS_NOT_ACCEPTED;
2073 if (poid_par_priv->information_buf_len < sizeof(u32))
2074 return NDIS_STATUS_INVALID_LENGTH;
2076 _irqlevel_changed_(&oldirql, LOWER);
2077 ret = efuse_GetCurrentSize(Adapter, &size);
2078 _irqlevel_changed_(&oldirql, RAISE);
2079 if (ret == _SUCCESS) {
2080 *(u32 *)poid_par_priv->information_buf = size;
2081 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2083 status = NDIS_STATUS_FAILURE;
2088 /* ------------------------------------------------------------------------------ */
2089 NDIS_STATUS oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
2091 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2092 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2095 if (poid_par_priv->type_of_oid != QUERY_OID)
2096 return NDIS_STATUS_NOT_ACCEPTED;
2098 if (poid_par_priv->information_buf_len < sizeof(u32))
2099 return NDIS_STATUS_INVALID_LENGTH;
2101 *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
2102 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2108 /* ------------------------------------------------------------------------------ */
2109 NDIS_STATUS oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
2115 if (poid_par_priv->type_of_oid == QUERY_OID)
2116 status = oid_rt_pro_read_efuse_hdl(poid_par_priv);
2118 status = oid_rt_pro_write_efuse_hdl(poid_par_priv);
2124 /* ------------------------------------------------------------------------------ */
2125 NDIS_STATUS oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
2127 #ifdef PLATFORM_OS_XP
2131 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2132 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2137 EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (PVOID)&mapLen, _FALSE);
2139 *poid_par_priv->bytes_rw = 0;
2141 if (poid_par_priv->information_buf_len < mapLen)
2142 return NDIS_STATUS_INVALID_LENGTH;
2144 data = (u8 *)poid_par_priv->information_buf;
2146 _irqlevel_changed_(&oldirql, LOWER);
2148 if (poid_par_priv->type_of_oid == QUERY_OID) {
2150 if (rtw_efuse_map_read(Adapter, 0, mapLen, data) == _SUCCESS)
2151 *poid_par_priv->bytes_rw = mapLen;
2153 status = NDIS_STATUS_FAILURE;
2158 if (rtw_efuse_map_write(Adapter, 0, mapLen, data) == _SUCCESS)
2159 *poid_par_priv->bytes_rw = mapLen;
2161 status = NDIS_STATUS_FAILURE;
2165 _irqlevel_changed_(&oldirql, RAISE);
2172 NDIS_STATUS oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
2174 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2176 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2178 #ifdef PLATFORM_OS_XP
2182 u32 crystal_cap = 0;
2185 if (poid_par_priv->type_of_oid != SET_OID)
2186 return NDIS_STATUS_NOT_ACCEPTED;
2188 if (poid_par_priv->information_buf_len < sizeof(u32))
2189 return NDIS_STATUS_INVALID_LENGTH;
2191 crystal_cap = *((u32 *)poid_par_priv->information_buf); /* 4 */
2192 if (crystal_cap > 0xf)
2193 return NDIS_STATUS_NOT_ACCEPTED;
2195 Adapter->mppriv.curr_crystalcap = crystal_cap;
2197 _irqlevel_changed_(&oldirql, LOWER);
2198 SetCrystalCap(Adapter);
2199 _irqlevel_changed_(&oldirql, RAISE);
2206 NDIS_STATUS oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
2208 #ifdef PLATFORM_OS_XP
2212 /* u32 rcr_val32; */
2213 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2214 /* PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context); */
2218 if (poid_par_priv->type_of_oid != SET_OID)
2219 return NDIS_STATUS_NOT_ACCEPTED;
2221 if (poid_par_priv->information_buf_len < sizeof(u8))
2222 return NDIS_STATUS_INVALID_LENGTH;
2224 rx_pkt_type = *((u8 *)poid_par_priv->information_buf); /* 4 */
2227 _irqlevel_changed_(&oldirql, LOWER);
2229 rcr_val8 = rtw_read8(Adapter, 0x10250048);/* RCR */
2230 rcr_val8 &= ~(RCR_AB | RCR_AM | RCR_APM | RCR_AAP);
2232 if (rx_pkt_type == RX_PKT_BROADCAST)
2233 rcr_val8 |= (RCR_AB | RCR_ACRC32);
2234 else if (rx_pkt_type == RX_PKT_DEST_ADDR)
2235 rcr_val8 |= (RCR_AAP | RCR_AM | RCR_ACRC32);
2236 else if (rx_pkt_type == RX_PKT_PHY_MATCH)
2237 rcr_val8 |= (RCR_APM | RCR_ACRC32);
2239 rcr_val8 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2240 rtw_write8(padapter, 0x10250048, rcr_val8);
2242 rcr_val32 = rtw_read32(padapter, RCR);/* RCR = 0x10250048 */
2243 rcr_val32 &= ~(RCR_CBSSID | RCR_AB | RCR_AM | RCR_APM | RCR_AAP);
2245 if (rx_pkt_type == RX_PKT_BROADCAST)
2246 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2247 else if (rx_pkt_type == RX_PKT_DEST_ADDR) {
2248 /* rcr_val32 |= (RCR_CBSSID|RCR_AAP|RCR_AM|RCR_ACRC32); */
2249 rcr_val32 |= (RCR_CBSSID | RCR_APM | RCR_ACRC32);
2250 } else if (rx_pkt_type == RX_PKT_PHY_MATCH) {
2251 rcr_val32 |= (RCR_APM | RCR_ACRC32);
2252 /* rcr_val32 |= (RCR_AAP|RCR_ACRC32); */
2254 rcr_val32 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2256 switch (rx_pkt_type) {
2257 case RX_PKT_BROADCAST:
2258 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2260 case RX_PKT_DEST_ADDR:
2261 rcr_val32 |= (RCR_AB | RCR_AM | RCR_APM | RCR_AAP | RCR_ACRC32);
2263 case RX_PKT_PHY_MATCH:
2264 rcr_val32 |= (RCR_APM | RCR_ACRC32);
2267 rcr_val32 &= ~(RCR_AAP | RCR_APM | RCR_AM | RCR_AB | RCR_ACRC32);
2271 if (rx_pkt_type == RX_PKT_DEST_ADDR)
2272 padapter->mppriv.check_mp_pkt = 1;
2274 padapter->mppriv.check_mp_pkt = 0;
2276 rtw_write32(padapter, RCR, rcr_val32);
2279 _irqlevel_changed_(&oldirql, RAISE);
2285 NDIS_STATUS oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
2288 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2290 #ifdef PLATFORM_OS_XP
2293 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2298 if (poid_par_priv->type_of_oid != SET_OID)
2299 return NDIS_STATUS_NOT_ACCEPTED;
2301 if (poid_par_priv->information_buf_len < sizeof(u32))
2302 return NDIS_STATUS_INVALID_LENGTH;
2304 txagc = *(u32 *)poid_par_priv->information_buf;
2306 _irqlevel_changed_(&oldirql, LOWER);
2307 SetTxAGCOffset(Adapter, txagc);
2308 _irqlevel_changed_(&oldirql, RAISE);
2317 NDIS_STATUS oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
2320 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2322 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2324 struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
2325 struct mp_priv *pmppriv = &Adapter->mppriv;
2329 if (poid_par_priv->type_of_oid != SET_OID)
2330 return NDIS_STATUS_NOT_ACCEPTED;
2332 if (poid_par_priv->information_buf_len < sizeof(u32))
2333 return NDIS_STATUS_INVALID_LENGTH;
2335 type = *(u32 *)poid_par_priv->information_buf;
2337 if (_LOOPBOOK_MODE_ == type) {
2338 pmppriv->mode = type;
2339 set_fwstate(pmlmepriv, WIFI_MP_LPBK_STATE); /* append txdesc */
2340 } else if (_2MAC_MODE_ == type) {
2341 pmppriv->mode = type;
2342 _clr_fwstate_(pmlmepriv, WIFI_MP_LPBK_STATE);
2344 status = NDIS_STATUS_NOT_ACCEPTED;
2353 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2355 PMP_XMIT_PARM pparm;
2357 struct mp_priv *pmp_priv;
2358 struct pkt_attrib *pattrib;
2361 pparm = (PMP_XMIT_PARM)poid_par_priv->information_buf;
2362 padapter = (PADAPTER)poid_par_priv->adapter_context;
2363 pmp_priv = &padapter->mppriv;
2365 if (poid_par_priv->type_of_oid == QUERY_OID) {
2366 pparm->enable = !pmp_priv->tx.stop;
2367 pparm->count = pmp_priv->tx.sended;
2369 if (pparm->enable == 0)
2370 pmp_priv->tx.stop = 1;
2371 else if (pmp_priv->tx.stop == 1) {
2372 pmp_priv->tx.stop = 0;
2373 pmp_priv->tx.count = pparm->count;
2374 pmp_priv->tx.payload = pparm->payload_type;
2375 pattrib = &pmp_priv->tx.attrib;
2376 pattrib->pktlen = pparm->length;
2377 _rtw_memcpy(pattrib->dst, pparm->da, ETH_ALEN);
2378 SetPacketTx(padapter);
2380 return NDIS_STATUS_FAILURE;
2383 return NDIS_STATUS_SUCCESS;
2387 unsigned int mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
2389 unsigned char *pframe, *pmp_pkt;
2390 struct ethhdr *pethhdr;
2391 struct pkt_attrib *pattrib;
2392 struct rtw_ieee80211_hdr *pwlanhdr;
2393 unsigned short *fctrl;
2394 int llc_sz, payload_len;
2395 struct mp_xmit_frame *pxframe = NULL;
2396 struct mp_xmit_packet *pmp_xmitpkt = (struct mp_xmit_packet *)param;
2397 u8 addr3[] = {0x02, 0xE0, 0x4C, 0x87, 0x66, 0x55};
2399 /* RTW_INFO("+mp_ioctl_xmit_packet_hdl\n"); */
2401 pxframe = alloc_mp_xmitframe(&padapter->mppriv);
2402 if (pxframe == NULL) {
2403 DEBUG_ERR(("Can't alloc pmpframe %d:%s\n", __LINE__, __FILE__));
2408 payload_len = pmp_xmitpkt->len - 14;
2409 pmp_pkt = (unsigned char *)pmp_xmitpkt->mem;
2410 pethhdr = (struct ethhdr *)pmp_pkt;
2412 /* RTW_INFO("payload_len=%d, pkt_mem=0x%x\n", pmp_xmitpkt->len, (void*)pmp_xmitpkt->mem); */
2414 /* RTW_INFO("pxframe=0x%x\n", (void*)pxframe); */
2415 /* RTW_INFO("pxframe->mem=0x%x\n", (void*)pxframe->mem); */
2417 /* update attribute */
2418 pattrib = &pxframe->attrib;
2419 memset((u8 *)(pattrib), 0, sizeof(struct pkt_attrib));
2420 pattrib->pktlen = pmp_xmitpkt->len;
2421 pattrib->ether_type = ntohs(pethhdr->h_proto);
2422 pattrib->hdrlen = 24;
2423 pattrib->nr_frags = 1;
2424 pattrib->priority = 0;
2425 #ifndef CONFIG_MP_LINUX
2426 if (IS_MCAST(pethhdr->h_dest))
2427 pattrib->mac_id = 4;
2429 pattrib->mac_id = 5;
2431 pattrib->mac_id = 5;
2435 memset(pxframe->mem, 0 , WLANHDR_OFFSET);
2436 pframe = (u8 *)(pxframe->mem) + WLANHDR_OFFSET;
2438 pwlanhdr = (struct rtw_ieee80211_hdr *)pframe;
2440 fctrl = &(pwlanhdr->frame_ctl);
2442 set_frame_sub_type(pframe, WIFI_DATA);
2444 _rtw_memcpy(pwlanhdr->addr1, pethhdr->h_dest, ETH_ALEN);
2445 _rtw_memcpy(pwlanhdr->addr2, pethhdr->h_source, ETH_ALEN);
2447 _rtw_memcpy(pwlanhdr->addr3, addr3, ETH_ALEN);
2449 pwlanhdr->seq_ctl = 0;
2450 pframe += pattrib->hdrlen;
2452 llc_sz = rtw_put_snap(pframe, pattrib->ether_type);
2455 _rtw_memcpy(pframe, (void *)(pmp_pkt + 14), payload_len);
2457 pattrib->last_txcmdsz = pattrib->hdrlen + llc_sz + payload_len;
2459 DEBUG_INFO(("issuing mp_xmit_frame, tx_len=%d, ether_type=0x%x\n", pattrib->last_txcmdsz, pattrib->ether_type));
2460 xmit_mp_frame(padapter, pxframe);
2465 /* ------------------------------------------------------------------------------ */
2466 NDIS_STATUS oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
2468 #ifdef PLATFORM_OS_XP
2472 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2473 #ifdef PLATFORM_LINUX
2474 #if defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
2475 PADAPTER padapter = (PADAPTER)(poid_par_priv->adapter_context);
2480 if (poid_par_priv->type_of_oid != SET_OID) {
2481 status = NDIS_STATUS_NOT_ACCEPTED;
2486 _irqlevel_changed_(&oldirql, LOWER);
2488 bpwrup = *(u8 *)poid_par_priv->information_buf;
2489 /* CALL the power_down function */
2490 #ifdef PLATFORM_LINUX
2491 #if defined(CONFIG_RTL8712) /* Linux MP insmod unknown symbol */
2492 dev_power_down(padapter, bpwrup);
2495 _irqlevel_changed_(&oldirql, RAISE);
2497 /* DEBUG_ERR(("\n <=== Query OID_RT_PRO_READ_REGISTER. */
2498 /* Add:0x%08x Width:%d Value:0x%08x\n",RegRWStruct->offset,RegRWStruct->width,RegRWStruct->value)); */
2503 /* ------------------------------------------------------------------------------ */
2504 NDIS_STATUS oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
2507 NDIS_STATUS status = NDIS_STATUS_SUCCESS;
2508 PADAPTER Adapter = (PADAPTER)(poid_par_priv->adapter_context);
2509 /* #ifdef PLATFORM_OS_XP */
2514 if (poid_par_priv->type_of_oid != QUERY_OID) {
2515 status = NDIS_STATUS_NOT_ACCEPTED;
2518 if (poid_par_priv->information_buf_len < sizeof(u32)) {
2519 status = NDIS_STATUS_INVALID_LENGTH;
2524 /* _irqlevel_changed_(&oldirql, LOWER); */
2525 *(int *)poid_par_priv->information_buf = Adapter->registrypriv.low_power ? POWER_LOW : POWER_NORMAL;
2526 *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
2527 /* _irqlevel_changed_(&oldirql, RAISE); */