www.pudn.com > vxwork_src.rar > usbKlsiEnd.h
/* usbKlsiEnd.h - USB Klsi End driver header */ /* Copyright 2000-2001 Wind River Systems, Inc. */ /* Modification history -------------------- 01h,07may01,wef undid 01f 01g,07may01,wef changed module number to be (module num << 8) | M_usbHostLib 01f,03may01,wef changed pUsbListDev to pUSB_KLSI_DEV 01e,02may01,wef changed module number to be M_+ M_usbHostLib 01d,30apr01,wef changed USB_DEV struct to USB_KLSI_DEV 01c,05dec00,wef moved Module number defs to vwModNum.h - add this to #includes 02b,11aug00,sab KLSI_DEVICE structure modified, added ENET_IRP structure. 01a,02may00,vis Created */ #ifndef __INCusbklsiEndh #define __INCusbklsiEndh #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* includes */ #include "endLib.h" #include "usb/usbEnet.h" #include "vwModNum.h" /* USB Module Number Def's */ /* defines */ /* Error Numbers as set the usbEnetLib */ /* usbEnetLib error values */ /* * USB errnos are defined as being part of the USB host Module, as are all * vxWorks module numbers, but the USB Module number is further divided into * sub-modules. Each sub-module has upto 255 values for its own error codes */ #define USB_KLSI_SUB_MODULE 13 #define M_usbKlsiLib ( (USB_KLSI_SUB_MODULE << 8) | M_usbHostLib ) #define usbKlsiErr(x) (M_usbKlsiLib | (x)) #define S_usbKlsiLib_NOT_INITIALIZED usbKlsiErr (1) #define S_usbKlsiLib_BAD_PARAM usbKlsiErr (2) #define S_usbKlsiLib_OUT_OF_MEMORY usbKlsiErr (3) #define S_usbKlsiLib_OUT_OF_RESOURCES usbKlsiErr (4) #define S_usbKlsiLib_GENERAL_FAULT usbKlsiErr (5) #define S_usbKlsiLib_QUEUE_FULL usbKlsiErr (6) #define S_usbKlsiLib_QUEUE_EMPTY usbKlsiErr (7) #define S_usbKlsiLib_NOT_IMPLEMENTED usbKlsiErr (8) #define S_usbKlsiLib_USBD_FAULT usbKlsiErr (9) #define S_usbKlsiLib_NOT_REGISTERED usbKlsiErr (10) #define S_usbKlsiLib_NOT_LOCKED usbKlsiErr (11) /* Klsi specific constants */ /* List of Vendor Ids and Product Ids of devices employing KLSI adapter */ #define NETGEAR_VENDOR_ID 0x0846 #define NETGEAR_PRODUCT_ID 0x1001 #define SMC_VENDOR_ID 0x0707 #define SMC_PRODUCT_ID 0x0100 /* Packet Filter Bitmap Constants */ #define PACKET_TYPE_MULTICAST 0x10 #define PACKET_TYPE_BROADCAST 0x08 #define PACKET_TYPE_DIRECTED 0x04 #define PACKET_TYPE_ALL_MULTICAST 0x02 #define PACKET_TYPE_PROMISCOUS 0x01 /* Vendor Specific Commands */ #define USB_REQ_KLSI_ETHDESC_GET 0x00 #define USB_REQ_KLSI_SET_MCAST_FILTER 0x01 #define USB_REQ_KLSI_SET_PACKET_FILTER 0x02 #define USB_REQ_KLSI_GET_STATS 0x03 #define USB_REQ_KLSI_GET_AUX_INPUTS 0x04 #define USB_REQ_KLSI_SET_AUX_OUTPUTS 0x05 #define USB_REQ_KLSI_SET_TEMP_MAC 0x06 #define USB_REQ_KLSI_GET_TEMP_MAC 0x07 #define USB_REQ_KLSI_SET_URB_SIZE 0x08 #define USB_REQ_KLSI_SET_SOFS_TO_WAIT 0x09 #define USB_REQ_KLSI_SET_EVEN_PACKETS 0x0a #define USB_REQ_KLSI_SCAN 0xff /* Offsets for reading the Ethernet Functional Descriptor */ #define KLSI_OFFSET_MACADRS 3 #define KLSI_OFFSET_STAT_BMP 9 #define KLSI_OFFSET_SEGMENT_SIZE 13 #define KLSI_OFFSET_MCAST 15 /* Buffer Sizes */ #define KLSI_OUT_BFR_SIZE 1550 /* size of output bfr */ #define KLSI_IN_BFR_SIZE 1550 /* size of input bfr */ #define KLSI_M_BULK_NUM 512 /* number of mbulks */ #define KLSI_CL_NUMBER 256 /* number of clusters */ #define KLSI_INTERRUPT_TO_USE 100 /* interrupt used in */ /* downloading firmware */ #define USB_KLSI_ATTACH 0 /* KLSI Device attached */ #define USB_KLSI_REMOVE 1 /* KLSI Device removed */ /* typedefs */ /* * usb Device structure * This structure is a priliminary structure and is used in the * call back functions for dynamic attachment. * Later when the final end_obj structure is created, this structure * will be linked to the end_obj structure. */ typedef struct usb_klsi_dev { LINK devLink; /* linked list of device structs */ USBD_NODE_ID nodeId; /* Node Id of the device */ VOID * pDevStructure; /* link to KLSI_DEVICE Structure */ UINT16 configuration; /* configuration of the device */ UINT16 interface; /* interface of the device */ UINT16 vendorId; /* vendor identification number */ UINT16 productId; /* product identification number */ BOOL connected; /* TRUE if KLSI device connected */ UINT16 lockCount; /* Count of times structure locked */ }USB_KLSI_DEV, *pUsbListDev; /* * Statistics, to be maintained by the device/driver * As on today all the stats are not supported by the driver. */ typedef struct klsi_stats { UINT32 bitmap; /* bitmap indicating the supported stats */ /* This bitmap will be in the same way as given */ /* in the Function descriptor of the device. */ /* Corresponding bit will be set if the stat is */ /* supported both by the device and the driver */ UINT32 xmitOk; /* Frames Transmitted without errors. XMIT_OK */ UINT32 rvcOk; /* Frames received without errors. RVC_OK */ UINT32 xmitErr; /* Frames not transmitted or transmitted with errors */ UINT32 rvcErr; /* Frames recd. with errors that are not delivered */ /* to usb Host */ UINT32 rvcNoBuf; /* Frames missed, nobuffers */ UINT32 rvcCrcErr; /* Frames recd. with CRC or FCS error */ UINT32 rvcOverRun; /* Frames not recd. due to over run */ }KLSI_STATS, *pKlsiStats; /* * the multicast filter support details. */ typedef struct klsi_mcast { UINT8 isMCastPerfect; /* if TRUE, the device supports perfect */ /* multicast address filtering (no hashing) */ UINT16 noMCastFilters; /* No.of Multicast Address filters Supported */ }KLSI_MCAST_DETAILS, *pKlsiMCastDetails; /* * Irp buffer structure */ typedef struct klsi_enet_irp { USB_IRP outIrp; /* IRP to transmit output data */ BOOL outIrpInUse; /* TRUE while IRP is outstanding */ } KLSI_ENET_IRP; /* * Usb Ethernet END Device structure.. * This structure is used both by the file usbKlsiEnd.c. */ typedef struct klsi_device { END_OBJ endObj; /* must be first field */ USB_KLSI_DEV * pDev; /* the device info */ UINT8 unit; UINT8 communicateOk; /* TRUE after Starting */ /* and FALSE if stopped */ UINT8 macAdrs[6]; /* MAC adress */ CL_POOL_ID pClPoolId; /* Pointer to the Cluster Pool */ BOOL connected; /* TRUE if device is currently connected */ USBD_PIPE_HANDLE outPipeHandle; /* USBD pipe handle for bulk OUT pipe */ KLSI_ENET_IRP * pEnetIrp; /* pointer to details of Irp structure*/ int noOfIrps; /* no of Irps */ int txIrpIndex; /* What the last submitted IRP is */ UINT8 * outBfr; /* pointer to output buffer */ UINT16 outBfrLen; /* size of output buffer */ UINT32 outErrors; /* count of IRP failures */ USBD_PIPE_HANDLE inPipeHandle; /* USBD pipe handle for bulk IN pipe */ USB_IRP inIrp; /* IRP to monitor input from printer */ BOOL inIrpInUse; /* TRUE while IRP is outstanding */ UINT8 ** pInBfrArray; /* pointer to input buffers */ int noOfInBfrs; /* no of input buffers*/ int rxIndex; /* where current buffer is */ UINT16 inBfrLen; /* size of input buffer */ UINT32 inErrors; /* count of IRP failures */ KLSI_STATS stats; /* Statistics */ KLSI_MCAST_DETAILS mCastFilters; /* Multicast address filter details */ UINT16 maxSegmentSize; /* Max. Segment supported by the device */ UINT8 maxPower; /* Max. Power Consumption of the device */ /* in 2mA units */ } KLSI_DEVICE, *pKlsiDevCtrl; /* USB_KLSI_ATTACH_CALLBACK defines a callback routine which will be * invoked by usbKlsiEnd.c when the attachment or removal of a KLSI * device is detected. When the callback is invoked with an attach code of * USB_KLSI_ATTACH, the nodeId represents the ID of newly added device. When * the attach code is USB_KLSI_REMOVE, nodeId points to the KLSI device which * is no longer attached. */ typedef VOID (*USB_KLSI_ATTACH_CALLBACK) ( pVOID arg, /* caller-defined argument */ USBD_NODE_ID nodeId, /* nodeId of the KLSI device */ UINT16 attachCode /* attach or remove code */ ); LOCAL UINT16 klsiAdapterList[][2] = { { NETGEAR_VENDOR_ID, NETGEAR_PRODUCT_ID }, { SMC_VENDOR_ID, SMC_PRODUCT_ID } }; /* function prototypes*/ STATUS usbKlsiDynamicAttachRegister ( USB_KLSI_ATTACH_CALLBACK callback, pVOID arg); STATUS usbKlsiDynamicAttachUnregister ( USB_KLSI_ATTACH_CALLBACK callback, pVOID arg); STATUS usbKlsiDevLock (USBD_NODE_ID nodeId); STATUS usbKlsiDevUnlock (USBD_NODE_ID nodeId); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __INCusbKlsiEndh */