You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ecm.h 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #ifndef _ECM_H
  2. #define _ECM_H
  3. /** @file
  4. *
  5. * CDC-ECM USB Ethernet driver
  6. *
  7. */
  8. FILE_LICENCE ( GPL2_OR_LATER );
  9. #include <ipxe/usb.h>
  10. #include <ipxe/cdc.h>
  11. /** CDC-ECM subclass */
  12. #define USB_SUBCLASS_CDC_ECM 0x06
  13. /** CDC-ECM interfaces */
  14. enum ecm_interfaces {
  15. /** Communications interface */
  16. ECM_INTERFACE_COMMS = 0,
  17. /** Data interface */
  18. ECM_INTERFACE_DATA,
  19. ECM_INTERFACE_COUNT
  20. };
  21. /** Alternate setting for CDC-ECM data interface */
  22. #define ECM_DATA_ALTERNATE 1
  23. /** Set Ethernet packet filter */
  24. #define ECM_SET_ETHERNET_PACKET_FILTER \
  25. ( USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \
  26. USB_REQUEST_TYPE ( 0x43 ) )
  27. /** Ethernet packet types */
  28. enum ecm_ethernet_packet_filter {
  29. /** Promiscuous mode */
  30. ECM_PACKET_TYPE_PROMISCUOUS = 0x0001,
  31. /** All multicast packets */
  32. ECM_PACKET_TYPE_ALL_MULTICAST = 0x0002,
  33. /** Unicast packets */
  34. ECM_PACKET_TYPE_DIRECTED = 0x0004,
  35. /** Broadcast packets */
  36. ECM_PACKET_TYPE_BROADCAST = 0x0008,
  37. /** Specified multicast packets */
  38. ECM_PACKET_TYPE_MULTICAST = 0x0010,
  39. };
  40. /** An Ethernet Functional Descriptor */
  41. struct ecm_ethernet_descriptor {
  42. /** Descriptor header */
  43. struct usb_descriptor_header header;
  44. /** Descriptor subtype */
  45. uint8_t subtype;
  46. /** MAC address string */
  47. uint8_t mac;
  48. /** Ethernet statistics bitmap */
  49. uint32_t statistics;
  50. /** Maximum segment size */
  51. uint16_t mtu;
  52. /** Multicast filter configuration */
  53. uint16_t mcast;
  54. /** Number of wake-on-LAN filters */
  55. uint8_t wol;
  56. } __attribute__ (( packed ));
  57. /** A CDC-ECM network device */
  58. struct ecm_device {
  59. /** USB device */
  60. struct usb_device *usb;
  61. /** USB bus */
  62. struct usb_bus *bus;
  63. /** Network device */
  64. struct net_device *netdev;
  65. /** Communications interface */
  66. unsigned int comms;
  67. /** Data interface */
  68. unsigned int data;
  69. /** Interrupt endpoint */
  70. struct usb_endpoint intr;
  71. /** Bulk IN endpoint */
  72. struct usb_endpoint in;
  73. /** Bulk OUT endpoint */
  74. struct usb_endpoint out;
  75. };
  76. /** Interrupt maximum fill level
  77. *
  78. * This is a policy decision.
  79. */
  80. #define ECM_INTR_MAX_FILL 2
  81. /** Bulk IN maximum fill level
  82. *
  83. * This is a policy decision.
  84. */
  85. #define ECM_IN_MAX_FILL 8
  86. /** Bulk IN buffer size
  87. *
  88. * This is a policy decision.
  89. */
  90. #define ECM_IN_MTU ( ETH_FRAME_LEN + 4 /* possible VLAN header */ )
  91. extern struct ecm_ethernet_descriptor *
  92. ecm_ethernet_descriptor ( struct usb_configuration_descriptor *config,
  93. struct usb_interface_descriptor *interface );
  94. extern int ecm_fetch_mac ( struct usb_device *usb,
  95. struct ecm_ethernet_descriptor *desc,
  96. uint8_t *hw_addr );
  97. #endif /* _ECM_H */