432 lines
13 KiB
C
432 lines
13 KiB
C
/* usb2End.h - Generation 2 USB End driver */
|
|
|
|
/*
|
|
* Copyright (c) 2008-2011, 2014 Wind River Systems, Inc.
|
|
*
|
|
* The right to copy, distribute, modify, or otherwise make use
|
|
* of this software may be licensed only pursuant to the terms
|
|
* of an applicable Wind River license agreement.
|
|
*/
|
|
|
|
/*
|
|
modification history
|
|
--------------------
|
|
01q,29dec14,lan Use OS_CONVERT_MILLISECONDS_TO_WAIT_VALUE to set semTake
|
|
timeout value (VXW6-83914)
|
|
01p,01sep14,lan add a semaphore to protect the usb2EndUnbind (VXW6-83171)
|
|
01o,10aug11,s_z Replace netPoolInit by endPoolCreate (WIND00286518)
|
|
01n,18jul11,s_z Deal with the network packet which has PAD data at the end
|
|
(WIND00288104)
|
|
01m,06jul11,ghs Use USBD match function for matching device ID (WIND00183500)
|
|
01l,07jan11,ghs Clean up compile warnings (WIND00247082)
|
|
01k,29apr10,pad Moved extern C statement after include statements.
|
|
01j,27apr10,j_x Import usb2EndIoctl for usbGen2Show (WIND00184395)
|
|
01i,30mar10,w_x Back port GEN2 class drivers for old VxWorks (WIND00192167)
|
|
01h,23mar10,j_x Changed for USB debug (WIND00184542)
|
|
01g,13jan10,ghs vxWorks 6.9 LP64 adapting
|
|
01f,21oct09,w_x Modifications for Kernel API references (WIND00187268)
|
|
01e,11sep09,ghs Remove warning message
|
|
01d,27aug09,w_x Unify log mechanism and variable naming with some compiler
|
|
warning removal in USB GEN2 class drivers (WIND00178936)
|
|
01c,19aug09,s_z Change usb2EndLoad routine as an external interface
|
|
01b,22arp09,s_z Remove the gun compiler warning and code cleaning
|
|
01a,12nov08,s_z written
|
|
|
|
*/
|
|
#ifndef __INCusb2Endh
|
|
#define __INCusb2Endh
|
|
|
|
/* includes */
|
|
#include <vxWorks.h>
|
|
#include <iosLib.h>
|
|
#include <semLib.h>
|
|
#include <logLib.h>
|
|
#include <errno.h>
|
|
#include <errnoLib.h>
|
|
#include <etherMultiLib.h> /* multicast stuff. */
|
|
#include <endLib.h>
|
|
#include <usb2/usb2Helper.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* define */
|
|
|
|
/* Default buffer sizes */
|
|
#ifndef USB2_END_DEFAULT_OUT_BUFFER_SIZE
|
|
#define USB2_END_DEFAULT_OUT_BUFFER_SIZE 2048 /*1550*/
|
|
#endif
|
|
|
|
#ifndef USB2_END_DEFAULT_IN_BUFFER_SIZE
|
|
#define USB2_END_DEFAULT_IN_BUFFER_SIZE 2048 /*1550*/
|
|
#endif
|
|
|
|
#define USB2_END_INTERRUPT_IN_BUFFER_SIZE 8
|
|
|
|
/*
|
|
#define USB2_END_POOL_BUFSIZ ((USB2_END_DEFAULT_IN_BUFFER_SIZE + 3) \
|
|
& 0xFFFFFFFC)
|
|
*/
|
|
|
|
#define USB2_END_POOL_BUFSIZ ((USB2_END_DEFAULT_OUT_BUFFER_SIZE + 3) \
|
|
& 0xFFFFFFFC)
|
|
|
|
#define USB2_END_MIN_BUF (1514) /* min first buffer size */
|
|
#define USB2_END_TUPLE_CNT (256)
|
|
|
|
|
|
/* Default poly for hash */
|
|
#define USB2_END_POLY 0xEDB88320
|
|
#define USB2_END_BITS 0x06
|
|
|
|
/*
|
|
* Define different iConfigureFlag according devices chipset serial
|
|
* we use the first byte to record different kind of chipset
|
|
* the last byte for future using, such as status checking
|
|
*/
|
|
|
|
|
|
#define USB2_END_PEGASUS_II (0x01)
|
|
#define USB2_END_ASIX (0x02)
|
|
#define USB2_END_ASIX_AM88772 (0x03)
|
|
#define USB2_END_DM960X (0x04)
|
|
|
|
/* Define End speed parameter*/
|
|
|
|
#define USB2_END_SPEED_10M 10000000 /* 10Mbs */
|
|
#define USB2_END_SPEED_100M 100000000 /* 10Mbs */
|
|
|
|
/*
|
|
* Shortcut for getting the hardware address
|
|
* from the MIB II stuff.
|
|
*/
|
|
#define END_HADDR(pEnd) \
|
|
((pEnd)->mib2Tbl.ifPhysAddress.phyAddress)
|
|
|
|
#define END_HADDR_LEN(pEnd) \
|
|
((pEnd)->mib2Tbl.ifPhysAddress.addrLength)
|
|
|
|
/*
|
|
* USB2_END_MAX_LIST_NUMBER is the max length of the global list table,
|
|
* can be expanded when the list is not enough
|
|
*/
|
|
#define USB2_END_MAX_LIST_NUMBER 16
|
|
#define USB2_END_MAX_VENDOR_DEVICE_NUMBER 100
|
|
|
|
/*
|
|
*
|
|
*
|
|
*/
|
|
|
|
#define USB2_END_DEFAULT_TIMEOUT 1000 /* millisecond */
|
|
#define USB2_END_DEFAULT_TIMEOUT_PLUS 2000 /* millisecond */
|
|
|
|
/*Vendor ID defination */
|
|
|
|
/* ADMtek */
|
|
#define ADMTEK_VENDOR_ID 0x07A6
|
|
|
|
/* Sohoware */
|
|
#define SOHOWARE_VENDOR_ID 0x15E8
|
|
|
|
/* D-Link */
|
|
#define DLINK_VENDOR_ID 0x2001
|
|
|
|
/* Belkin */
|
|
#define BELKIN_VENDOR_ID 0x050D
|
|
|
|
/* Netgear */
|
|
#define NETGEAR_VENDOR_ID 0x0846
|
|
|
|
/* IO Data */
|
|
#define IODATA_VENDOR_ID 0x04BB
|
|
|
|
/* 3COM */
|
|
#define _3COM_VENDOR_ID 0x0506
|
|
|
|
/* SIEMENS */
|
|
#define SIEMENS_VENDOR_ID 0x067C
|
|
|
|
/* ABOCOM */
|
|
#define ABOCOM_VENDOR_ID 0x07B8
|
|
|
|
/* ACCTON */
|
|
#define ACCTON_VENDOR_ID 0x083A
|
|
|
|
/* AEILAB */
|
|
#define AEILAB_VENDOR_ID 0x3334
|
|
|
|
/* ALLIEDTEL */
|
|
#define ALLIEDTEL_VENDOR_ID 0x07C9
|
|
|
|
/* ATEN */
|
|
#define ATEN_VENDOR_ID 0x0557
|
|
|
|
/* BILLIONTON */
|
|
#define BILLIONTON_VENDOR_ID 0x08DD
|
|
|
|
/* COMPAQ */
|
|
#define COMPAQ_VENDOR_ID 0x049F
|
|
|
|
/* COREGA */
|
|
#define COREGA_VENDOR_ID 0x07AA
|
|
|
|
/* ELCON */
|
|
#define ELCON_VENDOR_ID 0x0dB7
|
|
|
|
/* ELECOM */
|
|
#define ELECOM_VENDOR_ID 0x056E
|
|
|
|
/* ELSA */
|
|
#define ELSA_VENDOR_ID 0x05CC
|
|
|
|
/* GIGABYTE */
|
|
#define GIGABYTE_VENDOR_ID 0x1044
|
|
|
|
/* HAWKING */
|
|
#define HAWKING_VENDOR_ID 0x0E66
|
|
|
|
/* HP */
|
|
#define HP_VENDOR_ID 0x03F0
|
|
|
|
/* KINGSTON */
|
|
#define KINGSTON_VENDOR_ID 0x0951
|
|
|
|
/* LANEED */
|
|
#define LANEED_VENDOR_ID 0x056E
|
|
|
|
/* LINKSYS */
|
|
#define LINKSYS_VENDOR_ID 0x066B
|
|
|
|
/* LINKSYS2 */
|
|
#define LINKSYS2_VENDOR_ID 0x077B
|
|
|
|
/* MELCO */
|
|
#define MELCO_VENDOR_ID 0x0411
|
|
|
|
/* MICROSOFT */
|
|
#define MICROSOFT_VENDOR_ID 0x045E
|
|
|
|
/* MOBILITY */
|
|
#define MOBILITY_VENDOR_ID 0x1342
|
|
|
|
/* OCT */
|
|
#define OCT_VENDOR_ID 0x0B39
|
|
|
|
/* SMARTBRIDGES */
|
|
#define SMARTBRIDGES_VENDOR_ID 0x08D1
|
|
|
|
/* SMC */
|
|
#define SMC_VENDOR_ID 0x0707
|
|
|
|
/* typedef */
|
|
|
|
/* Usb-Ethernet Device Configure Flag */
|
|
typedef struct usb2_end_adapter_configure
|
|
{
|
|
UINT8 uChipsetType;
|
|
UINT8 uHeader;
|
|
UINT8 uLinkStatusOffset;
|
|
UINT8 uLinkStatusMask;
|
|
}USB2_END_CONFIG_FLAG,*pUSB2_END_CONFIG_FLAG;
|
|
|
|
/*
|
|
* Usb2 end private functions, which need be accompished in
|
|
* the chipset previate files
|
|
*/
|
|
typedef struct usb2_end_private_funcs
|
|
{
|
|
STATUS (*usb2EndSetFlag)
|
|
(
|
|
END_OBJ * endObj
|
|
);
|
|
STATUS (*usb2EndMCastFilterSet)
|
|
(
|
|
END_OBJ * endObj
|
|
);
|
|
STATUS (*usb2EndHWConfig)
|
|
(
|
|
VOID * pDev
|
|
);
|
|
VOID (*usb2EndStatusCheck)
|
|
(
|
|
VOID * pDev
|
|
);
|
|
VOID (* usb2EndDataPacking)
|
|
(
|
|
UINT8 * pBuf,
|
|
UINT32 * pActLen
|
|
);
|
|
UINT32 (* usb2EndDataUnPacking)
|
|
(
|
|
unsigned char ** ppBuf,
|
|
UINT32 * pPacketLen,
|
|
UINT32 * pActLen
|
|
);
|
|
VOID (* quirkySupportFunc)
|
|
(
|
|
pUSB2_END_CONFIG_FLAG pConfigFlag
|
|
);
|
|
VOID (* usrApplication)
|
|
(
|
|
void
|
|
);
|
|
} USB2_END_PRIVATE_FUNCS;
|
|
|
|
|
|
#define USB2_END_SET_CONFIG(uChipsetType,uHeader,uLinkStatusOffset, \
|
|
uLinkStatusMask) \
|
|
{ \
|
|
uChipsetType, \
|
|
uHeader, \
|
|
uLinkStatusOffset, \
|
|
uLinkStatusMask \
|
|
}
|
|
|
|
/* Usb-Ethernet Device Information */
|
|
typedef struct usb2_end_adapter_info
|
|
{
|
|
USBHST_DEVICE_ID deviceId; /* Store device id */
|
|
const char * deviceName; /* device name */
|
|
USB2_END_PRIVATE_FUNCS * pPrivateFuncs; /* Device private Function table */
|
|
pUSB2_END_CONFIG_FLAG pConfigFlag; /*Configure Flag*/
|
|
|
|
}USB2_END_ADAPTER_INFO,*pUSB2_END_ADAPTER_INFO;
|
|
|
|
#define USB2_END_ADAPTER(uVendorID,uProductID,deviceName,pPrivateFuncs, \
|
|
pConfigFlag) \
|
|
{ \
|
|
{ \
|
|
{NULL}, USBD_MATCH_NOTIFY_AS_DEVICE, \
|
|
uVendorID, uProductID, 0, 0, 0, \
|
|
0, 0, 0, \
|
|
0, 0, 0, \
|
|
USBD_MATCH_ID_VENDORID | USBD_MATCH_ID_PRODUCTID, 0 \
|
|
}, \
|
|
deviceName, \
|
|
pPrivateFuncs, \
|
|
pConfigFlag \
|
|
}
|
|
|
|
typedef struct usb2_end_adapter_device_list
|
|
{
|
|
char * pTeamName; /* Team Name */
|
|
USB2_END_ADAPTER_INFO * pAdapterTeamList; /* Team List */
|
|
UINT16 nTeamMembers; /* Numbers of the Team member*/
|
|
|
|
}USB2_END_DEVICE_LIST,*pUSB2_END_DEVICE_LIST;
|
|
|
|
typedef struct usb2_end_device
|
|
{
|
|
END_OBJ endObj; /* must be first field */
|
|
USB2_CLASS_DEVICE * pUsb2ClassDevice; /* Generic class device info */
|
|
|
|
SEM_ID pBulkOutBinarySema; /* signaling sem, Bulk Out transfer*/
|
|
SEM_ID pBulkInBinarySema; /* signaling sem, Bulk In transfer */
|
|
SEM_ID pInterruptInBinarySema; /* signaling sem, Interrupt in transfer */
|
|
|
|
SEM_ID pBulkOutUrbMutex; /* Bulk Out transfer mutex */
|
|
SEM_ID pBulkInUrbMutex; /* Bulk In transfer mutex */
|
|
SEM_ID pInterruptInUrbMutex; /* Interrupt In transfer mutex */
|
|
SEM_ID pEndUnbindMutex; /* End unbind mutex */
|
|
|
|
USBHST_URB * pBulkOutUrb; /* Bulk Out transfer URB */
|
|
USBHST_URB * pBulkInUrb; /* Bulk In transfer URB */
|
|
USBHST_URB * pInterruptInUrb; /* Interrupt In transfer URB */
|
|
|
|
UINT32 uBulkOutBufferSize; /* Bulk Out buffer size */
|
|
UINT32 uBulkInBufferSize; /* Bulk In buffer size */
|
|
UINT32 uInterruptInBufferSize; /* Interrupt In buffer size */
|
|
|
|
unsigned char * pBulkOutBuffer; /* Bulk Out buffer point*/
|
|
unsigned char * pBulkInBuffer; /* Bulk In buffer */
|
|
unsigned char * pInterruptInBuffer; /* Interrupt In buffer */
|
|
|
|
UINT8 bBulkOutEndPointAddr; /* Bulk Out endpoint addr */
|
|
UINT8 bBulkInEndPointAddr; /* Bulk In endpoint addr */
|
|
UINT8 bInterruptInEndPointAddr;/* Interrupt In endpoint addr */
|
|
|
|
char * pDeviceGeneralName; /* Devcie General Name */
|
|
UINT32 uDeviceIndex; /* Device index in the list */
|
|
|
|
int deviceTimeout; /* Timeout (ms) to wait reqs. */
|
|
|
|
UINT8 macAddress[6]; /* Mac address */
|
|
MSG_Q_ID hCommonTaskMsgQ; /* MsgQ ID for common task */
|
|
|
|
USB2_END_ADAPTER_INFO *pAdapterInfo; /* Adapter infomation */
|
|
UINT16 wMaxPacketSizeOut; /* Max packet size */
|
|
BOOL bLinked; /* Net cable linked*/
|
|
BOOL bFirstConnected; /* The first time connection */
|
|
BOOL bNetworkBinded; /* Bind to Network */
|
|
|
|
} USB2_END_DEVICE;
|
|
|
|
|
|
typedef struct usb2_end_data_received_info
|
|
{
|
|
USB2_END_DEVICE * pDevice; /* Device point */
|
|
UINT8 * pBuffer; /* Received data buffer point or NULL */
|
|
UINT32 cmdOractLen; /* parameter or received data length */
|
|
} USB2_END_DATA_RECEIVED_INFO;
|
|
|
|
typedef enum data_received_info_parameter
|
|
{
|
|
USB2_END_KILL_THE_TASK = 0,
|
|
USB2_END_DATA_TRANSFER_REQUEST ,
|
|
USB2_END_STATUS_CHECK_REQUEST ,
|
|
USB2_END_BIND_TO_NETWORK,
|
|
USB2_END_UNBIND_FROM_NETWORK
|
|
} DATA_RECEIVED_INFO_PARAMETER;
|
|
|
|
/*
|
|
* Exported functions
|
|
*/
|
|
|
|
IMPORT int endMultiLstCnt
|
|
(
|
|
END_OBJ * pEnd
|
|
);
|
|
|
|
IMPORT END_OBJ * usb2EndLoad
|
|
(
|
|
char * initString,
|
|
void * pDev
|
|
);
|
|
|
|
IMPORT STATUS usb2EndInit
|
|
(
|
|
char * pName
|
|
);
|
|
|
|
IMPORT void usb2EndDeInit
|
|
(
|
|
void
|
|
);
|
|
|
|
IMPORT STATUS usb2EndDeviceListAdd
|
|
(
|
|
char * pTeamName,
|
|
USB2_END_ADAPTER_INFO * pAdapterTeamList,
|
|
UINT16 nTeamMenbers
|
|
);
|
|
|
|
IMPORT VOID usb2EndDeviceListRemove
|
|
(
|
|
USB2_END_ADAPTER_INFO * pAdapterTeamList
|
|
);
|
|
|
|
IMPORT int usb2EndIoctl
|
|
(
|
|
USB2_END_DEVICE * pDevice, /* device receiving command */
|
|
int function, /* Function to use */
|
|
void * arg /* Argument to use */
|
|
);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* __INCusb2Endh */
|
|
|