Merge branch 'topic/asoc' into for-linus
[linux-2.6] / drivers / staging / agnx / sta.h
1 #ifndef AGNX_STA_H_
2 #define AGNX_STA_H_
3
4 #define STA_TX_WQ_NUM   8       /* The number of TX workqueue one STA has */
5
6 struct agnx_hash_cmd {
7         __be32 cmdhi;
8 #define MACLO           0xFFFF0000
9 #define MACLO_SHIFT     16
10 #define STA_ID          0x0000FFF0
11 #define STA_ID_SHIFT    4
12 #define CMD             0x0000000C
13 #define CMD_SHIFT       2
14 #define STATUS          0x00000002
15 #define STATUS_SHIFT    1
16 #define PASS            0x00000001
17 #define PASS_SHIFT      1
18         __be32 cmdlo;
19 }__attribute__((__packed__));
20
21
22 /*
23  * Station Power Template
24  * FIXME Just for agn100 yet
25  */
26 struct agnx_sta_power {
27         __le32 reg;
28 #define SIGNAL                  0x000000FF /* signal */
29 #define SIGNAL_SHIFT            0
30 #define RATE                    0x00000F00
31 #define RATE_SHIFT              8
32 #define TIFS                    0x00001000
33 #define TIFS_SHIFT              12
34 #define EDCF                    0x00002000
35 #define EDCF_SHIFT              13
36 #define CHANNEL_BOND            0x00004000
37 #define CHANNEL_BOND_SHIFT      14
38 #define PHY_MODE                0x00038000
39 #define PHY_MODE_SHIFT          15
40 #define POWER_LEVEL             0x007C0000
41 #define POWER_LEVEL_SHIFT       18
42 #define NUM_TRANSMITTERS        0x00800000
43 #define NUM_TRANSMITTERS_SHIFT  23
44 } __attribute__((__packed__));
45
46 /*
47  * TX Workqueue Descriptor
48  */
49 struct agnx_sta_tx_wq {
50         __le32 reg0;
51 #define HEAD_POINTER_LOW        0xFF000000 /* Head pointer low */
52 #define HEAD_POINTER_LOW_SHIFT  24
53 #define TAIL_POINTER            0x00FFFFFF /* Tail pointer */
54 #define TAIL_POINTER_SHIFT      0
55
56         __le32 reg3;
57 #define ACK_POINTER_LOW         0xFFFF0000      /* ACK pointer low */
58 #define ACK_POINTER_LOW_SHIFT   16
59 #define HEAD_POINTER_HIGH       0x0000FFFF      /* Head pointer high */
60 #define HEAD_POINTER_HIGH_SHIFT 0
61
62         __le32 reg1;
63 /* ACK timeout tail packet count */
64 #define ACK_TIMOUT_TAIL_PACK_CNT        0xFFF00000
65 #define ACK_TIMOUT_TAIL_PACK_CNT_SHIFT  20
66 /* Head timeout tail packet count */
67 #define HEAD_TIMOUT_TAIL_PACK_CNT       0x000FFF00
68 #define HEAD_TIMOUT_TAIL_PACK_CNT_SHIFT 8
69 #define ACK_POINTER_HIGH                0x000000FF /* ACK pointer high */
70 #define ACK_POINTER_HIGH_SHIFT          0
71
72         __le32 reg2;
73 #define WORK_QUEUE_VALID                0x80000000 /* valid */
74 #define WORK_QUEUE_VALID_SHIFT          31
75 #define WORK_QUEUE_ACK_TYPE             0x40000000 /* ACK type */
76 #define WORK_QUEUE_ACK_TYPE_SHIFT       30
77 /* Head timeout window limit fragmentation count */
78 #define HEAD_TIMOUT_WIN_LIM_FRAG_CNT    0x3FFF0000
79 #define HEAD_TIMOUT_WIN_LIM_FRAG_CNT_SHIFT      16
80 /* Head timeout window limit byte count */
81 #define HEAD_TIMOUT_WIN_LIM_BYTE_CNT    0x0000FFFF
82 #define HEAD_TIMOUT_WIN_LIM_BYTE_CNT_SHIFT       0
83 } __attribute__((__packed__));
84
85
86 /*
87  * Traffic Class Structure
88  */
89 struct agnx_sta_traffic {
90         __le32 reg0;
91 #define ACK_TIMOUT_CNT          0xFF800000 /* ACK Timeout Counts */
92 #define ACK_TIMOUT_CNT_SHIFT    23
93 #define TRAFFIC_ACK_TYPE        0x00600000 /* ACK Type */
94 #define TRAFFIC_ACK_TYPE_SHIFT  21
95 #define NEW_PACKET              0x00100000 /* New Packet  */
96 #define NEW_PACKET_SHIFT        20
97 #define TRAFFIC_VALID           0x00080000 /* Valid */
98 #define TRAFFIC_VALID_SHIFT     19
99 #define RX_HDR_DESC_POINTER     0x0007FFFF /* RX Header Descripter pointer */
100 #define RX_HDR_DESC_POINTER_SHIFT        0
101
102         __le32 reg1;
103 #define RX_PACKET_TIMESTAMP     0xFFFF0000 /* RX Packet Timestamp */
104 #define RX_PACKET_TIMESTAMP_SHIFT       16
105 #define TRAFFIC_RESERVED        0x0000E000 /* Reserved */
106 #define TRAFFIC_RESERVED_SHIFT  13
107 #define SV                      0x00001000 /* sv */
108 #define SV_SHIFT                12
109 #define RX_SEQUENCE_NUM         0x00000FFF /* RX Sequence Number */
110 #define RX_SEQUENCE_NUM_SHIFT   0
111
112         __le32 tx_replay_cnt_low; /* TX Replay Counter Low */
113
114         __le16 tx_replay_cnt_high; /* TX Replay Counter High */
115         __le16 rx_replay_cnt_high; /* RX Replay Counter High */
116
117         __be32 rx_replay_cnt_low; /* RX Replay Counter Low */
118 } __attribute__((__packed__));
119
120 /*
121  * Station Descriptors
122  */
123 struct agnx_sta {
124         __le32 tx_session_keys[4]; /* Transmit Session Key (0-3) */
125         __le32 rx_session_keys[4]; /* Receive Session Key (0-3) */
126
127         __le32 reg;
128 #define ID_1                    0xC0000000 /* id 1 */
129 #define ID_1_SHIFT              30
130 #define ID_0                    0x30000000 /* id 0 */
131 #define ID_0_SHIFT              28
132 #define ENABLE_CONCATENATION    0x0FF00000 /* Enable concatenation */
133 #define ENABLE_CONCATENATION_SHIFT      20
134 #define ENABLE_DECOMPRESSION    0x000FF000 /* Enable decompression */
135 #define ENABLE_DECOMPRESSION_SHIFT      12
136 #define STA_RESERVED            0x00000C00 /* Reserved */
137 #define STA_RESERVED_SHIFT      10
138 #define EAP                     0x00000200 /* EAP */
139 #define EAP_SHIFT               9
140 #define ED_NULL                 0x00000100 /* ED NULL */
141 #define ED_NULL_SHIFT           8
142 #define ENCRYPTION_POLICY       0x000000E0 /* Encryption Policy */
143 #define ENCRYPTION_POLICY_SHIFT 5
144 #define DEFINED_KEY_ID          0x00000018 /* Defined Key ID */
145 #define DEFINED_KEY_ID_SHIFT    3
146 #define FIXED_KEY               0x00000004 /* Fixed Key */
147 #define FIXED_KEY_SHIFT         2
148 #define KEY_VALID               0x00000002 /* Key Valid */
149 #define KEY_VALID_SHIFT         1
150 #define STATION_VALID           0x00000001 /* Station Valid */
151 #define STATION_VALID_SHIFT     0
152
153         __le32 tx_aes_blks_unicast; /* TX AES Blks Unicast */
154         __le32 rx_aes_blks_unicast; /* RX AES Blks Unicast */
155
156         __le16 aes_format_err_unicast_cnt; /* AES Format Error Unicast Counts */
157         __le16 aes_replay_unicast; /* AES Replay Unicast */
158
159         __le16 aes_decrypt_err_unicast; /* AES Decrypt Error Unicast */
160         __le16 aes_decrypt_err_default; /* AES Decrypt Error default */
161
162         __le16 single_retry_packets; /* Single Retry Packets */
163         __le16 failed_tx_packets; /* Failed Tx Packets */
164
165         __le16 muti_retry_packets; /* Multiple Retry Packets */
166         __le16 ack_timeouts;    /* ACK Timeouts */
167
168         __le16 frag_tx_cnt;     /* Fragment TX Counts */
169         __le16 rts_brq_sent;    /* RTS Brq Sent */
170
171         __le16 tx_packets;      /* TX Packets */
172         __le16 cts_back_timeout; /* CTS Back Timeout */
173
174         __le32 phy_stats_high;  /* PHY Stats High */
175         __le32 phy_stats_low;   /* PHY Stats Low */
176
177         struct agnx_sta_traffic traffic[8];     /* Traffic Class Structure (8) */
178
179         __le16 traffic_class0_frag_success; /* Traffic Class 0 Fragment Success */
180         __le16 traffic_class1_frag_success; /* Traffic Class 1 Fragment Success */
181         __le16 traffic_class2_frag_success; /* Traffic Class 2 Fragment Success */
182         __le16 traffic_class3_frag_success; /* Traffic Class 3 Fragment Success */
183         __le16 traffic_class4_frag_success; /* Traffic Class 4 Fragment Success */
184         __le16 traffic_class5_frag_success; /* Traffic Class 5 Fragment Success */
185         __le16 traffic_class6_frag_success; /* Traffic Class 6 Fragment Success */
186         __le16 traffic_class7_frag_success; /* Traffic Class 7 Fragment Success */
187
188         __le16 num_frag_non_prime_rates; /* number of Fragments for non-prime rates */
189         __le16 ack_timeout_non_prime_rates; /* ACK Timeout for non-prime rates */
190
191 } __attribute__((__packed__));
192
193
194 struct agnx_beacon_hdr {
195         struct agnx_sta_power power; /* Tx Station Power Template  */
196         u8 phy_hdr[6];          /* PHY Hdr */
197         u8 frame_len_lo;        /* Frame Length Lo */
198         u8 frame_len_hi;        /* Frame Length Hi */
199         u8 mac_hdr[24];         /* MAC Header */
200         /* FIXME */
201         /* 802.11(abg) beacon */
202 } __attribute__((__packed__));
203
204 void hash_write(struct agnx_priv *priv, u8 *mac_addr, u8 sta_id);
205 void hash_dump(struct agnx_priv *priv, u8 sta_id);
206 void hash_read(struct agnx_priv *priv, u32 reghi, u32 reglo, u8 sta_id);
207 void hash_delete(struct agnx_priv *priv, u32 reghi, u32 reglo, u8 sta_id);
208
209 void get_sta_power(struct agnx_priv *priv, struct agnx_sta_power *power, unsigned int sta_idx);
210 void set_sta_power(struct agnx_priv *priv, struct agnx_sta_power *power,
211                    unsigned int sta_idx);
212 void get_sta_tx_wq(struct agnx_priv *priv, struct agnx_sta_tx_wq *tx_wq,
213                    unsigned int sta_idx, unsigned int wq_idx);
214 void set_sta_tx_wq(struct agnx_priv *priv, struct agnx_sta_tx_wq *tx_wq,
215                    unsigned int sta_idx, unsigned int wq_idx);
216 void get_sta(struct agnx_priv *priv, struct agnx_sta *sta, unsigned int sta_idx);
217 void set_sta(struct agnx_priv *priv, struct agnx_sta *sta, unsigned int sta_idx);
218
219 void sta_power_init(struct agnx_priv *priv, unsigned int num);
220 void sta_init(struct agnx_priv *priv, unsigned int num);
221
222 #endif /* AGNX_STA_H_ */