u16 len, pad;
        u8 mux_id;
 
-       if (map_header->cd_bit) {
+       if (map_header->flags & MAP_CMD_FLAG) {
                /* Packet contains a MAP command (not data) */
                if (port->data_format & RMNET_FLAGS_INGRESS_MAP_COMMANDS)
                        return rmnet_map_command(skb, port);
        }
 
        mux_id = map_header->mux_id;
-       pad = map_header->pad_len;
+       pad = map_header->flags & MAP_PAD_LEN_MASK;
        len = ntohs(map_header->pkt_len) - pad;
 
        if (mux_id >= RMNET_MAX_LOGICAL_EP)
 
                return map_header;
        }
 
+       BUILD_BUG_ON(MAP_PAD_LEN_MASK < 3);
        padding = ALIGN(map_datalen, 4) - map_datalen;
 
        if (padding == 0)
 
 done:
        map_header->pkt_len = htons(map_datalen + padding);
-       map_header->pad_len = padding & 0x3F;
+       /* This is a data packet, so the CMD bit is 0 */
+       map_header->flags = padding & MAP_PAD_LEN_MASK;
 
        return map_header;
 }
 
 #define _LINUX_IF_RMNET_H_
 
 struct rmnet_map_header {
-#if defined(__LITTLE_ENDIAN_BITFIELD)
-       u8  pad_len:6;
-       u8  reserved_bit:1;
-       u8  cd_bit:1;
-#elif defined (__BIG_ENDIAN_BITFIELD)
-       u8  cd_bit:1;
-       u8  reserved_bit:1;
-       u8  pad_len:6;
-#else
-#error "Please fix <asm/byteorder.h>"
-#endif
-       u8  mux_id;
-       __be16 pkt_len;
+       u8 flags;                       /* MAP_CMD_FLAG, MAP_PAD_LEN_MASK */
+       u8 mux_id;
+       __be16 pkt_len;                 /* Length of packet, including pad */
 }  __aligned(1);
 
+/* rmnet_map_header flags field:
+ *  PAD_LEN:   number of pad bytes following packet data
+ *  CMD:       1 = packet contains a MAP command; 0 = packet contains data
+ */
+#define MAP_PAD_LEN_MASK               GENMASK(5, 0)
+#define MAP_CMD_FLAG                   BIT(7)
+
 struct rmnet_map_dl_csum_trailer {
        u8  reserved1;
 #if defined(__LITTLE_ENDIAN_BITFIELD)