diff options
Diffstat (limited to 'drivers/staging/rtl8192u/r8192U_core.c')
-rw-r--r-- | drivers/staging/rtl8192u/r8192U_core.c | 134 |
1 files changed, 75 insertions, 59 deletions
diff --git a/drivers/staging/rtl8192u/r8192U_core.c b/drivers/staging/rtl8192u/r8192U_core.c index 74d2d7767650..c833f180a63b 100644 --- a/drivers/staging/rtl8192u/r8192U_core.c +++ b/drivers/staging/rtl8192u/r8192U_core.c @@ -258,8 +258,11 @@ void write_cam(struct net_device *dev, u8 addr, u32 data) u32 read_cam(struct net_device *dev, u8 addr) { + u32 data; + write_nic_dword(dev, RWCAM, 0x80000000|(addr&0xff)); - return read_nic_dword(dev, 0xa8); + read_nic_dword(dev, 0xa8, &data); + return data; } void write_nic_byte_E(struct net_device *dev, int indx, u8 data) @@ -276,21 +279,22 @@ void write_nic_byte_E(struct net_device *dev, int indx, u8 data) netdev_err(dev, "write_nic_byte_E TimeOut! status: %d\n", status); } -u8 read_nic_byte_E(struct net_device *dev, int indx) +int read_nic_byte_E(struct net_device *dev, int indx, u8 *data) { int status; - u8 data; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, - indx|0xfe00, 0, &data, 1, HZ / 2); + indx|0xfe00, 0, data, 1, HZ / 2); - if (status < 0) - netdev_err(dev, "read_nic_byte_E TimeOut! status: %d\n", status); + if (status < 0) { + netdev_err(dev, "%s failure status: %d\n", __func__, status); + return status; + } - return data; + return 0; } //as 92U has extend page from 4 to 16, so modify functions below. void write_nic_byte(struct net_device *dev, int indx, u8 data) @@ -349,28 +353,28 @@ void write_nic_dword(struct net_device *dev, int indx, u32 data) -u8 read_nic_byte(struct net_device *dev, int indx) +int read_nic_byte(struct net_device *dev, int indx, u8 *data) { - u8 data; int status; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, - (indx&0xff)|0xff00, (indx>>8)&0x0f, &data, 1, HZ / 2); + (indx&0xff)|0xff00, (indx>>8)&0x0f, data, 1, HZ / 2); - if (status < 0) - netdev_err(dev, "read_nic_byte TimeOut! status: %d\n", status); + if (status < 0) { + netdev_err(dev, "%s failure status: %d\n", __func__, status); + return status; + } - return data; + return 0; } -u16 read_nic_word(struct net_device *dev, int indx) +int read_nic_word(struct net_device *dev, int indx, u16 *data) { - u16 data; int status; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; @@ -378,34 +382,36 @@ u16 read_nic_word(struct net_device *dev, int indx) status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, (indx&0xff)|0xff00, (indx>>8)&0x0f, - &data, 2, HZ / 2); + data, 2, HZ / 2); - if (status < 0) - netdev_err(dev, "read_nic_word TimeOut! status: %d\n", status); + if (status < 0) { + netdev_err(dev, "%s failure status: %d\n", __func__, status); + return status; + } - return data; + return 0; } -u16 read_nic_word_E(struct net_device *dev, int indx) +int read_nic_word_E(struct net_device *dev, int indx, u16 *data) { - u16 data; int status; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); struct usb_device *udev = priv->udev; status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, - indx|0xfe00, 0, &data, 2, HZ / 2); + indx|0xfe00, 0, data, 2, HZ / 2); - if (status < 0) - netdev_err(dev, "read_nic_word TimeOut! status: %d\n", status); + if (status < 0) { + netdev_err(dev, "%s failure status: %d\n", __func__, status); + return status; + } - return data; + return 0; } -u32 read_nic_dword(struct net_device *dev, int indx) +int read_nic_dword(struct net_device *dev, int indx, u32 *data) { - u32 data; int status; struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); @@ -414,12 +420,14 @@ u32 read_nic_dword(struct net_device *dev, int indx) status = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), RTL8187_REQ_GET_REGS, RTL8187_REQT_READ, (indx&0xff)|0xff00, (indx>>8)&0x0f, - &data, 4, HZ / 2); + data, 4, HZ / 2); - if (status < 0) - netdev_err(dev, "read_nic_dword TimeOut! status:%d\n", status); + if (status < 0) { + netdev_err(dev, "%s failure status: %d\n", __func__, status); + return status; + } - return data; + return 0; } /* u8 read_phy_cck(struct net_device *dev, u8 adr); */ @@ -465,30 +473,37 @@ static int proc_get_registers(struct seq_file *m, void *v) { struct net_device *dev = m->private; int i, n, max = 0xff; + u8 byte_rd; seq_puts(m, "\n####################page 0##################\n "); for (n = 0; n <= max;) { seq_printf(m, "\nD: %2x > ", n); - for (i = 0; i < 16 && n <= max; i++, n++) - seq_printf(m, "%2x ", read_nic_byte(dev, 0x000|n)); + for (i = 0; i < 16 && n <= max; i++, n++) { + read_nic_byte(dev, 0x000|n, &byte_rd); + seq_printf(m, "%2x ", byte_rd); + } } seq_puts(m, "\n####################page 1##################\n "); for (n = 0; n <= max;) { seq_printf(m, "\nD: %2x > ", n); - for (i = 0; i < 16 && n <= max; i++, n++) - seq_printf(m, "%2x ", read_nic_byte(dev, 0x100|n)); + for (i = 0; i < 16 && n <= max; i++, n++) { + read_nic_byte(dev, 0x100|n, &byte_rd); + seq_printf(m, "%2x ", byte_rd); + } } seq_puts(m, "\n####################page 3##################\n "); for (n = 0; n <= max;) { seq_printf(m, "\nD: %2x > ", n); - for (i = 0; i < 16 && n <= max; i++, n++) - seq_printf(m, "%2x ", read_nic_byte(dev, 0x300|n)); + for (i = 0; i < 16 && n <= max; i++, n++) { + read_nic_byte(dev, 0x300|n, &byte_rd); + seq_printf(m, "%2x ", byte_rd); + } } seq_putc(m, '\n'); @@ -683,11 +698,11 @@ void dump_eprom(struct net_device *dev) void rtl8192_set_mode(struct net_device *dev, int mode) { u8 ecmd; - ecmd = read_nic_byte(dev, EPROM_CMD); + read_nic_byte(dev, EPROM_CMD, &ecmd); ecmd = ecmd & ~EPROM_CMD_OPERATING_MODE_MASK; ecmd = ecmd | (mode<<EPROM_CMD_OPERATING_MODE_SHIFT); - ecmd = ecmd & ~(1<<EPROM_CS_SHIFT); - ecmd = ecmd & ~(1<<EPROM_CK_SHIFT); + ecmd = ecmd & ~EPROM_CS_BIT; + ecmd = ecmd & ~EPROM_CK_BIT; write_nic_byte(dev, EPROM_CMD, ecmd); } @@ -697,7 +712,7 @@ void rtl8192_update_msr(struct net_device *dev) struct r8192_priv *priv = ieee80211_priv(dev); u8 msr; - msr = read_nic_byte(dev, MSR); + read_nic_byte(dev, MSR, &msr); msr &= ~MSR_LINK_MASK; /* do not change in link_state != WLAN_LINK_ASSOCIATED. @@ -810,7 +825,7 @@ void rtl8192_set_rxconf(struct net_device *dev) struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev); u32 rxconf; - rxconf = read_nic_dword(dev, RCR); + read_nic_dword(dev, RCR, &rxconf); rxconf = rxconf & ~MAC_FILTER_MASK; rxconf = rxconf | RCR_AMF; rxconf = rxconf | RCR_ADF; @@ -846,10 +861,6 @@ void rtl8192_set_rxconf(struct net_device *dev) rxconf = rxconf | RCR_ONLYERLPKT; write_nic_dword(dev, RCR, rxconf); - -#ifdef DEBUG_RX - DMESG("rxconf: %x %x", rxconf, read_nic_dword(dev, RCR)); -#endif } //wait to be removed void rtl8192_rx_enable(struct net_device *dev) @@ -871,7 +882,7 @@ void rtl8192_rtx_disable(struct net_device *dev) struct sk_buff *skb; struct rtl8192_rx_info *info; - cmd = read_nic_byte(dev, CMDR); + read_nic_byte(dev, CMDR, &cmd); write_nic_byte(dev, CMDR, cmd & ~(CR_TE|CR_RE)); force_pci_posting(dev); mdelay(10); @@ -1352,7 +1363,7 @@ void rtl8192_beacon_stop(struct net_device *dev) u8 msr, msrm, msr2; struct r8192_priv *priv = ieee80211_priv(dev); - msr = read_nic_byte(dev, MSR); + read_nic_byte(dev, MSR, &msr); msrm = msr & MSR_LINK_MASK; msr2 = msr & ~MSR_LINK_MASK; @@ -2049,7 +2060,7 @@ void rtl8192_link_change(struct net_device *dev) /*update timing params*/ if (ieee->iw_mode == IW_MODE_INFRA || ieee->iw_mode == IW_MODE_ADHOC) { u32 reg = 0; - reg = read_nic_dword(dev, RCR); + read_nic_dword(dev, RCR, ®); if (priv->ieee80211->state == IEEE80211_LINKED) priv->ReceiveConfig = reg |= RCR_CBSSID; else @@ -2544,7 +2555,7 @@ static void rtl8192_get_eeprom_size(struct net_device *dev) u16 curCR = 0; struct r8192_priv *priv = ieee80211_priv(dev); RT_TRACE(COMP_EPROM, "===========>%s()\n", __func__); - curCR = read_nic_word_E(dev, EPROM_CMD); + read_nic_word_E(dev, EPROM_CMD, &curCR); RT_TRACE(COMP_EPROM, "read from Reg EPROM_CMD(%x):%x\n", EPROM_CMD, curCR); //whether need I consider BIT5? priv->epromtype = (curCR & Cmd9346CR_9356SEL) ? EPROM_93c56 : EPROM_93c46; @@ -2896,7 +2907,7 @@ void rtl8192_hwconfig(struct net_device *dev) ratr_value &= ~(RATE_ALL_OFDM_2SS); write_nic_dword(dev, RATR0, ratr_value); write_nic_byte(dev, UFWP, 1); - regTmp = read_nic_byte(dev, 0x313); + read_nic_byte(dev, 0x313, ®Tmp); regRRSR = ((regTmp) << 24) | (regRRSR & 0x00ffffff); write_nic_dword(dev, RRSR, regRRSR); @@ -2925,6 +2936,7 @@ bool rtl8192_adapter_start(struct net_device *dev) u32 dwRegRead = 0; bool init_status = true; u8 SECR_value = 0x0; + u8 tmp; RT_TRACE(COMP_INIT, "====>%s()\n", __func__); priv->Rf_Mode = RF_OP_By_SW_3wire; //for ASIC power on sequence @@ -2938,7 +2950,7 @@ bool rtl8192_adapter_start(struct net_device *dev) priv->pFirmware->firmware_status = FW_STATUS_0_INIT; //config CPUReset Register //Firmware Reset or not? - dwRegRead = read_nic_dword(dev, CPU_GEN); + read_nic_dword(dev, CPU_GEN, &dwRegRead); if (priv->pFirmware->firmware_status == FW_STATUS_0_INIT) dwRegRead |= CPU_GEN_SYSTEM_RESET; //do nothing here? else if (priv->pFirmware->firmware_status == FW_STATUS_5_READY) @@ -2953,7 +2965,7 @@ bool rtl8192_adapter_start(struct net_device *dev) //Loopback mode or not priv->LoopbackMode = RTL819xU_NO_LOOPBACK; - dwRegRead = read_nic_dword(dev, CPU_GEN); + read_nic_dword(dev, CPU_GEN, &dwRegRead); if (priv->LoopbackMode == RTL819xU_NO_LOOPBACK) dwRegRead = ((dwRegRead & CPU_GEN_NO_LOOPBACK_MSK) | CPU_GEN_NO_LOOPBACK_SET); else if (priv->LoopbackMode == RTL819xU_MAC_LOOPBACK) @@ -2967,7 +2979,8 @@ bool rtl8192_adapter_start(struct net_device *dev) udelay(500); //xiong add for new bitfile:usb suspend reset pin set to 1. //do we need? - write_nic_byte_E(dev, 0x5f, (read_nic_byte_E(dev, 0x5f)|0x20)); + read_nic_byte_E(dev, 0x5f, &tmp); + write_nic_byte_E(dev, 0x5f, tmp|0x20); //Set Hardware rtl8192_hwconfig(dev); @@ -3095,7 +3108,8 @@ bool rtl8192_adapter_start(struct net_device *dev) if (priv->ResetProgress == RESET_TYPE_NORESET) { //if D or C cut - u8 tmpvalue = read_nic_byte(dev, 0x301); + u8 tmpvalue; + read_nic_byte(dev, 0x301, &tmpvalue); if (tmpvalue == 0x03) { priv->bDcut = TRUE; RT_TRACE(COMP_POWER_TRACKING, "D-cut\n"); @@ -3156,8 +3170,9 @@ static struct net_device_stats *rtl8192_stats(struct net_device *dev) bool HalTxCheckStuck819xUsb(struct net_device *dev) { struct r8192_priv *priv = ieee80211_priv(dev); - u16 RegTxCounter = read_nic_word(dev, 0x128); + u16 RegTxCounter; bool bStuck = FALSE; + read_nic_word(dev, 0x128, &RegTxCounter); RT_TRACE(COMP_RESET, "%s():RegTxCounter is %d,TxCounter is %d\n", __func__, RegTxCounter, priv->TxCounter); if (priv->TxCounter == RegTxCounter) bStuck = TRUE; @@ -3204,10 +3219,11 @@ RESET_TYPE TxCheckStuck(struct net_device *dev) bool HalRxCheckStuck819xUsb(struct net_device *dev) { - u16 RegRxCounter = read_nic_word(dev, 0x130); + u16 RegRxCounter; struct r8192_priv *priv = ieee80211_priv(dev); bool bStuck = FALSE; static u8 rx_chk_cnt; + read_nic_word(dev, 0x130, &RegRxCounter); RT_TRACE(COMP_RESET, "%s(): RegRxCounter is %d,RxCounter is %d\n", __func__, RegRxCounter, priv->RxCounter); // If rssi is small, we should check rx for long time because of bad rx. // or maybe it will continuous silent reset every 2 seconds. @@ -3494,7 +3510,7 @@ void CAM_read_entry(struct net_device *dev, u32 iIndex) //Check polling bit is clear while ((i--) >= 0) { - ulStatus = read_nic_dword(dev, RWCAM); + read_nic_dword(dev, RWCAM, &ulStatus); if (ulStatus & BIT31) continue; else @@ -3502,7 +3518,7 @@ void CAM_read_entry(struct net_device *dev, u32 iIndex) } write_nic_dword(dev, RWCAM, target_command); RT_TRACE(COMP_SEC, "CAM_read_entry(): WRITE A0: %x \n", target_command); - target_content = read_nic_dword(dev, RCAMO); + read_nic_dword(dev, RCAMO, &target_content); RT_TRACE(COMP_SEC, "CAM_read_entry(): WRITE A8: %x \n", target_content); } printk("\n"); |