linux/drivers/staging/r8188eu/core/rtw_mp_ioctl.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright(c) 2007 - 2011 Realtek Corporation. */
   3
   4#define _RTW_MP_IOCTL_C_
   5
   6#include "../include/osdep_service.h"
   7#include "../include/drv_types.h"
   8#include "../include/mlme_osdep.h"
   9#include "../include/rtw_mp_ioctl.h"
  10
  11/*   rtl8188eu_oid_rtl_seg_81_85   section start **************** */
  12int rtl8188eu_oid_rt_wireless_mode_hdl(struct oid_par_priv *poid_par_priv)
  13{
  14        int status = NDIS_STATUS_SUCCESS;
  15        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
  16
  17        if (poid_par_priv->information_buf_len < sizeof(u8))
  18                return NDIS_STATUS_INVALID_LENGTH;
  19
  20        if (poid_par_priv->type_of_oid == SET_OID) {
  21                Adapter->registrypriv.wireless_mode = *(u8 *)poid_par_priv->information_buf;
  22        } else if (poid_par_priv->type_of_oid == QUERY_OID) {
  23                *(u8 *)poid_par_priv->information_buf = Adapter->registrypriv.wireless_mode;
  24                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  25        } else {
  26                status = NDIS_STATUS_NOT_ACCEPTED;
  27        }
  28
  29        return status;
  30}
  31/*   rtl8188eu_oid_rtl_seg_81_87_80   section start **************** */
  32int rtl8188eu_oid_rt_pro_write_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
  33{
  34        struct bb_reg_param *pbbreg;
  35        u16 offset;
  36        u32 value;
  37        int status = NDIS_STATUS_SUCCESS;
  38        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
  39
  40        if (poid_par_priv->type_of_oid != SET_OID)
  41                return NDIS_STATUS_NOT_ACCEPTED;
  42
  43        if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
  44                return NDIS_STATUS_INVALID_LENGTH;
  45
  46        pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
  47
  48        offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
  49        if (offset < BB_REG_BASE_ADDR)
  50                offset |= BB_REG_BASE_ADDR;
  51
  52        value = pbbreg->value;
  53
  54        _irqlevel_changed_(&oldirql, LOWER);
  55        write_bbreg(Adapter, offset, 0xFFFFFFFF, value);
  56        _irqlevel_changed_(&oldirql, RAISE);
  57
  58        return status;
  59}
  60/*  */
  61int rtl8188eu_oid_rt_pro_read_bb_reg_hdl(struct oid_par_priv *poid_par_priv)
  62{
  63        struct bb_reg_param *pbbreg;
  64        u16 offset;
  65        u32 value;
  66        int status = NDIS_STATUS_SUCCESS;
  67        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
  68
  69        if (poid_par_priv->type_of_oid != QUERY_OID)
  70                return NDIS_STATUS_NOT_ACCEPTED;
  71
  72        if (poid_par_priv->information_buf_len < sizeof(struct bb_reg_param))
  73                return NDIS_STATUS_INVALID_LENGTH;
  74
  75        pbbreg = (struct bb_reg_param *)(poid_par_priv->information_buf);
  76
  77        offset = (u16)(pbbreg->offset) & 0xFFF; /* 0ffset :0x800~0xfff */
  78        if (offset < BB_REG_BASE_ADDR)
  79                offset |= BB_REG_BASE_ADDR;
  80
  81        _irqlevel_changed_(&oldirql, LOWER);
  82        value = read_bbreg(Adapter, offset, 0xFFFFFFFF);
  83        _irqlevel_changed_(&oldirql, RAISE);
  84
  85        pbbreg->value = value;
  86        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
  87
  88        return status;
  89}
  90/*  */
  91int rtl8188eu_oid_rt_pro_write_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
  92{
  93        struct rf_reg_param *pbbreg;
  94        u8 path;
  95        u8 offset;
  96        u32 value;
  97        int status = NDIS_STATUS_SUCCESS;
  98        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
  99
 100        if (poid_par_priv->type_of_oid != SET_OID)
 101                return NDIS_STATUS_NOT_ACCEPTED;
 102
 103        if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
 104                return NDIS_STATUS_INVALID_LENGTH;
 105
 106        pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
 107
 108        if (pbbreg->path >= RF_PATH_MAX)
 109                return NDIS_STATUS_NOT_ACCEPTED;
 110        if (pbbreg->offset > 0xFF)
 111                return NDIS_STATUS_NOT_ACCEPTED;
 112        if (pbbreg->value > 0xFFFFF)
 113                return NDIS_STATUS_NOT_ACCEPTED;
 114
 115        path = (u8)pbbreg->path;
 116        offset = (u8)pbbreg->offset;
 117        value = pbbreg->value;
 118
 119        _irqlevel_changed_(&oldirql, LOWER);
 120        write_rfreg(Adapter, path, offset, value);
 121        _irqlevel_changed_(&oldirql, RAISE);
 122
 123        return status;
 124}
 125/*  */
 126int rtl8188eu_oid_rt_pro_read_rf_reg_hdl(struct oid_par_priv *poid_par_priv)
 127{
 128        struct rf_reg_param *pbbreg;
 129        u8 path;
 130        u8 offset;
 131        u32 value;
 132        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 133        int status = NDIS_STATUS_SUCCESS;
 134
 135        if (poid_par_priv->type_of_oid != QUERY_OID)
 136                return NDIS_STATUS_NOT_ACCEPTED;
 137
 138        if (poid_par_priv->information_buf_len < sizeof(struct rf_reg_param))
 139                return NDIS_STATUS_INVALID_LENGTH;
 140
 141        pbbreg = (struct rf_reg_param *)(poid_par_priv->information_buf);
 142
 143        if (pbbreg->path >= RF_PATH_MAX)
 144                return NDIS_STATUS_NOT_ACCEPTED;
 145        if (pbbreg->offset > 0xFF)
 146                return NDIS_STATUS_NOT_ACCEPTED;
 147
 148        path = (u8)pbbreg->path;
 149        offset = (u8)pbbreg->offset;
 150
 151        _irqlevel_changed_(&oldirql, LOWER);
 152        value = read_rfreg(Adapter, path, offset);
 153        _irqlevel_changed_(&oldirql, RAISE);
 154
 155        pbbreg->value = value;
 156
 157        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 158
 159        return status;
 160}
 161/*   rtl8188eu_oid_rtl_seg_81_87_00   section end**************** */
 162/*  */
 163
 164/*   rtl8188eu_oid_rtl_seg_81_80_00   section start **************** */
 165/*  */
 166int rtl8188eu_oid_rt_pro_set_data_rate_hdl(struct oid_par_priv *poid_par_priv)
 167{
 168        u32             ratevalue;/* 4 */
 169        int status = NDIS_STATUS_SUCCESS;
 170        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 171
 172        if (poid_par_priv->type_of_oid != SET_OID)
 173                return NDIS_STATUS_NOT_ACCEPTED;
 174
 175        if (poid_par_priv->information_buf_len != sizeof(u32))
 176                return NDIS_STATUS_INVALID_LENGTH;
 177
 178        ratevalue = *((u32 *)poid_par_priv->information_buf);/* 4 */
 179        if (ratevalue >= MPT_RATE_LAST)
 180                return NDIS_STATUS_INVALID_DATA;
 181
 182        Adapter->mppriv.rateidx = ratevalue;
 183
 184        _irqlevel_changed_(&oldirql, LOWER);
 185        SetDataRate(Adapter);
 186        _irqlevel_changed_(&oldirql, RAISE);
 187
 188        return status;
 189}
 190/*  */
 191int rtl8188eu_oid_rt_pro_start_test_hdl(struct oid_par_priv *poid_par_priv)
 192{
 193        u32             mode;
 194        int status = NDIS_STATUS_SUCCESS;
 195        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 196
 197        if (Adapter->registrypriv.mp_mode == 0)
 198                return NDIS_STATUS_NOT_ACCEPTED;
 199
 200        if (poid_par_priv->type_of_oid != SET_OID)
 201                return NDIS_STATUS_NOT_ACCEPTED;
 202
 203        _irqlevel_changed_(&oldirql, LOWER);
 204
 205        /* IQCalibrateBcut(Adapter); */
 206
 207        mode = *((u32 *)poid_par_priv->information_buf);
 208        Adapter->mppriv.mode = mode;/*  1 for loopback */
 209
 210        if (mp_start_test(Adapter) == _FAIL) {
 211                status = NDIS_STATUS_NOT_ACCEPTED;
 212                goto exit;
 213        }
 214
 215exit:
 216        _irqlevel_changed_(&oldirql, RAISE);
 217
 218        return status;
 219}
 220/*  */
 221int rtl8188eu_oid_rt_pro_stop_test_hdl(struct oid_par_priv *poid_par_priv)
 222{
 223        int status = NDIS_STATUS_SUCCESS;
 224        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 225
 226        if (poid_par_priv->type_of_oid != SET_OID)
 227                return NDIS_STATUS_NOT_ACCEPTED;
 228
 229        _irqlevel_changed_(&oldirql, LOWER);
 230        mp_stop_test(Adapter);
 231        _irqlevel_changed_(&oldirql, RAISE);
 232
 233        return status;
 234}
 235/*  */
 236int rtl8188eu_oid_rt_pro_set_channel_direct_call_hdl(struct oid_par_priv *poid_par_priv)
 237{
 238        u32             Channel;
 239        int status = NDIS_STATUS_SUCCESS;
 240        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 241
 242        if (poid_par_priv->information_buf_len != sizeof(u32))
 243                return NDIS_STATUS_INVALID_LENGTH;
 244
 245        if (poid_par_priv->type_of_oid == QUERY_OID) {
 246                *((u32 *)poid_par_priv->information_buf) = Adapter->mppriv.channel;
 247                return NDIS_STATUS_SUCCESS;
 248        }
 249
 250        if (poid_par_priv->type_of_oid != SET_OID)
 251                return NDIS_STATUS_NOT_ACCEPTED;
 252
 253        Channel = *((u32 *)poid_par_priv->information_buf);
 254        if (Channel > 14)
 255                return NDIS_STATUS_NOT_ACCEPTED;
 256        Adapter->mppriv.channel = Channel;
 257
 258        _irqlevel_changed_(&oldirql, LOWER);
 259        SetChannel(Adapter);
 260        _irqlevel_changed_(&oldirql, RAISE);
 261
 262        return status;
 263}
 264/*  */
 265int rtl8188eu_oid_rt_set_bandwidth_hdl(struct oid_par_priv *poid_par_priv)
 266{
 267        u16             bandwidth;
 268        u16             channel_offset;
 269        int status = NDIS_STATUS_SUCCESS;
 270        struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context);
 271
 272        if (poid_par_priv->type_of_oid != SET_OID)
 273                return NDIS_STATUS_NOT_ACCEPTED;
 274
 275        if (poid_par_priv->information_buf_len < sizeof(u32))
 276                return NDIS_STATUS_INVALID_LENGTH;
 277
 278        bandwidth = *((u32 *)poid_par_priv->information_buf);/* 4 */
 279        channel_offset = HAL_PRIME_CHNL_OFFSET_DONT_CARE;
 280
 281        if (bandwidth != HT_CHANNEL_WIDTH_40)
 282                bandwidth = HT_CHANNEL_WIDTH_20;
 283        padapter->mppriv.bandwidth = (u8)bandwidth;
 284        padapter->mppriv.prime_channel_offset = (u8)channel_offset;
 285
 286        _irqlevel_changed_(&oldirql, LOWER);
 287        SetBandwidth(padapter);
 288        _irqlevel_changed_(&oldirql, RAISE);
 289
 290        return status;
 291}
 292/*  */
 293int rtl8188eu_oid_rt_pro_set_antenna_bb_hdl(struct oid_par_priv *poid_par_priv)
 294{
 295        u32             antenna;
 296        int status = NDIS_STATUS_SUCCESS;
 297        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 298
 299        if (poid_par_priv->information_buf_len != sizeof(u32))
 300                return NDIS_STATUS_INVALID_LENGTH;
 301
 302        if (poid_par_priv->type_of_oid == SET_OID) {
 303                antenna = *(u32 *)poid_par_priv->information_buf;
 304
 305                Adapter->mppriv.antenna_tx = (u16)((antenna & 0xFFFF0000) >> 16);
 306                Adapter->mppriv.antenna_rx = (u16)(antenna & 0x0000FFFF);
 307
 308                _irqlevel_changed_(&oldirql, LOWER);
 309                SetAntenna(Adapter);
 310                _irqlevel_changed_(&oldirql, RAISE);
 311        } else {
 312                antenna = (Adapter->mppriv.antenna_tx << 16) | Adapter->mppriv.antenna_rx;
 313                *(u32 *)poid_par_priv->information_buf = antenna;
 314        }
 315
 316        return status;
 317}
 318
 319int rtl8188eu_oid_rt_pro_set_tx_power_control_hdl(struct oid_par_priv *poid_par_priv)
 320{
 321        u32             tx_pwr_idx;
 322        int status = NDIS_STATUS_SUCCESS;
 323        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 324
 325        if (poid_par_priv->type_of_oid != SET_OID)
 326                return NDIS_STATUS_NOT_ACCEPTED;
 327
 328        if (poid_par_priv->information_buf_len != sizeof(u32))
 329                return NDIS_STATUS_INVALID_LENGTH;
 330
 331        tx_pwr_idx = *((u32 *)poid_par_priv->information_buf);
 332        if (tx_pwr_idx > MAX_TX_PWR_INDEX_N_MODE)
 333                return NDIS_STATUS_NOT_ACCEPTED;
 334
 335        Adapter->mppriv.txpoweridx = (u8)tx_pwr_idx;
 336
 337        _irqlevel_changed_(&oldirql, LOWER);
 338        SetTxPower(Adapter);
 339        _irqlevel_changed_(&oldirql, RAISE);
 340
 341        return status;
 342}
 343
 344/*  */
 345/*   rtl8188eu_oid_rtl_seg_81_80_20   section start **************** */
 346/*  */
 347int rtl8188eu_oid_rt_pro_query_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
 348{
 349        int status = NDIS_STATUS_SUCCESS;
 350        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 351
 352        if (poid_par_priv->type_of_oid != QUERY_OID) {
 353                status = NDIS_STATUS_NOT_ACCEPTED;
 354                return status;
 355        }
 356
 357        if (poid_par_priv->information_buf_len == sizeof(u32)) {
 358                *(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.tx_pktcount;
 359                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 360        } else {
 361                status = NDIS_STATUS_INVALID_LENGTH;
 362        }
 363
 364        return status;
 365}
 366/*  */
 367int rtl8188eu_oid_rt_pro_query_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
 368{
 369        int status = NDIS_STATUS_SUCCESS;
 370        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 371
 372        if (poid_par_priv->type_of_oid != QUERY_OID) {
 373                status = NDIS_STATUS_NOT_ACCEPTED;
 374                return status;
 375        }
 376        if (poid_par_priv->information_buf_len == sizeof(u32)) {
 377                *(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.rx_pktcount;
 378                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 379        } else {
 380                status = NDIS_STATUS_INVALID_LENGTH;
 381        }
 382
 383        return status;
 384}
 385/*  */
 386int rtl8188eu_oid_rt_pro_query_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
 387{
 388        int status = NDIS_STATUS_SUCCESS;
 389        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 390
 391        if (poid_par_priv->type_of_oid != QUERY_OID) {
 392                status = NDIS_STATUS_NOT_ACCEPTED;
 393                return status;
 394        }
 395        if (poid_par_priv->information_buf_len == sizeof(u32)) {
 396                *(u32 *)poid_par_priv->information_buf =  Adapter->mppriv.rx_crcerrpktcount;
 397                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 398        } else {
 399                status = NDIS_STATUS_INVALID_LENGTH;
 400        }
 401
 402        return status;
 403}
 404/*  */
 405
 406int rtl8188eu_oid_rt_pro_reset_tx_packet_sent_hdl(struct oid_par_priv *poid_par_priv)
 407{
 408        int status = NDIS_STATUS_SUCCESS;
 409        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 410
 411        if (poid_par_priv->type_of_oid != SET_OID) {
 412                status = NDIS_STATUS_NOT_ACCEPTED;
 413                return status;
 414        }
 415
 416        Adapter->mppriv.tx_pktcount = 0;
 417
 418        return status;
 419}
 420/*  */
 421int rtl8188eu_oid_rt_pro_reset_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
 422{
 423        int status = NDIS_STATUS_SUCCESS;
 424        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 425
 426        if (poid_par_priv->type_of_oid != SET_OID) {
 427                status = NDIS_STATUS_NOT_ACCEPTED;
 428                return status;
 429        }
 430
 431        if (poid_par_priv->information_buf_len == sizeof(u32)) {
 432                Adapter->mppriv.rx_pktcount = 0;
 433                Adapter->mppriv.rx_crcerrpktcount = 0;
 434        } else {
 435                status = NDIS_STATUS_INVALID_LENGTH;
 436        }
 437
 438        return status;
 439}
 440/*  */
 441int rtl8188eu_oid_rt_reset_phy_rx_packet_count_hdl(struct oid_par_priv *poid_par_priv)
 442{
 443        int status = NDIS_STATUS_SUCCESS;
 444        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 445
 446        if (poid_par_priv->type_of_oid != SET_OID) {
 447                status = NDIS_STATUS_NOT_ACCEPTED;
 448                return status;
 449        }
 450
 451        _irqlevel_changed_(&oldirql, LOWER);
 452        ResetPhyRxPktCount(Adapter);
 453        _irqlevel_changed_(&oldirql, RAISE);
 454
 455        return status;
 456}
 457/*  */
 458int rtl8188eu_oid_rt_get_phy_rx_packet_received_hdl(struct oid_par_priv *poid_par_priv)
 459{
 460        int status = NDIS_STATUS_SUCCESS;
 461        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 462
 463        if (poid_par_priv->type_of_oid != QUERY_OID)
 464                return NDIS_STATUS_NOT_ACCEPTED;
 465
 466        if (poid_par_priv->information_buf_len != sizeof(u32))
 467                return NDIS_STATUS_INVALID_LENGTH;
 468
 469        _irqlevel_changed_(&oldirql, LOWER);
 470        *(u32 *)poid_par_priv->information_buf = GetPhyRxPktReceived(Adapter);
 471        _irqlevel_changed_(&oldirql, RAISE);
 472
 473        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 474
 475        return status;
 476}
 477/*  */
 478int rtl8188eu_oid_rt_get_phy_rx_packet_crc32_error_hdl(struct oid_par_priv *poid_par_priv)
 479{
 480        int status = NDIS_STATUS_SUCCESS;
 481        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 482
 483        if (poid_par_priv->type_of_oid != QUERY_OID)
 484                return NDIS_STATUS_NOT_ACCEPTED;
 485
 486        if (poid_par_priv->information_buf_len != sizeof(u32))
 487                return NDIS_STATUS_INVALID_LENGTH;
 488
 489        _irqlevel_changed_(&oldirql, LOWER);
 490        *(u32 *)poid_par_priv->information_buf = GetPhyRxPktCRC32Error(Adapter);
 491        _irqlevel_changed_(&oldirql, RAISE);
 492
 493        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 494
 495        return status;
 496}
 497/*   rtl8188eu_oid_rtl_seg_81_80_20   section end **************** */
 498int rtl8188eu_oid_rt_pro_set_continuous_tx_hdl(struct oid_par_priv *poid_par_priv)
 499{
 500        u32             bStartTest;
 501        int status = NDIS_STATUS_SUCCESS;
 502        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 503
 504        if (poid_par_priv->type_of_oid != SET_OID)
 505                return NDIS_STATUS_NOT_ACCEPTED;
 506
 507        bStartTest = *((u32 *)poid_par_priv->information_buf);
 508
 509        _irqlevel_changed_(&oldirql, LOWER);
 510        SetContinuousTx(Adapter, (u8)bStartTest);
 511        if (bStartTest) {
 512                struct mp_priv *pmp_priv = &Adapter->mppriv;
 513                if (pmp_priv->tx.stop == 0) {
 514                        pmp_priv->tx.stop = 1;
 515                        DBG_88E("%s: pkt tx is running...\n", __func__);
 516                        msleep(5);
 517                }
 518                pmp_priv->tx.stop = 0;
 519                pmp_priv->tx.count = 1;
 520                SetPacketTx(Adapter);
 521        }
 522        _irqlevel_changed_(&oldirql, RAISE);
 523
 524        return status;
 525}
 526
 527int rtl8188eu_oid_rt_pro_set_single_carrier_tx_hdl(struct oid_par_priv *poid_par_priv)
 528{
 529        u32             bStartTest;
 530        int status = NDIS_STATUS_SUCCESS;
 531        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 532
 533        if (poid_par_priv->type_of_oid != SET_OID)
 534                return NDIS_STATUS_NOT_ACCEPTED;
 535
 536        bStartTest = *((u32 *)poid_par_priv->information_buf);
 537
 538        _irqlevel_changed_(&oldirql, LOWER);
 539        SetSingleCarrierTx(Adapter, (u8)bStartTest);
 540        if (bStartTest) {
 541                struct mp_priv *pmp_priv = &Adapter->mppriv;
 542                if (pmp_priv->tx.stop == 0) {
 543                        pmp_priv->tx.stop = 1;
 544                        DBG_88E("%s: pkt tx is running...\n", __func__);
 545                        msleep(5);
 546                }
 547                pmp_priv->tx.stop = 0;
 548                pmp_priv->tx.count = 1;
 549                SetPacketTx(Adapter);
 550        }
 551        _irqlevel_changed_(&oldirql, RAISE);
 552
 553        return status;
 554}
 555
 556int rtl8188eu_oid_rt_pro_set_carrier_suppression_tx_hdl(struct oid_par_priv *poid_par_priv)
 557{
 558        u32             bStartTest;
 559        int status = NDIS_STATUS_SUCCESS;
 560        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 561
 562        if (poid_par_priv->type_of_oid != SET_OID)
 563                return NDIS_STATUS_NOT_ACCEPTED;
 564
 565        bStartTest = *((u32 *)poid_par_priv->information_buf);
 566
 567        _irqlevel_changed_(&oldirql, LOWER);
 568        SetCarrierSuppressionTx(Adapter, (u8)bStartTest);
 569        if (bStartTest) {
 570                struct mp_priv *pmp_priv = &Adapter->mppriv;
 571                if (pmp_priv->tx.stop == 0) {
 572                        pmp_priv->tx.stop = 1;
 573                        DBG_88E("%s: pkt tx is running...\n", __func__);
 574                        msleep(5);
 575                }
 576                pmp_priv->tx.stop = 0;
 577                pmp_priv->tx.count = 1;
 578                SetPacketTx(Adapter);
 579        }
 580        _irqlevel_changed_(&oldirql, RAISE);
 581
 582        return status;
 583}
 584
 585int rtl8188eu_oid_rt_pro_set_single_tone_tx_hdl(struct oid_par_priv *poid_par_priv)
 586{
 587        u32             bStartTest;
 588        int status = NDIS_STATUS_SUCCESS;
 589        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 590
 591        if (poid_par_priv->type_of_oid != SET_OID)
 592                return NDIS_STATUS_NOT_ACCEPTED;
 593
 594        bStartTest = *((u32 *)poid_par_priv->information_buf);
 595
 596        _irqlevel_changed_(&oldirql, LOWER);
 597        SetSingleToneTx(Adapter, (u8)bStartTest);
 598        _irqlevel_changed_(&oldirql, RAISE);
 599
 600        return status;
 601}
 602
 603int rtl8188eu_oid_rt_pro_set_modulation_hdl(struct oid_par_priv *poid_par_priv)
 604{
 605        return 0;
 606}
 607
 608int rtl8188eu_oid_rt_pro_trigger_gpio_hdl(struct oid_par_priv *poid_par_priv)
 609{
 610        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 611        int status = NDIS_STATUS_SUCCESS;
 612
 613        if (poid_par_priv->type_of_oid != SET_OID)
 614                return NDIS_STATUS_NOT_ACCEPTED;
 615
 616        _irqlevel_changed_(&oldirql, LOWER);
 617        rtw_hal_set_hwreg(Adapter, HW_VAR_TRIGGER_GPIO_0, NULL);
 618        _irqlevel_changed_(&oldirql, RAISE);
 619
 620        return status;
 621}
 622/*   rtl8188eu_oid_rtl_seg_81_80_00   section end **************** */
 623/*  */
 624int rtl8188eu_oid_rt_pro8711_join_bss_hdl(struct oid_par_priv *poid_par_priv)
 625{
 626        return 0;
 627}
 628/*  */
 629int rtl8188eu_oid_rt_pro_read_register_hdl(struct oid_par_priv *poid_par_priv)
 630{
 631        struct mp_rw_reg *RegRWStruct;
 632        u32             offset, width;
 633        int status = NDIS_STATUS_SUCCESS;
 634        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 635
 636        if (poid_par_priv->type_of_oid != QUERY_OID)
 637                return NDIS_STATUS_NOT_ACCEPTED;
 638
 639        RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf;
 640        offset = RegRWStruct->offset;
 641        width = RegRWStruct->width;
 642
 643        if (offset > 0xFFF)
 644                return NDIS_STATUS_NOT_ACCEPTED;
 645
 646        _irqlevel_changed_(&oldirql, LOWER);
 647
 648        switch (width) {
 649        case 1:
 650                RegRWStruct->value = rtw_read8(Adapter, offset);
 651                break;
 652        case 2:
 653                RegRWStruct->value = rtw_read16(Adapter, offset);
 654                break;
 655        default:
 656                width = 4;
 657                RegRWStruct->value = rtw_read32(Adapter, offset);
 658                break;
 659        }
 660
 661        _irqlevel_changed_(&oldirql, RAISE);
 662
 663        *poid_par_priv->bytes_rw = width;
 664
 665        return status;
 666}
 667/*  */
 668int rtl8188eu_oid_rt_pro_write_register_hdl(struct oid_par_priv *poid_par_priv)
 669{
 670        struct mp_rw_reg *RegRWStruct;
 671        u32 offset, value;
 672        int status = NDIS_STATUS_SUCCESS;
 673        struct adapter *padapter = (struct adapter *)(poid_par_priv->adapter_context);
 674
 675        if (poid_par_priv->type_of_oid != SET_OID)
 676                return NDIS_STATUS_NOT_ACCEPTED;
 677
 678        RegRWStruct = (struct mp_rw_reg *)poid_par_priv->information_buf;
 679        offset = RegRWStruct->offset;
 680        value = RegRWStruct->value;
 681
 682        if (offset > 0xFFF)
 683                return NDIS_STATUS_NOT_ACCEPTED;
 684
 685        _irqlevel_changed_(&oldirql, LOWER);
 686
 687        switch (RegRWStruct->width) {
 688        case 1:
 689                if (value > 0xFF) {
 690                        status = NDIS_STATUS_NOT_ACCEPTED;
 691                        break;
 692                }
 693                rtw_write8(padapter, offset, (u8)value);
 694                break;
 695        case 2:
 696                if (value > 0xFFFF) {
 697                        status = NDIS_STATUS_NOT_ACCEPTED;
 698                        break;
 699                }
 700                rtw_write16(padapter, offset, (u16)value);
 701                break;
 702        case 4:
 703                rtw_write32(padapter, offset, value);
 704                break;
 705        default:
 706                status = NDIS_STATUS_NOT_ACCEPTED;
 707                break;
 708        }
 709
 710        _irqlevel_changed_(&oldirql, RAISE);
 711
 712        return status;
 713}
 714/*  */
 715int rtl8188eu_oid_rt_pro_burst_read_register_hdl(struct oid_par_priv *poid_par_priv)
 716{
 717        return 0;
 718}
 719/*  */
 720int rtl8188eu_oid_rt_pro_burst_write_register_hdl(struct oid_par_priv *poid_par_priv)
 721{
 722        return 0;
 723}
 724/*  */
 725int rtl8188eu_oid_rt_pro_write_txcmd_hdl(struct oid_par_priv *poid_par_priv)
 726{
 727        return 0;
 728}
 729
 730/*  */
 731int rtl8188eu_oid_rt_pro_read16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
 732{
 733        return 0;
 734}
 735
 736/*  */
 737int rtl8188eu_oid_rt_pro_write16_eeprom_hdl(struct oid_par_priv *poid_par_priv)
 738{
 739        return 0;
 740}
 741/*  */
 742int rtl8188eu_oid_rt_pro8711_wi_poll_hdl(struct oid_par_priv *poid_par_priv)
 743{
 744        return 0;
 745}
 746/*  */
 747int rtl8188eu_oid_rt_pro8711_pkt_loss_hdl(struct oid_par_priv *poid_par_priv)
 748{
 749        return 0;
 750}
 751/*  */
 752int rtl8188eu_oid_rt_rd_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
 753{
 754        return 0;
 755}
 756/*  */
 757int rtl8188eu_oid_rt_wr_attrib_mem_hdl(struct oid_par_priv *poid_par_priv)
 758{
 759        return 0;
 760}
 761/*  */
 762int  rtl8188eu_oid_rt_pro_set_rf_intfs_hdl(struct oid_par_priv *poid_par_priv)
 763{
 764        return 0;
 765}
 766/*  */
 767int rtl8188eu_oid_rt_poll_rx_status_hdl(struct oid_par_priv *poid_par_priv)
 768{
 769        return 0;
 770}
 771/*  */
 772int rtl8188eu_oid_rt_pro_cfg_debug_message_hdl(struct oid_par_priv *poid_par_priv)
 773{
 774        return 0;
 775}
 776/*  */
 777int rtl8188eu_oid_rt_pro_set_data_rate_ex_hdl(struct oid_par_priv *poid_par_priv)
 778{
 779        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 780
 781        int status = NDIS_STATUS_SUCCESS;
 782
 783        if (poid_par_priv->type_of_oid != SET_OID)
 784                return NDIS_STATUS_NOT_ACCEPTED;
 785
 786        _irqlevel_changed_(&oldirql, LOWER);
 787
 788        if (rtw_setdatarate_cmd(Adapter, poid_par_priv->information_buf) != _SUCCESS)
 789                status = NDIS_STATUS_NOT_ACCEPTED;
 790
 791        _irqlevel_changed_(&oldirql, RAISE);
 792
 793        return status;
 794}
 795/*  */
 796int rtl8188eu_oid_rt_get_thermal_meter_hdl(struct oid_par_priv *poid_par_priv)
 797{
 798        int status = NDIS_STATUS_SUCCESS;
 799        u8 thermal = 0;
 800        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 801
 802        if (poid_par_priv->type_of_oid != QUERY_OID)
 803                return NDIS_STATUS_NOT_ACCEPTED;
 804
 805        if (poid_par_priv->information_buf_len < sizeof(u32))
 806                return NDIS_STATUS_INVALID_LENGTH;
 807
 808        _irqlevel_changed_(&oldirql, LOWER);
 809        GetThermalMeter(Adapter, &thermal);
 810        _irqlevel_changed_(&oldirql, RAISE);
 811
 812        *(u32 *)poid_par_priv->information_buf = (u32)thermal;
 813        *poid_par_priv->bytes_rw = sizeof(u32);
 814
 815        return status;
 816}
 817/*  */
 818int rtl8188eu_oid_rt_pro_read_tssi_hdl(struct oid_par_priv *poid_par_priv)
 819{
 820        return 0;
 821}
 822/*  */
 823int rtl8188eu_oid_rt_pro_set_power_tracking_hdl(struct oid_par_priv *poid_par_priv)
 824{
 825        int status = NDIS_STATUS_SUCCESS;
 826        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 827
 828        if (poid_par_priv->information_buf_len < sizeof(u8))
 829                return NDIS_STATUS_INVALID_LENGTH;
 830
 831        _irqlevel_changed_(&oldirql, LOWER);
 832        if (poid_par_priv->type_of_oid == SET_OID) {
 833                u8 enable;
 834
 835                enable = *(u8 *)poid_par_priv->information_buf;
 836
 837                SetPowerTracking(Adapter, enable);
 838        } else {
 839                GetPowerTracking(Adapter, (u8 *)poid_par_priv->information_buf);
 840        }
 841        _irqlevel_changed_(&oldirql, RAISE);
 842
 843        return status;
 844}
 845/*  */
 846int rtl8188eu_oid_rt_pro_set_basic_rate_hdl(struct oid_par_priv *poid_par_priv)
 847{
 848        return 0;
 849}
 850/*  */
 851int rtl8188eu_oid_rt_pro_qry_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
 852{
 853        return 0;
 854}
 855/*  */
 856int rtl8188eu_oid_rt_pro_set_pwrstate_hdl(struct oid_par_priv *poid_par_priv)
 857{
 858        return 0;
 859}
 860/*  */
 861int rtl8188eu_oid_rt_pro_h2c_set_rate_table_hdl(struct oid_par_priv *poid_par_priv)
 862{
 863        return 0;
 864}
 865/*  */
 866int rtl8188eu_oid_rt_pro_h2c_get_rate_table_hdl(struct oid_par_priv *poid_par_priv)
 867{
 868        return 0;
 869}
 870
 871/*   rtl8188eu_oid_rtl_seg_87_12_00   section start **************** */
 872int rtl8188eu_oid_rt_pro_encryption_ctrl_hdl(struct oid_par_priv *poid_par_priv)
 873{
 874        return 0;
 875}
 876
 877int rtl8188eu_oid_rt_pro_add_sta_info_hdl(struct oid_par_priv *poid_par_priv)
 878{
 879        return 0;
 880}
 881
 882int rtl8188eu_oid_rt_pro_dele_sta_info_hdl(struct oid_par_priv *poid_par_priv)
 883{
 884        return 0;
 885}
 886
 887int rtl8188eu_oid_rt_pro_query_dr_variable_hdl(struct oid_par_priv *poid_par_priv)
 888{
 889        return 0;
 890}
 891
 892int rtl8188eu_oid_rt_pro_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
 893{
 894        return NDIS_STATUS_SUCCESS;
 895}
 896/*  */
 897int rtl8188eu_oid_rt_pro_read_efuse_hdl(struct oid_par_priv *poid_par_priv)
 898{
 899        struct efuse_access_struct *pefuse;
 900        u8 *data;
 901        u16 addr = 0, cnts = 0, max_available_size = 0;
 902        int status = NDIS_STATUS_SUCCESS;
 903        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 904
 905        if (poid_par_priv->type_of_oid != QUERY_OID)
 906                return NDIS_STATUS_NOT_ACCEPTED;
 907
 908        if (poid_par_priv->information_buf_len < sizeof(struct efuse_access_struct))
 909                return NDIS_STATUS_INVALID_LENGTH;
 910
 911        pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf;
 912        addr = pefuse->start_addr;
 913        cnts = pefuse->cnts;
 914        data = pefuse->data;
 915
 916        EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
 917
 918        if ((addr + cnts) > max_available_size)
 919                return NDIS_STATUS_NOT_ACCEPTED;
 920
 921        _irqlevel_changed_(&oldirql, LOWER);
 922        if (rtw_efuse_access(Adapter, false, addr, cnts, data) == _FAIL)
 923                status = NDIS_STATUS_FAILURE;
 924        else
 925                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 926        _irqlevel_changed_(&oldirql, RAISE);
 927
 928        return status;
 929}
 930/*  */
 931int rtl8188eu_oid_rt_pro_write_efuse_hdl(struct oid_par_priv *poid_par_priv)
 932{
 933        struct efuse_access_struct *pefuse;
 934        u8 *data;
 935        u16 addr = 0, cnts = 0, max_available_size = 0;
 936        int status = NDIS_STATUS_SUCCESS;
 937        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 938
 939        if (poid_par_priv->type_of_oid != SET_OID)
 940                return NDIS_STATUS_NOT_ACCEPTED;
 941
 942        pefuse = (struct efuse_access_struct *)poid_par_priv->information_buf;
 943        addr = pefuse->start_addr;
 944        cnts = pefuse->cnts;
 945        data = pefuse->data;
 946
 947        EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size, false);
 948
 949        if ((addr + cnts) > max_available_size)
 950                return NDIS_STATUS_NOT_ACCEPTED;
 951
 952        _irqlevel_changed_(&oldirql, LOWER);
 953        if (rtw_efuse_access(Adapter, true, addr, cnts, data) == _FAIL)
 954                status = NDIS_STATUS_FAILURE;
 955        _irqlevel_changed_(&oldirql, RAISE);
 956
 957        return status;
 958}
 959/*  */
 960int rtl8188eu_oid_rt_pro_rw_efuse_pgpkt_hdl(struct oid_par_priv *poid_par_priv)
 961{
 962        struct pgpkt *ppgpkt;
 963        int status = NDIS_STATUS_SUCCESS;
 964        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
 965
 966        *poid_par_priv->bytes_rw = 0;
 967
 968        if (poid_par_priv->information_buf_len < sizeof(struct pgpkt *))
 969                return NDIS_STATUS_INVALID_LENGTH;
 970
 971        ppgpkt = (struct pgpkt *)poid_par_priv->information_buf;
 972
 973        _irqlevel_changed_(&oldirql, LOWER);
 974
 975        if (poid_par_priv->type_of_oid == QUERY_OID) {
 976                Efuse_PowerSwitch(Adapter, false, true);
 977                if (Efuse_PgPacketRead(Adapter, ppgpkt->offset, ppgpkt->data, false))
 978                        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 979                else
 980                        status = NDIS_STATUS_FAILURE;
 981                Efuse_PowerSwitch(Adapter, false, false);
 982        } else {
 983                Efuse_PowerSwitch(Adapter, true, true);
 984                if (Efuse_PgPacketWrite(Adapter, ppgpkt->offset, ppgpkt->word_en, ppgpkt->data, false))
 985                        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
 986                else
 987                        status = NDIS_STATUS_FAILURE;
 988                Efuse_PowerSwitch(Adapter, true, false);
 989        }
 990
 991        _irqlevel_changed_(&oldirql, RAISE);
 992
 993        return status;
 994}
 995/*  */
 996int rtl8188eu_oid_rt_get_efuse_current_size_hdl(struct oid_par_priv *poid_par_priv)
 997{
 998        u16 size;
 999        u8 ret;
1000        int status = NDIS_STATUS_SUCCESS;
1001        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1002
1003        if (poid_par_priv->type_of_oid != QUERY_OID)
1004                return NDIS_STATUS_NOT_ACCEPTED;
1005
1006        if (poid_par_priv->information_buf_len < sizeof(u32))
1007                return NDIS_STATUS_INVALID_LENGTH;
1008
1009        _irqlevel_changed_(&oldirql, LOWER);
1010        ret = efuse_GetCurrentSize(Adapter, &size);
1011        _irqlevel_changed_(&oldirql, RAISE);
1012        if (ret == _SUCCESS) {
1013                *(u32 *)poid_par_priv->information_buf = size;
1014                *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1015        } else {
1016                status = NDIS_STATUS_FAILURE;
1017        }
1018
1019        return status;
1020}
1021/*  */
1022int rtl8188eu_oid_rt_get_efuse_max_size_hdl(struct oid_par_priv *poid_par_priv)
1023{
1024        int status = NDIS_STATUS_SUCCESS;
1025        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1026
1027        if (poid_par_priv->type_of_oid != QUERY_OID)
1028                return NDIS_STATUS_NOT_ACCEPTED;
1029
1030        if (poid_par_priv->information_buf_len < sizeof(u32))
1031                return NDIS_STATUS_INVALID_LENGTH;
1032
1033        *(u32 *)poid_par_priv->information_buf = efuse_GetMaxSize(Adapter);
1034        *poid_par_priv->bytes_rw = poid_par_priv->information_buf_len;
1035
1036        return status;
1037}
1038/*  */
1039int rtl8188eu_oid_rt_pro_efuse_hdl(struct oid_par_priv *poid_par_priv)
1040{
1041        int status;
1042
1043        if (poid_par_priv->type_of_oid == QUERY_OID)
1044                status = rtl8188eu_oid_rt_pro_read_efuse_hdl(poid_par_priv);
1045        else
1046                status = rtl8188eu_oid_rt_pro_write_efuse_hdl(poid_par_priv);
1047
1048        return status;
1049}
1050/*  */
1051int rtl8188eu_oid_rt_pro_efuse_map_hdl(struct oid_par_priv *poid_par_priv)
1052{
1053        u8              *data;
1054        int status = NDIS_STATUS_SUCCESS;
1055        struct adapter *Adapter = (struct adapter *)(poid_par_priv->adapter_context);
1056        u16     maplen = 0;
1057
1058        EFUSE_GetEfuseDefinition(Adapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, (void *)&maplen, false);
1059
1060        *poid_par_priv->bytes_rw = 0;
1061
1062        if (poid_par_priv->information_buf_len < maplen)
1063                return NDIS_STATUS_INVALID_LENGTH;
1064
1065        data = (u8 *)poid_par_priv->information_buf;
1066
1067        _irqlevel_changed_(&oldirql, LOWER);
1068
1069        if (poid_par_priv->type_of_oid == QUERY_OID) {
1070                if (rtw_efuse_map_read(Adapter, 0, maplen, data) == _SUCCESS)
1071                        *poid_par_priv->bytes_rw = maplen;
1072                else
1073                        status = NDIS_STATUS_FAILURE;
1074        } else {
1075                /*  SET_OID */
1076                if (rtw_efuse_map_write(Adapter, 0, maplen, data) == _SUCCESS)
1077                        *poid_par_priv->bytes_rw = maplen;
1078                else
1079                        status = NDIS_STATUS_FAILURE;
1080        }
1081
1082        _irqlevel_changed_(&oldirql, RAISE);
1083
1084        return status;
1085}
1086
1087int rtl8188eu_oid_rt_set_crystal_cap_hdl(struct oid_par_priv *poid_par_priv)
1088{
1089        int status = NDIS_STATUS_SUCCESS;
1090        return status;
1091}
1092
1093int rtl8188eu_oid_rt_set_rx_packet_type_hdl(struct oid_par_priv *poid_par_priv)
1094{
1095        int status = NDIS_STATUS_SUCCESS;
1096
1097        if (poid_par_priv->type_of_oid != SET_OID)
1098                return NDIS_STATUS_NOT_ACCEPTED;
1099
1100        if (poid_par_priv->information_buf_len < sizeof(u8))
1101                return NDIS_STATUS_INVALID_LENGTH;
1102
1103        return status;
1104}
1105
1106int rtl8188eu_oid_rt_pro_set_tx_agc_offset_hdl(struct oid_par_priv *poid_par_priv)
1107{
1108        return 0;
1109}
1110
1111int rtl8188eu_oid_rt_pro_set_pkt_test_mode_hdl(struct oid_par_priv *poid_par_priv)
1112{
1113        return 0;
1114}
1115
1116int rtl8188eu_mp_ioctl_xmit_packet_hdl(struct oid_par_priv *poid_par_priv)
1117{
1118        struct mp_xmit_parm *pparm;
1119        struct adapter *padapter;
1120        struct mp_priv *pmp_priv;
1121        struct pkt_attrib *pattrib;
1122
1123        pparm = (struct mp_xmit_parm *)poid_par_priv->information_buf;
1124        padapter = (struct adapter *)poid_par_priv->adapter_context;
1125        pmp_priv = &padapter->mppriv;
1126
1127        if (poid_par_priv->type_of_oid == QUERY_OID) {
1128                pparm->enable = !pmp_priv->tx.stop;
1129                pparm->count = pmp_priv->tx.sended;
1130        } else {
1131                if (pparm->enable == 0) {
1132                        pmp_priv->tx.stop = 1;
1133                } else if (pmp_priv->tx.stop == 1) {
1134                        pmp_priv->tx.stop = 0;
1135                        pmp_priv->tx.count = pparm->count;
1136                        pmp_priv->tx.payload = pparm->payload_type;
1137                        pattrib = &pmp_priv->tx.attrib;
1138                        pattrib->pktlen = pparm->length;
1139                        memcpy(pattrib->dst, pparm->da, ETH_ALEN);
1140                        SetPacketTx(padapter);
1141                } else {
1142                        return NDIS_STATUS_FAILURE;
1143                }
1144        }
1145
1146        return NDIS_STATUS_SUCCESS;
1147}
1148
1149/*  */
1150int rtl8188eu_oid_rt_set_power_down_hdl(struct oid_par_priv *poid_par_priv)
1151{
1152        int status = NDIS_STATUS_SUCCESS;
1153
1154        if (poid_par_priv->type_of_oid != SET_OID) {
1155                status = NDIS_STATUS_NOT_ACCEPTED;
1156                return status;
1157        }
1158
1159        _irqlevel_changed_(&oldirql, LOWER);
1160
1161        /* CALL  the power_down function */
1162        _irqlevel_changed_(&oldirql, RAISE);
1163
1164        return status;
1165}
1166/*  */
1167int rtl8188eu_oid_rt_get_power_mode_hdl(struct oid_par_priv *poid_par_priv)
1168{
1169        return 0;
1170}
1171