Annotation of qemu/roms/seabios/src/usb.h, revision 1.1.1.1

1.1       root        1: // USB functions and data.
                      2: #ifndef __USB_H
                      3: #define __USB_H
                      4: 
                      5: // Local information for a usb controller.
                      6: struct usb_s {
                      7:     u8 type;
                      8:     u8 maxaddr;
                      9:     u16 bdf;
                     10: 
                     11:     union {
                     12:         struct {
                     13:             u16 iobase;
                     14:             void *qh;
                     15:         } uhci;
                     16:         struct {
                     17:             struct ohci_regs *regs;
                     18:             void *control_ed;
                     19:         } ohci;
                     20:     };
                     21: };
                     22: 
                     23: #define USB_TYPE_UHCI 1
                     24: #define USB_TYPE_OHCI 2
                     25: 
                     26: extern struct usb_s USBControllers[];
                     27: 
                     28: struct usb_pipe {
                     29:     u32 endp;
                     30: };
                     31: 
                     32: #define USB_MAXADDR 127
                     33: 
                     34: // usb.c
                     35: void usb_setup();
                     36: int configure_usb_device(struct usb_s *cntl, int lowspeed);
                     37: struct usb_ctrlrequest;
                     38: int send_default_control(u32 endp, const struct usb_ctrlrequest *req
                     39:                          , void *data);
                     40: struct usb_pipe *alloc_intr_pipe(u32 endp, int period);
                     41: int usb_poll_intr(struct usb_pipe *pipe, void *data);
                     42: 
                     43: 
                     44: /****************************************************************
                     45:  * endpoint definition
                     46:  ****************************************************************/
                     47: 
                     48: static inline u32
                     49: mkendp(struct usb_s *cntl, u8 devaddr, u8 ep, u8 lowspeed, u8 maxsize)
                     50: {
                     51:     u8 bus = cntl-USBControllers;
                     52:     u8 size = __ffs(maxsize);
                     53:     return (size<<25) | (lowspeed<<24) | (bus<<16) | (devaddr<<8) | ep;
                     54: }
                     55: 
                     56: static inline u8 endp2ep(u32 endp) {
                     57:     return endp;
                     58: }
                     59: static inline u8 endp2devaddr(u32 endp) {
                     60:     return endp>>8;
                     61: }
                     62: static inline struct usb_s *endp2cntl(u32 endp) {
                     63:     u8 bus = endp>>16;
                     64:     return &USBControllers[bus];
                     65: }
                     66: static inline u8 endp2speed(u32 endp) {
                     67:     return (endp>>24) & 1;
                     68: }
                     69: static inline u8 endp2maxsize(u32 endp) {
                     70:     return 1 << (endp>>25);
                     71: }
                     72: 
                     73: 
                     74: /****************************************************************
                     75:  * usb structs and flags
                     76:  ****************************************************************/
                     77: 
                     78: #define USB_PID_OUT                     0xe1
                     79: #define USB_PID_IN                      0x69
                     80: #define USB_PID_SETUP                   0x2d
                     81: 
                     82: #define USB_DIR_OUT                     0               /* to device */
                     83: #define USB_DIR_IN                      0x80            /* to host */
                     84: 
                     85: #define USB_TYPE_MASK                   (0x03 << 5)
                     86: #define USB_TYPE_STANDARD               (0x00 << 5)
                     87: #define USB_TYPE_CLASS                  (0x01 << 5)
                     88: #define USB_TYPE_VENDOR                 (0x02 << 5)
                     89: #define USB_TYPE_RESERVED               (0x03 << 5)
                     90: 
                     91: #define USB_RECIP_MASK                  0x1f
                     92: #define USB_RECIP_DEVICE                0x00
                     93: #define USB_RECIP_INTERFACE             0x01
                     94: #define USB_RECIP_ENDPOINT              0x02
                     95: #define USB_RECIP_OTHER                 0x03
                     96: 
                     97: #define USB_REQ_GET_STATUS              0x00
                     98: #define USB_REQ_CLEAR_FEATURE           0x01
                     99: #define USB_REQ_SET_FEATURE             0x03
                    100: #define USB_REQ_SET_ADDRESS             0x05
                    101: #define USB_REQ_GET_DESCRIPTOR          0x06
                    102: #define USB_REQ_SET_DESCRIPTOR          0x07
                    103: #define USB_REQ_GET_CONFIGURATION       0x08
                    104: #define USB_REQ_SET_CONFIGURATION       0x09
                    105: #define USB_REQ_GET_INTERFACE           0x0A
                    106: #define USB_REQ_SET_INTERFACE           0x0B
                    107: #define USB_REQ_SYNCH_FRAME             0x0C
                    108: 
                    109: struct usb_ctrlrequest {
                    110:     u8 bRequestType;
                    111:     u8 bRequest;
                    112:     u16 wValue;
                    113:     u16 wIndex;
                    114:     u16 wLength;
                    115: } PACKED;
                    116: 
                    117: #define USB_DT_DEVICE                   0x01
                    118: #define USB_DT_CONFIG                   0x02
                    119: #define USB_DT_STRING                   0x03
                    120: #define USB_DT_INTERFACE                0x04
                    121: #define USB_DT_ENDPOINT                 0x05
                    122: #define USB_DT_DEVICE_QUALIFIER         0x06
                    123: #define USB_DT_OTHER_SPEED_CONFIG       0x07
                    124: 
                    125: struct usb_device_descriptor {
                    126:     u8  bLength;
                    127:     u8  bDescriptorType;
                    128: 
                    129:     u16 bcdUSB;
                    130:     u8  bDeviceClass;
                    131:     u8  bDeviceSubClass;
                    132:     u8  bDeviceProtocol;
                    133:     u8  bMaxPacketSize0;
                    134:     u16 idVendor;
                    135:     u16 idProduct;
                    136:     u16 bcdDevice;
                    137:     u8  iManufacturer;
                    138:     u8  iProduct;
                    139:     u8  iSerialNumber;
                    140:     u8  bNumConfigurations;
                    141: } PACKED;
                    142: 
                    143: #define USB_CLASS_PER_INTERFACE         0       /* for DeviceClass */
                    144: #define USB_CLASS_AUDIO                 1
                    145: #define USB_CLASS_COMM                  2
                    146: #define USB_CLASS_HID                   3
                    147: #define USB_CLASS_PHYSICAL              5
                    148: #define USB_CLASS_STILL_IMAGE           6
                    149: #define USB_CLASS_PRINTER               7
                    150: #define USB_CLASS_MASS_STORAGE          8
                    151: #define USB_CLASS_HUB                   9
                    152: 
                    153: struct usb_config_descriptor {
                    154:     u8  bLength;
                    155:     u8  bDescriptorType;
                    156: 
                    157:     u16 wTotalLength;
                    158:     u8  bNumInterfaces;
                    159:     u8  bConfigurationValue;
                    160:     u8  iConfiguration;
                    161:     u8  bmAttributes;
                    162:     u8  bMaxPower;
                    163: } PACKED;
                    164: 
                    165: struct usb_interface_descriptor {
                    166:     u8  bLength;
                    167:     u8  bDescriptorType;
                    168: 
                    169:     u8  bInterfaceNumber;
                    170:     u8  bAlternateSetting;
                    171:     u8  bNumEndpoints;
                    172:     u8  bInterfaceClass;
                    173:     u8  bInterfaceSubClass;
                    174:     u8  bInterfaceProtocol;
                    175:     u8  iInterface;
                    176: } PACKED;
                    177: 
                    178: struct usb_endpoint_descriptor {
                    179:     u8  bLength;
                    180:     u8  bDescriptorType;
                    181: 
                    182:     u8  bEndpointAddress;
                    183:     u8  bmAttributes;
                    184:     u16 wMaxPacketSize;
                    185:     u8  bInterval;
                    186: } PACKED;
                    187: 
                    188: #define USB_ENDPOINT_NUMBER_MASK        0x0f    /* in bEndpointAddress */
                    189: #define USB_ENDPOINT_DIR_MASK           0x80
                    190: 
                    191: #define USB_ENDPOINT_XFERTYPE_MASK      0x03    /* in bmAttributes */
                    192: #define USB_ENDPOINT_XFER_CONTROL       0
                    193: #define USB_ENDPOINT_XFER_ISOC          1
                    194: #define USB_ENDPOINT_XFER_BULK          2
                    195: #define USB_ENDPOINT_XFER_INT           3
                    196: #define USB_ENDPOINT_MAX_ADJUSTABLE     0x80
                    197: 
                    198: #endif // usb.h

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.