Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
d76eaf7e
Commit
d76eaf7e
authored
Jul 27, 2011
by
Larry Finger
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
staging: rtl8192e: Cleanup checkpatch -f warnings and errors - Part VI
Signed-off-by:
Larry Finger
<
Larry.Finger@lwfinger.net
>
parent
81108afb
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
312 additions
and
308 deletions
+312
-308
drivers/staging/rtl8192e/rtl819x_Qos.h
drivers/staging/rtl8192e/rtl819x_Qos.h
+138
-107
drivers/staging/rtl8192e/rtl819x_TS.h
drivers/staging/rtl8192e/rtl819x_TS.h
+2
-0
drivers/staging/rtl8192e/rtl819x_TSProc.c
drivers/staging/rtl8192e/rtl819x_TSProc.c
+172
-201
No files found.
drivers/staging/rtl8192e/rtl819x_Qos.h
View file @
d76eaf7e
...
...
@@ -67,14 +67,13 @@ union qos_tsinfo {
u8
ucTSInfoAckPolicy
:
2
;
u8
ucSchedule
:
1
;
u8
ucReserved
:
7
;
}
field
;
}
field
;
};
union
tspec_body
{
u8
charData
[
55
];
struct
{
struct
{
union
qos_tsinfo
TSInfo
;
u16
NominalMSDUsize
;
u16
MaxMSDUsize
;
...
...
@@ -108,6 +107,7 @@ struct octet_string {
u8
*
Octet
;
u16
Length
;
};
#define MAX_WMMELE_LENGTH 64
#define QOS_MODE u32
...
...
@@ -143,28 +143,43 @@ enum ack_policy {
};
#define SET_WMM_QOS_INFO_FIELD(_pStart, _val) WriteEF1Byte(_pStart, _val)
#define SET_WMM_QOS_INFO_FIELD(_pStart, _val) \
WriteEF1Byte(_pStart, _val)
#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 4)
#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val)
#define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 0, 4)
#define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val)
#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 7, 1)
#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 7, 1)
#define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 0, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 0, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 1, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 1, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 2, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 2, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) LE_BITS_TO_1BYTE(_pStart, 3, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 3, 1)
#define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) LE_BITS_TO_1BYTE(_pStart, 5, 2)
#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val)
#define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) \
LE_BITS_TO_1BYTE(_pStart, 5, 2)
#define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) \
SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val)
enum
qos_ie_source
{
QOSIE_SRC_ADDTSREQ
,
...
...
@@ -186,26 +201,40 @@ enum qos_ie_source {
#define AC_PARAM_SIZE 4
#define GET_WMM_AC_PARAM_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 4) )
#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val)
#define GET_WMM_AC_PARAM_AIFSN(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 0, 4))
#define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val)
#define GET_WMM_AC_PARAM_ACM(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 4, 1) )
#define SET_WMM_AC_PARAM_ACM(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val)
#define GET_WMM_AC_PARAM_ACM(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 4, 1))
#define SET_WMM_AC_PARAM_ACM(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val)
#define GET_WMM_AC_PARAM_ACI(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 5, 2) )
#define SET_WMM_AC_PARAM_ACI(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val)
#define GET_WMM_AC_PARAM_ACI(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 5, 2))
#define SET_WMM_AC_PARAM_ACI(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val)
#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 0, 8) )
#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 0, 8, _val)
#define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 0, 8))
#define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 0, 8, _val)
#define GET_WMM_AC_PARAM_ECWMIN(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 8, 4) )
#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val)
#define GET_WMM_AC_PARAM_ECWMIN(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 8, 4))
#define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val)
#define GET_WMM_AC_PARAM_ECWMAX(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 12, 4) )
#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val)
#define GET_WMM_AC_PARAM_ECWMAX(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 12, 4))
#define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val)
#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) ( (u8)LE_BITS_TO_4BYTE(_pStart, 16, 16) )
#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val)
#define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) \
((u8)LE_BITS_TO_4BYTE(_pStart, 16, 16))
#define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) \
SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val)
...
...
@@ -255,13 +284,13 @@ struct acm {
union
qos_tclas
{
struct
_TYPE_GENERAL
{
struct
_TYPE_GENERAL
{
u8
Priority
;
u8
ClassifierType
;
u8
Mask
;
}
TYPE_GENERAL
;
struct
_TYPE0_ETH
{
struct
_TYPE0_ETH
{
u8
Priority
;
u8
ClassifierType
;
u8
Mask
;
...
...
@@ -270,7 +299,7 @@ union qos_tclas {
u16
Type
;
}
TYPE0_ETH
;
struct
_TYPE1_IPV4
{
struct
_TYPE1_IPV4
{
u8
Priority
;
u8
ClassifierType
;
u8
Mask
;
...
...
@@ -284,7 +313,7 @@ union qos_tclas {
u8
Reserved
;
}
TYPE1_IPV4
;
struct
_TYPE1_IPV6
{
struct
_TYPE1_IPV6
{
u8
Priority
;
u8
ClassifierType
;
u8
Mask
;
...
...
@@ -296,7 +325,7 @@ union qos_tclas {
u8
FlowLabel
[
3
];
}
TYPE1_IPV6
;
struct
_TYPE2_8021Q
{
struct
_TYPE2_8021Q
{
u8
Priority
;
u8
ClassifierType
;
u8
Mask
;
...
...
@@ -318,7 +347,7 @@ struct qos_tstream {
struct
sta_qos
{
u8
WMMIEBuf
[
MAX_WMMELE_LENGTH
];
u8
*
WMMIE
;
u8
*
WMMIE
;
QOS_MODE
QosCapability
;
QOS_MODE
CurrentQosMode
;
...
...
@@ -329,7 +358,7 @@ struct sta_qos {
u8
MaxSPLength
;
int
NumBcnBeforeTrigger
;
u8
*
pWMMInfoEle
;
u8
*
pWMMInfoEle
;
u8
WMMParamEle
[
WMM_PARAM_ELEMENT_SIZE
];
struct
acm
acm
[
4
];
...
...
@@ -348,66 +377,68 @@ struct sta_qos {
};
#define QBSS_LOAD_SIZE 5
#define GET_QBSS_LOAD_STA_COUNT(__pStart) ReadEF2Byte(__pStart)
#define SET_QBSS_LOAD_STA_COUNT(__pStart, __Value) WriteEF2Byte(__pStart, __Value)
#define GET_QBSS_LOAD_CHNL_UTILIZATION(__pStart) ReadEF1Byte((u8*)(__pStart) + 2)
#define SET_QBSS_LOAD_CHNL_UTILIZATION(__pStart, __Value) WriteEF1Byte((u8*)(__pStart) + 2, __Value)
#define GET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart) ReadEF2Byte((u8*)(__pStart) + 3)
#define SET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart, __Value) WriteEF2Byte((u8*)(__pStart) + 3, __Value)
#define GET_QBSS_LOAD_STA_COUNT(__pStart) \
ReadEF2Byte(__pStart)
#define SET_QBSS_LOAD_STA_COUNT(__pStart, __Value) \
WriteEF2Byte(__pStart, __Value)
#define GET_QBSS_LOAD_CHNL_UTILIZATION(__pStart) \
ReadEF1Byte((u8 *)(__pStart) + 2)
#define SET_QBSS_LOAD_CHNL_UTILIZATION(__pStart, __Value) \
WriteEF1Byte((u8 *)(__pStart) + 2, __Value)
#define GET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart) \
ReadEF2Byte((u8 *)(__pStart) + 3)
#define SET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart, __Value) \
WriteEF2Byte((u8 *)(__pStart) + 3, __Value)
struct
bss_qos
{
QOS_MODE
bdQoSMode
;
u8
bdWMMIEBuf
[
MAX_WMMELE_LENGTH
];
struct
octet_string
bdWMMIE
;
enum
qos_ele_subtype
EleSubType
;
u8
*
pWMMInfoEle
;
u8
*
pWMMParamEle
;
u8
*
pWMMInfoEle
;
u8
*
pWMMParamEle
;
u8
QBssLoad
[
QBSS_LOAD_SIZE
];
bool
bQBssLoadValid
;
};
#define sQoSCtlLng 2
#define QOS_CTRL_LEN(_QosMode)
( (_QosMode > QOS_DISABLE)? sQoSCtlLng : 0
)
#define QOS_CTRL_LEN(_QosMode)
((_QosMode > QOS_DISABLE) ? sQoSCtlLng : 0
)
#define IsACValid(ac) (
( ac>=0 && ac<=7 )? true : false
)
#define IsACValid(ac) (
(ac >= 0 && ac <= 7) ? true : false
)
union
aci_aifsn
{
u8
charData
;
struct
{
struct
{
u8
AIFSN
:
4
;
u8
acm
:
1
;
u8
ACI
:
2
;
u8
Reserved
:
1
;
}
f
;
}
f
;
};
union
ecw
{
u8
charData
;
struct
{
struct
{
u8
ECWmin
:
4
;
u8
ECWmax
:
4
;
}
f
;
}
f
;
};
union
ac_param
{
u32
longData
;
u8
charData
[
4
];
struct
{
struct
{
union
aci_aifsn
AciAifsn
;
union
ecw
Ecw
;
u16
TXOPLimit
;
}
f
;
}
f
;
};
#endif
drivers/staging/rtl8192e/rtl819x_TS.h
View file @
d76eaf7e
...
...
@@ -67,5 +67,7 @@ struct rx_ts_record {
u8
num
;
};
void
_setup_timer
(
struct
timer_list
*
,
void
*
,
unsigned
long
);
#endif
drivers/staging/rtl8192e/rtl819x_TSProc.c
View file @
d76eaf7e
...
...
@@ -19,7 +19,6 @@
#include "rtllib.h"
#include <linux/etherdevice.h>
#include "rtl819x_TS.h"
extern
void
_setup_timer
(
struct
timer_list
*
,
void
*
,
unsigned
long
);
void
TsSetupTimeOut
(
unsigned
long
data
)
{
...
...
@@ -32,7 +31,8 @@ void TsInactTimeout(unsigned long data)
void
RxPktPendingTimeout
(
unsigned
long
data
)
{
struct
rx_ts_record
*
pRxTs
=
(
struct
rx_ts_record
*
)
data
;
struct
rtllib_device
*
ieee
=
container_of
(
pRxTs
,
struct
rtllib_device
,
RxTsRecord
[
pRxTs
->
num
]);
struct
rtllib_device
*
ieee
=
container_of
(
pRxTs
,
struct
rtllib_device
,
RxTsRecord
[
pRxTs
->
num
]);
struct
rx_reorder_entry
*
pReorderEntry
=
NULL
;
...
...
@@ -42,51 +42,57 @@ void RxPktPendingTimeout(unsigned long data)
bool
bPktInBuf
=
false
;
spin_lock_irqsave
(
&
(
ieee
->
reorder_spinlock
),
flags
);
if
(
pRxTs
->
RxTimeoutIndicateSeq
!=
0xffff
)
{
while
(
!
list_empty
(
&
pRxTs
->
RxPendingPktList
)
)
{
pReorderEntry
=
(
struct
rx_reorder_entry
*
)
list_entry
(
pRxTs
->
RxPendingPktList
.
prev
,
struct
rx_reorder_entry
,
List
);
if
(
pRxTs
->
RxTimeoutIndicateSeq
!=
0xffff
)
{
while
(
!
list_empty
(
&
pRxTs
->
RxPendingPktList
))
{
pReorderEntry
=
(
struct
rx_reorder_entry
*
)
list_entry
(
pRxTs
->
RxPendingPktList
.
prev
,
struct
rx_reorder_entry
,
List
);
if
(
index
==
0
)
pRxTs
->
RxIndicateSeq
=
pReorderEntry
->
SeqNum
;
if
(
SN_LESS
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
)
||
SN_EQUAL
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
)
)
{
if
(
SN_LESS
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
)
||
SN_EQUAL
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
))
{
list_del_init
(
&
pReorderEntry
->
List
);
if
(
SN_EQUAL
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
))
pRxTs
->
RxIndicateSeq
=
(
pRxTs
->
RxIndicateSeq
+
1
)
%
4096
;
if
(
SN_EQUAL
(
pReorderEntry
->
SeqNum
,
pRxTs
->
RxIndicateSeq
))
pRxTs
->
RxIndicateSeq
=
(
pRxTs
->
RxIndicateSeq
+
1
)
%
4096
;
RTLLIB_DEBUG
(
RTLLIB_DL_REORDER
,
"%s(): Indicate SeqNum: %d
\n
"
,
__func__
,
pReorderEntry
->
SeqNum
);
stats_IndicateArray
[
index
]
=
pReorderEntry
->
prxb
;
RTLLIB_DEBUG
(
RTLLIB_DL_REORDER
,
"%s(): Indicate"
" SeqNum: %d
\n
"
,
__func__
,
pReorderEntry
->
SeqNum
);
stats_IndicateArray
[
index
]
=
pReorderEntry
->
prxb
;
index
++
;
list_add_tail
(
&
pReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
}
else
{
list_add_tail
(
&
pReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
}
else
{
bPktInBuf
=
true
;
break
;
}
}
}
if
(
index
>
0
)
{
if
(
index
>
0
)
{
pRxTs
->
RxTimeoutIndicateSeq
=
0xffff
;
if
(
index
>
REORDER_WIN_SIZE
){
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"RxReorderIndicatePacket(): Rx Reorer struct buffer full!!
\n
"
);
spin_unlock_irqrestore
(
&
(
ieee
->
reorder_spinlock
),
flags
);
if
(
index
>
REORDER_WIN_SIZE
)
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"RxReorderIndicatePacket():"
" Rx Reorer struct buffer full!!
\n
"
);
spin_unlock_irqrestore
(
&
(
ieee
->
reorder_spinlock
),
flags
);
return
;
}
rtllib_indicate_packets
(
ieee
,
stats_IndicateArray
,
index
);
bPktInBuf
=
false
;
}
if
(
bPktInBuf
&&
(
pRxTs
->
RxTimeoutIndicateSeq
==
0xffff
))
{
if
(
bPktInBuf
&&
(
pRxTs
->
RxTimeoutIndicateSeq
==
0xffff
))
{
pRxTs
->
RxTimeoutIndicateSeq
=
pRxTs
->
RxIndicateSeq
;
mod_timer
(
&
pRxTs
->
RxPktPendingTimer
,
jiffies
+
MSECS
(
ieee
->
pHTInfo
->
RxReorderPendingTime
));
mod_timer
(
&
pRxTs
->
RxPktPendingTimer
,
jiffies
+
MSECS
(
ieee
->
pHTInfo
->
RxReorderPendingTime
));
}
spin_unlock_irqrestore
(
&
(
ieee
->
reorder_spinlock
),
flags
);
}
...
...
@@ -95,13 +101,14 @@ void TsAddBaProcess(unsigned long data)
{
struct
tx_ts_record
*
pTxTs
=
(
struct
tx_ts_record
*
)
data
;
u8
num
=
pTxTs
->
num
;
struct
rtllib_device
*
ieee
=
container_of
(
pTxTs
,
struct
rtllib_device
,
TxTsRecord
[
num
]);
struct
rtllib_device
*
ieee
=
container_of
(
pTxTs
,
struct
rtllib_device
,
TxTsRecord
[
num
]);
TsInitAddBA
(
ieee
,
pTxTs
,
BA_POLICY_IMMEDIATE
,
false
);
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsAddBaProcess(): ADDBA Req is started!!
\n
"
);
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsAddBaProcess(): ADDBA Req is "
"started!!
\n
"
);
}
void
ResetTsCommonInfo
(
struct
ts_common_info
*
pTsCommonInfo
)
{
memset
(
pTsCommonInfo
->
Addr
,
0
,
6
);
...
...
@@ -142,8 +149,7 @@ void TSInitialize(struct rtllib_device *ieee)
INIT_LIST_HEAD
(
&
ieee
->
Tx_TS_Pending_List
);
INIT_LIST_HEAD
(
&
ieee
->
Tx_TS_Unused_List
);
for
(
count
=
0
;
count
<
TOTAL_TS_NUM
;
count
++
)
{
for
(
count
=
0
;
count
<
TOTAL_TS_NUM
;
count
++
)
{
pTxTS
->
num
=
count
;
_setup_timer
(
&
pTxTS
->
TsCommonInfo
.
SetupTimer
,
TsSetupTimeOut
,
...
...
@@ -173,8 +179,7 @@ void TSInitialize(struct rtllib_device *ieee)
INIT_LIST_HEAD
(
&
ieee
->
Rx_TS_Admit_List
);
INIT_LIST_HEAD
(
&
ieee
->
Rx_TS_Pending_List
);
INIT_LIST_HEAD
(
&
ieee
->
Rx_TS_Unused_List
);
for
(
count
=
0
;
count
<
TOTAL_TS_NUM
;
count
++
)
{
for
(
count
=
0
;
count
<
TOTAL_TS_NUM
;
count
++
)
{
pRxTS
->
num
=
count
;
INIT_LIST_HEAD
(
&
pRxTS
->
RxPendingPktList
);
...
...
@@ -195,13 +200,14 @@ void TSInitialize(struct rtllib_device *ieee)
(
unsigned
long
)
pRxTS
);
ResetRxTsEntry
(
pRxTS
);
list_add_tail
(
&
pRxTS
->
TsCommonInfo
.
List
,
&
ieee
->
Rx_TS_Unused_List
);
list_add_tail
(
&
pRxTS
->
TsCommonInfo
.
List
,
&
ieee
->
Rx_TS_Unused_List
);
pRxTS
++
;
}
INIT_LIST_HEAD
(
&
ieee
->
RxReorder_Unused_List
);
for
(
count
=
0
;
count
<
REORDER_ENTRY_NUM
;
count
++
)
{
list_add_tail
(
&
pRxReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
for
(
count
=
0
;
count
<
REORDER_ENTRY_NUM
;
count
++
)
{
list_add_tail
(
&
pRxReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
if
(
count
==
(
REORDER_ENTRY_NUM
-
1
))
break
;
pRxReorderEntry
=
&
ieee
->
RxReorderEntry
[
count
+
1
];
...
...
@@ -209,55 +215,46 @@ void TSInitialize(struct rtllib_device *ieee)
}
void
AdmitTS
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
*
pTsCommonInfo
,
u32
InactTime
)
void
AdmitTS
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
*
pTsCommonInfo
,
u32
InactTime
)
{
del_timer_sync
(
&
pTsCommonInfo
->
SetupTimer
);
del_timer_sync
(
&
pTsCommonInfo
->
InactTimer
);
if
(
InactTime
!=
0
)
mod_timer
(
&
pTsCommonInfo
->
InactTimer
,
jiffies
+
MSECS
(
InactTime
));
if
(
InactTime
!=
0
)
mod_timer
(
&
pTsCommonInfo
->
InactTimer
,
jiffies
+
MSECS
(
InactTime
));
}
struct
ts_common_info
*
SearchAdmitTRStream
(
struct
rtllib_device
*
ieee
,
u8
*
Addr
,
u8
TID
,
enum
tr_select
TxRxSelect
)
struct
ts_common_info
*
SearchAdmitTRStream
(
struct
rtllib_device
*
ieee
,
u8
*
Addr
,
u8
TID
,
enum
tr_select
TxRxSelect
)
{
u8
dir
;
bool
search_dir
[
4
]
=
{
0
,
0
,
0
,
0
};
struct
list_head
*
psearch_list
;
struct
list_head
*
psearch_list
;
struct
ts_common_info
*
pRet
=
NULL
;
if
(
ieee
->
iw_mode
==
IW_MODE_MASTER
)
{
if
(
TxRxSelect
==
TX_DIR
)
{
if
(
ieee
->
iw_mode
==
IW_MODE_MASTER
)
{
if
(
TxRxSelect
==
TX_DIR
)
{
search_dir
[
DIR_DOWN
]
=
true
;
search_dir
[
DIR_BI_DIR
]
=
true
;
}
else
{
search_dir
[
DIR_BI_DIR
]
=
true
;
}
else
{
search_dir
[
DIR_UP
]
=
true
;
search_dir
[
DIR_BI_DIR
]
=
true
;
}
search_dir
[
DIR_BI_DIR
]
=
true
;
}
else
if
(
ieee
->
iw_mode
==
IW_MODE_ADHOC
)
{
}
else
if
(
ieee
->
iw_mode
==
IW_MODE_ADHOC
)
{
if
(
TxRxSelect
==
TX_DIR
)
search_dir
[
DIR_UP
]
=
true
;
else
search_dir
[
DIR_DOWN
]
=
true
;
}
else
{
if
(
TxRxSelect
==
TX_DIR
)
{
}
else
{
if
(
TxRxSelect
==
TX_DIR
)
{
search_dir
[
DIR_UP
]
=
true
;
search_dir
[
DIR_BI_DIR
]
=
true
;
search_dir
[
DIR_DIRECT
]
=
true
;
}
else
{
search_dir
[
DIR_BI_DIR
]
=
true
;
search_dir
[
DIR_DIRECT
]
=
true
;
}
else
{
search_dir
[
DIR_DOWN
]
=
true
;
search_dir
[
DIR_BI_DIR
]
=
true
;
search_dir
[
DIR_DIRECT
]
=
true
;
search_dir
[
DIR_BI_DIR
]
=
true
;
search_dir
[
DIR_DIRECT
]
=
true
;
}
}
...
...
@@ -266,38 +263,29 @@ struct ts_common_info *SearchAdmitTRStream(struct rtllib_device *ieee, u8* Addr,
else
psearch_list
=
&
ieee
->
Rx_TS_Admit_List
;
for
(
dir
=
0
;
dir
<=
DIR_BI_DIR
;
dir
++
)
{
if
(
search_dir
[
dir
]
==
false
)
for
(
dir
=
0
;
dir
<=
DIR_BI_DIR
;
dir
++
)
{
if
(
search_dir
[
dir
]
==
false
)
continue
;
list_for_each_entry
(
pRet
,
psearch_list
,
List
){
list_for_each_entry
(
pRet
,
psearch_list
,
List
)
{
if
(
memcmp
(
pRet
->
Addr
,
Addr
,
6
)
==
0
)
if
(
pRet
->
TSpec
.
f
.
TSInfo
.
field
.
ucTSID
==
TID
)
if
(
pRet
->
TSpec
.
f
.
TSInfo
.
field
.
ucDirection
==
dir
)
{
break
;
}
}
if
(
&
pRet
->
List
!=
psearch_list
)
break
;
}
if
(
&
pRet
->
List
!=
psearch_list
)
{
if
(
&
pRet
->
List
!=
psearch_list
)
return
pRet
;
}
else
return
NULL
;
}
void
MakeTSEntry
(
struct
ts_common_info
*
pTsCommonInfo
,
u8
*
Addr
,
union
tspec_body
*
pTSPEC
,
union
qos_tclas
*
pTCLAS
,
u8
TCLAS_Num
,
u8
TCLAS_Proc
)
void
MakeTSEntry
(
struct
ts_common_info
*
pTsCommonInfo
,
u8
*
Addr
,
union
tspec_body
*
pTSPEC
,
union
qos_tclas
*
pTCLAS
,
u8
TCLAS_Num
,
u8
TCLAS_Proc
)
{
u8
count
;
...
...
@@ -307,34 +295,32 @@ void MakeTSEntry(
memcpy
(
pTsCommonInfo
->
Addr
,
Addr
,
6
);
if
(
pTSPEC
!=
NULL
)
memcpy
((
u8
*
)(
&
(
pTsCommonInfo
->
TSpec
)),
(
u8
*
)
pTSPEC
,
sizeof
(
union
tspec_body
));
memcpy
((
u8
*
)(
&
(
pTsCommonInfo
->
TSpec
)),
(
u8
*
)
pTSPEC
,
sizeof
(
union
tspec_body
));
for
(
count
=
0
;
count
<
TCLAS_Num
;
count
++
)
memcpy
((
u8
*
)(
&
(
pTsCommonInfo
->
TClass
[
count
])),
(
u8
*
)
pTCLAS
,
sizeof
(
union
qos_tclas
));
memcpy
((
u8
*
)(
&
(
pTsCommonInfo
->
TClass
[
count
])),
(
u8
*
)
pTCLAS
,
sizeof
(
union
qos_tclas
));
pTsCommonInfo
->
TClasProc
=
TCLAS_Proc
;
pTsCommonInfo
->
TClasNum
=
TCLAS_Num
;
}
bool
GetTs
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
**
ppTS
,
u8
*
Addr
,
u8
TID
,
enum
tr_select
TxRxSelect
,
bool
bAddNewTs
)
bool
GetTs
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
**
ppTS
,
u8
*
Addr
,
u8
TID
,
enum
tr_select
TxRxSelect
,
bool
bAddNewTs
)
{
u8
UP
=
0
;
if
(
is_broadcast_ether_addr
(
Addr
)
||
is_multicast_ether_addr
(
Addr
))
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR! get TS for Broadcast or
Multicast
\n
"
);
if
(
is_broadcast_ether_addr
(
Addr
)
||
is_multicast_ether_addr
(
Addr
))
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR! get TS for Broadcast or "
"
Multicast
\n
"
);
return
false
;
}
if
(
ieee
->
current_network
.
qos_data
.
supported
==
0
)
{
UP
=
0
;
}
else
{
if
(
!
IsACValid
(
TID
))
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR! in %s(), TID(%d) is not valid
\n
"
,
__func__
,
TID
);
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR! in %s(), TID(%d) is "
"not valid
\n
"
,
__func__
,
TID
);
return
false
;
}
...
...
@@ -358,55 +344,54 @@ bool GetTs(
}
}
*
ppTS
=
SearchAdmitTRStream
(
ieee
,
Addr
,
UP
,
TxRxSelect
);
if
(
*
ppTS
!=
NULL
)
{
*
ppTS
=
SearchAdmitTRStream
(
ieee
,
Addr
,
UP
,
TxRxSelect
);
if
(
*
ppTS
!=
NULL
)
{
return
true
;
}
else
{
if
(
bAddNewTs
==
false
)
{
RTLLIB_DEBUG
(
RTLLIB_DL_TS
,
"add new TS failed(tid:%d)
\n
"
,
UP
);
}
else
{
if
(
bAddNewTs
==
false
)
{
RTLLIB_DEBUG
(
RTLLIB_DL_TS
,
"add new TS failed"
"(tid:%d)
\n
"
,
UP
);
return
false
;
}
else
{
}
else
{
union
tspec_body
TSpec
;
union
qos_tsinfo
*
pTSInfo
=
&
TSpec
.
f
.
TSInfo
;
struct
list_head
*
pUnusedList
=
(
TxRxSelect
==
TX_DIR
)
?
(
&
ieee
->
Tx_TS_Unused_List
)
:
struct
list_head
*
pUnusedList
=
(
TxRxSelect
==
TX_DIR
)
?
(
&
ieee
->
Tx_TS_Unused_List
)
:
(
&
ieee
->
Rx_TS_Unused_List
);
struct
list_head
*
pAddmitList
=
(
TxRxSelect
==
TX_DIR
)
?
(
&
ieee
->
Tx_TS_Admit_List
)
:
struct
list_head
*
pAddmitList
=
(
TxRxSelect
==
TX_DIR
)
?
(
&
ieee
->
Tx_TS_Admit_List
)
:
(
&
ieee
->
Rx_TS_Admit_List
);
enum
direction_value
Dir
=
(
ieee
->
iw_mode
==
IW_MODE_MASTER
)
?
((
TxRxSelect
==
TX_DIR
)
?
DIR_DOWN
:
DIR_UP
)
:
((
TxRxSelect
==
TX_DIR
)
?
DIR_UP
:
DIR_DOWN
);
enum
direction_value
Dir
=
(
ieee
->
iw_mode
==
IW_MODE_MASTER
)
?
((
TxRxSelect
==
TX_DIR
)
?
DIR_DOWN
:
DIR_UP
)
:
((
TxRxSelect
==
TX_DIR
)
?
DIR_UP
:
DIR_DOWN
);
RTLLIB_DEBUG
(
RTLLIB_DL_TS
,
"to add Ts
\n
"
);
if
(
!
list_empty
(
pUnusedList
))
{
(
*
ppTS
)
=
list_entry
(
pUnusedList
->
next
,
struct
ts_common_info
,
List
);
if
(
!
list_empty
(
pUnusedList
))
{
(
*
ppTS
)
=
list_entry
(
pUnusedList
->
next
,
struct
ts_common_info
,
List
);
list_del_init
(
&
(
*
ppTS
)
->
List
);
if
(
TxRxSelect
==
TX_DIR
)
{
struct
tx_ts_record
*
tmp
=
container_of
(
*
ppTS
,
struct
tx_ts_record
,
TsCommonInfo
);
if
(
TxRxSelect
==
TX_DIR
)
{
struct
tx_ts_record
*
tmp
=
container_of
(
*
ppTS
,
struct
tx_ts_record
,
TsCommonInfo
);
ResetTxTsEntry
(
tmp
);
}
else
{
struct
rx_ts_record
*
tmp
=
container_of
(
*
ppTS
,
struct
rx_ts_record
,
TsCommonInfo
);
}
else
{
struct
rx_ts_record
*
tmp
=
container_of
(
*
ppTS
,
struct
rx_ts_record
,
TsCommonInfo
);
ResetRxTsEntry
(
tmp
);
}
RTLLIB_DEBUG
(
RTLLIB_DL_TS
,
"to init current TS, UP:%d, Dir:%d, addr:"
MAC_FMT
" ppTs=%p
\n
"
,
UP
,
Dir
,
MAC_ARG
(
Addr
),
*
ppTS
);
RTLLIB_DEBUG
(
RTLLIB_DL_TS
,
"to init current TS"
", UP:%d, Dir:%d, addr:"
MAC_FMT
" ppTs=%p
\n
"
,
UP
,
Dir
,
MAC_ARG
(
Addr
),
*
ppTS
);
pTSInfo
->
field
.
ucTrafficType
=
0
;
pTSInfo
->
field
.
ucTSID
=
UP
;
pTSInfo
->
field
.
ucDirection
=
Dir
;
...
...
@@ -422,99 +407,90 @@ bool GetTs(
list_add_tail
(
&
((
*
ppTS
)
->
List
),
pAddmitList
);
return
true
;
}
else
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR!!in function %s() There is not enough dir=%d(0=up down=1) TS record to be used!!"
,
__func__
,
Dir
);
}
else
{
RTLLIB_DEBUG
(
RTLLIB_DL_ERR
,
"ERR!!in function "
"%s() There is not enough dir=%d"
"(0=up down=1) TS record to be "
"used!!"
,
__func__
,
Dir
);
return
false
;
}
}
}
}
void
RemoveTsEntry
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
*
pTs
,
enum
tr_select
TxRxSelect
)
void
RemoveTsEntry
(
struct
rtllib_device
*
ieee
,
struct
ts_common_info
*
pTs
,
enum
tr_select
TxRxSelect
)
{
del_timer_sync
(
&
pTs
->
SetupTimer
);
del_timer_sync
(
&
pTs
->
InactTimer
);
TsInitDelBA
(
ieee
,
pTs
,
TxRxSelect
);
if
(
TxRxSelect
==
RX_DIR
)
{
if
(
TxRxSelect
==
RX_DIR
)
{
struct
rx_reorder_entry
*
pRxReorderEntry
;
struct
rx_ts_record
*
pRxTS
=
(
struct
rx_ts_record
*
)
pTs
;
if
(
timer_pending
(
&
pRxTS
->
RxPktPendingTimer
))
del_timer_sync
(
&
pRxTS
->
RxPktPendingTimer
);
while
(
!
list_empty
(
&
pRxTS
->
RxPendingPktList
)){
pRxReorderEntry
=
(
struct
rx_reorder_entry
*
)
list_entry
(
pRxTS
->
RxPendingPktList
.
prev
,
struct
rx_reorder_entry
,
List
);
RTLLIB_DEBUG
(
RTLLIB_DL_REORDER
,
"%s(): Delete SeqNum %d!
\n
"
,
__func__
,
pRxReorderEntry
->
SeqNum
);
while
(
!
list_empty
(
&
pRxTS
->
RxPendingPktList
))
{
pRxReorderEntry
=
(
struct
rx_reorder_entry
*
)
list_entry
(
pRxTS
->
RxPendingPktList
.
prev
,
struct
rx_reorder_entry
,
List
);
RTLLIB_DEBUG
(
RTLLIB_DL_REORDER
,
"%s(): Delete SeqNum "
"%d!
\n
"
,
__func__
,
pRxReorderEntry
->
SeqNum
);
list_del_init
(
&
pRxReorderEntry
->
List
);
{
int
i
=
0
;
struct
rtllib_rxb
*
prxb
=
pRxReorderEntry
->
prxb
;
if
(
unlikely
(
!
prxb
))
{
struct
rtllib_rxb
*
prxb
=
pRxReorderEntry
->
prxb
;
if
(
unlikely
(
!
prxb
))
return
;
}
for
(
i
=
0
;
i
<
prxb
->
nr_subframes
;
i
++
)
{
for
(
i
=
0
;
i
<
prxb
->
nr_subframes
;
i
++
)
dev_kfree_skb
(
prxb
->
subframes
[
i
]);
}
kfree
(
prxb
);
prxb
=
NULL
;
}
list_add_tail
(
&
pRxReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
list_add_tail
(
&
pRxReorderEntry
->
List
,
&
ieee
->
RxReorder_Unused_List
);
}
}
else
{
}
else
{
struct
tx_ts_record
*
pTxTS
=
(
struct
tx_ts_record
*
)
pTs
;
del_timer_sync
(
&
pTxTS
->
TsAddBaTimer
);
}
}
void
RemovePeerTS
(
struct
rtllib_device
*
ieee
,
u8
*
Addr
)
void
RemovePeerTS
(
struct
rtllib_device
*
ieee
,
u8
*
Addr
)
{
struct
ts_common_info
*
pTS
,
*
pTmpTS
;
printk
(
"===========>RemovePeerTS,"
MAC_FMT
"
\n
"
,
MAC_ARG
(
Addr
));
printk
(
KERN_INFO
"===========>RemovePeerTS,"
MAC_FMT
"
\n
"
,
MAC_ARG
(
Addr
));
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Pending_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Pending_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
RemoveTsEntry
(
ieee
,
pTS
,
TX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Tx_TS_Unused_List
);
}
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Admit_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
printk
(
"====>remove Tx_TS_admin_list
\n
"
);
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Admit_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
printk
(
KERN_INFO
"====>remove Tx_TS_admin_list
\n
"
);
RemoveTsEntry
(
ieee
,
pTS
,
TX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Tx_TS_Unused_List
);
}
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Pending_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Pending_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
RemoveTsEntry
(
ieee
,
pTS
,
RX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Rx_TS_Unused_List
);
}
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Admit_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Admit_List
,
List
)
{
if
(
memcmp
(
pTS
->
Addr
,
Addr
,
6
)
==
0
)
{
RemoveTsEntry
(
ieee
,
pTS
,
RX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Rx_TS_Unused_List
);
...
...
@@ -522,56 +498,51 @@ void RemovePeerTS(struct rtllib_device* ieee, u8* Addr)
}
}
void
RemoveAllTS
(
struct
rtllib_device
*
ieee
)
void
RemoveAllTS
(
struct
rtllib_device
*
ieee
)
{
struct
ts_common_info
*
pTS
,
*
pTmpTS
;
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Pending_List
,
List
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Pending_List
,
List
)
{
RemoveTsEntry
(
ieee
,
pTS
,
TX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Tx_TS_Unused_List
);
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Admit_List
,
List
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Tx_TS_Admit_List
,
List
)
{
RemoveTsEntry
(
ieee
,
pTS
,
TX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Tx_TS_Unused_List
);
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Pending_List
,
List
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Pending_List
,
List
)
{
RemoveTsEntry
(
ieee
,
pTS
,
RX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Rx_TS_Unused_List
);
}
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Admit_List
,
List
)
{
list_for_each_entry_safe
(
pTS
,
pTmpTS
,
&
ieee
->
Rx_TS_Admit_List
,
List
)
{
RemoveTsEntry
(
ieee
,
pTS
,
RX_DIR
);
list_del_init
(
&
pTS
->
List
);
list_add_tail
(
&
pTS
->
List
,
&
ieee
->
Rx_TS_Unused_List
);
}
}
void
TsStartAddBaProcess
(
struct
rtllib_device
*
ieee
,
struct
tx_ts_record
*
pTxTS
)
void
TsStartAddBaProcess
(
struct
rtllib_device
*
ieee
,
struct
tx_ts_record
*
pTxTS
)
{
if
(
pTxTS
->
bAddBaReqInProgress
==
false
)
{
if
(
pTxTS
->
bAddBaReqInProgress
==
false
)
{
pTxTS
->
bAddBaReqInProgress
=
true
;
if
(
pTxTS
->
bAddBaReqDelayed
)
{
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsStartAddBaProcess():
Delayed Start ADDBA after 60 sec!!
\n
"
);
mod_timer
(
&
pTxTS
->
TsAddBaTimer
,
jiffies
+
MSECS
(
TS_ADDBA_DELAY
));
}
else
{
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsStartAddBaProcess():
Immediately Start ADDBA now!!
\n
"
);
if
(
pTxTS
->
bAddBaReqDelayed
)
{
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsStartAddBaProcess(): "
"
Delayed Start ADDBA after 60 sec!!
\n
"
);
mod_timer
(
&
pTxTS
->
TsAddBaTimer
,
jiffies
+
MSECS
(
TS_ADDBA_DELAY
));
}
else
{
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"TsStartAddBaProcess(): "
"
Immediately Start ADDBA now!!
\n
"
);
mod_timer
(
&
pTxTS
->
TsAddBaTimer
,
jiffies
+
10
);
}
}
else
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"%s()==>BA timer is already added
\n
"
,
__func__
);
}
else
RTLLIB_DEBUG
(
RTLLIB_DL_BA
,
"%s()==>BA timer is already added
\n
"
,
__func__
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment