Kalle Valo says:
[linux-block.git] / drivers / staging / vt6655 / device_main.c
index f6f5da4c55d17a6fcae0e43308425ef6cac6c374..45e5eccadb44143f4445a755605c04478e113c03 100644 (file)
@@ -205,6 +205,55 @@ static void vt6655_mac_read_ether_addr(void __iomem *iobase, u8 *mac_addr)
        iowrite8(0, iobase + MAC_REG_PAGE1SEL);
 }
 
+static void vt6655_mac_dma_ctl(void __iomem *iobase, u8 reg_index)
+{
+       u32 reg_value;
+
+       reg_value = ioread32(iobase + reg_index);
+       if (reg_value & DMACTL_RUN)
+               iowrite32(DMACTL_WAKE, iobase + reg_index);
+       else
+               iowrite32(DMACTL_RUN, iobase + reg_index);
+}
+
+static void vt6655_mac_set_bits(void __iomem *iobase, u32 mask)
+{
+       u32 reg_value;
+
+       reg_value = ioread32(iobase + MAC_REG_ENCFG);
+       reg_value = reg_value | mask;
+       iowrite32(reg_value, iobase + MAC_REG_ENCFG);
+}
+
+static void vt6655_mac_clear_bits(void __iomem *iobase, u32 mask)
+{
+       u32 reg_value;
+
+       reg_value = ioread32(iobase + MAC_REG_ENCFG);
+       reg_value = reg_value & ~mask;
+       iowrite32(reg_value, iobase + MAC_REG_ENCFG);
+}
+
+static void vt6655_mac_en_protect_md(void __iomem *iobase)
+{
+       vt6655_mac_set_bits(iobase, ENCFG_PROTECTMD);
+}
+
+static void vt6655_mac_dis_protect_md(void __iomem *iobase)
+{
+       vt6655_mac_clear_bits(iobase, ENCFG_PROTECTMD);
+}
+
+static void vt6655_mac_en_barker_preamble_md(void __iomem *iobase)
+{
+       vt6655_mac_set_bits(iobase, ENCFG_BARKERPREAM);
+}
+
+static void vt6655_mac_dis_barker_preamble_md(void __iomem *iobase)
+{
+       vt6655_mac_clear_bits(iobase, ENCFG_BARKERPREAM);
+}
+
 /*
  * Initialisation of MAC & BBP registers
  */
@@ -351,11 +400,11 @@ static void device_init_registers(struct vnt_private *priv)
        }
 
        if (priv->local_id > REV_ID_VT3253_B1) {
-               MACvSelectPage1(priv->port_offset);
+               VT6655_MAC_SELECT_PAGE1(priv->port_offset);
 
                iowrite8(MSRCTL1_TXPWR | MSRCTL1_CSAPAREN, priv->port_offset + MAC_REG_MSRCTL + 1);
 
-               MACvSelectPage0(priv->port_offset);
+               VT6655_MAC_SELECT_PAGE0(priv->port_offset);
        }
 
        /* use relative tx timeout and 802.11i D4 */
@@ -363,7 +412,7 @@ static void device_init_registers(struct vnt_private *priv)
                                    (CFG_TKIPOPT | CFG_NOTXTIMEOUT));
 
        /* set performance parameter by registry */
-       MACvSetShortRetryLimit(priv, priv->byShortRetryLimit);
+       vt6655_mac_set_short_retry_limit(priv, priv->byShortRetryLimit);
        MACvSetLongRetryLimit(priv, priv->byLongRetryLimit);
 
        /* reset TSF counter */
@@ -420,8 +469,8 @@ static void device_init_registers(struct vnt_private *priv)
                vt6655_mac_reg_bits_on(priv->port_offset, MAC_REG_RCR, RCR_WPAERR);
 
        /* Turn On Rx DMA */
-       MACvReceive0(priv->port_offset);
-       MACvReceive1(priv->port_offset);
+       vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_RXDMACTL0);
+       vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_RXDMACTL1);
 
        /* start the adapter */
        iowrite8(HOSTCR_MACEN | HOSTCR_RXON | HOSTCR_TXON, priv->port_offset + MAC_REG_HOSTCR);
@@ -537,13 +586,12 @@ static void device_free_rings(struct vnt_private *priv)
                          priv->opts.tx_descs[1] * sizeof(struct vnt_tx_desc),
                          priv->aRD0Ring, priv->pool_dma);
 
-       if (priv->tx0_bufs)
-               dma_free_coherent(&priv->pcid->dev,
-                                 priv->opts.tx_descs[0] * PKT_BUF_SZ +
-                                 priv->opts.tx_descs[1] * PKT_BUF_SZ +
-                                 CB_BEACON_BUF_SIZE +
-                                 CB_MAX_BUF_SIZE,
-                                 priv->tx0_bufs, priv->tx_bufs_dma0);
+       dma_free_coherent(&priv->pcid->dev,
+                         priv->opts.tx_descs[0] * PKT_BUF_SZ +
+                         priv->opts.tx_descs[1] * PKT_BUF_SZ +
+                         CB_BEACON_BUF_SIZE +
+                         CB_MAX_BUF_SIZE,
+                         priv->tx0_bufs, priv->tx_bufs_dma0);
 }
 
 static int device_init_rd0_ring(struct vnt_private *priv)
@@ -583,7 +631,7 @@ err_free_rd:
        kfree(desc->rd_info);
 
 err_free_desc:
-       while (--i) {
+       while (i--) {
                desc = &priv->aRD0Ring[i];
                device_free_rx_buf(priv, desc);
                kfree(desc->rd_info);
@@ -629,7 +677,7 @@ err_free_rd:
        kfree(desc->rd_info);
 
 err_free_desc:
-       while (--i) {
+       while (i--) {
                desc = &priv->aRD1Ring[i];
                device_free_rx_buf(priv, desc);
                kfree(desc->rd_info);
@@ -694,7 +742,7 @@ static int device_init_td0_ring(struct vnt_private *priv)
        return 0;
 
 err_free_desc:
-       while (--i) {
+       while (i--) {
                desc = &priv->apTD0Rings[i];
                kfree(desc->td_info);
        }
@@ -734,7 +782,7 @@ static int device_init_td1_ring(struct vnt_private *priv)
        return 0;
 
 err_free_desc:
-       while (--i) {
+       while (i--) {
                desc = &priv->apTD1Rings[i];
                kfree(desc->td_info);
        }
@@ -1135,8 +1183,8 @@ static void vnt_interrupt_process(struct vnt_private *priv)
 
                isr = ioread32(priv->port_offset + MAC_REG_ISR);
 
-               MACvReceive0(priv->port_offset);
-               MACvReceive1(priv->port_offset);
+               vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_RXDMACTL0);
+               vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_RXDMACTL1);
 
                if (max_count > priv->opts.int_works)
                        break;
@@ -1218,9 +1266,9 @@ static int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
        wmb(); /* second memory barrier */
 
        if (head_td->td_info->flags & TD_FLAGS_NETIF_SKB)
-               MACvTransmitAC0(priv->port_offset);
+               vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_AC0DMACTL);
        else
-               MACvTransmit0(priv->port_offset);
+               vt6655_mac_dma_ctl(priv->port_offset, MAC_REG_TXDMACTL0);
 
        priv->iTDUsed[dma_idx]++;
 
@@ -1440,19 +1488,19 @@ static void vnt_bss_info_changed(struct ieee80211_hw *hw,
 
        if (changed & BSS_CHANGED_ERP_PREAMBLE) {
                if (conf->use_short_preamble) {
-                       MACvEnableBarkerPreambleMd(priv->port_offset);
+                       vt6655_mac_en_barker_preamble_md(priv->port_offset);
                        priv->preamble_type = true;
                } else {
-                       MACvDisableBarkerPreambleMd(priv->port_offset);
+                       vt6655_mac_dis_barker_preamble_md(priv->port_offset);
                        priv->preamble_type = false;
                }
        }
 
        if (changed & BSS_CHANGED_ERP_CTS_PROT) {
                if (conf->use_cts_prot)
-                       MACvEnableProtectMD(priv->port_offset);
+                       vt6655_mac_en_protect_md(priv->port_offset);
                else
-                       MACvDisableProtectMD(priv->port_offset);
+                       vt6655_mac_dis_protect_md(priv->port_offset);
        }
 
        if (changed & BSS_CHANGED_ERP_SLOT) {
@@ -1538,21 +1586,21 @@ static void vnt_configure(struct ieee80211_hw *hw,
                        spin_lock_irqsave(&priv->lock, flags);
 
                        if (priv->mc_list_count > 2) {
-                               MACvSelectPage1(priv->port_offset);
+                               VT6655_MAC_SELECT_PAGE1(priv->port_offset);
 
                                iowrite32(0xffffffff, priv->port_offset + MAC_REG_MAR0);
                                iowrite32(0xffffffff, priv->port_offset + MAC_REG_MAR0 + 4);
 
-                               MACvSelectPage0(priv->port_offset);
+                               VT6655_MAC_SELECT_PAGE0(priv->port_offset);
                        } else {
-                               MACvSelectPage1(priv->port_offset);
+                               VT6655_MAC_SELECT_PAGE1(priv->port_offset);
 
                                multicast =  le64_to_cpu(multicast);
                                iowrite32((u32)multicast, priv->port_offset +  MAC_REG_MAR0);
                                iowrite32((u32)(multicast >> 32),
                                          priv->port_offset + MAC_REG_MAR0 + 4);
 
-                               MACvSelectPage0(priv->port_offset);
+                               VT6655_MAC_SELECT_PAGE0(priv->port_offset);
                        }
 
                        spin_unlock_irqrestore(&priv->lock, flags);