nidas v1.2.3
PassMarkUSB.h
Go to the documentation of this file.
1//Passmark USB2 USB3 Linux example program
2//PassMarkUSB.h
3//Copyright PassMark Software 2010-2017
4//www.passmark.com
5//version 2.1.1001
6//
7//Requires the latest firmware for USB3 plugs (at least V2.3)
8
9#ifndef PASSMARK_USB_H
10#define PASSMARK_USB_H
11
12//Include Linux USB library
13#include <libusb-1.0/libusb.h>
14
15#define BUF_256 256
16#define BUF_128 128
17
18//Vendor and product IDs for PassMark USB plugs
19#define LOOPBACK_VENDOR_ID 0x0403
20#define LOOPBACK_USB_2_PRODUCT_ID 0xff0a
21#define LOOPBACK_USB_3_PRODUCT_ID 0xff0b
22
23#define MAXNUMUSBPORTS 20
24#define MAXSERIALNUMLEN 20
25#define MAX_DRIVER_NAME 64
26
27//
28// USB2 Firmware definitions
29//
30// Firmware vendor command to change modes
31#define USB_2_CHANGEMODE 0xB0 // Passmark vendor command setup in firmware
32#define USB_2_CHANGEMODEIN 1 // Number of parameters sent to this firmware command
33#define USB_2_CHANGEMODEOUT 2
34
35#define USB_2_CHANGEMODEOUTSTAT 50
36#define USB_2_INITIALISATION 0
37#define USB_2_LOOPBACK 1
38#define USB_2_BENCHMARK 2
39#define USB_2_STATISTICS 3
40#define USB_2_CHANGELEDS 4
41
42#define USB_2_EPLOOPOUT 0x02 //Loopback out endpoint
43#define USB_2_EPLOOPIN 0x86 //Loopback in endpoint
44
45#define USB_2_EPBENCHIN 0x88 //Benchmark in endpoint
46#define USB_2_EPBENCHOUT 0x04 //Benchmark out endpoint
47#define USB_2_EPHISTORY 0x81 //history report endpoint
48
49//
50// Host definitions
51//
52#define USB_2_FSFIFOSIZE 64 // Size of blocks handled by USB device (chuncked into these blocks at a lower layer)
53#define USB_2_HSFIFOSIZE 512 // Size of blocks handled by USB device (chuncked into these blocks at a lower layer)
54#define USB_2_LOOPBACKFSBUFFERSIZE 64 // Buffersize for loopback in FullSpeed mode = FIFO buffer size
55#define USB_2_LOOPBACKHSBUFFERSIZE 512 // Buffersize for loopback in HighSpeed mode = FIFO buffer size - 4095 is linux limit?
56
57#define USB_2_BENCHMARKFSBUFFERSIZE 2048 // Buffersize for benchmark in FullSpeed mode = worst case history buffer full
58#define USB_2_BENCHMARKHSBUFFERSIZE 32768 // Buffersize for benchmark in HighSpeed mode = worst case history buffer full
59#define USB_2_BENCHMARKHISTBUFFERSIZE 64 // Buffersize for benchmark History report
60
61#define READWRITECYCLES 10 //Number of times bencmark test will send or read data during a cycle
62#define BENCHMARKCYCLES 10 //Number of times benchmark will run read/write cycle
63
64
65//USB3 definitions
66#define USB_3_EPLOOPOUT 0x01
67#define USB_3_EPLOOPIN 0x81
68
69//USB3 Plug benchmakr read then write or read+write buffer size
70#define USB_3_BENCHMARK_RW_BUFFER_SIZE 24576
71#define USB_3_BENCHMARK_RW_BUFFER_COUNT 2
72//USB3 plug benchmark read or write only buffer size
73#define USB_3_BENCHMARK_BUFFER_SIZE 49512
74#define USB_3_BENCHMARK_BUFFER_COUNT 2
75//USB3 plug loopback buffer size
76#define USB_3_LOOPBACK_BUFFER_SIZE 1024
77#define USB_3_LOOPBACK_BUFFER_COUNT 64
78
86
94
95#pragma pack(push, 1)
96typedef struct
97{
98 unsigned char test_mode;
99 unsigned char ep_type;
100 unsigned char ep_in;
101 unsigned char ep_out;
102 unsigned char ss_burst_len;
103 unsigned char polling_interval;
104 unsigned char hs_bulk_nak_interval;
107 // settings added from firmware version 2.0
108 unsigned char speed;
109 unsigned char buffer_count;
110 unsigned short buffer_size;
112#pragma pack(pop)
113
114enum
115{
129
138
139#define USB_3_DISPLAY_DISABLE 0
140#define USB_3_DISPLAY_ENABLE (1 << 8)
141
142#define LPM_ENTRY_DISABLE 0
143#define LPM_ENTRY_ENABLE (1 << 8)
144
145#define USB_3_PHY_ERROR_DECODE_EV (1 << 0)
146#define USB_3_PHY_ERROR_EB_OVR_EV (1 << 1)
147#define USB_3_PHY_ERROR_EB_UND_EV (1 << 2)
148#define USB_3_PHY_ERROR_DISPARITY_EV (1 << 3)
149#define USB_3_RX_ERROR_CRC5_EV (1 << 5)
150#define USB_3_RX_ERROR_CRC16_EV (1 << 6)
151#define USB_3_RX_ERROR_CRC32_EV (1 << 7)
152#define USB_3_TRAINING_ERROR_EV (1 << 8)
153#define USB_3_PHY_LOCK_EV (1 << 9)
154
155#define USB_3_HP_TIMEOUT_EN (1 << 0)
156#define USB_3_RX_SEQ_NUM_ERR_EN (1 << 1)
157#define USB_3_RX_HP_FAIL_EN (1 << 2)
158#define USB_3_MISSING_LGOOD_EN (1 << 3)
159#define USB_3_MISSING_LCRD_EN (1 << 4)
160#define USB_3_CREDIT_HP_TIMEOUT_EN (1 << 5)
161#define USB_3_PM_LC_TIMEOUT_EN (1 << 6)
162#define USB_3_TX_SEQ_NUM_ERR_EN (1 << 7)
163#define USB_3_HDR_ADV_TIMEOUT_EN (1 << 8)
164#define USB_3_HDR_ADV_HP_EN (1 << 9)
165#define USB_3_HDR_ADV_LCRD_EN (1 << 10)
166#define USB_3_HDR_ADV_LGO_EN (1 << 11)
167
168//Data Structures
169typedef struct USBInfo
170{
172 int bus;
173 int port;
174 int type; //USB2 or 3, check against LOOPBACK_USB2_PRODUCT_ID and LOOPBACK_USB3_PRODUCT_ID
175 int speed;
176 float fwVer; //From FW V2.0 can be read direct from USB3 plug
178
184
190
191//Globals
192libusb_context* USB_context;
194
195//Function defs
197int SendUSB_3_VendorCommand (libusb_device_handle* udev, int wValue, unsigned char* buf, long bufflen );
198int SendUSB_2_VendorCommand ( libusb_device_handle* udev,int ReqMode, int Parameter, unsigned char* bufferout, int bufferSize );
199bool ConnectUSBPlug ( bool bReconnect, int usbPlugIndex, USB3_SPEED Speed, USB_3_TEST_MODE TestMode, libusb_device_handle **handle_udev, unsigned long *MaxTransferSize, unsigned long *CurrentTransferSize , unsigned char **inBuffer, unsigned char **outBuffer);
200int GetUSBDeviceInfo ( libusb_device_handle *udev, char* serial, unsigned int serial_size, char* desc, unsigned int desc_size, float* fwVer);
201void wait_USB (int wait_time) ;
202
203// Removed from Header because defined in main file and prototype mush change
204//void USB_2_BenchmarkTest(libusb_device_handle *handle_udev, int usbIndex);
205//void USB_3_BenchmarkTest(libusb_device_handle *handle_udev, int usbIndex);
206
207int LoopbackTest(libusb_device_handle *handle_udev, int usbIndex, int maxTransferSize, unsigned char *inBuffer, unsigned char *outBuffer);
208
209#endif //PASSMARK_USB_H
@ USB_3_SET_DISP_MODE
Definition PassMarkUSB.h:119
@ USB_3_CONFIG_LPM_ENTRY
Definition PassMarkUSB.h:126
@ USB_3_GET_DEVICE_INFO
Definition PassMarkUSB.h:127
@ USB_3_SET_CONFIG
Definition PassMarkUSB.h:117
@ USB_3_GET_ERROR_COUNTS
Definition PassMarkUSB.h:121
@ USB_3_GET_CONFIG
Definition PassMarkUSB.h:118
@ USB_3_GET_VOLTAGE
Definition PassMarkUSB.h:122
@ USB_3_RESET_ERROR_COUNTERS
Definition PassMarkUSB.h:125
@ USB_3_RESERVED_DONOTUSE
Definition PassMarkUSB.h:123
@ USB_3_GET_MAX_SPEED
Definition PassMarkUSB.h:124
@ USB_3_CHANGELEDS
Definition PassMarkUSB.h:116
@ USB_3_CONF_ERROR_COUNTERS
Definition PassMarkUSB.h:120
void wait_USB(int wait_time)
libusb_context * USB_context
Definition PassMarkUSB.h:192
enum _DATA_PATTERN DATA_PATTERN
enum _USB_3_EP_TYPE USB_3_EP_TYPE
USBInfo usbInfo[MAXNUMUSBPORTS+1]
Definition PassMarkUSB.h:193
enum _USB_3_TEST_MODE USB_3_TEST_MODE
_USB_3_SPEED
Definition PassMarkUSB.h:131
@ USB_3_ST_UNKNOWN
Definition PassMarkUSB.h:132
@ USB_3_ST_FS
Definition PassMarkUSB.h:133
@ USB_3_ST_HS
Definition PassMarkUSB.h:134
@ USB_3_ST_SS
Definition PassMarkUSB.h:135
struct USBInfo * USBInfoPtr
_USB_3_TEST_MODE
Definition PassMarkUSB.h:80
@ USB_3_TEST_BENCHMARK_RW
Definition PassMarkUSB.h:84
@ USB_3_TEST_LOOPBACK
Definition PassMarkUSB.h:81
@ USB_3_TEST_BENCHMARK_WRITE
Definition PassMarkUSB.h:83
@ USB_3_TEST_BENCHMARK_READ
Definition PassMarkUSB.h:82
#define MAXSERIALNUMLEN
Definition PassMarkUSB.h:24
int LoopbackTest(libusb_device_handle *handle_udev, int usbIndex, int maxTransferSize, unsigned char *inBuffer, unsigned char *outBuffer)
enum _USB_3_SPEED USB3_SPEED
int GetUSBDeviceInfo(libusb_device_handle *udev, char *serial, unsigned int serial_size, char *desc, unsigned int desc_size, float *fwVer)
_DATA_PATTERN
Definition PassMarkUSB.h:179
@ INCREMENTINGBYTE
Definition PassMarkUSB.h:180
@ CONSTANTBYTE
Definition PassMarkUSB.h:182
@ RANDOMBYTE
Definition PassMarkUSB.h:181
bool ConnectUSBPlug(bool bReconnect, int usbPlugIndex, USB3_SPEED Speed, USB_3_TEST_MODE TestMode, libusb_device_handle **handle_udev, unsigned long *MaxTransferSize, unsigned long *CurrentTransferSize, unsigned char **inBuffer, unsigned char **outBuffer)
struct _BENCHMARK_RESULTS BENCHMARK_RESULTS
_USB_3_EP_TYPE
Definition PassMarkUSB.h:88
@ USB_3_EP_ISOCHRONOUS
Definition PassMarkUSB.h:90
@ USB_3_EP_INTERRUPT
Definition PassMarkUSB.h:92
@ USB_3_EP_CONTROL
Definition PassMarkUSB.h:89
@ USB_3_EP_BULK
Definition PassMarkUSB.h:91
#define MAXNUMUSBPORTS
Definition PassMarkUSB.h:23
int GetUSBPortsInfo()
int SendUSB_3_VendorCommand(libusb_device_handle *udev, int wValue, unsigned char *buf, long bufflen)
int SendUSB_2_VendorCommand(libusb_device_handle *udev, int ReqMode, int Parameter, unsigned char *bufferout, int bufferSize)
Definition PassMarkUSB.h:170
int speed
Definition PassMarkUSB.h:175
int type
Definition PassMarkUSB.h:174
int bus
Definition PassMarkUSB.h:172
float fwVer
Definition PassMarkUSB.h:176
char usbSerial[MAXSERIALNUMLEN]
Definition PassMarkUSB.h:171
int port
Definition PassMarkUSB.h:173
Definition PassMarkUSB.h:186
float MaxReadSpeed
Definition PassMarkUSB.h:187
float MaxWriteSpeed
Definition PassMarkUSB.h:188
Definition PassMarkUSB.h:97
unsigned char speed
Definition PassMarkUSB.h:108
unsigned char ss_burst_len
Definition PassMarkUSB.h:102
unsigned char iso_transactions_per_bus_interval
Definition PassMarkUSB.h:105
unsigned char hs_bulk_nak_interval
Definition PassMarkUSB.h:104
unsigned short buffer_size
Definition PassMarkUSB.h:110
unsigned short iso_bytes_per_bus_interval
Definition PassMarkUSB.h:106
unsigned char polling_interval
Definition PassMarkUSB.h:103
unsigned char ep_in
Definition PassMarkUSB.h:100
unsigned char test_mode
Definition PassMarkUSB.h:98
unsigned char ep_out
Definition PassMarkUSB.h:101
unsigned char buffer_count
Definition PassMarkUSB.h:109
unsigned char ep_type
Definition PassMarkUSB.h:99