Loading drivers/net/usb/rmnet_usb.h +10 −7 Original line number Diff line number Diff line Loading @@ -29,25 +29,28 @@ #define RMNET_CTRL_DEV_READY 1 #define RMNET_CTRL_DEV_MUX_EN 2 /*MUX header bit masks*/ #define MUX_CTRL_MASK 0x1 /*data MUX header bit mask*/ #define MUX_PAD_SHIFT 0x2 /*big endian format ctrl MUX header bit masks*/ #define MUX_CTRL_PADLEN_MASK 0x3F #define MUX_CTRL_MASK 0x80 /*max padding bytes for n byte alignment*/ #define MAX_PAD_BYTES(n) (n-1) /* *MUX Header Format *BIT 0 : Mux type 0: Data, 1: control *BIT 1: Reserved *BIT 2-7: Pad bytes *MUX Header big endian Format *BIT 0 - 5 : Pad bytes *BIT 6: Reserved *BIT 7: Mux type 0: Data, 1: control *BIT 8-15: Mux ID *BIT 16-31: PACKET_LEN_WITH_PADDING (Bytes) */ struct mux_hdr { __u8 padding_info; __u8 mux_id; __le16 pkt_len_w_padding; __u16 pkt_len_w_padding; } __packed; struct rmnet_ctrl_dev { Loading drivers/net/usb/rmnet_usb_ctrl.c +6 −5 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ static int rmnet_usb_ctrl_dmux(struct ctrl_pkt_list_elem *clist) unsigned int mux_id; hdr = (struct mux_hdr *)clist->cpkt.data; pad_len = hdr->padding_info >> MUX_PAD_SHIFT; pad_len = hdr->padding_info & MUX_CTRL_PADLEN_MASK; if (pad_len > MAX_PAD_BYTES(4)) { pr_err_ratelimited("%s: Invalid pad len %d\n", __func__, pad_len); Loading @@ -137,7 +137,7 @@ static int rmnet_usb_ctrl_dmux(struct ctrl_pkt_list_elem *clist) return -EINVAL; } total_len = le16_to_cpu(hdr->pkt_len_w_padding); total_len = ntohs(hdr->pkt_len_w_padding); if (!total_len || !(total_len - pad_len)) { pr_err_ratelimited("%s: Invalid pkt length %d\n", __func__, total_len); Loading @@ -162,10 +162,11 @@ static void rmnet_usb_ctrl_mux(unsigned int id, struct ctrl_pkt *cpkt) /*add padding if len is not 4 byte aligned*/ pad_len = ALIGN(len, 4) - len; hdr->pkt_len_w_padding = cpu_to_le16(len + pad_len); hdr->padding_info = (pad_len << MUX_PAD_SHIFT) | MUX_CTRL_MASK; hdr->pkt_len_w_padding = htons(len + pad_len); hdr->padding_info = (pad_len & MUX_CTRL_PADLEN_MASK) | MUX_CTRL_MASK; cpkt->data_size = sizeof(struct mux_hdr) + hdr->pkt_len_w_padding; cpkt->data_size = sizeof(struct mux_hdr) + ntohs(hdr->pkt_len_w_padding); } static void get_encap_work(struct work_struct *w) Loading Loading
drivers/net/usb/rmnet_usb.h +10 −7 Original line number Diff line number Diff line Loading @@ -29,25 +29,28 @@ #define RMNET_CTRL_DEV_READY 1 #define RMNET_CTRL_DEV_MUX_EN 2 /*MUX header bit masks*/ #define MUX_CTRL_MASK 0x1 /*data MUX header bit mask*/ #define MUX_PAD_SHIFT 0x2 /*big endian format ctrl MUX header bit masks*/ #define MUX_CTRL_PADLEN_MASK 0x3F #define MUX_CTRL_MASK 0x80 /*max padding bytes for n byte alignment*/ #define MAX_PAD_BYTES(n) (n-1) /* *MUX Header Format *BIT 0 : Mux type 0: Data, 1: control *BIT 1: Reserved *BIT 2-7: Pad bytes *MUX Header big endian Format *BIT 0 - 5 : Pad bytes *BIT 6: Reserved *BIT 7: Mux type 0: Data, 1: control *BIT 8-15: Mux ID *BIT 16-31: PACKET_LEN_WITH_PADDING (Bytes) */ struct mux_hdr { __u8 padding_info; __u8 mux_id; __le16 pkt_len_w_padding; __u16 pkt_len_w_padding; } __packed; struct rmnet_ctrl_dev { Loading
drivers/net/usb/rmnet_usb_ctrl.c +6 −5 Original line number Diff line number Diff line Loading @@ -124,7 +124,7 @@ static int rmnet_usb_ctrl_dmux(struct ctrl_pkt_list_elem *clist) unsigned int mux_id; hdr = (struct mux_hdr *)clist->cpkt.data; pad_len = hdr->padding_info >> MUX_PAD_SHIFT; pad_len = hdr->padding_info & MUX_CTRL_PADLEN_MASK; if (pad_len > MAX_PAD_BYTES(4)) { pr_err_ratelimited("%s: Invalid pad len %d\n", __func__, pad_len); Loading @@ -137,7 +137,7 @@ static int rmnet_usb_ctrl_dmux(struct ctrl_pkt_list_elem *clist) return -EINVAL; } total_len = le16_to_cpu(hdr->pkt_len_w_padding); total_len = ntohs(hdr->pkt_len_w_padding); if (!total_len || !(total_len - pad_len)) { pr_err_ratelimited("%s: Invalid pkt length %d\n", __func__, total_len); Loading @@ -162,10 +162,11 @@ static void rmnet_usb_ctrl_mux(unsigned int id, struct ctrl_pkt *cpkt) /*add padding if len is not 4 byte aligned*/ pad_len = ALIGN(len, 4) - len; hdr->pkt_len_w_padding = cpu_to_le16(len + pad_len); hdr->padding_info = (pad_len << MUX_PAD_SHIFT) | MUX_CTRL_MASK; hdr->pkt_len_w_padding = htons(len + pad_len); hdr->padding_info = (pad_len & MUX_CTRL_PADLEN_MASK) | MUX_CTRL_MASK; cpkt->data_size = sizeof(struct mux_hdr) + hdr->pkt_len_w_padding; cpkt->data_size = sizeof(struct mux_hdr) + ntohs(hdr->pkt_len_w_padding); } static void get_encap_work(struct work_struct *w) Loading