[lantiq] move files/ -> files-3.3/
[openwrt.git] / target / linux / lantiq / files-3.3 / drivers / usb / ifxhcd / ifxhcd_es.c
1 /*****************************************************************************
2  **   FILE NAME       : ifxhcd_es.c
3  **   PROJECT         : IFX USB sub-system V3
4  **   MODULES         : IFX USB sub-system Host and Device driver
5  **   SRC VERSION     : 1.0
6  **   DATE            : 1/Jan/2009
7  **   AUTHOR          : Chen, Howard
8  **   DESCRIPTION     : The file contain function to enable host mode USB-IF Electrical Test function.
9  *****************************************************************************/
10
11 /*!
12  \file ifxhcd_es.c
13  \ingroup IFXUSB_DRIVER_V3
14  \brief The file contain function to enable host mode USB-IF Electrical Test function.
15 */
16
17 #include <linux/version.h>
18 #include "ifxusb_version.h"
19
20 #include <linux/kernel.h>
21
22 #include <linux/errno.h>
23
24 #include <linux/dma-mapping.h>
25
26 #include "ifxusb_plat.h"
27 #include "ifxusb_regs.h"
28 #include "ifxusb_cif.h"
29 #include "ifxhcd.h"
30
31
32 #ifdef __WITH_HS_ELECT_TST__
33         /*
34          * Quick and dirty hack to implement the HS Electrical Test
35          * SINGLE_STEP_GET_DEVICE_DESCRIPTOR feature.
36          *
37          * This code was copied from our userspace app "hset". It sends a
38          * Get Device Descriptor control sequence in two parts, first the
39          * Setup packet by itself, followed some time later by the In and
40          * Ack packets. Rather than trying to figure out how to add this
41          * functionality to the normal driver code, we just hijack the
42          * hardware, using these two function to drive the hardware
43          * directly.
44          */
45
46
47         void do_setup(ifxusb_core_if_t *_core_if)
48         {
49
50                 ifxusb_core_global_regs_t *global_regs    = _core_if->core_global_regs;
51                 ifxusb_host_global_regs_t *hc_global_regs = _core_if->host_global_regs;
52                 ifxusb_hc_regs_t          *hc_regs        = _core_if->hc_regs[0];
53                 uint32_t                  *data_fifo      = _core_if->data_fifo[0];
54
55                 gint_data_t    gintsts;
56                 hctsiz_data_t  hctsiz;
57                 hcchar_data_t  hcchar;
58                 haint_data_t   haint;
59                 hcint_data_t   hcint;
60
61
62                 /* Enable HAINTs */
63                 ifxusb_wreg(&hc_global_regs->haintmsk, 0x0001);
64
65                 /* Enable HCINTs */
66                 ifxusb_wreg(&hc_regs->hcintmsk, 0x04a3);
67
68                 /* Read GINTSTS */
69                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
70                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
71
72                 /* Read HAINT */
73                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
74                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
75
76                 /* Read HCINT */
77                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
78                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
79
80                 /* Read HCCHAR */
81                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
82                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
83
84                 /* Clear HCINT */
85                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
86
87                 /* Clear HAINT */
88                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
89
90                 /* Clear GINTSTS */
91                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
92
93                 /* Read GINTSTS */
94                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
95                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
96
97                 /*
98                  * Send Setup packet (Get Device Descriptor)
99                  */
100
101                 /* Make sure channel is disabled */
102                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
103                 if (hcchar.b.chen) {
104                         //fprintf(stderr, "Channel already enabled 1, HCCHAR = %08x\n", hcchar.d32);
105                         hcchar.b.chdis = 1;
106         //              hcchar.b.chen = 1;
107                         ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
108                         //sleep(1);
109                         mdelay(1000);
110
111                         /* Read GINTSTS */
112                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
113                         //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
114
115                         /* Read HAINT */
116                         haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
117                         //fprintf(stderr, "HAINT: %08x\n", haint.d32);
118
119                         /* Read HCINT */
120                         hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
121                         //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
122
123                         /* Read HCCHAR */
124                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
125                         //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
126
127                         /* Clear HCINT */
128                         ifxusb_wreg(&hc_regs->hcint, hcint.d32);
129
130                         /* Clear HAINT */
131                         ifxusb_wreg(&hc_global_regs->haint, haint.d32);
132
133                         /* Clear GINTSTS */
134                         ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
135
136                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
137                         //if (hcchar.b.chen) {
138                         //      fprintf(stderr, "** Channel _still_ enabled 1, HCCHAR = %08x **\n", hcchar.d32);
139                         //}
140                 }
141
142                 /* Set HCTSIZ */
143                 hctsiz.d32 = 0;
144                 hctsiz.b.xfersize = 8;
145                 hctsiz.b.pktcnt = 1;
146                 hctsiz.b.pid = IFXUSB_HC_PID_SETUP;
147                 ifxusb_wreg(&hc_regs->hctsiz, hctsiz.d32);
148
149                 /* Set HCCHAR */
150                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
151                 hcchar.b.eptype = IFXUSB_EP_TYPE_CTRL;
152                 hcchar.b.epdir = 0;
153                 hcchar.b.epnum = 0;
154                 hcchar.b.mps = 8;
155                 hcchar.b.chen = 1;
156                 ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
157
158                 /* Fill FIFO with Setup data for Get Device Descriptor */
159                 ifxusb_wreg(data_fifo++, 0x01000680);
160                 ifxusb_wreg(data_fifo++, 0x00080000);
161
162                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
163                 //fprintf(stderr, "Waiting for HCINTR intr 1, GINTSTS = %08x\n", gintsts.d32);
164
165                 /* Wait for host channel interrupt */
166                 do {
167                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
168                 } while (gintsts.b.hcintr == 0);
169
170                 //fprintf(stderr, "Got HCINTR intr 1, GINTSTS = %08x\n", gintsts.d32);
171
172                 /* Disable HCINTs */
173                 ifxusb_wreg(&hc_regs->hcintmsk, 0x0000);
174
175                 /* Disable HAINTs */
176                 ifxusb_wreg(&hc_global_regs->haintmsk, 0x0000);
177
178                 /* Read HAINT */
179                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
180                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
181
182                 /* Read HCINT */
183                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
184                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
185
186                 /* Read HCCHAR */
187                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
188                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
189
190                 /* Clear HCINT */
191                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
192
193                 /* Clear HAINT */
194                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
195
196                 /* Clear GINTSTS */
197                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
198
199                 /* Read GINTSTS */
200                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
201                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
202         }
203
204         void do_in_ack(ifxusb_core_if_t *_core_if)
205         {
206
207                 ifxusb_core_global_regs_t *global_regs    = _core_if->core_global_regs;
208                 ifxusb_host_global_regs_t *hc_global_regs = _core_if->host_global_regs;
209                 ifxusb_hc_regs_t          *hc_regs        = _core_if->hc_regs[0];
210                 uint32_t                  *data_fifo      = _core_if->data_fifo[0];
211
212                 gint_data_t        gintsts;
213                 hctsiz_data_t      hctsiz;
214                 hcchar_data_t      hcchar;
215                 haint_data_t       haint;
216                 hcint_data_t       hcint;
217                 grxsts_data_t      grxsts;
218
219                 /* Enable HAINTs */
220                 ifxusb_wreg(&hc_global_regs->haintmsk, 0x0001);
221
222                 /* Enable HCINTs */
223                 ifxusb_wreg(&hc_regs->hcintmsk, 0x04a3);
224
225                 /* Read GINTSTS */
226                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
227                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
228
229                 /* Read HAINT */
230                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
231                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
232
233                 /* Read HCINT */
234                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
235                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
236
237                 /* Read HCCHAR */
238                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
239                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
240
241                 /* Clear HCINT */
242                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
243
244                 /* Clear HAINT */
245                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
246
247                 /* Clear GINTSTS */
248                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
249
250                 /* Read GINTSTS */
251                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
252                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
253
254                 /*
255                  * Receive Control In packet
256                  */
257
258                 /* Make sure channel is disabled */
259                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
260                 if (hcchar.b.chen) {
261                         //fprintf(stderr, "Channel already enabled 2, HCCHAR = %08x\n", hcchar.d32);
262                         hcchar.b.chdis = 1;
263                         hcchar.b.chen = 1;
264                         ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
265                         //sleep(1);
266                         mdelay(1000);
267
268                         /* Read GINTSTS */
269                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
270                         //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
271
272                         /* Read HAINT */
273                         haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
274                         //fprintf(stderr, "HAINT: %08x\n", haint.d32);
275
276                         /* Read HCINT */
277                         hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
278                         //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
279
280                         /* Read HCCHAR */
281                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
282                         //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
283
284                         /* Clear HCINT */
285                         ifxusb_wreg(&hc_regs->hcint, hcint.d32);
286
287                         /* Clear HAINT */
288                         ifxusb_wreg(&hc_global_regs->haint, haint.d32);
289
290                         /* Clear GINTSTS */
291                         ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
292
293                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
294                         //if (hcchar.b.chen) {
295                         //      fprintf(stderr, "** Channel _still_ enabled 2, HCCHAR = %08x **\n", hcchar.d32);
296                         //}
297                 }
298
299                 /* Set HCTSIZ */
300                 hctsiz.d32 = 0;
301                 hctsiz.b.xfersize = 8;
302                 hctsiz.b.pktcnt = 1;
303                 hctsiz.b.pid = IFXUSB_HC_PID_DATA1;
304                 ifxusb_wreg(&hc_regs->hctsiz, hctsiz.d32);
305
306                 /* Set HCCHAR */
307                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
308                 hcchar.b.eptype = IFXUSB_EP_TYPE_CTRL;
309                 hcchar.b.epdir = 1;
310                 hcchar.b.epnum = 0;
311                 hcchar.b.mps = 8;
312                 hcchar.b.chen = 1;
313                 ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
314
315                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
316                 //fprintf(stderr, "Waiting for RXSTSQLVL intr 1, GINTSTS = %08x\n", gintsts.d32);
317
318                 /* Wait for receive status queue interrupt */
319                 do {
320                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
321                 } while (gintsts.b.rxstsqlvl == 0);
322
323                 //fprintf(stderr, "Got RXSTSQLVL intr 1, GINTSTS = %08x\n", gintsts.d32);
324
325                 /* Read RXSTS */
326                 grxsts.d32 = ifxusb_rreg(&global_regs->grxstsp);
327                 //fprintf(stderr, "GRXSTS: %08x\n", grxsts.d32);
328
329                 /* Clear RXSTSQLVL in GINTSTS */
330                 gintsts.d32 = 0;
331                 gintsts.b.rxstsqlvl = 1;
332                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
333
334                 switch (grxsts.hb.pktsts) {
335                         case IFXUSB_HSTS_DATA_UPDT:
336                                 /* Read the data into the host buffer */
337                                 if (grxsts.hb.bcnt > 0) {
338                                         int i;
339                                         int word_count = (grxsts.hb.bcnt + 3) / 4;
340
341                                         for (i = 0; i < word_count; i++) {
342                                                 (void)ifxusb_rreg(data_fifo++);
343                                         }
344                                 }
345
346                                 //fprintf(stderr, "Received %u bytes\n", (unsigned)grxsts.hb.bcnt);
347                                 break;
348
349                         default:
350                                 //fprintf(stderr, "** Unexpected GRXSTS packet status 1 **\n");
351                                 break;
352                 }
353
354                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
355                 //fprintf(stderr, "Waiting for RXSTSQLVL intr 2, GINTSTS = %08x\n", gintsts.d32);
356
357                 /* Wait for receive status queue interrupt */
358                 do {
359                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
360                 } while (gintsts.b.rxstsqlvl == 0);
361
362                 //fprintf(stderr, "Got RXSTSQLVL intr 2, GINTSTS = %08x\n", gintsts.d32);
363
364                 /* Read RXSTS */
365                 grxsts.d32 = ifxusb_rreg(&global_regs->grxstsp);
366                 //fprintf(stderr, "GRXSTS: %08x\n", grxsts.d32);
367
368                 /* Clear RXSTSQLVL in GINTSTS */
369                 gintsts.d32 = 0;
370                 gintsts.b.rxstsqlvl = 1;
371                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
372
373                 switch (grxsts.hb.pktsts) {
374                         case IFXUSB_HSTS_XFER_COMP:
375                                 break;
376
377                         default:
378                                 //fprintf(stderr, "** Unexpected GRXSTS packet status 2 **\n");
379                                 break;
380                 }
381
382                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
383                 //fprintf(stderr, "Waiting for HCINTR intr 2, GINTSTS = %08x\n", gintsts.d32);
384
385                 /* Wait for host channel interrupt */
386                 do {
387                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
388                 } while (gintsts.b.hcintr == 0);
389
390                 //fprintf(stderr, "Got HCINTR intr 2, GINTSTS = %08x\n", gintsts.d32);
391
392                 /* Read HAINT */
393                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
394                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
395
396                 /* Read HCINT */
397                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
398                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
399
400                 /* Read HCCHAR */
401                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
402                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
403
404                 /* Clear HCINT */
405                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
406
407                 /* Clear HAINT */
408                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
409
410                 /* Clear GINTSTS */
411                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
412
413                 /* Read GINTSTS */
414                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
415                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
416
417         //      usleep(100000);
418         //      mdelay(100);
419                 mdelay(1);
420
421                 /*
422                  * Send handshake packet
423                  */
424
425                 /* Read HAINT */
426                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
427                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
428
429                 /* Read HCINT */
430                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
431                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
432
433                 /* Read HCCHAR */
434                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
435                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
436
437                 /* Clear HCINT */
438                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
439
440                 /* Clear HAINT */
441                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
442
443                 /* Clear GINTSTS */
444                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
445
446                 /* Read GINTSTS */
447                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
448                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
449
450                 /* Make sure channel is disabled */
451                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
452                 if (hcchar.b.chen) {
453                         //fprintf(stderr, "Channel already enabled 3, HCCHAR = %08x\n", hcchar.d32);
454                         hcchar.b.chdis = 1;
455                         hcchar.b.chen = 1;
456                         ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
457                         //sleep(1);
458                         mdelay(1000);
459
460                         /* Read GINTSTS */
461                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
462                         //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
463
464                         /* Read HAINT */
465                         haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
466                         //fprintf(stderr, "HAINT: %08x\n", haint.d32);
467
468                         /* Read HCINT */
469                         hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
470                         //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
471
472                         /* Read HCCHAR */
473                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
474                         //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
475
476                         /* Clear HCINT */
477                         ifxusb_wreg(&hc_regs->hcint, hcint.d32);
478
479                         /* Clear HAINT */
480                         ifxusb_wreg(&hc_global_regs->haint, haint.d32);
481
482                         /* Clear GINTSTS */
483                         ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
484
485                         hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
486                         //if (hcchar.b.chen) {
487                         //      fprintf(stderr, "** Channel _still_ enabled 3, HCCHAR = %08x **\n", hcchar.d32);
488                         //}
489                 }
490
491                 /* Set HCTSIZ */
492                 hctsiz.d32 = 0;
493                 hctsiz.b.xfersize = 0;
494                 hctsiz.b.pktcnt = 1;
495                 hctsiz.b.pid = IFXUSB_HC_PID_DATA1;
496                 ifxusb_wreg(&hc_regs->hctsiz, hctsiz.d32);
497
498                 /* Set HCCHAR */
499                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
500                 hcchar.b.eptype = IFXUSB_EP_TYPE_CTRL;
501                 hcchar.b.epdir = 0;
502                 hcchar.b.epnum = 0;
503                 hcchar.b.mps = 8;
504                 hcchar.b.chen = 1;
505                 ifxusb_wreg(&hc_regs->hcchar, hcchar.d32);
506
507                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
508                 //fprintf(stderr, "Waiting for HCINTR intr 3, GINTSTS = %08x\n", gintsts.d32);
509
510                 /* Wait for host channel interrupt */
511                 do {
512                         gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
513                 } while (gintsts.b.hcintr == 0);
514
515                 //fprintf(stderr, "Got HCINTR intr 3, GINTSTS = %08x\n", gintsts.d32);
516
517                 /* Disable HCINTs */
518                 ifxusb_wreg(&hc_regs->hcintmsk, 0x0000);
519
520                 /* Disable HAINTs */
521                 ifxusb_wreg(&hc_global_regs->haintmsk, 0x0000);
522
523                 /* Read HAINT */
524                 haint.d32 = ifxusb_rreg(&hc_global_regs->haint);
525                 //fprintf(stderr, "HAINT: %08x\n", haint.d32);
526
527                 /* Read HCINT */
528                 hcint.d32 = ifxusb_rreg(&hc_regs->hcint);
529                 //fprintf(stderr, "HCINT: %08x\n", hcint.d32);
530
531                 /* Read HCCHAR */
532                 hcchar.d32 = ifxusb_rreg(&hc_regs->hcchar);
533                 //fprintf(stderr, "HCCHAR: %08x\n", hcchar.d32);
534
535                 /* Clear HCINT */
536                 ifxusb_wreg(&hc_regs->hcint, hcint.d32);
537
538                 /* Clear HAINT */
539                 ifxusb_wreg(&hc_global_regs->haint, haint.d32);
540
541                 /* Clear GINTSTS */
542                 ifxusb_wreg(&global_regs->gintsts, gintsts.d32);
543
544                 /* Read GINTSTS */
545                 gintsts.d32 = ifxusb_rreg(&global_regs->gintsts);
546                 //fprintf(stderr, "GINTSTS: %08x\n", gintsts.d32);
547         }
548 #endif //__WITH_HS_ELECT_TST__
549