mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
USB: gadget: rndis: Add module parameter for DL max packets per xfer
Currently DL aggregation is supported in RNDIS driver and is set to 3 by default. And there is no support to change downlink maximum packets per transfer at runtime through module parameter. Hence add module parameter for DL maximum packets per transfer to change it at runtime. echo 6 > /sys/module/g_android/parameters/rndis_dl_max_pkt_per_xfer To disable DL aggregation during runtime, echo 1 > /sys/module/g_android/parameters/rndis_dl_max_pkt_per_xfer Change-Id: I3a1d0bc97358e2b6f233df7ae8725fb507de50db Signed-off-by: Xerox Lin <xerox_lin@htc.com> Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
This commit is contained in:
committed by
Badhri Jagan Sridharan
parent
5cf94796ec
commit
12407bb816
@@ -66,10 +66,10 @@
|
||||
* - MS-Windows drivers sometimes emit undocumented requests.
|
||||
*/
|
||||
|
||||
static bool rndis_multipacket_dl_disable;
|
||||
module_param(rndis_multipacket_dl_disable, bool, S_IRUGO|S_IWUSR);
|
||||
MODULE_PARM_DESC(rndis_multipacket_dl_disable,
|
||||
"Disable RNDIS Multi-packet support in DownLink");
|
||||
static unsigned int rndis_dl_max_pkt_per_xfer = 3;
|
||||
module_param(rndis_dl_max_pkt_per_xfer, uint, S_IRUGO | S_IWUSR);
|
||||
MODULE_PARM_DESC(rndis_dl_max_pkt_per_xfer,
|
||||
"Maximum packets per transfer for DL aggregation");
|
||||
|
||||
static unsigned int rndis_ul_max_pkt_per_xfer = 3;
|
||||
module_param(rndis_ul_max_pkt_per_xfer, uint, S_IRUGO | S_IWUSR);
|
||||
@@ -477,7 +477,7 @@ static void rndis_command_complete(struct usb_ep *ep, struct usb_request *req)
|
||||
__func__, buf->MaxTransferSize,
|
||||
rndis->port.multi_pkt_xfer ? "enabled" :
|
||||
"disabled");
|
||||
if (rndis_multipacket_dl_disable)
|
||||
if (rndis_dl_max_pkt_per_xfer <= 1)
|
||||
rndis->port.multi_pkt_xfer = 0;
|
||||
}
|
||||
// spin_unlock(&dev->lock);
|
||||
@@ -881,6 +881,7 @@ rndis_bind_config_vendor(struct usb_configuration *c, u8 ethaddr[ETH_ALEN],
|
||||
rndis->port.wrap = rndis_add_header;
|
||||
rndis->port.unwrap = rndis_rm_hdr;
|
||||
rndis->port.ul_max_pkts_per_xfer = rndis_ul_max_pkt_per_xfer;
|
||||
rndis->port.dl_max_pkts_per_xfer = rndis_dl_max_pkt_per_xfer;
|
||||
|
||||
rndis->port.func.name = "rndis";
|
||||
rndis->port.func.strings = rndis_strings;
|
||||
|
||||
@@ -72,6 +72,7 @@ struct eth_dev {
|
||||
|
||||
unsigned header_len;
|
||||
unsigned ul_max_pkts_per_xfer;
|
||||
unsigned dl_max_pkts_per_xfer;
|
||||
struct sk_buff *(*wrap)(struct gether *, struct sk_buff *skb);
|
||||
int (*unwrap)(struct gether *,
|
||||
struct sk_buff *skb,
|
||||
@@ -578,7 +579,7 @@ static void alloc_tx_buffer(struct eth_dev *dev)
|
||||
struct list_head *act;
|
||||
struct usb_request *req;
|
||||
|
||||
dev->tx_req_bufsize = (TX_SKB_HOLD_THRESHOLD *
|
||||
dev->tx_req_bufsize = (dev->dl_max_pkts_per_xfer *
|
||||
(dev->net->mtu
|
||||
+ sizeof(struct ethhdr)
|
||||
/* size of rndis_packet_msg_type */
|
||||
@@ -690,7 +691,7 @@ static netdev_tx_t eth_start_xmit(struct sk_buff *skb,
|
||||
dev_kfree_skb_any(skb);
|
||||
|
||||
spin_lock_irqsave(&dev->req_lock, flags);
|
||||
if (dev->tx_skb_hold_count < TX_SKB_HOLD_THRESHOLD) {
|
||||
if (dev->tx_skb_hold_count < dev->dl_max_pkts_per_xfer) {
|
||||
if (dev->no_tx_req_used > TX_REQ_THRESHOLD) {
|
||||
list_add(&req->list, &dev->tx_reqs);
|
||||
spin_unlock_irqrestore(&dev->req_lock, flags);
|
||||
@@ -1054,6 +1055,7 @@ struct net_device *gether_connect(struct gether *link)
|
||||
dev->unwrap = link->unwrap;
|
||||
dev->wrap = link->wrap;
|
||||
dev->ul_max_pkts_per_xfer = link->ul_max_pkts_per_xfer;
|
||||
dev->dl_max_pkts_per_xfer = link->dl_max_pkts_per_xfer;
|
||||
|
||||
spin_lock(&dev->lock);
|
||||
dev->tx_skb_hold_count = 0;
|
||||
|
||||
@@ -55,8 +55,7 @@ struct gether {
|
||||
u32 fixed_out_len;
|
||||
u32 fixed_in_len;
|
||||
unsigned ul_max_pkts_per_xfer;
|
||||
/* Max number of SKB packets to be used to create Multi Packet RNDIS */
|
||||
#define TX_SKB_HOLD_THRESHOLD 3
|
||||
unsigned dl_max_pkts_per_xfer;
|
||||
bool multi_pkt_xfer;
|
||||
struct sk_buff *(*wrap)(struct gether *port,
|
||||
struct sk_buff *skb);
|
||||
|
||||
Reference in New Issue
Block a user