Commit 38e3b0d8 authored by Herton Ronaldo Krzesinski's avatar Herton Ronaldo Krzesinski Committed by John W. Linville

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: default avatarHerton Ronaldo Krzesinski <herton@mandriva.com.br>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 2540e051
...@@ -24,20 +24,6 @@ ...@@ -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 { ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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) ...@@ -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) ...@@ -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 { ...@@ -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 */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment