usbKlsiEnd.h
上传用户:nvosite88
上传日期:2007-01-17
资源大小:4983k
文件大小:9k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* usbKlsiEnd.h - USB Klsi End driver header */
  2. /* Copyright 2000-2001 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01h,07may01,wef  undid 01f
  7. 01g,07may01,wef  changed module number to be (module num << 8) | M_usbHostLib
  8. 01f,03may01,wef  changed pUsbListDev to pUSB_KLSI_DEV
  9. 01e,02may01,wef  changed module number to be M_<module> + M_usbHostLib
  10. 01d,30apr01,wef  changed USB_DEV struct to USB_KLSI_DEV
  11. 01c,05dec00,wef  moved Module number defs to vwModNum.h - add this
  12.                  to #includes
  13. 02b,11aug00,sab  KLSI_DEVICE structure modified, added ENET_IRP structure.
  14. 01a,02may00,vis  Created
  15. */
  16. #ifndef __INCusbklsiEndh
  17. #define __INCusbklsiEndh
  18. #ifdef __cplusplus
  19. extern "C" {
  20. #endif  /* __cplusplus */
  21. /* includes */
  22. #include "endLib.h"
  23. #include "usb/usbEnet.h"
  24. #include "vwModNum.h"           /* USB Module Number Def's */
  25. /* defines */
  26. /* Error Numbers as set the usbEnetLib  */
  27. /* usbEnetLib error values */
  28. /* 
  29.  * USB errnos are defined as being part of the USB host Module, as are all
  30.  * vxWorks module numbers, but the USB Module number is further divided into 
  31.  * sub-modules.  Each sub-module has upto 255 values for its own error codes
  32.  */
  33.  
  34. #define USB_KLSI_SUB_MODULE  13
  35. #define M_usbKlsiLib  ( (USB_KLSI_SUB_MODULE  << 8) | M_usbHostLib )
  36. #define usbKlsiErr(x) (M_usbKlsiLib | (x))
  37. #define S_usbKlsiLib_NOT_INITIALIZED usbKlsiErr (1)
  38. #define S_usbKlsiLib_BAD_PARAM      usbKlsiErr (2)
  39. #define S_usbKlsiLib_OUT_OF_MEMORY usbKlsiErr (3)
  40. #define S_usbKlsiLib_OUT_OF_RESOURCES usbKlsiErr (4)
  41. #define S_usbKlsiLib_GENERAL_FAULT usbKlsiErr (5)
  42. #define S_usbKlsiLib_QUEUE_FULL      usbKlsiErr (6)
  43. #define S_usbKlsiLib_QUEUE_EMPTY usbKlsiErr (7)
  44. #define S_usbKlsiLib_NOT_IMPLEMENTED usbKlsiErr (8)
  45. #define S_usbKlsiLib_USBD_FAULT      usbKlsiErr (9)
  46. #define S_usbKlsiLib_NOT_REGISTERED usbKlsiErr (10)
  47. #define S_usbKlsiLib_NOT_LOCKED      usbKlsiErr (11)
  48. /* Klsi specific constants */
  49. /* List of Vendor Ids and Product Ids of devices employing KLSI adapter */
  50. #define NETGEAR_VENDOR_ID 0x0846
  51. #define NETGEAR_PRODUCT_ID 0x1001
  52. #define SMC_VENDOR_ID 0x0707
  53. #define SMC_PRODUCT_ID 0x0100
  54. /* Packet Filter Bitmap Constants */
  55. #define PACKET_TYPE_MULTICAST 0x10
  56. #define PACKET_TYPE_BROADCAST 0x08
  57. #define PACKET_TYPE_DIRECTED 0x04
  58. #define PACKET_TYPE_ALL_MULTICAST 0x02
  59. #define PACKET_TYPE_PROMISCOUS 0x01
  60. /* Vendor Specific Commands */
  61. #define USB_REQ_KLSI_ETHDESC_GET 0x00
  62. #define USB_REQ_KLSI_SET_MCAST_FILTER 0x01
  63. #define USB_REQ_KLSI_SET_PACKET_FILTER 0x02
  64. #define USB_REQ_KLSI_GET_STATS 0x03
  65. #define USB_REQ_KLSI_GET_AUX_INPUTS 0x04
  66. #define USB_REQ_KLSI_SET_AUX_OUTPUTS 0x05
  67. #define USB_REQ_KLSI_SET_TEMP_MAC 0x06
  68. #define USB_REQ_KLSI_GET_TEMP_MAC 0x07
  69. #define USB_REQ_KLSI_SET_URB_SIZE 0x08
  70. #define USB_REQ_KLSI_SET_SOFS_TO_WAIT 0x09
  71. #define USB_REQ_KLSI_SET_EVEN_PACKETS 0x0a
  72. #define USB_REQ_KLSI_SCAN 0xff
  73. /* Offsets for reading the Ethernet Functional Descriptor */
  74. #define KLSI_OFFSET_MACADRS 3
  75. #define KLSI_OFFSET_STAT_BMP 9
  76. #define KLSI_OFFSET_SEGMENT_SIZE 13
  77. #define KLSI_OFFSET_MCAST 15
  78. /* Buffer Sizes */
  79. #define KLSI_OUT_BFR_SIZE       1550      /* size of output bfr */
  80. #define KLSI_IN_BFR_SIZE        1550 /* size of input bfr */
  81. #define KLSI_M_BULK_NUM 512 /* number of mbulks */ 
  82. #define KLSI_CL_NUMBER    256 /* number of clusters */
  83. #define KLSI_INTERRUPT_TO_USE 100 /* interrupt used in */
  84. /* downloading firmware */
  85. #define USB_KLSI_ATTACH                 0      /* KLSI Device attached */
  86. #define USB_KLSI_REMOVE                 1      /* KLSI Device removed  */
  87. /* typedefs */
  88. /* 
  89.  * usb Device structure 
  90.  * This structure is a priliminary structure and is used in the 
  91.  * call back functions for dynamic attachment.
  92.  * Later when the final end_obj structure is created, this structure
  93.  * will be linked to the end_obj structure.
  94.  */ 
  95. typedef struct usb_klsi_dev 
  96.     {
  97.     LINK  devLink; /* linked list of device structs */    
  98.     USBD_NODE_ID  nodeId; /* Node Id of the device */
  99.     VOID *  pDevStructure; /* link to KLSI_DEVICE Structure */
  100.     UINT16 configuration; /* configuration of the device */
  101.     UINT16  interface; /* interface of the device */
  102.     UINT16  vendorId; /* vendor identification number */
  103.     UINT16  productId; /* product identification number */
  104.     BOOL                connected;      /* TRUE if KLSI device connected  */ 
  105.     UINT16              lockCount;      /* Count of times structure locked */
  106.  
  107.     }USB_KLSI_DEV, *pUsbListDev;
  108. /* 
  109.  * Statistics, to be maintained by the device/driver 
  110.  * As on today all the stats are not supported by the driver.
  111.  */
  112. typedef struct klsi_stats
  113.     {
  114.     UINT32 bitmap; /* bitmap indicating the supported stats */
  115. /* This bitmap will be in the same way as given */
  116. /* in the Function descriptor of the device. */
  117. /* Corresponding bit will be set if the stat is */
  118. /* supported both by the device and the driver */
  119.     UINT32 xmitOk; /* Frames Transmitted without errors. XMIT_OK */
  120.     UINT32 rvcOk; /* Frames received without errors. RVC_OK */
  121.     UINT32 xmitErr; /* Frames not transmitted or transmitted with errors */
  122.     UINT32 rvcErr; /* Frames recd. with errors that are not delivered */
  123. /* to usb Host */
  124.     UINT32 rvcNoBuf; /* Frames missed, nobuffers */
  125.     UINT32 rvcCrcErr; /* Frames recd. with CRC or FCS error */
  126.     UINT32 rvcOverRun; /* Frames not recd. due to over run */
  127.     }KLSI_STATS, *pKlsiStats;
  128. /* 
  129.  * the multicast filter support details. 
  130.  */
  131. typedef struct klsi_mcast
  132.     {
  133.     UINT8  isMCastPerfect; /* if TRUE, the device supports perfect */
  134. /* multicast address filtering (no hashing) */
  135.     UINT16  noMCastFilters; /* No.of Multicast Address filters Supported */
  136.     }KLSI_MCAST_DETAILS, *pKlsiMCastDetails;
  137. /* 
  138.  * Irp buffer structure
  139.  */
  140.  typedef struct klsi_enet_irp
  141. {
  142. USB_IRP outIrp;     /* IRP to transmit output data */
  143.     BOOL outIrpInUse;     /* TRUE while IRP is outstanding */
  144. } KLSI_ENET_IRP; 
  145.  
  146. /* 
  147.  * Usb Ethernet END Device structure.. 
  148.  * This structure is used both by the file usbKlsiEnd.c.
  149.  */
  150. typedef struct klsi_device
  151.     {
  152.     END_OBJ endObj;      /* must be first field */
  153.     USB_KLSI_DEV * pDev;      /* the device info */
  154.     UINT8 unit;
  155.     UINT8 communicateOk;     /* TRUE after Starting */
  156.     /* and FALSE if stopped */    
  157.     UINT8 macAdrs[6];     /* MAC adress */
  158.     CL_POOL_ID pClPoolId;     /* Pointer to the Cluster Pool */
  159.     BOOL connected;     /* TRUE if device is currently connected */
  160.     USBD_PIPE_HANDLE outPipeHandle; /* USBD pipe handle for bulk OUT pipe */
  161.     KLSI_ENET_IRP * pEnetIrp;     /* pointer to details of Irp structure*/
  162.     int noOfIrps;     /* no of Irps */
  163.     int  txIrpIndex;     /* What the last submitted IRP is */
  164.     UINT8 * outBfr;     /* pointer to output buffer */
  165.     UINT16 outBfrLen;     /* size of output buffer */
  166.     UINT32 outErrors;     /* count of IRP failures */
  167.     USBD_PIPE_HANDLE inPipeHandle;  /* USBD pipe handle for bulk IN pipe */
  168.     USB_IRP inIrp;     /* IRP to monitor input from printer */
  169.     BOOL inIrpInUse;     /* TRUE while IRP is outstanding */
  170.      
  171.     UINT8 ** pInBfrArray;      /* pointer to input buffers */
  172.     int noOfInBfrs;      /* no of input buffers*/
  173.     int         rxIndex;             /* where current buffer is */
  174.     UINT16 inBfrLen;     /* size of input buffer */
  175.     UINT32 inErrors;     /* count of IRP failures */
  176.     KLSI_STATS stats;     /* Statistics */
  177.     KLSI_MCAST_DETAILS mCastFilters; /* Multicast address filter details */
  178.     UINT16 maxSegmentSize;     /* Max. Segment supported by the device */
  179.     UINT8 maxPower;     /* Max. Power Consumption of the device */
  180.     /* in 2mA units */
  181.     } KLSI_DEVICE, *pKlsiDevCtrl;
  182. /* USB_KLSI_ATTACH_CALLBACK defines a callback routine which will be
  183.  * invoked by usbKlsiEnd.c when the attachment or removal of a KLSI
  184.  * device is detected.  When the callback is invoked with an attach code of
  185.  * USB_KLSI_ATTACH, the nodeId represents the ID of newly added device.  When
  186.  * the attach code is USB_KLSI_REMOVE, nodeId points to the KLSI device which 
  187.  * is no longer attached.
  188.  */
  189. typedef VOID (*USB_KLSI_ATTACH_CALLBACK) 
  190.     (
  191.     pVOID arg,           /* caller-defined argument     */
  192.     USBD_NODE_ID nodeId, /* nodeId of the KLSI device    */
  193.     UINT16 attachCode    /* attach or remove code       */
  194.     );
  195. LOCAL UINT16 klsiAdapterList[][2] = {
  196.   { NETGEAR_VENDOR_ID, NETGEAR_PRODUCT_ID },  
  197. { SMC_VENDOR_ID, SMC_PRODUCT_ID }
  198.        };
  199. /* function prototypes*/
  200. STATUS usbKlsiDynamicAttachRegister ( USB_KLSI_ATTACH_CALLBACK callback, 
  201.                                         pVOID arg);
  202. STATUS usbKlsiDynamicAttachUnregister ( USB_KLSI_ATTACH_CALLBACK callback,
  203.                                           pVOID arg);
  204. STATUS usbKlsiDevLock (USBD_NODE_ID nodeId);
  205. STATUS usbKlsiDevUnlock (USBD_NODE_ID nodeId);
  206. #ifdef __cplusplus
  207. }
  208. #endif /* __cplusplus */
  209. #endif /* __INCusbKlsiEndh */