nidas  v1.2-1520
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 
79 typedef enum _USB_3_TEST_MODE
80 {
86 
87 typedef enum _USB_3_EP_TYPE
88 {
94 
95 #pragma pack(push, 1)
96 typedef 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 
114 enum
115 {
128 };
129 
130 typedef enum _USB_3_SPEED
131 {
136 
137 } USB3_SPEED;
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
169 typedef 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
177 } *USBInfoPtr;
178 
179 typedef enum _DATA_PATTERN {
183 } DATA_PATTERN;
184 
185 typedef struct _BENCHMARK_RESULTS
186 {
190 
191 //Globals
192 libusb_context* USB_context;
194 
195 //Function defs
196 int GetUSBPortsInfo();
197 int SendUSB_3_VendorCommand (libusb_device_handle* udev, int wValue, unsigned char* buf, long bufflen );
198 int SendUSB_2_VendorCommand ( libusb_device_handle* udev,int ReqMode, int Parameter, unsigned char* bufferout, int bufferSize );
199 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);
200 int GetUSBDeviceInfo ( libusb_device_handle *udev, char* serial, unsigned int serial_size, char* desc, unsigned int desc_size, float* fwVer);
201 void 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 
207 int LoopbackTest(libusb_device_handle *handle_udev, int usbIndex, int maxTransferSize, unsigned char *inBuffer, unsigned char *outBuffer);
208 
209 #endif //PASSMARK_USB_H
Definition: PassMarkUSB.h:82
Definition: PassMarkUSB.h:81
Definition: PassMarkUSB.h:117
unsigned char ss_burst_len
Definition: PassMarkUSB.h:102
Definition: PassMarkUSB.h:89
Definition: PassMarkUSB.h:135
struct USBInfo * USBInfoPtr
#define MAXSERIALNUMLEN
Definition: PassMarkUSB.h:24
enum _USB_3_TEST_MODE USB_3_TEST_MODE
Definition: PassMarkUSB.h:180
Definition: PassMarkUSB.h:125
Definition: PassMarkUSB.h:116
Definition: PassMarkUSB.h:126
Definition: PassMarkUSB.h:123
int SendUSB_3_VendorCommand(libusb_device_handle *udev, int wValue, unsigned char *buf, long bufflen)
Definition: usb_pmusb02_loopback_test.cc:153
Definition: PassMarkUSB.h:185
unsigned char buffer_count
Definition: PassMarkUSB.h:109
Definition: PassMarkUSB.h:119
Definition: PassMarkUSB.h:121
void wait_USB(int wait_time)
Definition: usb_pmusb02_loopback_test.cc:1116
_USB_3_SPEED
Definition: PassMarkUSB.h:130
Definition: PassMarkUSB.h:83
Definition: PassMarkUSB.h:120
Definition: PassMarkUSB.h:181
struct _BENCHMARK_RESULTS BENCHMARK_RESULTS
unsigned char speed
Definition: PassMarkUSB.h:108
enum _USB_3_EP_TYPE USB_3_EP_TYPE
Definition: PassMarkUSB.h:132
unsigned char ep_out
Definition: PassMarkUSB.h:101
Definition: PassMarkUSB.h:91
Definition: PassMarkUSB.h:124
float MaxWriteSpeed
Definition: PassMarkUSB.h:188
unsigned char ep_in
Definition: PassMarkUSB.h:100
USBInfo usbInfo[MAXNUMUSBPORTS+1]
Definition: PassMarkUSB.h:193
int LoopbackTest(libusb_device_handle *handle_udev, int usbIndex, int maxTransferSize, unsigned char *inBuffer, unsigned char *outBuffer)
Definition: usb_pmusb02_loopback_test.cc:1128
Definition: PassMarkUSB.h:122
int SendUSB_2_VendorCommand(libusb_device_handle *udev, int ReqMode, int Parameter, unsigned char *bufferout, int bufferSize)
Definition: usb_pmusb02_loopback_test.cc:207
unsigned char iso_transactions_per_bus_interval
Definition: PassMarkUSB.h:105
int speed
Definition: PassMarkUSB.h:175
enum _DATA_PATTERN DATA_PATTERN
Definition: PassMarkUSB.h:90
Definition: PassMarkUSB.h:118
unsigned short iso_bytes_per_bus_interval
Definition: PassMarkUSB.h:106
unsigned short buffer_size
Definition: PassMarkUSB.h:110
#define MAXNUMUSBPORTS
Definition: PassMarkUSB.h:23
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)
Definition: usb_pmusb02_loopback_test.cc:839
unsigned char polling_interval
Definition: PassMarkUSB.h:103
char usbSerial[MAXSERIALNUMLEN]
Definition: PassMarkUSB.h:171
unsigned char test_mode
Definition: PassMarkUSB.h:98
Definition: PassMarkUSB.h:134
int type
Definition: PassMarkUSB.h:174
unsigned char ep_type
Definition: PassMarkUSB.h:99
unsigned char hs_bulk_nak_interval
Definition: PassMarkUSB.h:104
Definition: PassMarkUSB.h:133
Definition: PassMarkUSB.h:127
enum _USB_3_SPEED USB3_SPEED
Definition: PassMarkUSB.h:182
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
_USB_3_EP_TYPE
Definition: PassMarkUSB.h:87
Definition: PassMarkUSB.h:92
int bus
Definition: PassMarkUSB.h:172
float fwVer
Definition: PassMarkUSB.h:176
Definition: PassMarkUSB.h:96
libusb_context * USB_context
Definition: PassMarkUSB.h:192
Definition: PassMarkUSB.h:169
_USB_3_TEST_MODE
Definition: PassMarkUSB.h:79
float MaxReadSpeed
Definition: PassMarkUSB.h:187
int port
Definition: PassMarkUSB.h:173
int GetUSBPortsInfo()
Definition: usb_pmusb02_loopback_test.cc:601
Definition: PassMarkUSB.h:84