• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/net/wireless/bcm43xx/
1#ifndef BCM43xx_XMIT_H_
2#define BCM43xx_XMIT_H_
3
4#include "bcm43xx_main.h"
5
6
7#define _bcm43xx_declare_plcp_hdr(size) \
8	struct bcm43xx_plcp_hdr##size {		\
9		union {				\
10			__le32 data;		\
11			__u8 raw[size];		\
12		} __attribute__((__packed__));	\
13	} __attribute__((__packed__))
14
15/* struct bcm43xx_plcp_hdr4 */
16_bcm43xx_declare_plcp_hdr(4);
17/* struct bcm43xx_plcp_hdr6 */
18_bcm43xx_declare_plcp_hdr(6);
19
20#undef _bcm43xx_declare_plcp_hdr
21
22/* Device specific TX header. To be prepended to TX frames. */
23struct bcm43xx_txhdr {
24	union {
25		struct {
26			__le16 flags;
27			__le16 wsec_rate;
28			__le16 frame_control;
29			u16 unknown_zeroed_0;
30			__le16 control;
31			u8 wep_iv[10];
32			u8 unknown_wsec_tkip_data[3];
33			PAD_BYTES(3);
34			u8 mac1[6];
35			u16 unknown_zeroed_1;
36			struct bcm43xx_plcp_hdr4 rts_cts_fallback_plcp;
37			__le16 rts_cts_dur_fallback;
38			struct bcm43xx_plcp_hdr4 fallback_plcp;
39			__le16 fallback_dur_id;
40			PAD_BYTES(2);
41			__le16 cookie;
42			__le16 unknown_scb_stuff;
43			struct bcm43xx_plcp_hdr6 rts_cts_plcp;
44			__le16 rts_cts_frame_control;
45			__le16 rts_cts_dur;
46			u8 rts_cts_mac1[6];
47			u8 rts_cts_mac2[6];
48			PAD_BYTES(2);
49			struct bcm43xx_plcp_hdr6 plcp;
50		} __attribute__((__packed__));
51		u8 raw[82];
52	} __attribute__((__packed__));
53} __attribute__((__packed__));
54
55/* Values/Masks for the device TX header */
56#define BCM43xx_TXHDRFLAG_EXPECTACK		0x0001
57#define BCM43xx_TXHDRFLAG_RTSCTS		0x0002
58#define BCM43xx_TXHDRFLAG_RTS			0x0004
59#define BCM43xx_TXHDRFLAG_FIRSTFRAGMENT		0x0008
60#define BCM43xx_TXHDRFLAG_DESTPSMODE		0x0020
61#define BCM43xx_TXHDRFLAG_RTSCTS_OFDM		0x0080
62#define BCM43xx_TXHDRFLAG_FALLBACKOFDM		0x0100
63#define BCM43xx_TXHDRFLAG_RTSCTSFALLBACK_OFDM	0x0200
64#define BCM43xx_TXHDRFLAG_CTS			0x0400
65#define BCM43xx_TXHDRFLAG_FRAMEBURST		0x0800
66
67#define BCM43xx_TXHDRCTL_OFDM			0x0001
68#define BCM43xx_TXHDRCTL_SHORT_PREAMBLE		0x0010
69#define BCM43xx_TXHDRCTL_ANTENNADIV_MASK	0x0030
70#define BCM43xx_TXHDRCTL_ANTENNADIV_SHIFT	8
71
72#define BCM43xx_TXHDR_RATE_MASK			0x0F00
73#define BCM43xx_TXHDR_RATE_SHIFT		8
74#define BCM43xx_TXHDR_RTSRATE_MASK		0xF000
75#define BCM43xx_TXHDR_RTSRATE_SHIFT		12
76#define BCM43xx_TXHDR_WSEC_KEYINDEX_MASK	0x00F0
77#define BCM43xx_TXHDR_WSEC_KEYINDEX_SHIFT	4
78#define BCM43xx_TXHDR_WSEC_ALGO_MASK		0x0003
79#define BCM43xx_TXHDR_WSEC_ALGO_SHIFT		0
80
81void bcm43xx_generate_txhdr(struct bcm43xx_private *bcm,
82			    struct bcm43xx_txhdr *txhdr,
83			    const unsigned char *fragment_data,
84			    const unsigned int fragment_len,
85			    const int is_first_fragment,
86			    const u16 cookie);
87
88/* RX header as received from the hardware. */
89struct bcm43xx_rxhdr {
90	/* Frame Length. Must be generated explicitely in PIO mode. */
91	__le16 frame_length;
92	PAD_BYTES(2);
93	/* Flags field 1 */
94	__le16 flags1;
95	u8 rssi;
96	u8 signal_quality;
97	PAD_BYTES(2);
98	/* Flags field 3 */
99	__le16 flags3;
100	/* Flags field 2 */
101	__le16 flags2;
102	/* Lower 16bits of the TSF at the time the frame started. */
103	__le16 mactime;
104	PAD_BYTES(14);
105} __attribute__((__packed__));
106
107#define BCM43xx_RXHDR_FLAGS1_OFDM		(1 << 0)
108#define BCM43xx_RXHDR_FLAGS1_SHORTPREAMBLE	(1 << 7)
109#define BCM43xx_RXHDR_FLAGS1_2053RSSIADJ	(1 << 14)
110
111#define BCM43xx_RXHDR_FLAGS2_INVALIDFRAME	(1 << 0)
112#define BCM43xx_RXHDR_FLAGS2_TYPE2FRAME		(1 << 2)
113
114#define BCM43xx_RXHDR_FLAGS3_2050RSSIADJ	(1 << 10)
115
116/* Transmit Status as received from the hardware. */
117struct bcm43xx_hwxmitstatus {
118	PAD_BYTES(4);
119	__le16 cookie;
120	u8 flags;
121	u8 cnt1:4,
122	   cnt2:4;
123	PAD_BYTES(2);
124	__le16 seq;
125	__le16 unknown;
126} __attribute__((__packed__));
127
128/* Transmit Status in CPU byteorder. */
129struct bcm43xx_xmitstatus {
130	u16 cookie;
131	u8 flags;
132	u8 cnt1:4,
133	   cnt2:4;
134	u16 seq;
135	u16 unknown;
136};
137
138#define BCM43xx_TXSTAT_FLAG_AMPDU	0x10
139#define BCM43xx_TXSTAT_FLAG_INTER	0x20
140
141u8 bcm43xx_plcp_get_ratecode_cck(const u8 bitrate);
142u8 bcm43xx_plcp_get_ratecode_ofdm(const u8 bitrate);
143
144int bcm43xx_rx(struct bcm43xx_private *bcm,
145	       struct sk_buff *skb,
146	       struct bcm43xx_rxhdr *rxhdr);
147
148#endif /* BCM43xx_XMIT_H_ */
149