};
-//
-// 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;
};
//
u8 charData[55];
struct {
- union qos_tsinfo TSInfo; //u8 TSInfo[3];
+ struct qos_tsinfo TSInfo; //u8 TSInfo[3];
u16 NominalMSDUsize;
u16 MaxMSDUsize;
u32 MinServiceItv;
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;
}
// 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):
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);