ps->dtim_count--;
        }
 
-       tim = pos = skb_put(skb, 6);
+       tim = pos = skb_put(skb, 5);
        *pos++ = WLAN_EID_TIM;
-       *pos++ = 4;
+       *pos++ = 3;
        *pos++ = ps->dtim_count;
        *pos++ = link_conf->dtim_period;
 
                /* Bitmap control */
                *pos++ = n1 | aid0;
                /* Part Virt Bitmap */
-               skb_put(skb, n2 - n1);
-               memcpy(pos, ps->tim + n1, n2 - n1 + 1);
+               skb_put_data(skb, ps->tim + n1, n2 - n1 + 1);
 
                tim[1] = n2 - n1 + 4;
        } else {
                *pos++ = aid0; /* Bitmap control */
-               *pos++ = 0; /* Part Virt Bitmap */
+
+               if (ieee80211_get_link_sband(link)->band != NL80211_BAND_S1GHZ) {
+                       tim[1] = 4;
+                       /* Part Virt Bitmap */
+                       skb_put_u8(skb, 0);
+               }
        }
 }