您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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/usbnet.h>
  11. #include <ipxe/cdc.h>
  12. /** CDC-ECM subclass */
  13. #define USB_SUBCLASS_CDC_ECM 0x06
  14. /** Set Ethernet packet filter */
  15. #define ECM_SET_ETHERNET_PACKET_FILTER \
  16. ( USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE | \
  17. USB_REQUEST_TYPE ( 0x43 ) )
  18. /** Ethernet packet types */
  19. enum ecm_ethernet_packet_filter {
  20. /** Promiscuous mode */
  21. ECM_PACKET_TYPE_PROMISCUOUS = 0x0001,
  22. /** All multicast packets */
  23. ECM_PACKET_TYPE_ALL_MULTICAST = 0x0002,
  24. /** Unicast packets */
  25. ECM_PACKET_TYPE_DIRECTED = 0x0004,
  26. /** Broadcast packets */
  27. ECM_PACKET_TYPE_BROADCAST = 0x0008,
  28. /** Specified multicast packets */
  29. ECM_PACKET_TYPE_MULTICAST = 0x0010,
  30. };
  31. /** An Ethernet Functional Descriptor */
  32. struct ecm_ethernet_descriptor {
  33. /** Descriptor header */
  34. struct usb_descriptor_header header;
  35. /** Descriptor subtype */
  36. uint8_t subtype;
  37. /** MAC address string */
  38. uint8_t mac;
  39. /** Ethernet statistics bitmap */
  40. uint32_t statistics;
  41. /** Maximum segment size */
  42. uint16_t mtu;
  43. /** Multicast filter configuration */
  44. uint16_t mcast;
  45. /** Number of wake-on-LAN filters */
  46. uint8_t wol;
  47. } __attribute__ (( packed ));
  48. /** A CDC-ECM network device */
  49. struct ecm_device {
  50. /** USB device */
  51. struct usb_device *usb;
  52. /** USB bus */
  53. struct usb_bus *bus;
  54. /** Network device */
  55. struct net_device *netdev;
  56. /** USB network device */
  57. struct usbnet_device usbnet;
  58. };
  59. /** Interrupt maximum fill level
  60. *
  61. * This is a policy decision.
  62. */
  63. #define ECM_INTR_MAX_FILL 2
  64. /** Bulk IN maximum fill level
  65. *
  66. * This is a policy decision.
  67. */
  68. #define ECM_IN_MAX_FILL 8
  69. /** Bulk IN buffer size
  70. *
  71. * This is a policy decision.
  72. */
  73. #define ECM_IN_MTU ( ETH_FRAME_LEN + 4 /* possible VLAN header */ )
  74. extern struct ecm_ethernet_descriptor *
  75. ecm_ethernet_descriptor ( struct usb_configuration_descriptor *config,
  76. struct usb_interface_descriptor *interface );
  77. extern int ecm_fetch_mac ( struct usb_device *usb,
  78. struct ecm_ethernet_descriptor *desc,
  79. uint8_t *hw_addr );
  80. #endif /* _ECM_H */