--- ../../linux-2.6.29.4/include/linux/usb/usbnet.h 2009-05-19 07:52:34.000000000 +0800 +++ usbnet.h 2009-06-08 13:27:16.000000000 +0800 @@ -48,11 +48,15 @@ u32 xid; u32 hard_mtu; /* count any extra framing */ size_t rx_urb_size; /* size for rx urbs */ + size_t tx_threshold; struct mii_if_info mii; /* various kinds of pending driver work */ struct sk_buff_head rxq; struct sk_buff_head txq; + struct sk_buff_head tx_waitq; + u32 tx_wait_bytes; + u32 tx_busy_pkt; struct sk_buff_head done; struct urb *interrupt; struct tasklet_struct bh; @@ -114,6 +118,10 @@ struct sk_buff *(*tx_fixup)(struct usbnet *dev, struct sk_buff *skb, gfp_t flags); + /* aggregate tx packets */ + struct sk_buff *(*tx_gather)(struct usbnet *dev, + struct sk_buff_head *q, size_t *actual_len); + /* early initialization code, can sleep. This is for minidrivers * having 'subminidrivers' that need to do extra initialization * right after minidriver have initialized hardware. */ @@ -174,6 +182,7 @@ struct usbnet *dev; enum skb_state state; size_t length; + size_t pkt_cnt; };