aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtl8180.h
diff options
context:
space:
mode:
authorMichael Wu <flamingice@sourmilk.net>2007-10-14 14:43:16 -0400
committerDavid S. Miller <davem@davemloft.net>2008-01-28 18:09:35 -0500
commitf653211197f3841f383fa9757ef8ce182c6cf627 (patch)
treeba56e1fa09924d1ffab4f825044175291786b58e /drivers/net/wireless/rtl8180.h
parentfa1c114fdaa605496045e56c42d0c8aa4c139e57 (diff)
Add rtl8180 wireless driver
This patch adds a mac80211 based wireless driver for the rtl8180 and rtl8185 PCI wireless cards. Also included are some rtl8187 changes required due to the relationship between that driver and this one. Michael Wu is primarily responsible for the initial driver and rtl8185 support. Andreas Merello provided the additional rtl8180 support. Thanks to Jukka Ruohonen for the donating a rtl8185 card! It was very helpful for the rtl8225z2 code. The Signed-off-by information below is collected from the individual patches submitted to wireless-2.6 before merging this driver upstream. Signed-off-by: Andrea Merello <andreamrl@tiscali.it> Signed-off-by: Johannes Berg <johannes@sipsolutions.net> Signed-off-by: Pavel Roskin <proski@gnu.org> Signed-off-by: Michael Wu <flamingice@sourmilk.net> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rtl8180.h')
-rw-r--r--drivers/net/wireless/rtl8180.h151
1 files changed, 151 insertions, 0 deletions
diff --git a/drivers/net/wireless/rtl8180.h b/drivers/net/wireless/rtl8180.h
new file mode 100644
index 000000000000..0b333cacbd85
--- /dev/null
+++ b/drivers/net/wireless/rtl8180.h
@@ -0,0 +1,151 @@
1#ifndef RTL8180_H
2#define RTL8180_H
3
4#include "rtl818x.h"
5
6#define MAX_RX_SIZE IEEE80211_MAX_RTS_THRESHOLD
7
8#define RF_PARAM_ANALOGPHY (1 << 0)
9#define RF_PARAM_ANTBDEFAULT (1 << 1)
10#define RF_PARAM_CARRIERSENSE1 (1 << 2)
11#define RF_PARAM_CARRIERSENSE2 (1 << 3)
12
13#define BB_ANTATTEN_CHAN14 0x0C
14#define BB_ANTENNA_B 0x40
15
16#define BB_HOST_BANG (1 << 30)
17#define BB_HOST_BANG_EN (1 << 2)
18#define BB_HOST_BANG_CLK (1 << 1)
19#define BB_HOST_BANG_DATA 1
20
21#define ANAPARAM_TXDACOFF_SHIFT 27
22#define ANAPARAM_PWR0_SHIFT 28
23#define ANAPARAM_PWR0_MASK (0x07 << ANAPARAM_PWR0_SHIFT)
24#define ANAPARAM_PWR1_SHIFT 20
25#define ANAPARAM_PWR1_MASK (0x7F << ANAPARAM_PWR1_SHIFT)
26
27enum rtl8180_tx_desc_flags {
28 RTL8180_TX_DESC_FLAG_NO_ENC = (1 << 15),
29 RTL8180_TX_DESC_FLAG_TX_OK = (1 << 15),
30 RTL8180_TX_DESC_FLAG_SPLCP = (1 << 16),
31 RTL8180_TX_DESC_FLAG_RX_UNDER = (1 << 16),
32 RTL8180_TX_DESC_FLAG_MOREFRAG = (1 << 17),
33 RTL8180_TX_DESC_FLAG_CTS = (1 << 18),
34 RTL8180_TX_DESC_FLAG_RTS = (1 << 23),
35 RTL8180_TX_DESC_FLAG_LS = (1 << 28),
36 RTL8180_TX_DESC_FLAG_FS = (1 << 29),
37 RTL8180_TX_DESC_FLAG_DMA = (1 << 30),
38 RTL8180_TX_DESC_FLAG_OWN = (1 << 31)
39};
40
41struct rtl8180_tx_desc {
42 __le32 flags;
43 __le16 rts_duration;
44 __le16 plcp_len;
45 __le32 tx_buf;
46 __le32 frame_len;
47 __le32 next_tx_desc;
48 u8 cw;
49 u8 retry_limit;
50 u8 agc;
51 u8 flags2;
52 u32 reserved[2];
53} __attribute__ ((packed));
54
55enum rtl8180_rx_desc_flags {
56 RTL8180_RX_DESC_FLAG_ICV_ERR = (1 << 12),
57 RTL8180_RX_DESC_FLAG_CRC32_ERR = (1 << 13),
58 RTL8180_RX_DESC_FLAG_PM = (1 << 14),
59 RTL8180_RX_DESC_FLAG_RX_ERR = (1 << 15),
60 RTL8180_RX_DESC_FLAG_BCAST = (1 << 16),
61 RTL8180_RX_DESC_FLAG_PAM = (1 << 17),
62 RTL8180_RX_DESC_FLAG_MCAST = (1 << 18),
63 RTL8180_RX_DESC_FLAG_SPLCP = (1 << 25),
64 RTL8180_RX_DESC_FLAG_FOF = (1 << 26),
65 RTL8180_RX_DESC_FLAG_DMA_FAIL = (1 << 27),
66 RTL8180_RX_DESC_FLAG_LS = (1 << 28),
67 RTL8180_RX_DESC_FLAG_FS = (1 << 29),
68 RTL8180_RX_DESC_FLAG_EOR = (1 << 30),
69 RTL8180_RX_DESC_FLAG_OWN = (1 << 31)
70};
71
72struct rtl8180_rx_desc {
73 __le32 flags;
74 __le32 flags2;
75 union {
76 __le32 rx_buf;
77 __le64 tsft;
78 };
79} __attribute__ ((packed));
80
81struct rtl8180_tx_ring {
82 struct rtl8180_tx_desc *desc;
83 dma_addr_t dma;
84 unsigned int idx;
85 unsigned int entries;
86 struct sk_buff_head queue;
87};
88
89struct rtl8180_priv {
90 /* common between rtl818x drivers */
91 struct rtl818x_csr __iomem *map;
92 const struct rtl818x_rf_ops *rf;
93 int mode;
94 int if_id;
95
96 /* rtl8180 driver specific */
97 spinlock_t lock;
98 struct rtl8180_rx_desc *rx_ring;
99 dma_addr_t rx_ring_dma;
100 unsigned int rx_idx;
101 struct sk_buff *rx_buf[32];
102 struct rtl8180_tx_ring tx_ring[4];
103 struct ieee80211_channel channels[14];
104 struct ieee80211_rate rates[12];
105 struct ieee80211_hw_mode modes[2];
106 struct pci_dev *pdev;
107 u32 rx_conf;
108
109 int r8185;
110 u32 anaparam;
111 u16 rfparam;
112 u8 csthreshold;
113};
114
115void rtl8180_write_phy(struct ieee80211_hw *dev, u8 addr, u32 data);
116void rtl8180_set_anaparam(struct rtl8180_priv *priv, u32 anaparam);
117
118static inline u8 rtl818x_ioread8(struct rtl8180_priv *priv, u8 __iomem *addr)
119{
120 return ioread8(addr);
121}
122
123static inline u16 rtl818x_ioread16(struct rtl8180_priv *priv, __le16 __iomem *addr)
124{
125 return ioread16(addr);
126}
127
128static inline u32 rtl818x_ioread32(struct rtl8180_priv *priv, __le32 __iomem *addr)
129{
130 return ioread32(addr);
131}
132
133static inline void rtl818x_iowrite8(struct rtl8180_priv *priv,
134 u8 __iomem *addr, u8 val)
135{
136 iowrite8(val, addr);
137}
138
139static inline void rtl818x_iowrite16(struct rtl8180_priv *priv,
140 __le16 __iomem *addr, u16 val)
141{
142 iowrite16(val, addr);
143}
144
145static inline void rtl818x_iowrite32(struct rtl8180_priv *priv,
146 __le32 __iomem *addr, u32 val)
147{
148 iowrite32(val, addr);
149}
150
151#endif /* RTL8180_H */