The union is never used as a union but only as a bitfield struct.
One side of the union (u8 charData[3];) Only seems to be present to
ensure that the structures size is 3 bytes in length. That length, of
the structure is dictated by the largest element of the union, so the
byte array only dictates size if it's the largest element of the union.
The byte array and union add nothing.

The union has therefore been removed and the structure and access to
the structure simplified.

Additionally since one of the bitfield variables (ucAccessPolicy)
spans a byte boundary the base type of the bitfield has been changed
from u8 to u16. Compilers have probably moved on from having an issue
with this, call it OCD.

The changes are coding style in nature and should not impact runtime
code execution.

Signed-off-by: John Whitmore <johnfwhitm...@gmail.com>
---
 .../rtl8192u/ieee80211/rtl819x_BAProc.c       |  2 +-
 .../staging/rtl8192u/ieee80211/rtl819x_Qos.h  | 40 +++++++++----------
 .../rtl8192u/ieee80211/rtl819x_TSProc.c       | 26 ++++++------
 3 files changed, 33 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/rtl819x_BAProc.c 
b/drivers/staging/rtl8192u/ieee80211/rtl819x_BAProc.c
index e296813203aa..4e8bcc25ad2c 100644
--- a/drivers/staging/rtl8192u/ieee80211/rtl819x_BAProc.c
+++ b/drivers/staging/rtl8192u/ieee80211/rtl819x_BAProc.c
@@ -626,7 +626,7 @@ TsInitAddBA(
        pBA->DialogToken++;                                             // 
DialogToken: Only keep the latest dialog token
        pBA->BaParamSet.field.AMSDU_Support = 0;        // Do not support 
A-MSDU with A-MPDU now!!
        pBA->BaParamSet.field.BAPolicy = Policy;        // Policy: Delayed or 
Immediate
-       pBA->BaParamSet.field.TID = 
pTS->ts_common_info.t_spec.f.TSInfo.field.ucTSID;   // TID
+       pBA->BaParamSet.field.TID = pTS->ts_common_info.t_spec.f.TSInfo.ucTSID; 
// TID
        // BufferSize: This need to be set according to A-MPDU vector
        pBA->BaParamSet.field.BufferSize = 32;          // BufferSize: This 
need to be set according to A-MPDU vector
        pBA->BaTimeoutValue = 0;                                        // 
Timeout value: Set 0 to disable Timer
diff --git a/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h 
b/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h
index 1f16d1692c03..4faa89db8355 100644
--- a/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h
+++ b/drivers/staging/rtl8192u/ieee80211/rtl819x_Qos.h
@@ -26,26 +26,24 @@ enum direction_value {
 };
 
 
-//
-// TS Info field in WMM TSPEC Element.
-// Ref:
-//     1. WMM spec 2.2.11: WME TSPEC Element, p.18.
-//     2. 8185 QoS code: QOS_TSINFO [def. in QoS_mp.h]
-//
-union qos_tsinfo {
-       u8              charData[3];
-       struct {
-               u8              ucTrafficType:1;                        //WMM 
is reserved
-               u8              ucTSID:4;
-               u8              ucDirection:2;
-               u8              ucAccessPolicy:2;       //WMM: bit8=0, bit7=1
-               u8              ucAggregation:1;                //WMM is 
reserved
-               u8              ucPSB:1;                                //WMMSA 
is APSD
-               u8              ucUP:3;
-               u8              ucTSInfoAckPolicy:2;            //WMM is 
reserved
-               u8              ucSchedule:1;                   //WMM is 
reserved
-               u8              ucReserved:7;
-       } field;
+/*
+ * TS Info field in WMM TSPEC Element.
+ * Ref:
+ *     1. WMM spec 2.2.11: WME TSPEC Element, p.18.
+ *     2. 8185 QoS code: QOS_TSINFO [def. in QoS_mp.h]
+ * Note: sizeof 3 Bytes
+ */
+struct qos_tsinfo {
+       u16             ucTrafficType:1;        //WMM is reserved
+       u16             ucTSID:4;
+       u16             ucDirection:2;
+       u16             ucAccessPolicy:2;       //WMM: bit8=0, bit7=1
+       u16             ucAggregation:1;        //WMM is reserved
+       u16             ucPSB:1;                //WMMSA is APSD
+       u16             ucUP:3;
+       u16             ucTSInfoAckPolicy:2;    //WMM is reserved
+       u8              ucSchedule:1;           //WMM is reserved
+       u8              ucReserved:7;
 };
 
 //
@@ -56,7 +54,7 @@ typedef union _TSPEC_BODY {
        u8              charData[55];
 
        struct {
-               union qos_tsinfo        TSInfo; //u8    TSInfo[3];
+               struct qos_tsinfo       TSInfo; //u8    TSInfo[3];
                u16     NominalMSDUsize;
                u16     MaxMSDUsize;
                u32     MinServiceItv;
diff --git a/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c 
b/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c
index c21bf3d3b242..39a074621b3b 100644
--- a/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c
+++ b/drivers/staging/rtl8192u/ieee80211/rtl819x_TSProc.c
@@ -246,10 +246,10 @@ static struct ts_common_info *SearchAdmitTRStream(struct 
ieee80211_device *ieee,
                if (!search_dir[dir])
                        continue;
                list_for_each_entry(pRet, psearch_list, list){
-       //              IEEE80211_DEBUG(IEEE80211_DL_TS, "ADD:%pM, TID:%d, 
dir:%d\n", pRet->Addr, pRet->TSpec.f.TSInfo.field.ucTSID, 
pRet->TSpec.f.TSInfo.field.ucDirection);
+       //              IEEE80211_DEBUG(IEEE80211_DL_TS, "ADD:%pM, TID:%d, 
dir:%d\n", pRet->Addr, pRet->TSpec.f.TSInfo.ucTSID, 
pRet->TSpec.f.TSInfo.ucDirection);
                        if (memcmp(pRet->addr, Addr, 6) == 0)
-                               if (pRet->t_spec.f.TSInfo.field.ucTSID == TID)
-                                       
if(pRet->t_spec.f.TSInfo.field.ucDirection == dir) {
+                               if (pRet->t_spec.f.TSInfo.ucTSID == TID)
+                                       if(pRet->t_spec.f.TSInfo.ucDirection == 
dir) {
        //                                      printk("Bingo! got it\n");
                                                break;
                                        }
@@ -355,7 +355,7 @@ bool GetTs(
                        // For HCCA or WMMSA, TS cannot be addmit without 
negotiation.
                        //
                        TSPEC_BODY      TSpec;
-                       union qos_tsinfo        *pTSInfo = &TSpec.f.TSInfo;
+                       struct qos_tsinfo       *pTSInfo = &TSpec.f.TSInfo;
                        struct list_head        *pUnusedList =
                                                                (TxRxSelect == 
TX_DIR)?
                                                                
(&ieee->Tx_TS_Unused_List):
@@ -383,15 +383,15 @@ bool GetTs(
 
                                IEEE80211_DEBUG(IEEE80211_DL_TS, "to init 
current TS, UP:%d, Dir:%d, addr:%pM\n", UP, Dir, Addr);
                                // Prepare TS Info releated field
-                               pTSInfo->field.ucTrafficType = 0;               
        // Traffic type: WMM is reserved in this field
-                               pTSInfo->field.ucTSID = UP;                     
// TSID
-                               pTSInfo->field.ucDirection = Dir;               
        // Direction: if there is DirectLink, this need additional 
consideration.
-                               pTSInfo->field.ucAccessPolicy = 1;              
// Access policy
-                               pTSInfo->field.ucAggregation = 0;               
// Aggregation
-                               pTSInfo->field.ucPSB = 0;                       
        // Aggregation
-                               pTSInfo->field.ucUP = UP;                       
        // User priority
-                               pTSInfo->field.ucTSInfoAckPolicy = 0;           
// Ack policy
-                               pTSInfo->field.ucSchedule = 0;                  
// Schedule
+                               pTSInfo->ucTrafficType = 0;             // 
Traffic type: WMM is reserved in this field
+                               pTSInfo->ucTSID = UP;                   // TSID
+                               pTSInfo->ucDirection = Dir;             // 
Direction: if there is DirectLink, this need additional consideration.
+                               pTSInfo->ucAccessPolicy = 1;            // 
Access policy
+                               pTSInfo->ucAggregation = 0;             // 
Aggregation
+                               pTSInfo->ucPSB = 0;                     // 
Aggregation
+                               pTSInfo->ucUP = UP;                     // User 
priority
+                               pTSInfo->ucTSInfoAckPolicy = 0;         // Ack 
policy
+                               pTSInfo->ucSchedule = 0;                // 
Schedule
 
                                MakeTSEntry(*ppTS, Addr, &TSpec, NULL, 0, 0);
                                AdmitTS(ieee, *ppTS, 0);
-- 
2.18.0

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to