Subversion Repositories Kolibri OS

Rev

Rev 1613 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. typedef struct list_head  list_t;
  3.  
  4.  
  5. typedef struct {
  6.   int     available;          /**< Count of available items in this slab. */
  7.   void   *start;              /**< Start address of first item. */
  8.   addr_t  nextavail;          /**< The index of next available item. */
  9.   addr_t  dma;
  10. } slab_t;
  11.  
  12.  
  13. #define USB_CLASS_AUDIO                    1
  14. #define USB_CLASS_COMM                     2
  15. #define USB_CLASS_HID                      3
  16. #define USB_CLASS_PHYSICAL                 5
  17. #define USB_CLASS_STILL_IMAGE              6
  18. #define USB_CLASS_PRINTER                  7
  19. #define USB_CLASS_MASS_STORAGE             8
  20. #define USB_CLASS_HUB                      9
  21. #define USB_CLASS_CDC_DATA              0x0a
  22. #define USB_CLASS_CSCID                 0x0b    /* chip+ smart card */
  23. #define USB_CLASS_CONTENT_SEC           0x0d    /* content security */
  24. #define USB_CLASS_VIDEO                 0x0e
  25. #define USB_CLASS_WIRELESS_CONTROLLER   0xe0
  26. #define USB_CLASS_MISC                  0xef
  27. #define USB_CLASS_APP_SPEC              0xfe
  28. #define USB_CLASS_VENDOR_SPEC           0xff
  29.  
  30.  
  31. typedef struct
  32. {
  33.     addr_t  qlink;
  34.     addr_t  qelem;
  35.  
  36.     addr_t  dma;
  37.     u32_t   r1;
  38.  
  39. }qh_t __attribute__((aligned(16)));
  40.  
  41.  
  42. #define UHCI_NUM_SKELQH 11
  43.  
  44. #define SKEL_ISO        1
  45. #define SKEL_ASYNC      9
  46.  
  47.  
  48. typedef struct
  49. {
  50.     list_t  list;
  51.  
  52.     addr_t  iobase;
  53.  
  54.     struct dma_pool *td_pool;
  55.  
  56.     u32_t   *frame_base;
  57.     count_t frame_number;
  58.     addr_t  frame_dma;
  59.  
  60.     qh_t   *qh[UHCI_NUM_SKELQH];
  61.  
  62.     u32_t  *data;
  63.     addr_t  data_dma;
  64.  
  65.     u32_t   port_map;
  66.  
  67.     int     numports;
  68.  
  69.     u32_t   pciId;
  70.     PCITAG  PciTag;
  71.     addr_t  ioBase[6];
  72.     addr_t  memBase[6];
  73.     size_t  memSize[6];
  74.     u32_t   memType[6];
  75.     u32_t   irq_line;
  76.  
  77.     list_t  rq_list;
  78. }hc_t;
  79.  
  80. typedef struct tag_td
  81. {
  82.         /* Hardware fields */
  83.     addr_t   link;
  84.     u32_t    status;
  85.     u32_t    token;
  86.     addr_t   buffer;
  87.  
  88.         /* Software fields */
  89.     addr_t   dma;
  90.  
  91.     struct   tag_td *bk;
  92.  
  93.   //  struct list_head list;
  94.  
  95.   //  int frame;          /* for iso: what frame? */
  96.   //  struct list_head fl_list;
  97.  
  98.     u32_t    reserved[2];
  99. } td_t __attribute__((aligned(16)));
  100.  
  101. #define TD_CTRL_SPD         (1 << 29)   /* Short Packet Detect */
  102. #define TD_CTRL_C_ERR_MASK      (3 << 27)       /* Error Counter bits */
  103. #define TD_CTRL_C_ERR_SHIFT     27
  104. #define TD_CTRL_LS          (1 << 26)   /* Low Speed Device */
  105. #define TD_CTRL_IOS         (1 << 25)   /* Isochronous Select */
  106. #define TD_CTRL_IOC         (1 << 24)   /* Interrupt on Complete */
  107. #define TD_CTRL_ACTIVE          (1 << 23)       /* TD Active */
  108. #define TD_CTRL_STALLED         (1 << 22)       /* TD Stalled */
  109. #define TD_CTRL_DBUFERR         (1 << 21)       /* Data Buffer Error */
  110. #define TD_CTRL_BABBLE          (1 << 20)       /* Babble Detected */
  111. #define TD_CTRL_NAK         (1 << 19)   /* NAK Received */
  112. #define TD_CTRL_CRCTIMEO        (1 << 18)       /* CRC/Time Out Error */
  113. #define TD_CTRL_BITSTUFF    (1 << 17)   /* Bit Stuff Error */
  114.  
  115. #define TD_ANY_ERROR   (TD_CTRL_STALLED | TD_CTRL_DBUFERR  | \
  116.                         TD_CTRL_BABBLE  | TD_CTRL_CRCTIMEO | \
  117.                         TD_CTRL_BITSTUFF)
  118.  
  119. typedef struct __attribute__ ((packed))
  120. {
  121.     u8_t    bLength;
  122.     u8_t    bDescriptorType;
  123.     u16_t   bcdUSB;
  124.  
  125.     u8_t    bDeviceClass;
  126.     u8_t    bDeviceSubClass;
  127.     u8_t    bDeviceProtocol;
  128.     u8_t    bMaxPacketSize0;
  129.  
  130.     u16_t   idVendor;
  131.     u16_t   idProduct;
  132.     u16_t   bcdDevice;
  133.  
  134.     u8_t    iManufacturer;
  135.     u8_t    iProduct;
  136.     u8_t    iSerialNumber;
  137.     u8_t    bNumConfigurations;
  138. }dev_descr_t;
  139.  
  140. typedef struct  __attribute__ ((packed))
  141. {
  142.     u8_t    bLength;
  143.     u8_t    bDescriptorType;
  144.     u16_t   wTotalLength;
  145.     u8_t    bNumInterfaces;
  146.     u8_t    bConfigurationValue;
  147.     u8_t    iConfiguration;
  148.     u8_t    bmAttributes;
  149.     u8_t    bMaxPower;
  150. }conf_descr_t;
  151.  
  152. typedef struct __attribute__ ((packed))
  153. {
  154.     u8_t    bLength;
  155.     u8_t    bDescriptorType;
  156.     u8_t    bInterfaceNumber;
  157.     u8_t    bAlternateSetting;
  158.     u8_t    bNumEndpoints;
  159.     u8_t    bInterfaceClass;
  160.     u8_t    bInterfaceSubClass;
  161.     u8_t    bInterfaceProtocol;
  162.     u8_t    iInterface;
  163. }interface_descr_t ;
  164.  
  165. typedef struct __attribute__ ((packed))
  166. {
  167.     u8_t    bLength;
  168.     u8_t    bDescriptorType;
  169.  
  170.     u8_t    bEndpointAddress;
  171.     u8_t    bmAttributes;
  172.     u16_t   wMaxPacketSize;
  173.     u8_t    bInterval;
  174.  
  175.         /* NOTE:  these two are _only_ in audio endpoints. */
  176.         /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
  177.     u8_t    bRefresh;
  178.     u8_t    bSynchAddress;
  179. }endpoint_descr_t;
  180.  
  181. typedef struct
  182. {
  183.     addr_t  address;
  184.     addr_t  size;
  185.     u32_t   toggle;
  186.  
  187. }endp_t;
  188.  
  189. typedef struct __attribute__ ((packed))
  190. {
  191.     u8_t    bRequestType;
  192.     u8_t    bRequest;
  193.     u16_t   wValue;
  194.     u16_t   wIndex;
  195.     u16_t   wLength;
  196. }ctrl_request_t;
  197.  
  198.  
  199. typedef struct
  200. {
  201.     list_t  list;
  202.     u32_t   id;
  203.  
  204.     hc_t   *host;
  205.  
  206.     u32_t   speed;
  207.     addr_t  addr;
  208.  
  209.     addr_t  ep0_size;
  210.  
  211.     endp_t  enp;
  212.  
  213.     u32_t   status;
  214.     int     port;
  215.  
  216.     dev_descr_t   dev_descr;
  217.     conf_descr_t  *conf;
  218. }udev_t;
  219.  
  220. typedef struct   tag_request
  221. {
  222.     list_t        list;
  223.     td_t         *td_head;
  224.     td_t         *td_tail;
  225.     addr_t        data;
  226.     size_t        size;
  227.     udev_t       *dev;
  228.     u32_t         type;
  229.     int           qnum;
  230.     evhandle_t    evh;
  231.     kevent_t      event;
  232.     bool        (*handler)(udev_t *dev, struct   tag_request *rq);
  233. }request_t;
  234.  
  235.  
  236. #define  DMA(val) GetPgAddr(val)|(((addr_t)(val))&0xFFF)
  237.  
  238. #define  TOKEN( size, toggle, ep, addr, pid) \
  239.          ( (((size)-1)<<21)|(toggle)|(((ep)&0xF)<<15)|((addr)<<8)|(pid))
  240.  
  241. bool FindUSBControllers();
  242.  
  243. bool ctrl_request(udev_t *dev, void *req, u32_t dir,
  244.                   void *data, size_t req_size);
  245.  
  246. bool set_address(udev_t *dev);
  247.  
  248. bool init_device(udev_t *dev);
  249.  
  250. bool init_hid(udev_t *dev);
  251.  
  252. struct boot_packet
  253. {
  254.     u8_t  buttons;
  255.     char  x;
  256.     char  y;
  257.     char  z;
  258. }__attribute__ ((packed));
  259.  
  260. #define DOUT   0xE1
  261. #define DIN    0x69
  262.  
  263. #define DATA0  (0<<19)
  264. #define DATA1  (1<<19)
  265.  
  266.  
  267.  
  268. static inline u32_t __bsf(u32_t val)
  269. {
  270.     asm("bsf %1,%0"
  271.         :"=r" (val)
  272.         :"rm" (val));
  273.     return val;
  274. }
  275.  
  276.