diff --git a/drivers/usb/gadget/function/rndis.c b/drivers/usb/gadget/function/rndis.c index 2c806ea13e90..f0a2d2126f22 100644 --- a/drivers/usb/gadget/function/rndis.c +++ b/drivers/usb/gadget/function/rndis.c @@ -595,7 +595,7 @@ static int rndis_init_response(struct rndis_params *params, + sizeof(struct ethhdr) + sizeof(struct rndis_packet_msg_type) + 22)); - resp->PacketAlignmentFactor = cpu_to_le32(0); + resp->PacketAlignmentFactor = cpu_to_le32(params->pkt_alignment_factor); resp->AFListOffset = cpu_to_le32(0); resp->AFListSize = cpu_to_le32(0); @@ -1209,6 +1209,19 @@ int rndis_rm_hdr(struct gether *port, } EXPORT_SYMBOL_GPL(rndis_rm_hdr); +void rndis_set_pkt_alignment_factor(struct rndis_params *params, + u8 pkt_alignment_factor) +{ + pr_debug("%s:\n", __func__); + + if (!params) { + pr_err("%s: failed, params NULL\n", __func__); + return; + } + + params->pkt_alignment_factor = pkt_alignment_factor; +} + #ifdef CONFIG_USB_GADGET_DEBUG_FILES static int rndis_proc_show(struct seq_file *m, void *v) diff --git a/drivers/usb/gadget/function/rndis.h b/drivers/usb/gadget/function/rndis.h index c9edf9cf12d8..939c3bebe015 100644 --- a/drivers/usb/gadget/function/rndis.h +++ b/drivers/usb/gadget/function/rndis.h @@ -192,6 +192,7 @@ typedef struct rndis_params u32 vendorID; u8 max_pkt_per_xfer; const char *vendorDescr; + u8 pkt_alignment_factor; void (*resp_avail)(void *v); void (*flow_ctrl_enable)(bool enable, struct rndis_params *params); @@ -224,5 +225,7 @@ int rndis_signal_disconnect(struct rndis_params *params); int rndis_state(struct rndis_params *params); extern void rndis_set_host_mac(struct rndis_params *params, const u8 *addr); void rndis_flow_control(struct rndis_params *params, bool enable_flow_control); +void rndis_set_pkt_alignment_factor(struct rndis_params *params, + u8 pkt_alignment_factor); #endif /* _LINUX_RNDIS_H */