GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / staging / rtl8192u / r819xU_cmdpkt.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef R819XUSB_CMDPKT_H
3 #define R819XUSB_CMDPKT_H
4 /* Different command packet have dedicated message length and definition. */
5 #define         CMPK_RX_TX_FB_SIZE              sizeof(struct cmd_pkt_tx_feedback)      /* 20 */
6 #define         CMPK_BOTH_QUERY_CONFIG_SIZE     sizeof(struct cmd_pkt_set_configuration)        /* 16 */
7 #define         CMPK_RX_TX_STS_SIZE             sizeof(cmpk_tx_status_t)
8 #define         CMPK_TX_RAHIS_SIZE              sizeof(cmpk_tx_rahis_t)
9
10 /* 2008/05/08 amy For USB constant. */
11 #define ISR_TX_BCN_OK           BIT(27)         /* Transmit Beacon OK */
12 #define ISR_TX_BCN_ERR          BIT(26)         /* Transmit Beacon Error */
13 #define ISR_BCN_TIMER_INTR      BIT(13)         /* Beacon Timer Interrupt */
14
15 /* Define element ID of command packet. */
16
17 /*------------------------------Define structure----------------------------*/
18 /* Define different command packet structure. */
19 /* 1. RX side: TX feedback packet. */
20 struct cmd_pkt_tx_feedback {
21         /* DWORD 0 */
22         u8      element_id;                     /* Command packet type. */
23         u8      length;                         /* Command packet length. */
24         /* Change tx feedback info field. */
25         /*------TX Feedback Info Field */
26         u8      TID:4;
27         u8      fail_reason:3;
28         u8      tok:1;                          /* Transmit ok. */
29         u8      reserve1:4;
30         u8      pkt_type:2;
31         u8      bandwidth:1;
32         u8      qos_pkt:1;
33
34         /* DWORD 1 */
35         u8      reserve2;
36         /*------TX Feedback Info Field */
37         u8      retry_cnt;
38         u16     pkt_id;
39
40         /* DWORD 3 */
41         u16     seq_num;
42         u8      s_rate;                         /* Start rate. */
43         u8      f_rate;                         /* Final rate. */
44
45         /* DWORD 4 */
46         u8      s_rts_rate;
47         u8      f_rts_rate;
48         u16     pkt_length;
49
50         /* DWORD 5 */
51         u16     reserve3;
52         u16     duration;
53 };
54
55 /* 2. RX side: Interrupt status packet. It includes Beacon State,
56  * Beacon Timer Interrupt and other useful information in MAC ISR Reg.
57  */
58 struct cmd_pkt_interrupt_status {
59         u8      element_id;                     /* Command packet type. */
60         u8      length;                         /* Command packet length. */
61         u16     reserve;
62         u32     interrupt_status;               /* Interrupt Status. */
63 };
64
65 /* 3. TX side: Set configuration packet. */
66 struct cmd_pkt_set_configuration {
67         u8      element_id;                     /* Command packet type. */
68         u8      length;                         /* Command packet length. */
69         u16     reserve1;
70         /* Configuration info. */
71         u8      cfg_reserve1:3;
72         u8      cfg_size:2;
73         u8      cfg_type:2;
74         u8      cfg_action:1;
75         u8      cfg_reserve2;
76         u8      cfg_page:4;
77         u8      cfg_reserve3:4;
78         u8      cfg_offset;
79         u32     value;
80         u32     mask;
81 };
82
83 /* 4. Both side : TX/RX query configuration packet. The query structure is the
84  *    same as set configuration.
85  */
86 #define         cmpk_query_cfg  cmd_pkt_set_configuration
87
88 /* 5. Multi packet feedback status. */
89 typedef struct tag_tx_stats_feedback {
90         /* For endian transfer --> Driver will not the same as
91          *  firmware structure.
92          */
93         /* DW 0 */
94         u16     reserve1;
95         u8      length;                         /* Command packet length */
96         u8      element_id;                     /* Command packet type */
97
98         /* DW 1 */
99         u16     txfail;                         /* Tx fail count */
100         u16     txok;                           /* Tx ok count */
101
102         /* DW 2 */
103         u16     txmcok;                         /* Tx multicast */
104         u16     txretry;                        /* Tx retry count */
105
106         /* DW 3 */
107         u16     txucok;                         /* Tx unicast */
108         u16     txbcok;                         /* Tx broadcast */
109
110         /* DW 4 */
111         u16     txbcfail;
112         u16     txmcfail;
113
114         /* DW 5 */
115         u16     reserve2;
116         u16     txucfail;
117
118         /* DW 6-8 */
119         u32     txmclength;
120         u32     txbclength;
121         u32     txuclength;
122
123         /* DW 9 */
124         u16     reserve3_23;
125         u8      reserve3_1;
126         u8      rate;
127 } __packed cmpk_tx_status_t;
128
129 /* 6. Debug feedback message. */
130 /* Define RX debug message  */
131 typedef struct tag_rx_debug_message_feedback {
132         /* For endian transfer --> for driver */
133         /* DW 0 */
134         u16     reserve1;
135         u8      length;                         /* Command packet length */
136         u8      element_id;                     /* Command packet type */
137
138         /* DW 1-?? */
139         /* Variable debug message. */
140
141 } cmpk_rx_dbginfo_t;
142
143 /* Define transmit rate history. For big endian format. */
144 typedef struct tag_tx_rate_history {
145         /* For endian transfer --> for driver */
146         /* DW 0 */
147         u8      element_id;                     /* Command packet type */
148         u8      length;                         /* Command packet length */
149         u16     reserved1;
150
151         /* DW 1-2       CCK rate counter */
152         u16     cck[4];
153
154         /* DW 3-6 */
155         u16     ofdm[8];
156
157         /* DW 7-14      BW=0 SG=0
158          * DW 15-22     BW=1 SG=0
159          * DW 23-30     BW=0 SG=1
160          * DW 31-38     BW=1 SG=1
161          */
162         u16     ht_mcs[4][16];
163
164 } __packed cmpk_tx_rahis_t;
165
166 typedef enum tag_command_packet_directories {
167         RX_TX_FEEDBACK                  = 0,
168         RX_INTERRUPT_STATUS             = 1,
169         TX_SET_CONFIG                   = 2,
170         BOTH_QUERY_CONFIG               = 3,
171         RX_TX_STATUS                    = 4,
172         RX_DBGINFO_FEEDBACK             = 5,
173         RX_TX_PER_PKT_FEEDBACK          = 6,
174         RX_TX_RATE_HISTORY              = 7,
175         RX_CMD_ELE_MAX
176 } cmpk_element_e;
177
178 typedef enum _rt_status {
179         RT_STATUS_SUCCESS,
180         RT_STATUS_FAILURE,
181         RT_STATUS_PENDING,
182         RT_STATUS_RESOURCE
183 } rt_status, *prt_status;
184
185 u32 cmpk_message_handle_rx(struct net_device *dev,
186                            struct ieee80211_rx_stats *pstats);
187 rt_status SendTxCommandPacket(struct net_device *dev,
188                               void *pData, u32 DataLen);
189
190 #endif