Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+0 −31
Original line number Diff line number Diff line
@@ -24,20 +24,6 @@
#define ANAPARAM_PWR1_SHIFT	20
#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 {
	__le32 flags;
	__le16 rts_duration;
@@ -52,23 +38,6 @@ struct rtl8180_tx_desc {
	u32 reserved[2];
} __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 {
	__le32 flags;
	__le32 flags2;
+17 −17
Original line number Diff line number Diff line
@@ -110,12 +110,12 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)
		struct sk_buff *skb = priv->rx_buf[priv->rx_idx];
		u32 flags = le32_to_cpu(entry->flags);

		if (flags & RTL8180_RX_DESC_FLAG_OWN)
		if (flags & RTL818X_RX_DESC_FLAG_OWN)
			return;

		if (unlikely(flags & (RTL8180_RX_DESC_FLAG_DMA_FAIL |
				      RTL8180_RX_DESC_FLAG_FOF |
				      RTL8180_RX_DESC_FLAG_RX_ERR)))
		if (unlikely(flags & (RTL818X_RX_DESC_FLAG_DMA_FAIL |
				      RTL818X_RX_DESC_FLAG_FOF |
				      RTL818X_RX_DESC_FLAG_RX_ERR)))
			goto done;
		else {
			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.mactime = le64_to_cpu(entry->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;

			ieee80211_rx_irqsafe(dev, skb, &rx_status);
@@ -154,10 +154,10 @@ static void rtl8180_handle_rx(struct ieee80211_hw *dev)

	done:
		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);
		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;
	}
}
@@ -173,7 +173,7 @@ static void rtl8180_handle_tx(struct ieee80211_hw *dev, unsigned int prio)
		struct ieee80211_tx_info *info;
		u32 flags = le32_to_cpu(entry->flags);

		if (flags & RTL8180_TX_DESC_FLAG_OWN)
		if (flags & RTL818X_TX_DESC_FLAG_OWN)
			return;

		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));

		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;
			else
				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,
				 skb->len, PCI_DMA_TODEVICE);

	tx_flags = RTL8180_TX_DESC_FLAG_OWN | RTL8180_TX_DESC_FLAG_FS |
		   RTL8180_TX_DESC_FLAG_LS |
	tx_flags = RTL818X_TX_DESC_FLAG_OWN | RTL818X_TX_DESC_FLAG_FS |
		   RTL818X_TX_DESC_FLAG_LS |
		   (ieee80211_get_tx_rate(dev, info)->hw_value << 24) |
		   skb->len;

	if (priv->r8185)
		tx_flags |= RTL8180_TX_DESC_FLAG_DMA |
			    RTL8180_TX_DESC_FLAG_NO_ENC;
		tx_flags |= RTL818X_TX_DESC_FLAG_DMA |
			    RTL818X_TX_DESC_FLAG_NO_ENC;

	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;
	} 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;
	}

@@ -446,10 +446,10 @@ static int rtl8180_init_rx_ring(struct ieee80211_hw *dev)
		*mapping = pci_map_single(priv->pdev, skb_tail_pointer(skb),
					  MAX_RX_SIZE, PCI_DMA_FROMDEVICE);
		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);
	}
	entry->flags |= cpu_to_le32(RTL8180_RX_DESC_FLAG_EOR);
	entry->flags |= cpu_to_le32(RTL818X_RX_DESC_FLAG_EOR);
	return 0;
}

+0 −6
Original line number Diff line number Diff line
@@ -58,12 +58,6 @@ struct rtl8187b_rx_hdr {

/* {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 {
	__le32 flags;
	__le16 rts_duration;
+5 −5
Original line number Diff line number Diff line
@@ -187,18 +187,18 @@ static int rtl8187_tx(struct ieee80211_hw *dev, struct sk_buff *skb)
	}

	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;
	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) {
		flags |= RTL8187_TX_FLAG_RTS;
		flags |= RTL818X_TX_DESC_FLAG_RTS;
		flags |= ieee80211_get_rts_cts_rate(dev, info)->hw_value << 19;
		rts_dur = ieee80211_rts_duration(dev, priv->vif,
						 skb->len, info);
	} 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;
	}

@@ -354,7 +354,7 @@ static void rtl8187_rx_cb(struct urb *urb)
	rx_status.freq = dev->conf.channel->center_freq;
	rx_status.band = dev->conf.channel->band;
	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;
	ieee80211_rx_irqsafe(dev, skb, &rx_status);

+35 −0
Original line number Diff line number Diff line
@@ -193,4 +193,39 @@ struct rtl818x_rf_ops {
	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 */