6
* CDC-ECM USB Ethernet driver
10
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
13
#include <ipxe/usbnet.h>
16
/** CDC-ECM subclass */
17
#define USB_SUBCLASS_CDC_ECM 0x06
19
/** Set Ethernet packet filter */
20
#define ECM_SET_ETHERNET_PACKET_FILTER \
21
( USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \
22
USB_REQUEST_TYPE ( 0x43 ) )
24
/** Ethernet packet types */
25
enum ecm_ethernet_packet_filter {
26
/** Promiscuous mode */
27
ECM_PACKET_TYPE_PROMISCUOUS = 0x0001,
28
/** All multicast packets */
29
ECM_PACKET_TYPE_ALL_MULTICAST = 0x0002,
30
/** Unicast packets */
31
ECM_PACKET_TYPE_DIRECTED = 0x0004,
32
/** Broadcast packets */
33
ECM_PACKET_TYPE_BROADCAST = 0x0008,
34
/** Specified multicast packets */
35
ECM_PACKET_TYPE_MULTICAST = 0x0010,
38
/** An Ethernet Functional Descriptor */
39
struct ecm_ethernet_descriptor {
40
/** Descriptor header */
41
struct usb_descriptor_header header;
42
/** Descriptor subtype */
44
/** MAC address string */
46
/** Ethernet statistics bitmap */
48
/** Maximum segment size */
50
/** Multicast filter configuration */
52
/** Number of wake-on-LAN filters */
54
} __attribute__ (( packed ));
56
/** A CDC-ECM network device */
59
struct usb_device *usb;
63
struct net_device *netdev;
64
/** USB network device */
65
struct usbnet_device usbnet;
68
/** Interrupt maximum fill level
70
* This is a policy decision.
72
#define ECM_INTR_MAX_FILL 2
74
/** Bulk IN maximum fill level
76
* This is a policy decision.
78
#define ECM_IN_MAX_FILL 8
80
/** Bulk IN buffer size
82
* This is a policy decision.
84
#define ECM_IN_MTU ( ETH_FRAME_LEN + 4 /* possible VLAN header */ )
86
extern struct ecm_ethernet_descriptor *
87
ecm_ethernet_descriptor ( struct usb_configuration_descriptor *config,
88
struct usb_interface_descriptor *interface );
89
extern int ecm_fetch_mac ( struct usb_device *usb,
90
struct ecm_ethernet_descriptor *desc,