Annotation of qemu/roms/seabios/src/usb.h, revision 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.