Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / staging / rtl8192u / ieee80211 / rtl819x_TS.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _TSTYPE_H_
3 #define _TSTYPE_H_
4 #include "rtl819x_Qos.h"
5
6 #define TS_ADDBA_DELAY          60
7
8 #define TOTAL_TS_NUM            16
9 #define TCLAS_NUM               4
10
11 /*  This define the Tx/Rx directions */
12 enum tr_select {
13         TX_DIR = 0,
14         RX_DIR = 1,
15 };
16
17 union qos_tclas {
18         struct type_general {
19                 u8              priority;
20                 u8              classifier_type;
21                 u8              mask;
22         } type_general;
23
24         struct type0_eth {
25                 u8              priority;
26                 u8              classifier_type;
27                 u8              mask;
28                 u8              src_addr[6];
29                 u8              dst_addr[6];
30                 u16             type;
31         } type0_eth;
32
33         struct type1_ipv4 {
34                 u8              priority;
35                 u8              classifier_type;
36                 u8              mask;
37                 u8              version;
38                 u8              src_ip[4];
39                 u8              dst_ip[4];
40                 u16             src_port;
41                 u16             dst_port;
42                 u8              dscp;
43                 u8              protocol;
44                 u8              reserved;
45         } type1_ipv4;
46
47         struct type1_ipv6 {
48                 u8              priority;
49                 u8              classifier_type;
50                 u8              mask;
51                 u8              version;
52                 u8              src_ip[16];
53                 u8              dst_ip[16];
54                 u16             src_port;
55                 u16             dst_port;
56                 u8              flow_label[3];
57         } type1_ipv6;
58
59         struct type2_8021q {
60                 u8              priority;
61                 u8              classifier_type;
62                 u8              mask;
63                 u16             tag_type;
64         } type2_8021q;
65 };
66
67 struct ts_common_info {
68         struct list_head                list;
69         struct timer_list               setup_timer;
70         struct timer_list               inact_timer;
71         u8                              addr[6];
72         struct tspec_body               t_spec;
73         union qos_tclas                 t_class[TCLAS_NUM];
74         u8                              t_clas_proc;
75         u8                              t_clas_num;
76 };
77
78 struct tx_ts_record {
79         struct ts_common_info           ts_common_info;
80         u16                             tx_cur_seq;
81         struct ba_record                tx_pending_ba_record;
82         struct ba_record                tx_admitted_ba_record;
83         u8                              add_ba_req_in_progress;
84         u8                              add_ba_req_delayed;
85         u8                              using_ba;
86         struct timer_list               ts_add_ba_timer;
87         u8                              num;
88 };
89
90 struct rx_ts_record {
91         struct ts_common_info           ts_common_info;
92         u16                             rx_indicate_seq;
93         u16                             rx_timeout_indicate_seq;
94         struct list_head                rx_pending_pkt_list;
95         struct timer_list               rx_pkt_pending_timer;
96         struct ba_record                rx_admitted_ba_record;
97         u16                             rx_last_seq_num;
98         u8                              rx_last_frag_num;
99         u8                              num;
100 };
101
102 #endif