rtl818x: merge tx/rx descriptor flags
Tx/Rx descriptor flags are common between rtl818x devices, only with additions for newer chips, thus use same flags in the code. Signed-off-by: Herton Ronaldo Krzesinski <herton@mandriva.com.br> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
2540e0511e
commit
38e3b0d86e
@@ -24,20 +24,6 @@
|
|||||||
#define ANAPARAM_PWR1_SHIFT 20
|
#define ANAPARAM_PWR1_SHIFT 20
|
||||||
#define ANAPARAM_PWR1_MASK (0x7F << ANAPARAM_PWR1_SHIFT)
|
#define ANAPARAM_PWR1_MASK (0x7F << ANAPARAM_PWR1_SHIFT)
|
||||||
|
|
||||||
enum rtl8180_tx_desc_flags {
|
|
||||||
RTL8180_TX_DESC_FLAG_NO_ENC = (1 << 15),
|
|
||||||
RTL8180_TX_DESC_FLAG_TX_OK = (1 << 15),
|
|
||||||
RTL8180_TX_DESC_FLAG_SPLCP = (1 << 16),
|
|
||||||
RTL8180_TX_DESC_FLAG_RX_UNDER = (1 << 16),
|
|
||||||
RTL8180_TX_DESC_FLAG_MOREFRAG = (1 << 17),
|
|
||||||
RTL8180_TX_DESC_FLAG_CTS = (1 << 18),
|
|
||||||
RTL8180_TX_DESC_FLAG_RTS = (1 << 23),
|
|
||||||
RTL8180_TX_DESC_FLAG_LS = (1 << 28),
|
|
||||||
RTL8180_TX_DESC_FLAG_FS = (1 << 29),
|
|
||||||
RTL8180_TX_DESC_FLAG_DMA = (1 << 30),
|
|
||||||
RTL8180_TX_DESC_FLAG_OWN = (1 << 31)
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl8180_tx_desc {
|
struct rtl8180_tx_desc {
|
||||||
__le32 flags;
|
__le32 flags;
|
||||||
__le16 rts_duration;
|
__le16 rts_duration;
|
||||||
@@ -52,23 +38,6 @@ struct rtl8180_tx_desc {
|
|||||||
u32 reserved[2];
|
u32 reserved[2];
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
enum rtl8180_rx_desc_flags {
|
|
||||||
RTL8180_RX_DESC_FLAG_ICV_ERR = (1 << 12),
|
|
||||||
RTL8180_RX_DESC_FLAG_CRC32_ERR = (1 << 13),
|
|
||||||
RTL8180_RX_DESC_FLAG_PM = (1 << 14),
|
|
||||||
RTL8180_RX_DESC_FLAG_RX_ERR = (1 << 15),
|
|
||||||
RTL8180_RX_DESC_FLAG_BCAST = (1 << 16),
|
|
||||||
RTL8180_RX_DESC_FLAG_PAM = (1 << 17),
|
|
||||||
RTL8180_RX_DESC_FLAG_MCAST = (1 << 18),
|
|
||||||
RTL8180_RX_DESC_FLAG_SPLCP = (1 << 25),
|
|
||||||
RTL8180_RX_DESC_FLAG_FOF = (1 << 26),
|
|
||||||
RTL8180_RX_DESC_FLAG_DMA_FAIL = (1 << 27),
|
|
||||||
RTL8180_RX_DESC_FLAG_LS = (1 << 28),
|
|
||||||
RTL8180_RX_DESC_FLAG_FS = (1 << 29),
|
|
||||||
RTL8180_RX_DESC_FLAG_EOR = (1 << 30),
|
|
||||||
RTL8180_RX_DESC_FLAG_OWN = (1 << 31)
|
|
||||||
};
|
|
||||||
|
|
||||||
struct rtl8180_rx_desc {
|
struct rtl8180_rx_desc {
|
||||||
__le32 flags;
|
__le32 flags;
|
||||||
__le32 flags2;
|
__le32 flags2;
|
||||||
|
@@ -110,12 +110,12 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
|
|||||||
struct sk_buff *skb = priv->rx_buf[priv->rx_idx];
|
struct sk_buff *skb = priv->rx_buf[priv->rx_idx];
|
||||||
u32 flags = le32_to_cpu(entry->flags);
|
u32 flags = le32_to_cpu(entry->flags);
|
||||||
|
|
||||||
if (flags & RTL8180_RX_DESC_FLAG_OWN)
|
if (flags & RTL818X_RX_DESC_FLAG_OWN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (unlikely(flags & (RTL8180_RX_DESC_FLAG_DMA_FAIL |
|
if (unlikely(flags & (RTL818X_RX_DESC_FLAG_DMA_FAIL |
|
||||||
RTL8180_RX_DESC_FLAG_FOF |
|
RTL818X_RX_DESC_FLAG_FOF |
|
||||||
RTL8180_RX_DESC_FLAG_RX_ERR)))
|
RTL818X_RX_DESC_FLAG_RX_ERR)))
|
||||||
goto done;
|
goto done;
|
||||||
else {
|
else {
|
||||||
u32 flags2 = le32_to_cpu(entry->flags2);
|
u32 flags2 = le32_to_cpu(entry->flags2);
|
||||||
@@ -140,7 +140,7 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
|
|||||||
rx_status.band = dev->conf.channel->band;
|
rx_status.band = dev->conf.channel->band;
|
||||||
rx_status.mactime = le64_to_cpu(entry->tsft);
|
rx_status.mactime = le64_to_cpu(entry->tsft);
|
||||||
rx_status.flag |= RX_FLAG_TSFT;
|
rx_status.flag |= RX_FLAG_TSFT;
|
||||||
if (flags & RTL8180_RX_DESC_FLAG_CRC32_ERR)
|
if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)
|
||||||
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
|
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
|
||||||
|
|
||||||
ieee80211_rx_irqsafe(dev, skb, &rx_status);
|
ieee80211_rx_irqsafe(dev, skb, &rx_status);
|
||||||
@@ -154,10 +154,10 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
|
|||||||
|
|
||||||
done:
|
done:
|
||||||
entry->rx_buf = cpu_to_le32(*((dma_addr_t *)skb->cb));
|
entry->rx_buf = cpu_to_le32(*((dma_addr_t *)skb->cb));
|
||||||
entry->flags = cpu_to_le32(RTL8180_RX_DESC_FLAG_OWN |
|
entry->flags = cpu_to_le32(RTL818X_RX_DESC_FLAG_OWN |
|
||||||
MAX_RX_SIZE);
|
MAX_RX_SIZE);
|
||||||
if (priv->rx_idx == 31)
|
if (priv->rx_idx == 31)
|
||||||
entry->flags |= cpu_to_le32(RTL8180_RX_DESC_FLAG_EOR);
|
entry->flags |= cpu_to_le32(RTL818X_RX_DESC_FLAG_EOR);
|
||||||
priv->rx_idx = (priv->rx_idx + 1) % 32;
|
priv->rx_idx = (priv->rx_idx + 1) % 32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -173,7 +173,7 @@ static void rtl8180_handle_tx(struct ieee80211_hw *dev, unsigned int prio)
|
|||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
u32 flags = le32_to_cpu(entry->flags);
|
u32 flags = le32_to_cpu(entry->flags);
|
||||||
|
|
||||||
if (flags & RTL8180_TX_DESC_FLAG_OWN)
|
if (flags & RTL818X_TX_DESC_FLAG_OWN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ring->idx = (ring->idx + 1) % ring->entries;
|
ring->idx = (ring->idx + 1) % ring->entries;
|
||||||
@@ -185,7 +185,7 @@ static void rtl8180_handle_tx(struct ieee80211_hw *dev, unsigned int prio)
|
|||||||
memset(&info->status, 0, sizeof(info->status));
|
memset(&info->status, 0, sizeof(info->status));
|
||||||
|
|
||||||
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
if (!(info->flags & IEEE80211_TX_CTL_NO_ACK)) {
|
||||||
if (flags & RTL8180_TX_DESC_FLAG_TX_OK)
|
if (flags & RTL818X_TX_DESC_FLAG_TX_OK)
|
||||||
info->flags |= IEEE80211_TX_STAT_ACK;
|
info->flags |= IEEE80211_TX_STAT_ACK;
|
||||||
else
|
else
|
||||||
info->status.excessive_retries = 1;
|
info->status.excessive_retries = 1;
|
||||||
@@ -252,20 +252,20 @@ static int rtl8180_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
|||||||
mapping = pci_map_single(priv->pdev, skb->data,
|
mapping = pci_map_single(priv->pdev, skb->data,
|
||||||
skb->len, PCI_DMA_TODEVICE);
|
skb->len, PCI_DMA_TODEVICE);
|
||||||
|
|
||||||
tx_flags = RTL8180_TX_DESC_FLAG_OWN | RTL8180_TX_DESC_FLAG_FS |
|
tx_flags = RTL818X_TX_DESC_FLAG_OWN | RTL818X_TX_DESC_FLAG_FS |
|
||||||
RTL8180_TX_DESC_FLAG_LS |
|
RTL818X_TX_DESC_FLAG_LS |
|
||||||
(ieee80211_get_tx_rate(dev, info)->hw_value << 24) |
|
(ieee80211_get_tx_rate(dev, info)->hw_value << 24) |
|
||||||
skb->len;
|
skb->len;
|
||||||
|
|
||||||
if (priv->r8185)
|
if (priv->r8185)
|
||||||
tx_flags |= RTL8180_TX_DESC_FLAG_DMA |
|
tx_flags |= RTL818X_TX_DESC_FLAG_DMA |
|
||||||
RTL8180_TX_DESC_FLAG_NO_ENC;
|
RTL818X_TX_DESC_FLAG_NO_ENC;
|
||||||
|
|
||||||
if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) {
|
if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) {
|
||||||
tx_flags |= RTL8180_TX_DESC_FLAG_RTS;
|
tx_flags |= RTL818X_TX_DESC_FLAG_RTS;
|
||||||
tx_flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
tx_flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
||||||
} else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) {
|
} else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) {
|
||||||
tx_flags |= RTL8180_TX_DESC_FLAG_CTS;
|
tx_flags |= RTL818X_TX_DESC_FLAG_CTS;
|
||||||
tx_flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
tx_flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -446,10 +446,10 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)
|
|||||||
*mapping = pci_map_single(priv->pdev, skb_tail_pointer(skb),
|
*mapping = pci_map_single(priv->pdev, skb_tail_pointer(skb),
|
||||||
MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
|
MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
|
||||||
entry->rx_buf = cpu_to_le32(*mapping);
|
entry->rx_buf = cpu_to_le32(*mapping);
|
||||||
entry->flags = cpu_to_le32(RTL8180_RX_DESC_FLAG_OWN |
|
entry->flags = cpu_to_le32(RTL818X_RX_DESC_FLAG_OWN |
|
||||||
MAX_RX_SIZE);
|
MAX_RX_SIZE);
|
||||||
}
|
}
|
||||||
entry->flags |= cpu_to_le32(RTL8180_RX_DESC_FLAG_EOR);
|
entry->flags |= cpu_to_le32(RTL818X_RX_DESC_FLAG_EOR);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,12 +58,6 @@ struct rtl8187b_rx_hdr {
|
|||||||
|
|
||||||
/* {rtl8187,rtl8187b}_tx_info is in skb */
|
/* {rtl8187,rtl8187b}_tx_info is in skb */
|
||||||
|
|
||||||
/* Tx flags are common between rtl8187 and rtl8187b */
|
|
||||||
#define RTL8187_TX_FLAG_NO_ENCRYPT (1 << 15)
|
|
||||||
#define RTL8187_TX_FLAG_MORE_FRAG (1 << 17)
|
|
||||||
#define RTL8187_TX_FLAG_CTS (1 << 18)
|
|
||||||
#define RTL8187_TX_FLAG_RTS (1 << 23)
|
|
||||||
|
|
||||||
struct rtl8187_tx_hdr {
|
struct rtl8187_tx_hdr {
|
||||||
__le32 flags;
|
__le32 flags;
|
||||||
__le16 rts_duration;
|
__le16 rts_duration;
|
||||||
|
@@ -187,18 +187,18 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
|
|||||||
}
|
}
|
||||||
|
|
||||||
flags = skb->len;
|
flags = skb->len;
|
||||||
flags |= RTL8187_TX_FLAG_NO_ENCRYPT;
|
flags |= RTL818X_TX_DESC_FLAG_NO_ENC;
|
||||||
|
|
||||||
flags |= ieee80211_get_tx_rate(dev, info)->hw_value << 24;
|
flags |= ieee80211_get_tx_rate(dev, info)->hw_value << 24;
|
||||||
if (ieee80211_has_morefrags(((struct ieee80211_hdr *)skb->data)->frame_control))
|
if (ieee80211_has_morefrags(((struct ieee80211_hdr *)skb->data)->frame_control))
|
||||||
flags |= RTL8187_TX_FLAG_MORE_FRAG;
|
flags |= RTL818X_TX_DESC_FLAG_MOREFRAG;
|
||||||
if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) {
|
if (info->flags & IEEE80211_TX_CTL_USE_RTS_CTS) {
|
||||||
flags |= RTL8187_TX_FLAG_RTS;
|
flags |= RTL818X_TX_DESC_FLAG_RTS;
|
||||||
flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
||||||
rts_dur = ieee80211_rts_duration(dev, priv->vif,
|
rts_dur = ieee80211_rts_duration(dev, priv->vif,
|
||||||
skb->len, info);
|
skb->len, info);
|
||||||
} else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) {
|
} else if (info->flags & IEEE80211_TX_CTL_USE_CTS_PROTECT) {
|
||||||
flags |= RTL8187_TX_FLAG_CTS;
|
flags |= RTL818X_TX_DESC_FLAG_CTS;
|
||||||
flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -354,7 +354,7 @@ static void rtl8187_rx_cb(struct urb *urb)
|
|||||||
rx_status.freq = dev->conf.channel->center_freq;
|
rx_status.freq = dev->conf.channel->center_freq;
|
||||||
rx_status.band = dev->conf.channel->band;
|
rx_status.band = dev->conf.channel->band;
|
||||||
rx_status.flag |= RX_FLAG_TSFT;
|
rx_status.flag |= RX_FLAG_TSFT;
|
||||||
if (flags & (1 << 13))
|
if (flags & RTL818X_RX_DESC_FLAG_CRC32_ERR)
|
||||||
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
|
rx_status.flag |= RX_FLAG_FAILED_FCS_CRC;
|
||||||
ieee80211_rx_irqsafe(dev, skb, &rx_status);
|
ieee80211_rx_irqsafe(dev, skb, &rx_status);
|
||||||
|
|
||||||
|
@@ -193,4 +193,39 @@ struct rtl818x_rf_ops {
|
|||||||
void (*set_chan)(struct ieee80211_hw *, struct ieee80211_conf *);
|
void (*set_chan)(struct ieee80211_hw *, struct ieee80211_conf *);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Tx/Rx flags are common between RTL818X chips */
|
||||||
|
|
||||||
|
enum rtl818x_tx_desc_flags {
|
||||||
|
RTL818X_TX_DESC_FLAG_NO_ENC = (1 << 15),
|
||||||
|
RTL818X_TX_DESC_FLAG_TX_OK = (1 << 15),
|
||||||
|
RTL818X_TX_DESC_FLAG_SPLCP = (1 << 16),
|
||||||
|
RTL818X_TX_DESC_FLAG_RX_UNDER = (1 << 16),
|
||||||
|
RTL818X_TX_DESC_FLAG_MOREFRAG = (1 << 17),
|
||||||
|
RTL818X_TX_DESC_FLAG_CTS = (1 << 18),
|
||||||
|
RTL818X_TX_DESC_FLAG_RTS = (1 << 23),
|
||||||
|
RTL818X_TX_DESC_FLAG_LS = (1 << 28),
|
||||||
|
RTL818X_TX_DESC_FLAG_FS = (1 << 29),
|
||||||
|
RTL818X_TX_DESC_FLAG_DMA = (1 << 30),
|
||||||
|
RTL818X_TX_DESC_FLAG_OWN = (1 << 31)
|
||||||
|
};
|
||||||
|
|
||||||
|
enum rtl818x_rx_desc_flags {
|
||||||
|
RTL818X_RX_DESC_FLAG_ICV_ERR = (1 << 12),
|
||||||
|
RTL818X_RX_DESC_FLAG_CRC32_ERR = (1 << 13),
|
||||||
|
RTL818X_RX_DESC_FLAG_PM = (1 << 14),
|
||||||
|
RTL818X_RX_DESC_FLAG_RX_ERR = (1 << 15),
|
||||||
|
RTL818X_RX_DESC_FLAG_BCAST = (1 << 16),
|
||||||
|
RTL818X_RX_DESC_FLAG_PAM = (1 << 17),
|
||||||
|
RTL818X_RX_DESC_FLAG_MCAST = (1 << 18),
|
||||||
|
RTL818X_RX_DESC_FLAG_QOS = (1 << 19), /* RTL8187(B) only */
|
||||||
|
RTL818X_RX_DESC_FLAG_TRSW = (1 << 24), /* RTL8187(B) only */
|
||||||
|
RTL818X_RX_DESC_FLAG_SPLCP = (1 << 25),
|
||||||
|
RTL818X_RX_DESC_FLAG_FOF = (1 << 26),
|
||||||
|
RTL818X_RX_DESC_FLAG_DMA_FAIL = (1 << 27),
|
||||||
|
RTL818X_RX_DESC_FLAG_LS = (1 << 28),
|
||||||
|
RTL818X_RX_DESC_FLAG_FS = (1 << 29),
|
||||||
|
RTL818X_RX_DESC_FLAG_EOR = (1 << 30),
|
||||||
|
RTL818X_RX_DESC_FLAG_OWN = (1 << 31)
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* RTL818X_H */
|
#endif /* RTL818X_H */
|
||||||
|
Reference in New Issue
Block a user