12865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger/****************************************************************************** 22865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * rtl8712_io.c 32865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 42865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Copyright(c) 2007 - 2010 Realtek Corporation. All rights reserved. 52865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Linux device driver for RTL8192SU 62865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 72865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * This program is free software; you can redistribute it and/or modify it 82865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * under the terms of version 2 of the GNU General Public License as 92865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * published by the Free Software Foundation. 102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * This program is distributed in the hope that it will be useful, but WITHOUT 122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * more details. 152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * You should have received a copy of the GNU General Public License along with 172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * this program; if not, write to the Free Software Foundation, Inc., 182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA 192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Modifications for inclusion into the Linux staging tree are 212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Copyright(c) 2010 Larry Finger. All rights reserved. 222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Contact information: 242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * WLAN FAE <wlanfae@realtek.com>. 252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * Larry Finger <Larry.Finger@lwfinger.net> 262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger * 272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger ******************************************************************************/ 282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#define _RTL8712_IO_C_ 302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "osdep_service.h" 322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "drv_types.h" 332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "rtl871x_io.h" 342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "osdep_intf.h" 352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger#include "usb_ops.h" 362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeru8 r8712_read8(struct _adapter *adapter, u32 addr) 382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 (*_read8)(struct intf_hdl *pintfhdl, u32 addr); 422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 r_val; 432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read8 = pintfhdl->io_ops._read8; 452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger r_val = _read8(pintfhdl, addr); 462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return r_val; 472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeru16 r8712_read16(struct _adapter *adapter, u32 addr) 502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 522865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 532865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 (*_read16)(struct intf_hdl *pintfhdl, u32 addr); 542865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u16 r_val; 552865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 562865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read16 = pintfhdl->io_ops._read16; 572865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger r_val = _read16(pintfhdl, addr); 582865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return r_val; 592865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 602865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 612865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingeru32 r8712_read32(struct _adapter *adapter, u32 addr) 622865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 632865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 642865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 652865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 (*_read32)(struct intf_hdl *pintfhdl, u32 addr); 662865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 r_val; 672865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 682865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read32 = pintfhdl->io_ops._read32; 692865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger r_val = _read32(pintfhdl, addr); 702865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return r_val; 712865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 722865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 732865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_write8(struct _adapter *adapter, u32 addr, u8 val) 742865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 752865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 762865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 772865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger void (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val); 782865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 792865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write8 = pintfhdl->io_ops._write8; 802865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write8(pintfhdl, addr, val); 812865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 822865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 832865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_write16(struct _adapter *adapter, u32 addr, u16 val) 842865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 852865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 862865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 872865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 882865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger void (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val); 892865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write16 = pintfhdl->io_ops._write16; 902865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write16(pintfhdl, addr, val); 912865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 922865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 932865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_write32(struct _adapter *adapter, u32 addr, u32 val) 942865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 952865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 962865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = (struct intf_hdl *)(&(pio_queue->intf)); 972865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 982865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger void (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val); 992865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write32 = pintfhdl->io_ops._write32; 1002865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write32(pintfhdl, addr, val); 1012865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 1022865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1032865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_read_mem(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) 1042865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 1052865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 1062865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 1072865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1082865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 1092865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 *pmem); 1102865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if ((adapter->bDriverStopped == true) || 1112865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger (adapter->bSurpriseRemoved == true)) 1122865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return; 1132865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read_mem = pintfhdl->io_ops._read_mem; 1142865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read_mem(pintfhdl, addr, cnt, pmem); 1152865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 1162865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1172865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_write_mem(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) 1182865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 1192865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 1202865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 1212865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 1222865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 *pmem); 1232865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1242865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write_mem = pintfhdl->io_ops._write_mem; 1252865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write_mem(pintfhdl, addr, cnt, pmem); 1262865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 1272865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1282865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_read_port(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) 1292865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 1302865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 1312865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 1322865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1332865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 1342865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 *pmem); 1352865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger if ((adapter->bDriverStopped == true) || 1362865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger (adapter->bSurpriseRemoved == true)) 1372865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger return; 1382865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read_port = pintfhdl->io_ops._read_port; 1392865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _read_port(pintfhdl, addr, cnt, pmem); 1402865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 1412865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1422865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Fingervoid r8712_write_port(struct _adapter *adapter, u32 addr, u32 cnt, u8 *pmem) 1432865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger{ 1442865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct io_queue *pio_queue = (struct io_queue *)adapter->pio_queue; 1452865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger struct intf_hdl *pintfhdl = &(pio_queue->intf); 1462865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger 1472865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, 1482865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger u8 *pmem); 1492865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write_port = pintfhdl->io_ops._write_port; 1502865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger _write_port(pintfhdl, addr, cnt, pmem); 1512865d42c78a9121caad52cb02d1fbb7f5cdbc4efLarry Finger} 152