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

VxWorks

开发平台:

C/C++

  1. /* usbNC1080End.h - USB Netchip End driver header */
  2. /* Copyright 2000-2001 Wind River Systems, Inc. */
  3. /*
  4. Modification history
  5. --------------------
  6. 01d,07may01,wef  changed module number to be (module num << 8) | M_usbHostLib
  7. 01c,03may01,wef  changed pUsbListDev to USB_NC1080_DEV, moved attach_request 
  8.  definition to .c file from .h file.
  9. 01b,02may01,wef  changed module number to be M_<module> + M_usbHostLib
  10. 01a,02may00,bri  Created
  11. */
  12. #ifndef __INCusbNC1080Endh
  13. #define __INCusbNC1080Endh
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif  /* __cplusplus */
  17. /* includes */
  18. #include "vxWorks.h"
  19. #include "usb/usbEnet.h"
  20. #include "endLib.h"
  21. /* defines */
  22. /* vendor and product id's */
  23. #define NETCHIP_PRODUCT_ID 0x1080
  24. #define NETCHIP_VENDOR_ID 0x0525
  25. /* NetChip Register Definitions */
  26. #define NETCHIP_USBCTL ((UINT8)0x04)     /* USB Control */
  27. #define NETCHIP_TTL     ((UINT8)0x10)       /* Time to Live */
  28. #define NETCHIP_STATUS ((UINT8)0x11)     /* Status */
  29. #define NETCHIP_REQ_REGISTER_READ ((UINT8)0x10) /* bRequest */
  30. #define NETCHIP_TTLVAL  255                 /* msec*/
  31. /* Control Register */
  32. #define USBCTL_WRITABLE_MASK 0x1f0f
  33. /* bits 15-13 reserved */
  34. #define USBCTL_ENABLE_LANG (1 << 12)
  35. #define USBCTL_ENABLE_MFGR (1 << 11)
  36. #define USBCTL_ENABLE_PROD (1 << 10)
  37. #define USBCTL_ENABLE_SERIAL (1 << 9)
  38. #define USBCTL_ENABLE_DEFAULTS (1 << 8)
  39. /* bits 7-4 reserved */
  40. #define USBCTL_FLUSH_OTHER (1 << 3)
  41. #define USBCTL_FLUSH_THIS (1 << 2)
  42. #define USBCTL_DISCONN_OTHER (1 << 1)
  43. #define USBCTL_DISCONN_THIS (1 << 0)
  44.  /* Status register */
  45. #define STATUS_PORT_A (1 << 15)
  46. #define STATUS_CONN_OTHER (1 << 14)
  47. #define STATUS_SUSPEND_OTHER (1 << 13)
  48. #define STATUS_MAILBOX_OTHER (1 << 12)
  49. #define STATUS_PACKETS_OTHER(n) (((n) >> 8) && 0x03)
  50. #define STATUS_CONN_THIS (1 << 6)
  51. #define STATUS_SUSPEND_THIS (1 << 5)
  52. #define STATUS_MAILBOX_THIS (1 << 4)
  53. #define STATUS_PACKETS_THIS(n) (((n) >> 0) && 0x03)
  54. #define STATUS_UNSPEC_MASK 0x0c8c
  55. #define STATUS_NOISE_MASK  ((u16)~(0x0303|STATUS_UNSPEC_MASK))
  56. /* Configuration items */
  57. #define NETCHIP_MTU 296
  58. #define NETCHIP_BUFSIZ       (NETCHIP_MTU + ENET_HDR_REAL_SIZ + 6)
  59. #define EH_SIZE (14)
  60. #define NETCHIP_SPEED_10M 10000000 /* 10Mbs */
  61. #define NETCHIP_SPEED_100M 100000000 /* 100Mbs */
  62. #define NETCHIP_SPEED        NETCHIP_SPEED_10M
  63. /* A shortcut for getting the hardware address from the MIB II stuff. */
  64. #define NETCHIP_HADDR(pEnd)
  65. ((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)
  66. #define NETCHIP_HADDR_LEN(pEnd) 
  67. ((pEnd)->mib2Tbl.ifPhysAddress.addrLength)
  68. #define CLIENT_NAME "usbNC1080Lib"
  69. #define NETCHIP_NAME    "netChip"
  70. #define NETCHIP_NAME_LEN (sizeof(NETCHIP_NAME))
  71. /* Buffer definitions */
  72. #define NETCHIP_NUM_IN_BFRS 10
  73. #define NETCHIP_NUM_OUT_BFRS 10
  74. #define NETCHIP_OUT_BFR_SIZE 1000
  75. #define NETCHIP_IN_BFR_SIZE 1000
  76. /* Error Numbers as set the usbNC1080Lib  */
  77. /* usbEnetLib error values */
  78. /* 
  79.  * USB errnos are defined as being part of the USB host Module, as are all
  80.  * vxWorks module numbers, but the USB Module number is further divided into 
  81.  * sub-modules.  Each sub-module has upto 255 values for its own error codes
  82.  */
  83.  
  84. #define USB_NC1080_SUB_MODULE   15
  85. #define M_usbNC1080Lib  ( (USB_NC1080_SUB_MODULE  << 8) | M_usbHostLib )
  86. #define usbNetChipErr(x) (M_usbNC1080Lib | (x))
  87. #define S_usbNC1080Lib_NOT_INITIALIZED usbNetChipErr (1)
  88. #define S_usbNC1080Lib_BAD_PARAM      usbNetChipErr (2)
  89. #define S_usbNC1080Lib_OUT_OF_MEMORY usbNetChipErr (3)
  90. #define S_usbNC1080Lib_OUT_OF_RESOURCES usbNetChipErr (4)
  91. #define S_usbNC1080Lib_GENERAL_FAULT usbNetChipErr (5)
  92. #define S_usbNC1080Lib_QUEUE_FULL      usbNetChipErr (6)
  93. #define S_usbNC1080Lib_QUEUE_EMPTY usbNetChipErr (7)
  94. #define S_usbNC1080Lib_NOT_IMPLEMENTED usbNetChipErr (8)
  95. #define S_usbNC1080Lib_USBD_FAULT      usbNetChipErr (9)
  96. #define S_usbNC1080Lib_NOT_REGISTERED usbNetChipErr (10)
  97. #define S_usbNC1080Lib_NOT_LOCKED      usbNetChipErr (11)
  98. /* NETCHIP Device attached */ 
  99. #define USB_NETCHIP_ATTACH 0
  100. /* NETCHIP Device removed  */
  101. #define USB_NETCHIP_REMOVE 1
  102. /* typedefs */
  103. /* 
  104.  * usb Device structure 
  105.  * This structure is a priliminary structure and is used in the 
  106.  * call back functions for dynamic attachment.
  107.  * Later when the final end_obj structure is created, this structure
  108.  * will be linked to the end_obj structure.
  109.  */ 
  110. typedef struct usb_nc1080_dev
  111.     {
  112.     LINK devLink; /* linked list of device structs */
  113.     USBD_NODE_ID nodeId; /* Node Id of the device */
  114.     VOID * pDevStructure; /* Net chip device structure*/
  115.     UINT16 configuration; /* configuration of the device */
  116.     UINT16 interface; /* interface of the device */
  117.     UINT16 vendorId; /* these three fields together */
  118.     UINT16 productId; /* uniquely */
  119.     UINT16 serialNo; /* identify a device */
  120.     UINT8 maxPower;     /* Max. Power Consumption of the device */
  121.     BOOL  connected; /* TRUE if device is connected */
  122.     UINT16 lockCount;
  123.     } USB_NC1080_DEV;
  124. /* The definition of the driver control structure */
  125. typedef struct usb_nc1080_end_device
  126.     {
  127.     END_OBJ endObj;     /* The class we inherit from. */
  128.     int unit;     /* unit number */
  129.     long flags;     /* Our local flags. */
  130.     UCHAR enetAddr[6]; /* ethernet address */
  131.     CL_POOL_ID pClPoolId; /* cluster pool */
  132.     BOOL rxHandling; /* rcv task is scheduled */
  133.     /* usb specifics */
  134.     USB_NC1080_DEV *  pDev;     /* the device info */
  135.     USBD_PIPE_HANDLE outPipeHandle;  /* USBD pipe handle for Tx pipe */
  136.     USBD_PIPE_HANDLE inPipeHandle;   /* USBD pipe handle for Rx pipe */ 
  137.     USB_IRP outIrp;      /* IRP to transmit output data */
  138.     BOOL outIrpInUse;      /* TRUE while IRP is outstanding */
  139.     USB_IRP inIrp;      /* IRP to monitor input from printer */
  140.     BOOL inIrpInUse;      /* TRUE while IRP is outstanding */
  141.     int txBufIndex;       /* What the last submitted IRP is */
  142.     int rxBufIndex;        /* where current buffer is */
  143.     int noOfInBfrs;  /* no of input buffers*/
  144.     int noOfIrps;  /* no of Irps */
  145.     UINT16 outBfrLen;       /* size of output buffer */
  146.     UINT16 inBfrLen;         /* size of input buffer */
  147.     UINT8 **  pOutBfrArray;   /*pointer to Output buffers*/
  148.     UINT8 **  pInBfrArray;         /* pointer to input buffers */
  149.     int txPkts; /* used for packet_id of the Header */
  150.     UINT32 outErrors; /* count of IRP failures */
  151.     UINT32 inErrors;      /* count of IRP failures */
  152.     } NC1080_END_DEV;
  153. /*
  154.  * As mentioned earlier, the data needs to be packetized before sending 
  155.  * to the Netchip1080 device for transmission. Also the received data
  156.  * has to be de-packetized before we send it up. The packetizing protocol
  157.  * is
  158.  * -----------------------------
  159.  * |header|    data    |footer|
  160.  * -----------------------------
  161.  * 
  162.  * the header , footer format is given here 
  163.  */
  164. typedef struct netchip_header 
  165.     {
  166.     UINT16 hdr_len; /* sizeof netchip_header */
  167.     UINT16 packet_len; /* packet size */
  168.     UINT16 packet_id; /* detects dropped packets */
  169.     /* 
  170.      * This is the minimum header required. If anything else is to be there,
  171.      * the netchip_header struct should continue like..
  172.      * UINT16 vendorId;
  173.      * UINT16 productId;
  174.      * ...
  175.      */
  176.     
  177.     }NC_HEADER;
  178. typedef struct netchip_footer 
  179.     {
  180.     UINT16 packet_id; /* for cross checking */
  181.     }NC_FOOTER;
  182. typedef VOID (*USB_NETCHIP_ATTACH_CALLBACK) 
  183.     (
  184.     pVOID arg,           /* caller-defined argument     */
  185.     USB_NC1080_DEV * pDev,      /* structure of netchip device */
  186.     UINT16 attachCode    /* attach or remove code       */
  187.     );              /*added for Multiple devices  */
  188. #ifdef __cplusplus
  189. }
  190. #endif /* __cplusplus */
  191. #endif /* __INCusbNC1080Endh */