usrUsbHcdOhciInit.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:3k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usrUsbHcdOhciInit.c - Initialization of a OHCI Host Controller Driver */
  2. /* Copyright 1999-2002 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01c,14jan01,wef  fixed bug that hcd scan would quit if the host controllers
  7.  were not sequntially configured in pci memory space.
  8. 01b,16jan01,wef  modified to search for multiple host controllers instead of
  9.  just one.
  10. 01a,23aug00,wef  Created
  11. */
  12. /*
  13. DESCRIPTION
  14. This configlette initializes a USB Host Controller if present on a system.
  15. The initialization process includes bringing up the chip and also "attaches" 
  16. the chip to the previously initilazed USB stack.  The stack is initialized in 
  17. usrUsbInit.c
  18. */
  19. /* includes */
  20. #include "usb/usbPciLib.h"
  21. #include "usb/pciConstants.h"
  22. #include "usb/usbdLib.h"
  23. #include "drv/usb/usbOhci.h"
  24. #include "drv/usb/usbHcdOhciLib.h"  
  25. /* defines */
  26. #define MAX_OHCI_HCDS 2
  27. /* locals */
  28. LOCAL GENERIC_HANDLE ohciAttachToken[MAX_OHCI_HCDS] = {NULL,NULL};
  29. /*****************************************************************************
  30. *
  31. * usrUsbHcdOhciAttach - attaches a Host Controller to the USB Stack
  32. *
  33. * This function searches the pci bus for an OHCI type
  34. * USB Host Controller.  If it finds one, it attaches it to the already
  35. * initialized USB Stack
  36. *
  37. * RETURNS: OK if sucessful or ERROR if failure
  38. */
  39. LOCAL STATUS usrUsbHcdOhciAttach ()
  40.     {
  41.     UINT16 status;
  42.     UINT8 busNo;
  43.     UINT8 deviceNo;
  44.     UINT8 funcNo;
  45.     PCI_CFG_HEADER pciCfgHdr;
  46.     UINT8 pciClass    = OHCI_CLASS;
  47.     UINT8 pciSubclass = OHCI_SUBCLASS;
  48.     UINT8 pciPgmIf    = OHCI_PGMIF;
  49.     HCD_EXEC_FUNC execFunc = &usbHcdOhciExec; 
  50.     GENERIC_HANDLE *pToken = &ohciAttachToken;
  51.     int idx;
  52.     /* 
  53.      * Loop through the maximum number of PCI devices 
  54.      * that might be connected to a system in search of 
  55.      * OHCI type USB Controllers. 
  56.      *
  57.      */
  58.     for (idx = 0; idx < PCI_MAX_DEV; idx++)
  59. {
  60.         if (!usbPciClassFind (pciClass, 
  61.       pciSubclass, 
  62.       pciPgmIf, 
  63.       idx, 
  64.       &busNo, 
  65.       &deviceNo, 
  66.       &funcNo))
  67.             {
  68.             continue;
  69.             }
  70. printf ("OHCI Controller found.n");
  71. printf ("Waiting to attach to USBD...");
  72.         usbPciConfigHeaderGet (busNo, deviceNo, funcNo, &pciCfgHdr);
  73.         /* Attach the OHCI HCD to the USBD. */
  74.         status = usbdHcdAttach (execFunc, &pciCfgHdr, pToken);
  75. *pToken += sizeof (GENERIC_HANDLE);
  76.         if (status == OK)
  77.     {
  78.     printf ("Done.n");
  79.     }
  80.         else
  81.             {
  82.     printf ("Error attaching host controller # %d.n", idx);
  83.     return ERROR;
  84.             }
  85. }
  86.     return OK; 
  87.     
  88.     }