mirror of
https://github.com/ipxe/ipxe
synced 2025-12-25 09:01:24 +03:00
[usb] Add generic USB network device framework
Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
@@ -163,6 +163,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
|
||||
#define ERRFILE_netvsc ( ERRFILE_DRIVER | 0x006b0000 )
|
||||
#define ERRFILE_ecm ( ERRFILE_DRIVER | 0x006c0000 )
|
||||
#define ERRFILE_ncm ( ERRFILE_DRIVER | 0x006d0000 )
|
||||
#define ERRFILE_usbnet ( ERRFILE_DRIVER | 0x006e0000 )
|
||||
|
||||
#define ERRFILE_scsi ( ERRFILE_DRIVER | 0x00700000 )
|
||||
#define ERRFILE_arbel ( ERRFILE_DRIVER | 0x00710000 )
|
||||
|
||||
62
src/include/ipxe/usbnet.h
Normal file
62
src/include/ipxe/usbnet.h
Normal file
@@ -0,0 +1,62 @@
|
||||
#ifndef _IPXE_USBNET_H
|
||||
#define _IPXE_USBNET_H
|
||||
|
||||
/** @file
|
||||
*
|
||||
* USB network devices
|
||||
*
|
||||
*/
|
||||
|
||||
FILE_LICENCE ( GPL2_OR_LATER );
|
||||
|
||||
#include <ipxe/usb.h>
|
||||
|
||||
/** A USB network device */
|
||||
struct usbnet_device {
|
||||
/** USB function */
|
||||
struct usb_function *func;
|
||||
|
||||
/** Communications interface */
|
||||
unsigned int comms;
|
||||
/** Data interface */
|
||||
unsigned int data;
|
||||
/** Alternate setting for data interface */
|
||||
unsigned int alternate;
|
||||
|
||||
/** Interrupt endpoint */
|
||||
struct usb_endpoint intr;
|
||||
/** Bulk IN endpoint */
|
||||
struct usb_endpoint in;
|
||||
/** Bulk OUT endpoint */
|
||||
struct usb_endpoint out;
|
||||
};
|
||||
|
||||
/**
|
||||
* Initialise USB network device
|
||||
*
|
||||
* @v usbnet USB network device
|
||||
* @v func USB function
|
||||
* @v intr Interrupt endpoint operations
|
||||
* @v in Bulk IN endpoint operations
|
||||
* @v out Bulk OUT endpoint operations
|
||||
*/
|
||||
static inline __attribute__ (( always_inline )) void
|
||||
usbnet_init ( struct usbnet_device *usbnet, struct usb_function *func,
|
||||
struct usb_endpoint_driver_operations *intr,
|
||||
struct usb_endpoint_driver_operations *in,
|
||||
struct usb_endpoint_driver_operations *out ) {
|
||||
struct usb_device *usb = func->usb;
|
||||
|
||||
usbnet->func = func;
|
||||
usb_endpoint_init ( &usbnet->intr, usb, intr );
|
||||
usb_endpoint_init ( &usbnet->in, usb, in );
|
||||
usb_endpoint_init ( &usbnet->out, usb, out );
|
||||
}
|
||||
|
||||
extern int usbnet_open ( struct usbnet_device *usbnet );
|
||||
extern void usbnet_close ( struct usbnet_device *usbnet );
|
||||
extern int usbnet_refill ( struct usbnet_device *usbnet );
|
||||
extern int usbnet_describe ( struct usbnet_device *usbnet,
|
||||
struct usb_configuration_descriptor *config );
|
||||
|
||||
#endif /* _IPXE_USBNET_H */
|
||||
Reference in New Issue
Block a user