bool is_pspoll
 )
 {
+       struct vnt_tx_datahead_ab *buf = pTxDataHead;
+
        if (!pTxDataHead)
                return 0;
 
        if (byPktType == PK_TYPE_11GB || byPktType == PK_TYPE_11GA) {
+               /* Auto Fallback */
+               struct vnt_tx_datahead_g_fb *buf = pTxDataHead;
+
                if (byFBOption == AUTO_FB_NONE) {
                        struct vnt_tx_datahead_g *buf = pTxDataHead;
                        /* Get SignalField, ServiceField & Length */
                        buf->time_stamp_off_b = vnt_time_stamp_off(pDevice, pDevice->byTopCCKBasicRate);
 
                        return buf->duration_a;
-               } else {
-                       /* Auto Fallback */
-                       struct vnt_tx_datahead_g_fb *buf = pTxDataHead;
-                       /* Get SignalField, ServiceField & Length */
-                       vnt_get_phy_field(pDevice, cbFrameLength, wCurrentRate,
-                                         byPktType, &buf->a);
-
-                       vnt_get_phy_field(pDevice, cbFrameLength,
-                                         pDevice->byTopCCKBasicRate,
-                                         PK_TYPE_11B, &buf->b);
-                       /* Get Duration and TimeStamp */
-                       buf->duration_a = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,
-                                                                             wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
-                       buf->duration_b = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, PK_TYPE_11B,
-                                                                              pDevice->byTopCCKBasicRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
-                       buf->duration_a_f0 = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A_F0, cbFrameLength, byPktType,
-                                                                                 wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
-                       buf->duration_a_f1 = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A_F1, cbFrameLength, byPktType,
-                                                                                wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
+               }
 
-                       buf->time_stamp_off_a = vnt_time_stamp_off(pDevice, wCurrentRate);
-                       buf->time_stamp_off_b = vnt_time_stamp_off(pDevice, pDevice->byTopCCKBasicRate);
+               /* Get SignalField, ServiceField & Length */
+               vnt_get_phy_field(pDevice, cbFrameLength, wCurrentRate,
+                                 byPktType, &buf->a);
 
-                       return buf->duration_a;
-               } /* if (byFBOption == AUTO_FB_NONE) */
+               vnt_get_phy_field(pDevice, cbFrameLength,
+                                 pDevice->byTopCCKBasicRate,
+                                 PK_TYPE_11B, &buf->b);
+               /* Get Duration and TimeStamp */
+               buf->duration_a = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,
+                                                                     wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
+               buf->duration_b = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, PK_TYPE_11B,
+                                                                      pDevice->byTopCCKBasicRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
+               buf->duration_a_f0 = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A_F0, cbFrameLength, byPktType,
+                                                                         wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
+               buf->duration_a_f1 = cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A_F1, cbFrameLength, byPktType,
+                                                                        wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
+
+               buf->time_stamp_off_a = vnt_time_stamp_off(pDevice, wCurrentRate);
+               buf->time_stamp_off_b = vnt_time_stamp_off(pDevice, pDevice->byTopCCKBasicRate);
+
+               return buf->duration_a;
+                 /* if (byFBOption == AUTO_FB_NONE) */
        } else if (byPktType == PK_TYPE_11A) {
+               struct vnt_tx_datahead_ab *buf = pTxDataHead;
+
                if (byFBOption != AUTO_FB_NONE) {
                        /* Auto Fallback */
                        struct vnt_tx_datahead_a_fb *buf = pTxDataHead;
                                                                                wCurrentRate, bNeedAck, uFragIdx, cbLastFragmentSize, uMACfragNum, byFBOption));
                        buf->time_stamp_off = vnt_time_stamp_off(pDevice, wCurrentRate);
                        return buf->duration;
-               } else {
-                       struct vnt_tx_datahead_ab *buf = pTxDataHead;
-                       /* Get SignalField, ServiceField & Length */
-                       vnt_get_phy_field(pDevice, cbFrameLength, wCurrentRate,
-                                         byPktType, &buf->ab);
-
-                       if (is_pspoll) {
-                               __le16 dur = cpu_to_le16(pDevice->current_aid | BIT(14) | BIT(15));
-
-                               buf->duration = dur;
-                       } else {
-                               /* Get Duration and TimeStampOff */
-                               buf->duration =
-                                       cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,
-                                                                           wCurrentRate, bNeedAck, uFragIdx,
-                                                                           cbLastFragmentSize, uMACfragNum,
-                                                                           byFBOption));
-                       }
-
-                       buf->time_stamp_off = vnt_time_stamp_off(pDevice, wCurrentRate);
-                       return buf->duration;
                }
-       } else {
-               struct vnt_tx_datahead_ab *buf = pTxDataHead;
+
                /* Get SignalField, ServiceField & Length */
                vnt_get_phy_field(pDevice, cbFrameLength, wCurrentRate,
                                  byPktType, &buf->ab);
                } else {
                        /* Get Duration and TimeStampOff */
                        buf->duration =
-                               cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, byPktType,
+                               cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_A, cbFrameLength, byPktType,
                                                                    wCurrentRate, bNeedAck, uFragIdx,
                                                                    cbLastFragmentSize, uMACfragNum,
                                                                    byFBOption));
                buf->time_stamp_off = vnt_time_stamp_off(pDevice, wCurrentRate);
                return buf->duration;
        }
-       return 0;
+
+       /* Get SignalField, ServiceField & Length */
+       vnt_get_phy_field(pDevice, cbFrameLength, wCurrentRate,
+                         byPktType, &buf->ab);
+
+       if (is_pspoll) {
+               __le16 dur = cpu_to_le16(pDevice->current_aid | BIT(14) | BIT(15));
+
+               buf->duration = dur;
+       } else {
+               /* Get Duration and TimeStampOff */
+               buf->duration =
+                       cpu_to_le16((u16)s_uGetDataDuration(pDevice, DATADUR_B, cbFrameLength, byPktType,
+                                                           wCurrentRate, bNeedAck, uFragIdx,
+                                                           cbLastFragmentSize, uMACfragNum,
+                                                           byFBOption));
+       }
+
+       buf->time_stamp_off = vnt_time_stamp_off(pDevice, wCurrentRate);
+       return buf->duration;
 }
 
 static