Index: include/usb/usb.h =================================================================== --- include/usb/usb.h (Revision 5615) +++ include/usb/usb.h (Arbeitskopie) @@ -80,14 +80,14 @@ struct usbdev; typedef struct usbdev usbdev_t; -typedef enum { SETUP = 0x2d, IN = 0x69, OUT = 0xe1 } pid_t; +typedef enum { SETUP, IN, OUT } direction_t; typedef enum { CONTROL = 0, ISOCHRONOUS = 1, BULK = 2, INTERRUPT = 3 } endpoint_type; typedef struct { usbdev_t *dev; int endpoint; - pid_t direction; + direction_t direction; int toggle; int maxpacketsize; endpoint_type type; @@ -121,7 +121,7 @@ void (*reset) (hci_t *controller); void (*shutdown) (hci_t *controller); int (*bulk) (endpoint_t *ep, int size, u8 *data, int finalize); - int (*control) (usbdev_t *dev, pid_t pid, int dr_length, + int (*control) (usbdev_t *dev, direction_t pid, int dr_length, void *devreq, int data_length, u8 *data); void* (*create_intr_queue) (endpoint_t *ep, int reqsize, int reqcount, int reqtiming); void (*destroy_intr_queue) (endpoint_t *ep, void *queue); Index: drivers/usb/uhci_rh.c =================================================================== --- drivers/usb/uhci_rh.c (Revision 5615) +++ drivers/usb/uhci_rh.c (Arbeitskopie) @@ -31,6 +31,7 @@ #include #include "uhci.h" +#include "uhci_private.h" typedef struct { int port[2]; Index: drivers/usb/uhci_private.h =================================================================== --- drivers/usb/uhci_private.h (Revision 5615) +++ drivers/usb/uhci_private.h (Arbeitskopie) @@ -27,11 +27,10 @@ * SUCH DAMAGE. */ -#ifndef __UHCI_H -#define __UHCI_H +#ifndef __UHCI_PRIVATE_H +#define __UHCI_PRIVATE_H -#include -#include +typedef enum { UHCI_SETUP = 0x2d, UHCI_IN = 0x69, UHCI_OUT = 0xe1 } uhci_pid_t; typedef union { struct { @@ -117,8 +116,4 @@ #define UHCI_INST(controller) ((uhci_t*)((controller)->instance)) - hci_t *uhci_init (pcidev_t addr); - - void uhci_rh_init (usbdev_t *dev); - #endif Index: drivers/usb/uhci.c =================================================================== --- drivers/usb/uhci.c (Revision 5615) +++ drivers/usb/uhci.c (Arbeitskopie) @@ -29,16 +29,17 @@ //#define USB_DEBUG +#include #include #include "uhci.h" -#include +#include "uhci_private.h" static void uhci_start (hci_t *controller); static void uhci_stop (hci_t *controller); static void uhci_reset (hci_t *controller); static void uhci_shutdown (hci_t *controller); static int uhci_bulk (endpoint_t *ep, int size, u8 *data, int finalize); -static int uhci_control (usbdev_t *dev, pid_t dir, int drlen, void *devreq, +static int uhci_control (usbdev_t *dev, direction_t dir, int drlen, void *devreq, int dalen, u8 *data); static void* uhci_create_intr_queue (endpoint_t *ep, int reqsize, int reqcount, int reqtiming); static void uhci_destroy_intr_queue (endpoint_t *ep, void *queue); @@ -66,13 +67,13 @@ char td_value[3]; char *td_type; switch (td->pid) { - case SETUP: + case UHCI_SETUP: td_type="SETUP"; break; - case IN: + case UHCI_IN: td_type="IN"; break; - case OUT: + case UHCI_OUT: td_type="OUT"; break; default: @@ -296,7 +297,7 @@ } static int -uhci_control (usbdev_t *dev, pid_t dir, int drlen, void *devreq, int dalen, +uhci_control (usbdev_t *dev, direction_t dir, int drlen, void *devreq, int dalen, unsigned char *data) { int endp = 0; /* this is control: always 0 */ @@ -316,7 +317,7 @@ tds[count].depth_first = 1; tds[count].terminate = 1; - tds[0].pid = SETUP; + tds[0].pid = UHCI_SETUP; tds[0].dev_addr = dev->address; tds[0].endp = endp; tds[0].maxlen = maxlen (drlen); @@ -328,7 +329,11 @@ int toggle = 1; for (i = 1; i < count; i++) { - tds[i].pid = dir; + switch (dir) { + case SETUP: tds[i].pid = UHCI_SETUP; break; + case IN: tds[i].pid = UHCI_IN; break; + case OUT: tds[i].pid = UHCI_OUT; break; + } tds[i].dev_addr = dev->address; tds[i].endp = endp; tds[i].maxlen = maxlen (min (mlen, dalen)); @@ -342,7 +347,7 @@ data += mlen; } - tds[count].pid = (dir == OUT) ? IN : OUT; + tds[count].pid = (dir == OUT) ? UHCI_IN : UHCI_OUT; tds[count].dev_addr = dev->address; tds[count].endp = endp; tds[count].maxlen = maxlen (0); Index: drivers/usb/uhci.h =================================================================== --- drivers/usb/uhci.h (Revision 5615) +++ drivers/usb/uhci.h (Arbeitskopie) @@ -33,90 +33,6 @@ #include #include -typedef union { - struct { - unsigned long terminate:1; - unsigned long queue_head:1; - unsigned long:2; - unsigned long ptr_part:28; - }; - u32 ptr; -} __attribute__ ((packed)) flistp_t; - -typedef struct { - union { - struct { - unsigned long terminate:1; - unsigned long queue_head:1; - unsigned long depth_first:1; - unsigned long:29; - } __attribute__ ((packed)); - u32 ptr; - } __attribute__ ((packed)); - - volatile unsigned long actlen:11; - volatile unsigned long:5; - union { - struct { - unsigned long:1; // bit 0 - unsigned long status_bitstuff_err:1; - unsigned long status_crc_err:1; - unsigned long status_nakrcvd:1; - unsigned long status_babble:1; - unsigned long status_databuf_err:1; - unsigned long status_stalled:1; - unsigned long status_active:1; // bit 7 - } __attribute__ ((packed)); - unsigned char status; - } __attribute__ ((packed)); - volatile unsigned long ioc:1; /* interrupt on complete */ - volatile unsigned long isochronous:1; - volatile unsigned long lowspeed:1; - volatile unsigned long counter:2; - volatile unsigned long shortpck:1; - volatile unsigned long:2; - - unsigned long pid:8; - unsigned long dev_addr:7; - unsigned long endp:4; - unsigned long data_toggle:1; - unsigned long:1; - unsigned long maxlen:11; - - u32 bufptr; - -} __attribute__ ((packed)) - td_t; - - typedef struct { - flistp_t headlinkptr; - volatile flistp_t elementlinkptr; - } __attribute__ ((packed)) - qh_t; - - typedef enum { USBCMD = 0, USBSTS = 2, USBINTR = 4, FRNUM = - 6, FLBASEADD = 8, SOFMOD = 0xc, PORTSC1 = 0x10, PORTSC2 = - 0x12 - } usbreg; - - void uhci_reg_write32 (hci_t *ctrl, usbreg reg, u32 value); - u32 uhci_reg_read32 (hci_t *ctrl, usbreg reg); - void uhci_reg_write16 (hci_t *ctrl, usbreg reg, u16 value); - u16 uhci_reg_read16 (hci_t *ctrl, usbreg reg); - void uhci_reg_write8 (hci_t *ctrl, usbreg reg, u8 value); - u8 uhci_reg_read8 (hci_t *ctrl, usbreg reg); - void uhci_reg_mask32 (hci_t *ctrl, usbreg reg, u32 andmask, u32 ormask); - void uhci_reg_mask16 (hci_t *ctrl, usbreg reg, u16 andmask, u16 ormask); - void uhci_reg_mask8 (hci_t *ctrl, usbreg reg, u8 andmask, u8 ormask); - - typedef struct uhci { - flistp_t *framelistptr; - qh_t *qh_prei, *qh_intr, *qh_data, *qh_last; - usbdev_t *roothub; - } uhci_t; - -#define UHCI_INST(controller) ((uhci_t*)((controller)->instance)) - hci_t *uhci_init (pcidev_t addr); void uhci_rh_init (usbdev_t *dev);