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,