USB: gadget: Add EEM gadget driver
This patch adds a CDC EEM ethernet gadget driver. CDC EEM is a newer USB ethernet specification that uses a simpler interface than the older CDC ECM. This makes CDC EEM usable by a wider set of USB hardware. By default the ethernet gadget will still use CDC ECM/Subset, but kernel configuration and/or a module parameter will allow alternative use of the CDC EEM protocol. Changes since last version: - Brought in missing RNDIS changes that caused compile error - Modified 'sentinel CRC' checking to match EEM host driver Signed-off-by: Brian Niebuhr <bniebuhr@efjohnson.com> Cc: David Brownell <dbrownell@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
877accca79
commit
9b39e9dded
@@ -1022,22 +1022,29 @@ static rndis_resp_t *rndis_add_response (int configNr, u32 length)
|
||||
return r;
|
||||
}
|
||||
|
||||
int rndis_rm_hdr(struct sk_buff *skb)
|
||||
int rndis_rm_hdr(struct gether *port,
|
||||
struct sk_buff *skb,
|
||||
struct sk_buff_head *list)
|
||||
{
|
||||
/* tmp points to a struct rndis_packet_msg_type */
|
||||
__le32 *tmp = (void *) skb->data;
|
||||
|
||||
/* MessageType, MessageLength */
|
||||
if (cpu_to_le32(REMOTE_NDIS_PACKET_MSG)
|
||||
!= get_unaligned(tmp++))
|
||||
!= get_unaligned(tmp++)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
return -EINVAL;
|
||||
}
|
||||
tmp++;
|
||||
|
||||
/* DataOffset, DataLength */
|
||||
if (!skb_pull(skb, get_unaligned_le32(tmp++) + 8))
|
||||
if (!skb_pull(skb, get_unaligned_le32(tmp++) + 8)) {
|
||||
dev_kfree_skb_any(skb);
|
||||
return -EOVERFLOW;
|
||||
}
|
||||
skb_trim(skb, get_unaligned_le32(tmp++));
|
||||
|
||||
skb_queue_tail(list, skb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user