mirror of
https://github.com/ipxe/ipxe
synced 2026-05-25 15:00:13 +03:00
adcaaf9b93
Some past security reviews carried out for UEFI Secure Boot signing submissions have covered specific drivers or functional areas of iPXE. Mark all of the files comprising these areas as permitted for UEFI Secure Boot. Signed-off-by: Michael Brown <mcb30@ipxe.org>
95 lines
2.1 KiB
C
95 lines
2.1 KiB
C
#ifndef _ECM_H
|
|
#define _ECM_H
|
|
|
|
/** @file
|
|
*
|
|
* CDC-ECM USB Ethernet driver
|
|
*
|
|
*/
|
|
|
|
FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
|
|
FILE_SECBOOT ( PERMITTED );
|
|
|
|
#include <ipxe/usb.h>
|
|
#include <ipxe/usbnet.h>
|
|
#include <ipxe/cdc.h>
|
|
|
|
/** CDC-ECM subclass */
|
|
#define USB_SUBCLASS_CDC_ECM 0x06
|
|
|
|
/** Set Ethernet packet filter */
|
|
#define ECM_SET_ETHERNET_PACKET_FILTER \
|
|
( USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \
|
|
USB_REQUEST_TYPE ( 0x43 ) )
|
|
|
|
/** Ethernet packet types */
|
|
enum ecm_ethernet_packet_filter {
|
|
/** Promiscuous mode */
|
|
ECM_PACKET_TYPE_PROMISCUOUS = 0x0001,
|
|
/** All multicast packets */
|
|
ECM_PACKET_TYPE_ALL_MULTICAST = 0x0002,
|
|
/** Unicast packets */
|
|
ECM_PACKET_TYPE_DIRECTED = 0x0004,
|
|
/** Broadcast packets */
|
|
ECM_PACKET_TYPE_BROADCAST = 0x0008,
|
|
/** Specified multicast packets */
|
|
ECM_PACKET_TYPE_MULTICAST = 0x0010,
|
|
};
|
|
|
|
/** An Ethernet Functional Descriptor */
|
|
struct ecm_ethernet_descriptor {
|
|
/** Descriptor header */
|
|
struct usb_descriptor_header header;
|
|
/** Descriptor subtype */
|
|
uint8_t subtype;
|
|
/** MAC address string */
|
|
uint8_t mac;
|
|
/** Ethernet statistics bitmap */
|
|
uint32_t statistics;
|
|
/** Maximum segment size */
|
|
uint16_t mtu;
|
|
/** Multicast filter configuration */
|
|
uint16_t mcast;
|
|
/** Number of wake-on-LAN filters */
|
|
uint8_t wol;
|
|
} __attribute__ (( packed ));
|
|
|
|
/** A CDC-ECM network device */
|
|
struct ecm_device {
|
|
/** USB device */
|
|
struct usb_device *usb;
|
|
/** USB bus */
|
|
struct usb_bus *bus;
|
|
/** Network device */
|
|
struct net_device *netdev;
|
|
/** USB network device */
|
|
struct usbnet_device usbnet;
|
|
};
|
|
|
|
/** Interrupt maximum fill level
|
|
*
|
|
* This is a policy decision.
|
|
*/
|
|
#define ECM_INTR_MAX_FILL 2
|
|
|
|
/** Bulk IN maximum fill level
|
|
*
|
|
* This is a policy decision.
|
|
*/
|
|
#define ECM_IN_MAX_FILL 8
|
|
|
|
/** Bulk IN buffer size
|
|
*
|
|
* This is a policy decision.
|
|
*/
|
|
#define ECM_IN_MTU ( ETH_FRAME_LEN + 4 /* possible VLAN header */ )
|
|
|
|
extern struct ecm_ethernet_descriptor *
|
|
ecm_ethernet_descriptor ( struct usb_configuration_descriptor *config,
|
|
struct usb_interface_descriptor *interface );
|
|
extern int ecm_fetch_mac ( struct usb_function *func,
|
|
struct ecm_ethernet_descriptor *desc,
|
|
struct net_device *netdev );
|
|
|
|
#endif /* _ECM_H */
|