return val;
}
-static s32 sdio_readN(struct intf_hdl *intfhdl, u32 addr, u32 cnt, u8 *buf)
-{
- struct adapter *adapter;
- u8 mac_pwr_ctrl_on;
- u8 device_id;
- u16 offset;
- u32 ftaddr;
- u8 shift;
- s32 err;
-
- adapter = intfhdl->padapter;
- err = 0;
-
- ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- )
- return sd_cmd52_read(intfhdl, ftaddr, cnt, buf);
-
- /* 4 bytes alignment */
- shift = ftaddr & 0x3;
- if (shift == 0) {
- err = sd_read(intfhdl, ftaddr, cnt, buf);
- } else {
- u8 *tmpbuf;
- u32 n;
-
- ftaddr &= ~(u16)0x3;
- n = cnt + shift;
- tmpbuf = kmalloc(n, GFP_ATOMIC);
- if (!tmpbuf)
- return -ENOMEM;
-
- err = sd_read(intfhdl, ftaddr, n, tmpbuf);
- if (!err)
- memcpy(buf, tmpbuf + shift, cnt);
- kfree(tmpbuf);
- }
- return err;
-}
-
static s32 sdio_write8(struct intf_hdl *intfhdl, u32 addr, u8 val)
{
u32 ftaddr;
return err;
}
-static s32 sdio_writeN(struct intf_hdl *intfhdl, u32 addr, u32 cnt, u8 *buf)
-{
- struct adapter *adapter;
- u8 mac_pwr_ctrl_on;
- u8 device_id;
- u16 offset;
- u32 ftaddr;
- u8 shift;
- s32 err;
-
- adapter = intfhdl->padapter;
- err = 0;
-
- ftaddr = _cvrt2ftaddr(addr, &device_id, &offset);
-
- rtw_hal_get_hwreg(adapter, HW_VAR_APFM_ON_MAC, &mac_pwr_ctrl_on);
- if (
- ((device_id == WLAN_IOREG_DEVICE_ID) && (offset < 0x100)) ||
- (!mac_pwr_ctrl_on) ||
- (adapter_to_pwrctl(adapter)->fw_current_in_ps_mode)
- )
- return sd_cmd52_write(intfhdl, ftaddr, cnt, buf);
-
- shift = ftaddr & 0x3;
- if (shift == 0) {
- err = sd_write(intfhdl, ftaddr, cnt, buf);
- } else {
- u8 *tmpbuf;
- u32 n;
-
- ftaddr &= ~(u16)0x3;
- n = cnt + shift;
- tmpbuf = kmalloc(n, GFP_ATOMIC);
- if (!tmpbuf)
- return -ENOMEM;
- err = sd_read(intfhdl, ftaddr, 4, tmpbuf);
- if (err) {
- kfree(tmpbuf);
- return err;
- }
- memcpy(tmpbuf + shift, buf, cnt);
- err = sd_write(intfhdl, ftaddr, n, tmpbuf);
- kfree(tmpbuf);
- }
- return err;
-}
-
-static void sdio_read_mem(
- struct intf_hdl *intfhdl,
- u32 addr,
- u32 cnt,
- u8 *rmem
-)
-{
- sdio_readN(intfhdl, addr, cnt, rmem);
-}
-
-static void sdio_write_mem(
- struct intf_hdl *intfhdl,
- u32 addr,
- u32 cnt,
- u8 *wmem
-)
-{
- sdio_writeN(intfhdl, addr, cnt, wmem);
-}
-
/*
* Description:
*Read from RX FIFO
ops->_read8 = &sdio_read8;
ops->_read16 = &sdio_read16;
ops->_read32 = &sdio_read32;
- ops->_read_mem = &sdio_read_mem;
- ops->_read_port = &sdio_read_port;
ops->_write8 = &sdio_write8;
ops->_write16 = &sdio_write16;
ops->_write32 = &sdio_write32;
- ops->_writeN = &sdio_writeN;
- ops->_write_mem = &sdio_write_mem;
ops->_write_port = &sdio_write_port;
}
int (*_write8)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
int (*_write16)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
int (*_write32)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
- int (*_writeN)(struct intf_hdl *pintfhdl, u32 addr, u32 length, u8 *pdata);
- int (*_write8_async)(struct intf_hdl *pintfhdl, u32 addr, u8 val);
- int (*_write16_async)(struct intf_hdl *pintfhdl, u32 addr, u16 val);
- int (*_write32_async)(struct intf_hdl *pintfhdl, u32 addr, u32 val);
-
- void (*_read_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
- void (*_write_mem)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
-
- u32 (*_read_interrupt)(struct intf_hdl *pintfhdl, u32 addr);
-
- u32 (*_read_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
u32 (*_write_port)(struct intf_hdl *pintfhdl, u32 addr, u32 cnt, u8 *pmem);
-
- u32 (*_write_scsi)(struct intf_hdl *pintfhdl, u32 cnt, u8 *pmem);
-
- void (*_read_port_cancel)(struct intf_hdl *pintfhdl);
- void (*_write_port_cancel)(struct intf_hdl *pintfhdl);
};
struct intf_hdl {