Merge tag 'v5.15.57' into rpi-5.15.y
[platform/kernel/linux-rpi.git] / drivers / usb / host / dwc_otg / dwc_otg_regs.h
1 /* ==========================================================================
2  * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_regs.h $
3  * $Revision: #98 $
4  * $Date: 2012/08/10 $
5  * $Change: 2047372 $
6  *
7  * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
8  * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
9  * otherwise expressly agreed to in writing between Synopsys and you.
10  *
11  * The Software IS NOT an item of Licensed Software or Licensed Product under
12  * any End User Software License Agreement or Agreement for Licensed Product
13  * with Synopsys or any supplement thereto. You are permitted to use and
14  * redistribute this Software in source and binary forms, with or without
15  * modification, provided that redistributions of source code must retain this
16  * notice. You may not view, use, disclose, copy or distribute this file or
17  * any information contained herein except pursuant to this license grant from
18  * Synopsys. If you do not agree with this notice, including the disclaimer
19  * below, then you are not authorized to use the Software.
20  *
21  * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
22  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
25  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
31  * DAMAGE.
32  * ========================================================================== */
33
34 #ifndef __DWC_OTG_REGS_H__
35 #define __DWC_OTG_REGS_H__
36
37 #include "dwc_otg_core_if.h"
38
39 /**
40  * @file
41  *
42  * This file contains the data structures for accessing the DWC_otg core registers.
43  *
44  * The application interfaces with the HS OTG core by reading from and
45  * writing to the Control and Status Register (CSR) space through the
46  * AHB Slave interface. These registers are 32 bits wide, and the
47  * addresses are 32-bit-block aligned.
48  * CSRs are classified as follows:
49  * - Core Global Registers
50  * - Device Mode Registers
51  * - Device Global Registers
52  * - Device Endpoint Specific Registers
53  * - Host Mode Registers
54  * - Host Global Registers
55  * - Host Port CSRs
56  * - Host Channel Specific Registers
57  *
58  * Only the Core Global registers can be accessed in both Device and
59  * Host modes. When the HS OTG core is operating in one mode, either
60  * Device or Host, the application must not access registers from the
61  * other mode. When the core switches from one mode to another, the
62  * registers in the new mode of operation must be reprogrammed as they
63  * would be after a power-on reset.
64  */
65
66 /****************************************************************************/
67 /** DWC_otg Core registers .
68  * The dwc_otg_core_global_regs structure defines the size
69  * and relative field offsets for the Core Global registers.
70  */
71 typedef struct dwc_otg_core_global_regs {
72         /** OTG Control and Status Register.  <i>Offset: 000h</i> */
73         volatile uint32_t gotgctl;
74         /** OTG Interrupt Register.      <i>Offset: 004h</i> */
75         volatile uint32_t gotgint;
76         /**Core AHB Configuration Register.      <i>Offset: 008h</i> */
77         volatile uint32_t gahbcfg;
78
79 #define DWC_GLBINTRMASK         0x0001
80 #define DWC_DMAENABLE           0x0020
81 #define DWC_NPTXEMPTYLVL_EMPTY  0x0080
82 #define DWC_NPTXEMPTYLVL_HALFEMPTY      0x0000
83 #define DWC_PTXEMPTYLVL_EMPTY   0x0100
84 #define DWC_PTXEMPTYLVL_HALFEMPTY       0x0000
85
86         /**Core USB Configuration Register.      <i>Offset: 00Ch</i> */
87         volatile uint32_t gusbcfg;
88         /**Core Reset Register.  <i>Offset: 010h</i> */
89         volatile uint32_t grstctl;
90         /**Core Interrupt Register.      <i>Offset: 014h</i> */
91         volatile uint32_t gintsts;
92         /**Core Interrupt Mask Register.  <i>Offset: 018h</i> */
93         volatile uint32_t gintmsk;
94         /**Receive Status Queue Read Register (Read Only).      <i>Offset: 01Ch</i> */
95         volatile uint32_t grxstsr;
96         /**Receive Status Queue Read & POP Register (Read Only).  <i>Offset: 020h</i>*/
97         volatile uint32_t grxstsp;
98         /**Receive FIFO Size Register.  <i>Offset: 024h</i> */
99         volatile uint32_t grxfsiz;
100         /**Non Periodic Transmit FIFO Size Register.  <i>Offset: 028h</i> */
101         volatile uint32_t gnptxfsiz;
102         /**Non Periodic Transmit FIFO/Queue Status Register (Read
103          * Only). <i>Offset: 02Ch</i> */
104         volatile uint32_t gnptxsts;
105         /**I2C Access Register.  <i>Offset: 030h</i> */
106         volatile uint32_t gi2cctl;
107         /**PHY Vendor Control Register.  <i>Offset: 034h</i> */
108         volatile uint32_t gpvndctl;
109         /**General Purpose Input/Output Register.  <i>Offset: 038h</i> */
110         volatile uint32_t ggpio;
111         /**User ID Register.  <i>Offset: 03Ch</i> */
112         volatile uint32_t guid;
113         /**Synopsys ID Register (Read Only).  <i>Offset: 040h</i> */
114         volatile uint32_t gsnpsid;
115         /**User HW Config1 Register (Read Only).  <i>Offset: 044h</i> */
116         volatile uint32_t ghwcfg1;
117         /**User HW Config2 Register (Read Only).  <i>Offset: 048h</i> */
118         volatile uint32_t ghwcfg2;
119 #define DWC_SLAVE_ONLY_ARCH 0
120 #define DWC_EXT_DMA_ARCH 1
121 #define DWC_INT_DMA_ARCH 2
122
123 #define DWC_MODE_HNP_SRP_CAPABLE        0
124 #define DWC_MODE_SRP_ONLY_CAPABLE       1
125 #define DWC_MODE_NO_HNP_SRP_CAPABLE             2
126 #define DWC_MODE_SRP_CAPABLE_DEVICE             3
127 #define DWC_MODE_NO_SRP_CAPABLE_DEVICE  4
128 #define DWC_MODE_SRP_CAPABLE_HOST       5
129 #define DWC_MODE_NO_SRP_CAPABLE_HOST    6
130
131         /**User HW Config3 Register (Read Only).  <i>Offset: 04Ch</i> */
132         volatile uint32_t ghwcfg3;
133         /**User HW Config4 Register (Read Only).  <i>Offset: 050h</i>*/
134         volatile uint32_t ghwcfg4;
135         /** Core LPM Configuration register <i>Offset: 054h</i>*/
136         volatile uint32_t glpmcfg;
137         /** Global PowerDn Register <i>Offset: 058h</i> */
138         volatile uint32_t gpwrdn;
139         /** Global DFIFO SW Config Register  <i>Offset: 05Ch</i> */
140         volatile uint32_t gdfifocfg;
141         /** ADP Control Register  <i>Offset: 060h</i> */
142         volatile uint32_t adpctl;
143         /** Reserved  <i>Offset: 064h-0FFh</i> */
144         volatile uint32_t reserved39[39];
145         /** Host Periodic Transmit FIFO Size Register. <i>Offset: 100h</i> */
146         volatile uint32_t hptxfsiz;
147         /** Device Periodic Transmit FIFO#n Register if dedicated fifos are disabled,
148                 otherwise Device Transmit FIFO#n Register.
149          * <i>Offset: 104h + (FIFO_Number-1)*04h, 1 <= FIFO Number <= 15 (1<=n<=15).</i> */
150         volatile uint32_t dtxfsiz[15];
151 } dwc_otg_core_global_regs_t;
152
153 /**
154  * This union represents the bit fields of the Core OTG Control
155  * and Status Register (GOTGCTL).  Set the bits using the bit
156  * fields then write the <i>d32</i> value to the register.
157  */
158 typedef union gotgctl_data {
159         /** raw register data */
160         uint32_t d32;
161         /** register bits */
162         struct {
163                 unsigned sesreqscs:1;
164                 unsigned sesreq:1;
165                 unsigned vbvalidoven:1;
166                 unsigned vbvalidovval:1;
167                 unsigned avalidoven:1;
168                 unsigned avalidovval:1;
169                 unsigned bvalidoven:1;
170                 unsigned bvalidovval:1;
171                 unsigned hstnegscs:1;
172                 unsigned hnpreq:1;
173                 unsigned hstsethnpen:1;
174                 unsigned devhnpen:1;
175                 unsigned reserved12_15:4;
176                 unsigned conidsts:1;
177                 unsigned dbnctime:1;
178                 unsigned asesvld:1;
179                 unsigned bsesvld:1;
180                 unsigned otgver:1;
181                 unsigned reserved1:1;
182                 unsigned multvalidbc:5;
183                 unsigned chirpen:1;
184                 unsigned reserved28_31:4;
185         } b;
186 } gotgctl_data_t;
187
188 /**
189  * This union represents the bit fields of the Core OTG Interrupt Register
190  * (GOTGINT).  Set/clear the bits using the bit fields then write the <i>d32</i>
191  * value to the register.
192  */
193 typedef union gotgint_data {
194         /** raw register data */
195         uint32_t d32;
196         /** register bits */
197         struct {
198                 /** Current Mode */
199                 unsigned reserved0_1:2;
200
201                 /** Session End Detected */
202                 unsigned sesenddet:1;
203
204                 unsigned reserved3_7:5;
205
206                 /** Session Request Success Status Change */
207                 unsigned sesreqsucstschng:1;
208                 /** Host Negotiation Success Status Change */
209                 unsigned hstnegsucstschng:1;
210
211                 unsigned reserved10_16:7;
212
213                 /** Host Negotiation Detected */
214                 unsigned hstnegdet:1;
215                 /** A-Device Timeout Change */
216                 unsigned adevtoutchng:1;
217                 /** Debounce Done */
218                 unsigned debdone:1;
219                 /** Multi-Valued input changed */
220                 unsigned mvic:1;
221
222                 unsigned reserved31_21:11;
223
224         } b;
225 } gotgint_data_t;
226
227 /**
228  * This union represents the bit fields of the Core AHB Configuration
229  * Register (GAHBCFG). Set/clear the bits using the bit fields then
230  * write the <i>d32</i> value to the register.
231  */
232 typedef union gahbcfg_data {
233         /** raw register data */
234         uint32_t d32;
235         /** register bits */
236         struct {
237                 unsigned glblintrmsk:1;
238 #define DWC_GAHBCFG_GLBINT_ENABLE               1
239
240                 unsigned hburstlen:4;
241 #define DWC_GAHBCFG_INT_DMA_BURST_SINGLE        0
242 #define DWC_GAHBCFG_INT_DMA_BURST_INCR          1
243 #define DWC_GAHBCFG_INT_DMA_BURST_INCR4         3
244 #define DWC_GAHBCFG_INT_DMA_BURST_INCR8         5
245 #define DWC_GAHBCFG_INT_DMA_BURST_INCR16        7
246
247                 unsigned dmaenable:1;
248 #define DWC_GAHBCFG_DMAENABLE                   1
249                 unsigned reserved:1;
250                 unsigned nptxfemplvl_txfemplvl:1;
251                 unsigned ptxfemplvl:1;
252 #define DWC_GAHBCFG_TXFEMPTYLVL_EMPTY           1
253 #define DWC_GAHBCFG_TXFEMPTYLVL_HALFEMPTY       0
254                 unsigned reserved9_20:12;
255                 unsigned remmemsupp:1;
256                 unsigned notialldmawrit:1;
257                 unsigned ahbsingle:1;
258                 unsigned reserved24_31:8;
259         } b;
260 } gahbcfg_data_t;
261
262 /**
263  * This union represents the bit fields of the Core USB Configuration
264  * Register (GUSBCFG). Set the bits using the bit fields then write
265  * the <i>d32</i> value to the register.
266  */
267 typedef union gusbcfg_data {
268         /** raw register data */
269         uint32_t d32;
270         /** register bits */
271         struct {
272                 unsigned toutcal:3;
273                 unsigned phyif:1;
274                 unsigned ulpi_utmi_sel:1;
275                 unsigned fsintf:1;
276                 unsigned physel:1;
277                 unsigned ddrsel:1;
278                 unsigned srpcap:1;
279                 unsigned hnpcap:1;
280                 unsigned usbtrdtim:4;
281                 unsigned reserved1:1;
282                 unsigned phylpwrclksel:1;
283                 unsigned otgutmifssel:1;
284                 unsigned ulpi_fsls:1;
285                 unsigned ulpi_auto_res:1;
286                 unsigned ulpi_clk_sus_m:1;
287                 unsigned ulpi_ext_vbus_drv:1;
288                 unsigned ulpi_int_vbus_indicator:1;
289                 unsigned term_sel_dl_pulse:1;
290                 unsigned indicator_complement:1;
291                 unsigned indicator_pass_through:1;
292                 unsigned ulpi_int_prot_dis:1;
293                 unsigned ic_usb_cap:1;
294                 unsigned ic_traffic_pull_remove:1;
295                 unsigned tx_end_delay:1;
296                 unsigned force_host_mode:1;
297                 unsigned force_dev_mode:1;
298                 unsigned reserved31:1;
299         } b;
300 } gusbcfg_data_t;
301
302 /**
303  * This union represents the bit fields of the Core Reset Register
304  * (GRSTCTL).  Set/clear the bits using the bit fields then write the
305  * <i>d32</i> value to the register.
306  */
307 typedef union grstctl_data {
308         /** raw register data */
309         uint32_t d32;
310         /** register bits */
311         struct {
312                 /** Core Soft Reset (CSftRst) (Device and Host)
313                  *
314                  * The application can flush the control logic in the
315                  * entire core using this bit. This bit resets the
316                  * pipelines in the AHB Clock domain as well as the
317                  * PHY Clock domain.
318                  *
319                  * The state machines are reset to an IDLE state, the
320                  * control bits in the CSRs are cleared, all the
321                  * transmit FIFOs and the receive FIFO are flushed.
322                  *
323                  * The status mask bits that control the generation of
324                  * the interrupt, are cleared, to clear the
325                  * interrupt. The interrupt status bits are not
326                  * cleared, so the application can get the status of
327                  * any events that occurred in the core after it has
328                  * set this bit.
329                  *
330                  * Any transactions on the AHB are terminated as soon
331                  * as possible following the protocol. Any
332                  * transactions on the USB are terminated immediately.
333                  *
334                  * The configuration settings in the CSRs are
335                  * unchanged, so the software doesn't have to
336                  * reprogram these registers (Device
337                  * Configuration/Host Configuration/Core System
338                  * Configuration/Core PHY Configuration).
339                  *
340                  * The application can write to this bit, any time it
341                  * wants to reset the core. This is a self clearing
342                  * bit and the core clears this bit after all the
343                  * necessary logic is reset in the core, which may
344                  * take several clocks, depending on the current state
345                  * of the core.
346                  */
347                 unsigned csftrst:1;
348                 /** Hclk Soft Reset
349                  *
350                  * The application uses this bit to reset the control logic in
351                  * the AHB clock domain. Only AHB clock domain pipelines are
352                  * reset.
353                  */
354                 unsigned hsftrst:1;
355                 /** Host Frame Counter Reset (Host Only)<br>
356                  *
357                  * The application can reset the (micro)frame number
358                  * counter inside the core, using this bit. When the
359                  * (micro)frame counter is reset, the subsequent SOF
360                  * sent out by the core, will have a (micro)frame
361                  * number of 0.
362                  */
363                 unsigned hstfrm:1;
364                 /** In Token Sequence Learning Queue Flush
365                  * (INTknQFlsh) (Device Only)
366                  */
367                 unsigned intknqflsh:1;
368                 /** RxFIFO Flush (RxFFlsh) (Device and Host)
369                  *
370                  * The application can flush the entire Receive FIFO
371                  * using this bit. The application must first
372                  * ensure that the core is not in the middle of a
373                  * transaction. The application should write into
374                  * this bit, only after making sure that neither the
375                  * DMA engine is reading from the RxFIFO nor the MAC
376                  * is writing the data in to the FIFO. The
377                  * application should wait until the bit is cleared
378                  * before performing any other operations. This bit
379                  * will takes 8 clocks (slowest of PHY or AHB clock)
380                  * to clear.
381                  */
382                 unsigned rxfflsh:1;
383                 /** TxFIFO Flush (TxFFlsh) (Device and Host).
384                  *
385                  * This bit is used to selectively flush a single or
386                  * all transmit FIFOs. The application must first
387                  * ensure that the core is not in the middle of a
388                  * transaction. The application should write into
389                  * this bit, only after making sure that neither the
390                  * DMA engine is writing into the TxFIFO nor the MAC
391                  * is reading the data out of the FIFO. The
392                  * application should wait until the core clears this
393                  * bit, before performing any operations. This bit
394                  * will takes 8 clocks (slowest of PHY or AHB clock)
395                  * to clear.
396                  */
397                 unsigned txfflsh:1;
398
399                 /** TxFIFO Number (TxFNum) (Device and Host).
400                  *
401                  * This is the FIFO number which needs to be flushed,
402                  * using the TxFIFO Flush bit. This field should not
403                  * be changed until the TxFIFO Flush bit is cleared by
404                  * the core.
405                  *       - 0x0 : Non Periodic TxFIFO Flush
406                  *       - 0x1 : Periodic TxFIFO #1 Flush in device mode
407                  *         or Periodic TxFIFO in host mode
408                  *       - 0x2 : Periodic TxFIFO #2 Flush in device mode.
409                  *       - ...
410                  *       - 0xF : Periodic TxFIFO #15 Flush in device mode
411                  *       - 0x10: Flush all the Transmit NonPeriodic and
412                  *         Transmit Periodic FIFOs in the core
413                  */
414                 unsigned txfnum:5;
415                 /** Reserved */
416                 unsigned reserved11_29:19;
417                 /** DMA Request Signal.  Indicated DMA request is in
418                  * probress. Used for debug purpose. */
419                 unsigned dmareq:1;
420                 /** AHB Master Idle.  Indicates the AHB Master State
421                  * Machine is in IDLE condition. */
422                 unsigned ahbidle:1;
423         } b;
424 } grstctl_t;
425
426 /**
427  * This union represents the bit fields of the Core Interrupt Mask
428  * Register (GINTMSK). Set/clear the bits using the bit fields then
429  * write the <i>d32</i> value to the register.
430  */
431 typedef union gintmsk_data {
432         /** raw register data */
433         uint32_t d32;
434         /** register bits */
435         struct {
436                 unsigned reserved0:1;
437                 unsigned modemismatch:1;
438                 unsigned otgintr:1;
439                 unsigned sofintr:1;
440                 unsigned rxstsqlvl:1;
441                 unsigned nptxfempty:1;
442                 unsigned ginnakeff:1;
443                 unsigned goutnakeff:1;
444                 unsigned ulpickint:1;
445                 unsigned i2cintr:1;
446                 unsigned erlysuspend:1;
447                 unsigned usbsuspend:1;
448                 unsigned usbreset:1;
449                 unsigned enumdone:1;
450                 unsigned isooutdrop:1;
451                 unsigned eopframe:1;
452                 unsigned restoredone:1;
453                 unsigned epmismatch:1;
454                 unsigned inepintr:1;
455                 unsigned outepintr:1;
456                 unsigned incomplisoin:1;
457                 unsigned incomplisoout:1;
458                 unsigned fetsusp:1;
459                 unsigned resetdet:1;
460                 unsigned portintr:1;
461                 unsigned hcintr:1;
462                 unsigned ptxfempty:1;
463                 unsigned lpmtranrcvd:1;
464                 unsigned conidstschng:1;
465                 unsigned disconnect:1;
466                 unsigned sessreqintr:1;
467                 unsigned wkupintr:1;
468         } b;
469 } gintmsk_data_t;
470 /**
471  * This union represents the bit fields of the Core Interrupt Register
472  * (GINTSTS).  Set/clear the bits using the bit fields then write the
473  * <i>d32</i> value to the register.
474  */
475 typedef union gintsts_data {
476         /** raw register data */
477         uint32_t d32;
478 #define DWC_SOF_INTR_MASK 0x0008
479         /** register bits */
480         struct {
481 #define DWC_HOST_MODE 1
482                 unsigned curmode:1;
483                 unsigned modemismatch:1;
484                 unsigned otgintr:1;
485                 unsigned sofintr:1;
486                 unsigned rxstsqlvl:1;
487                 unsigned nptxfempty:1;
488                 unsigned ginnakeff:1;
489                 unsigned goutnakeff:1;
490                 unsigned ulpickint:1;
491                 unsigned i2cintr:1;
492                 unsigned erlysuspend:1;
493                 unsigned usbsuspend:1;
494                 unsigned usbreset:1;
495                 unsigned enumdone:1;
496                 unsigned isooutdrop:1;
497                 unsigned eopframe:1;
498                 unsigned restoredone:1;
499                 unsigned epmismatch:1;
500                 unsigned inepint:1;
501                 unsigned outepintr:1;
502                 unsigned incomplisoin:1;
503                 unsigned incomplisoout:1;
504                 unsigned fetsusp:1;
505                 unsigned resetdet:1;
506                 unsigned portintr:1;
507                 unsigned hcintr:1;
508                 unsigned ptxfempty:1;
509                 unsigned lpmtranrcvd:1;
510                 unsigned conidstschng:1;
511                 unsigned disconnect:1;
512                 unsigned sessreqintr:1;
513                 unsigned wkupintr:1;
514         } b;
515 } gintsts_data_t;
516
517 /**
518  * This union represents the bit fields in the Device Receive Status Read and
519  * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the <i>d32</i>
520  * element then read out the bits using the <i>b</i>it elements.
521  */
522 typedef union device_grxsts_data {
523         /** raw register data */
524         uint32_t d32;
525         /** register bits */
526         struct {
527                 unsigned epnum:4;
528                 unsigned bcnt:11;
529                 unsigned dpid:2;
530
531 #define DWC_STS_DATA_UPDT               0x2     // OUT Data Packet
532 #define DWC_STS_XFER_COMP               0x3     // OUT Data Transfer Complete
533
534 #define DWC_DSTS_GOUT_NAK               0x1     // Global OUT NAK
535 #define DWC_DSTS_SETUP_COMP             0x4     // Setup Phase Complete
536 #define DWC_DSTS_SETUP_UPDT 0x6 // SETUP Packet
537                 unsigned pktsts:4;
538                 unsigned fn:4;
539                 unsigned reserved25_31:7;
540         } b;
541 } device_grxsts_data_t;
542
543 /**
544  * This union represents the bit fields in the Host Receive Status Read and
545  * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the <i>d32</i>
546  * element then read out the bits using the <i>b</i>it elements.
547  */
548 typedef union host_grxsts_data {
549         /** raw register data */
550         uint32_t d32;
551         /** register bits */
552         struct {
553                 unsigned chnum:4;
554                 unsigned bcnt:11;
555                 unsigned dpid:2;
556
557                 unsigned pktsts:4;
558 #define DWC_GRXSTS_PKTSTS_IN                      0x2
559 #define DWC_GRXSTS_PKTSTS_IN_XFER_COMP    0x3
560 #define DWC_GRXSTS_PKTSTS_DATA_TOGGLE_ERR 0x5
561 #define DWC_GRXSTS_PKTSTS_CH_HALTED               0x7
562
563                 unsigned reserved21_31:11;
564         } b;
565 } host_grxsts_data_t;
566
567 /**
568  * This union represents the bit fields in the FIFO Size Registers (HPTXFSIZ,
569  * GNPTXFSIZ, DPTXFSIZn, DIEPTXFn). Read the register into the <i>d32</i> element
570  * then read out the bits using the <i>b</i>it elements.
571  */
572 typedef union fifosize_data {
573         /** raw register data */
574         uint32_t d32;
575         /** register bits */
576         struct {
577                 unsigned startaddr:16;
578                 unsigned depth:16;
579         } b;
580 } fifosize_data_t;
581
582 /**
583  * This union represents the bit fields in the Non-Periodic Transmit
584  * FIFO/Queue Status Register (GNPTXSTS). Read the register into the
585  * <i>d32</i> element then read out the bits using the <i>b</i>it
586  * elements.
587  */
588 typedef union gnptxsts_data {
589         /** raw register data */
590         uint32_t d32;
591         /** register bits */
592         struct {
593                 unsigned nptxfspcavail:16;
594                 unsigned nptxqspcavail:8;
595                 /** Top of the Non-Periodic Transmit Request Queue
596                  *      - bit 24 - Terminate (Last entry for the selected
597                  *        channel/EP)
598                  *      - bits 26:25 - Token Type
599                  *        - 2'b00 - IN/OUT
600                  *        - 2'b01 - Zero Length OUT
601                  *        - 2'b10 - PING/Complete Split
602                  *        - 2'b11 - Channel Halt
603                  *      - bits 30:27 - Channel/EP Number
604                  */
605                 unsigned nptxqtop_terminate:1;
606                 unsigned nptxqtop_token:2;
607                 unsigned nptxqtop_chnep:4;
608                 unsigned reserved:1;
609         } b;
610 } gnptxsts_data_t;
611
612 /**
613  * This union represents the bit fields in the Transmit
614  * FIFO Status Register (DTXFSTS). Read the register into the
615  * <i>d32</i> element then read out the bits using the <i>b</i>it
616  * elements.
617  */
618 typedef union dtxfsts_data {
619         /** raw register data */
620         uint32_t d32;
621         /** register bits */
622         struct {
623                 unsigned txfspcavail:16;
624                 unsigned reserved:16;
625         } b;
626 } dtxfsts_data_t;
627
628 /**
629  * This union represents the bit fields in the I2C Control Register
630  * (I2CCTL). Read the register into the <i>d32</i> element then read out the
631  * bits using the <i>b</i>it elements.
632  */
633 typedef union gi2cctl_data {
634         /** raw register data */
635         uint32_t d32;
636         /** register bits */
637         struct {
638                 unsigned rwdata:8;
639                 unsigned regaddr:8;
640                 unsigned addr:7;
641                 unsigned i2cen:1;
642                 unsigned ack:1;
643                 unsigned i2csuspctl:1;
644                 unsigned i2cdevaddr:2;
645                 unsigned i2cdatse0:1;
646                 unsigned reserved:1;
647                 unsigned rw:1;
648                 unsigned bsydne:1;
649         } b;
650 } gi2cctl_data_t;
651
652 /**
653  * This union represents the bit fields in the PHY Vendor Control Register
654  * (GPVNDCTL). Read the register into the <i>d32</i> element then read out the
655  * bits using the <i>b</i>it elements.
656  */
657 typedef union gpvndctl_data {
658         /** raw register data */
659         uint32_t d32;
660         /** register bits */
661         struct {
662                 unsigned regdata:8;
663                 unsigned vctrl:8;
664                 unsigned regaddr16_21:6;
665                 unsigned regwr:1;
666                 unsigned reserved23_24:2;
667                 unsigned newregreq:1;
668                 unsigned vstsbsy:1;
669                 unsigned vstsdone:1;
670                 unsigned reserved28_30:3;
671                 unsigned disulpidrvr:1;
672         } b;
673 } gpvndctl_data_t;
674
675 /**
676  * This union represents the bit fields in the General Purpose
677  * Input/Output Register (GGPIO).
678  * Read the register into the <i>d32</i> element then read out the
679  * bits using the <i>b</i>it elements.
680  */
681 typedef union ggpio_data {
682         /** raw register data */
683         uint32_t d32;
684         /** register bits */
685         struct {
686                 unsigned gpi:16;
687                 unsigned gpo:16;
688         } b;
689 } ggpio_data_t;
690
691 /**
692  * This union represents the bit fields in the User ID Register
693  * (GUID). Read the register into the <i>d32</i> element then read out the
694  * bits using the <i>b</i>it elements.
695  */
696 typedef union guid_data {
697         /** raw register data */
698         uint32_t d32;
699         /** register bits */
700         struct {
701                 unsigned rwdata:32;
702         } b;
703 } guid_data_t;
704
705 /**
706  * This union represents the bit fields in the Synopsys ID Register
707  * (GSNPSID). Read the register into the <i>d32</i> element then read out the
708  * bits using the <i>b</i>it elements.
709  */
710 typedef union gsnpsid_data {
711         /** raw register data */
712         uint32_t d32;
713         /** register bits */
714         struct {
715                 unsigned rwdata:32;
716         } b;
717 } gsnpsid_data_t;
718
719 /**
720  * This union represents the bit fields in the User HW Config1
721  * Register.  Read the register into the <i>d32</i> element then read
722  * out the bits using the <i>b</i>it elements.
723  */
724 typedef union hwcfg1_data {
725         /** raw register data */
726         uint32_t d32;
727         /** register bits */
728         struct {
729                 unsigned ep_dir0:2;
730                 unsigned ep_dir1:2;
731                 unsigned ep_dir2:2;
732                 unsigned ep_dir3:2;
733                 unsigned ep_dir4:2;
734                 unsigned ep_dir5:2;
735                 unsigned ep_dir6:2;
736                 unsigned ep_dir7:2;
737                 unsigned ep_dir8:2;
738                 unsigned ep_dir9:2;
739                 unsigned ep_dir10:2;
740                 unsigned ep_dir11:2;
741                 unsigned ep_dir12:2;
742                 unsigned ep_dir13:2;
743                 unsigned ep_dir14:2;
744                 unsigned ep_dir15:2;
745         } b;
746 } hwcfg1_data_t;
747
748 /**
749  * This union represents the bit fields in the User HW Config2
750  * Register.  Read the register into the <i>d32</i> element then read
751  * out the bits using the <i>b</i>it elements.
752  */
753 typedef union hwcfg2_data {
754         /** raw register data */
755         uint32_t d32;
756         /** register bits */
757         struct {
758                 /* GHWCFG2 */
759                 unsigned op_mode:3;
760 #define DWC_HWCFG2_OP_MODE_HNP_SRP_CAPABLE_OTG 0
761 #define DWC_HWCFG2_OP_MODE_SRP_ONLY_CAPABLE_OTG 1
762 #define DWC_HWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE_OTG 2
763 #define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_DEVICE 3
764 #define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE 4
765 #define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_HOST 5
766 #define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST 6
767
768                 unsigned architecture:2;
769                 unsigned point2point:1;
770                 unsigned hs_phy_type:2;
771 #define DWC_HWCFG2_HS_PHY_TYPE_NOT_SUPPORTED 0
772 #define DWC_HWCFG2_HS_PHY_TYPE_UTMI 1
773 #define DWC_HWCFG2_HS_PHY_TYPE_ULPI 2
774 #define DWC_HWCFG2_HS_PHY_TYPE_UTMI_ULPI 3
775
776                 unsigned fs_phy_type:2;
777                 unsigned num_dev_ep:4;
778                 unsigned num_host_chan:4;
779                 unsigned perio_ep_supported:1;
780                 unsigned dynamic_fifo:1;
781                 unsigned multi_proc_int:1;
782                 unsigned reserved21:1;
783                 unsigned nonperio_tx_q_depth:2;
784                 unsigned host_perio_tx_q_depth:2;
785                 unsigned dev_token_q_depth:5;
786                 unsigned otg_enable_ic_usb:1;
787         } b;
788 } hwcfg2_data_t;
789
790 /**
791  * This union represents the bit fields in the User HW Config3
792  * Register.  Read the register into the <i>d32</i> element then read
793  * out the bits using the <i>b</i>it elements.
794  */
795 typedef union hwcfg3_data {
796         /** raw register data */
797         uint32_t d32;
798         /** register bits */
799         struct {
800                 /* GHWCFG3 */
801                 unsigned xfer_size_cntr_width:4;
802                 unsigned packet_size_cntr_width:3;
803                 unsigned otg_func:1;
804                 unsigned i2c:1;
805                 unsigned vendor_ctrl_if:1;
806                 unsigned optional_features:1;
807                 unsigned synch_reset_type:1;
808                 unsigned adp_supp:1;
809                 unsigned otg_enable_hsic:1;
810                 unsigned bc_support:1;
811                 unsigned otg_lpm_en:1;
812                 unsigned dfifo_depth:16;
813         } b;
814 } hwcfg3_data_t;
815
816 /**
817  * This union represents the bit fields in the User HW Config4
818  * Register.  Read the register into the <i>d32</i> element then read
819  * out the bits using the <i>b</i>it elements.
820  */
821 typedef union hwcfg4_data {
822         /** raw register data */
823         uint32_t d32;
824         /** register bits */
825         struct {
826                 unsigned num_dev_perio_in_ep:4;
827                 unsigned power_optimiz:1;
828                 unsigned min_ahb_freq:1;
829                 unsigned hiber:1;
830                 unsigned xhiber:1;
831                 unsigned reserved:6;
832                 unsigned utmi_phy_data_width:2;
833                 unsigned num_dev_mode_ctrl_ep:4;
834                 unsigned iddig_filt_en:1;
835                 unsigned vbus_valid_filt_en:1;
836                 unsigned a_valid_filt_en:1;
837                 unsigned b_valid_filt_en:1;
838                 unsigned session_end_filt_en:1;
839                 unsigned ded_fifo_en:1;
840                 unsigned num_in_eps:4;
841                 unsigned desc_dma:1;
842                 unsigned desc_dma_dyn:1;
843         } b;
844 } hwcfg4_data_t;
845
846 /**
847  * This union represents the bit fields of the Core LPM Configuration
848  * Register (GLPMCFG). Set the bits using bit fields then write
849  * the <i>d32</i> value to the register.
850  */
851 typedef union glpmctl_data {
852         /** raw register data */
853         uint32_t d32;
854         /** register bits */
855         struct {
856                 /** LPM-Capable (LPMCap) (Device and Host)
857                  * The application uses this bit to control
858                  * the DWC_otg core LPM capabilities.
859                  */
860                 unsigned lpm_cap_en:1;
861                 /** LPM response programmed by application (AppL1Res) (Device)
862                  * Handshake response to LPM token pre-programmed
863                  * by device application software.
864                  */
865                 unsigned appl_resp:1;
866                 /** Host Initiated Resume Duration (HIRD) (Device and Host)
867                  * In Host mode this field indicates the value of HIRD
868                  * to be sent in an LPM transaction.
869                  * In Device mode this field is updated with the
870                  * Received LPM Token HIRD bmAttribute
871                  * when an ACK/NYET/STALL response is sent
872                  * to an LPM transaction.
873                  */
874                 unsigned hird:4;
875                 /** RemoteWakeEnable (bRemoteWake) (Device and Host)
876                  * In Host mode this bit indicates the value of remote
877                  * wake up to be sent in wIndex field of LPM transaction.
878                  * In Device mode this field is updated with the
879                  * Received LPM Token bRemoteWake bmAttribute
880                  * when an ACK/NYET/STALL response is sent
881                  * to an LPM transaction.
882                  */
883                 unsigned rem_wkup_en:1;
884                 /** Enable utmi_sleep_n (EnblSlpM) (Device and Host)
885                  * The application uses this bit to control
886                  * the utmi_sleep_n assertion to the PHY when in L1 state.
887                  */
888                 unsigned en_utmi_sleep:1;
889                 /** HIRD Threshold (HIRD_Thres) (Device and Host)
890                  */
891                 unsigned hird_thres:5;
892                 /** LPM Response (CoreL1Res) (Device and Host)
893                  * In Host mode this bit contains handsake response to
894                  * LPM transaction.
895                  * In Device mode the response of the core to
896                  * LPM transaction received is reflected in these two bits.
897                         - 0x0 : ERROR (No handshake response)
898                         - 0x1 : STALL
899                         - 0x2 : NYET
900                         - 0x3 : ACK
901                  */
902                 unsigned lpm_resp:2;
903                 /** Port Sleep Status (SlpSts) (Device and Host)
904                  * This bit is set as long as a Sleep condition
905                  * is present on the USB bus.
906                  */
907                 unsigned prt_sleep_sts:1;
908                 /** Sleep State Resume OK (L1ResumeOK) (Device and Host)
909                  * Indicates that the application or host
910                  * can start resume from Sleep state.
911                  */
912                 unsigned sleep_state_resumeok:1;
913                 /** LPM channel Index (LPM_Chnl_Indx) (Host)
914                  * The channel number on which the LPM transaction
915                  * has to be applied while sending
916                  * an LPM transaction to the local device.
917                  */
918                 unsigned lpm_chan_index:4;
919                 /** LPM Retry Count (LPM_Retry_Cnt) (Host)
920                  * Number host retries that would be performed
921                  * if the device response was not valid response.
922                  */
923                 unsigned retry_count:3;
924                 /** Send LPM Transaction (SndLPM) (Host)
925                  * When set by application software,
926                  * an LPM transaction containing two tokens
927                  * is sent.
928                  */
929                 unsigned send_lpm:1;
930                 /** LPM Retry status (LPM_RetryCnt_Sts) (Host)
931                  * Number of LPM Host Retries still remaining
932                  * to be transmitted for the current LPM sequence
933                  */
934                 unsigned retry_count_sts:3;
935                 unsigned reserved28_29:2;
936                 /** In host mode once this bit is set, the host
937                  * configures to drive the HSIC Idle state on the bus.
938                  * It then waits for the  device to initiate the Connect sequence.
939                  * In device mode once this bit is set, the device waits for
940                  * the HSIC Idle line state on the bus. Upon receving the Idle
941                  * line state, it initiates the HSIC Connect sequence.
942                  */
943                 unsigned hsic_connect:1;
944                 /** This bit overrides and functionally inverts
945                  * the if_select_hsic input port signal.
946                  */
947                 unsigned inv_sel_hsic:1;
948         } b;
949 } glpmcfg_data_t;
950
951 /**
952  * This union represents the bit fields of the Core ADP Timer, Control and
953  * Status Register (ADPTIMCTLSTS). Set the bits using bit fields then write
954  * the <i>d32</i> value to the register.
955  */
956 typedef union adpctl_data {
957         /** raw register data */
958         uint32_t d32;
959         /** register bits */
960         struct {
961                 /** Probe Discharge (PRB_DSCHG)
962                  *  These bits set the times for TADP_DSCHG.
963                  *  These bits are defined as follows:
964                  *  2'b00 - 4 msec
965                  *  2'b01 - 8 msec
966                  *  2'b10 - 16 msec
967                  *  2'b11 - 32 msec
968                  */
969                 unsigned prb_dschg:2;
970                 /** Probe Delta (PRB_DELTA)
971                  *  These bits set the resolution for RTIM   value.
972                  *  The bits are defined in units of 32 kHz clock cycles as follows:
973                  *  2'b00  -  1 cycles
974                  *  2'b01  -  2 cycles
975                  *  2'b10 -  3 cycles
976                  *  2'b11 - 4 cycles
977                  *  For example if this value is chosen to 2'b01, it means that RTIM
978                  *  increments for every 3(three) 32Khz clock cycles.
979                  */
980                 unsigned prb_delta:2;
981                 /** Probe Period (PRB_PER)
982                  *  These bits sets the TADP_PRD as shown in Figure 4 as follows:
983                  *  2'b00  -  0.625 to 0.925 sec (typical 0.775 sec)
984                  *  2'b01  -  1.25 to 1.85 sec (typical 1.55 sec)
985                  *  2'b10  -  1.9 to 2.6 sec (typical 2.275 sec)
986                  *  2'b11  -  Reserved
987                  */
988                 unsigned prb_per:2;
989                 /** These bits capture the latest time it took for VBUS to ramp from
990                  *  VADP_SINK to VADP_PRB.
991                  *  0x000  -  1 cycles
992                  *  0x001  -  2 cycles
993                  *  0x002  -  3 cycles
994                  *  etc
995                  *  0x7FF  -  2048 cycles
996                  *  A time of 1024 cycles at 32 kHz corresponds to a time of 32 msec.
997                 */
998                 unsigned rtim:11;
999                 /** Enable Probe (EnaPrb)
1000                  *  When programmed to 1'b1, the core performs a probe operation.
1001                  *  This bit is valid only if OTG_Ver = 1'b1.
1002                  */
1003                 unsigned enaprb:1;
1004                 /** Enable Sense (EnaSns)
1005                  *  When programmed to 1'b1, the core performs a Sense operation.
1006                  *  This bit is valid only if OTG_Ver = 1'b1.
1007                  */
1008                 unsigned enasns:1;
1009                 /** ADP Reset (ADPRes)
1010                  *  When set, ADP controller is reset.
1011                  *  This bit is valid only if OTG_Ver = 1'b1.
1012                  */
1013                 unsigned adpres:1;
1014                 /** ADP Enable (ADPEn)
1015                  *  When set, the core performs either ADP probing or sensing
1016                  *  based on EnaPrb or EnaSns.
1017                  *  This bit is valid only if OTG_Ver = 1'b1.
1018                  */
1019                 unsigned adpen:1;
1020                 /** ADP Probe Interrupt (ADP_PRB_INT)
1021                  *  When this bit is set, it means that the VBUS
1022                  *  voltage is greater than VADP_PRB or VADP_PRB is reached.
1023                  *  This bit is valid only if OTG_Ver = 1'b1.
1024                  */
1025                 unsigned adp_prb_int:1;
1026                 /**
1027                  *  ADP Sense Interrupt (ADP_SNS_INT)
1028                  *  When this bit is set, it means that the VBUS voltage is greater than
1029                  *  VADP_SNS value or VADP_SNS is reached.
1030                  *  This bit is valid only if OTG_Ver = 1'b1.
1031                  */
1032                 unsigned adp_sns_int:1;
1033                 /** ADP Tomeout Interrupt (ADP_TMOUT_INT)
1034                  *  This bit is relevant only for an ADP probe.
1035                  *  When this bit is set, it means that the ramp time has
1036                  *  completed ie ADPCTL.RTIM has reached its terminal value
1037                  *  of 0x7FF.  This is a debug feature that allows software
1038                  *  to read the ramp time after each cycle.
1039                  *  This bit is valid only if OTG_Ver = 1'b1.
1040                  */
1041                 unsigned adp_tmout_int:1;
1042                 /** ADP Probe Interrupt Mask (ADP_PRB_INT_MSK)
1043                  *  When this bit is set, it unmasks the interrupt due to ADP_PRB_INT.
1044                  *  This bit is valid only if OTG_Ver = 1'b1.
1045                  */
1046                 unsigned adp_prb_int_msk:1;
1047                 /** ADP Sense Interrupt Mask (ADP_SNS_INT_MSK)
1048                  *  When this bit is set, it unmasks the interrupt due to ADP_SNS_INT.
1049                  *  This bit is valid only if OTG_Ver = 1'b1.
1050                  */
1051                 unsigned adp_sns_int_msk:1;
1052                 /** ADP Timoeout Interrupt Mask (ADP_TMOUT_MSK)
1053                  *  When this bit is set, it unmasks the interrupt due to ADP_TMOUT_INT.
1054                  *  This bit is valid only if OTG_Ver = 1'b1.
1055                  */
1056                 unsigned adp_tmout_int_msk:1;
1057                 /** Access Request
1058                  * 2'b00 - Read/Write Valid (updated by the core)
1059                  * 2'b01 - Read
1060                  * 2'b00 - Write
1061                  * 2'b00 - Reserved
1062                  */
1063                 unsigned ar:2;
1064                  /** Reserved */
1065                 unsigned reserved29_31:3;
1066         } b;
1067 } adpctl_data_t;
1068
1069 ////////////////////////////////////////////
1070 // Device Registers
1071 /**
1072  * Device Global Registers. <i>Offsets 800h-BFFh</i>
1073  *
1074  * The following structures define the size and relative field offsets
1075  * for the Device Mode Registers.
1076  *
1077  * <i>These registers are visible only in Device mode and must not be
1078  * accessed in Host mode, as the results are unknown.</i>
1079  */
1080 typedef struct dwc_otg_dev_global_regs {
1081         /** Device Configuration Register. <i>Offset 800h</i> */
1082         volatile uint32_t dcfg;
1083         /** Device Control Register. <i>Offset: 804h</i> */
1084         volatile uint32_t dctl;
1085         /** Device Status Register (Read Only). <i>Offset: 808h</i> */
1086         volatile uint32_t dsts;
1087         /** Reserved. <i>Offset: 80Ch</i> */
1088         uint32_t unused;
1089         /** Device IN Endpoint Common Interrupt Mask
1090          * Register. <i>Offset: 810h</i> */
1091         volatile uint32_t diepmsk;
1092         /** Device OUT Endpoint Common Interrupt Mask
1093          * Register. <i>Offset: 814h</i> */
1094         volatile uint32_t doepmsk;
1095         /** Device All Endpoints Interrupt Register.  <i>Offset: 818h</i> */
1096         volatile uint32_t daint;
1097         /** Device All Endpoints Interrupt Mask Register.  <i>Offset:
1098          * 81Ch</i> */
1099         volatile uint32_t daintmsk;
1100         /** Device IN Token Queue Read Register-1 (Read Only).
1101          * <i>Offset: 820h</i> */
1102         volatile uint32_t dtknqr1;
1103         /** Device IN Token Queue Read Register-2 (Read Only).
1104          * <i>Offset: 824h</i> */
1105         volatile uint32_t dtknqr2;
1106         /** Device VBUS  discharge Register.  <i>Offset: 828h</i> */
1107         volatile uint32_t dvbusdis;
1108         /** Device VBUS Pulse Register.  <i>Offset: 82Ch</i> */
1109         volatile uint32_t dvbuspulse;
1110         /** Device IN Token Queue Read Register-3 (Read Only). /
1111          *      Device Thresholding control register (Read/Write)
1112          * <i>Offset: 830h</i> */
1113         volatile uint32_t dtknqr3_dthrctl;
1114         /** Device IN Token Queue Read Register-4 (Read Only). /
1115          *      Device IN EPs empty Inr. Mask Register (Read/Write)
1116          * <i>Offset: 834h</i> */
1117         volatile uint32_t dtknqr4_fifoemptymsk;
1118         /** Device Each Endpoint Interrupt Register (Read Only). /
1119          * <i>Offset: 838h</i> */
1120         volatile uint32_t deachint;
1121         /** Device Each Endpoint Interrupt mask Register (Read/Write). /
1122          * <i>Offset: 83Ch</i> */
1123         volatile uint32_t deachintmsk;
1124         /** Device Each In Endpoint Interrupt mask Register (Read/Write). /
1125          * <i>Offset: 840h</i> */
1126         volatile uint32_t diepeachintmsk[MAX_EPS_CHANNELS];
1127         /** Device Each Out Endpoint Interrupt mask Register (Read/Write). /
1128          * <i>Offset: 880h</i> */
1129         volatile uint32_t doepeachintmsk[MAX_EPS_CHANNELS];
1130 } dwc_otg_device_global_regs_t;
1131
1132 /**
1133  * This union represents the bit fields in the Device Configuration
1134  * Register.  Read the register into the <i>d32</i> member then
1135  * set/clear the bits using the <i>b</i>it elements.  Write the
1136  * <i>d32</i> member to the dcfg register.
1137  */
1138 typedef union dcfg_data {
1139         /** raw register data */
1140         uint32_t d32;
1141         /** register bits */
1142         struct {
1143                 /** Device Speed */
1144                 unsigned devspd:2;
1145                 /** Non Zero Length Status OUT Handshake */
1146                 unsigned nzstsouthshk:1;
1147 #define DWC_DCFG_SEND_STALL 1
1148
1149                 unsigned ena32khzs:1;
1150                 /** Device Addresses */
1151                 unsigned devaddr:7;
1152                 /** Periodic Frame Interval */
1153                 unsigned perfrint:2;
1154 #define DWC_DCFG_FRAME_INTERVAL_80 0
1155 #define DWC_DCFG_FRAME_INTERVAL_85 1
1156 #define DWC_DCFG_FRAME_INTERVAL_90 2
1157 #define DWC_DCFG_FRAME_INTERVAL_95 3
1158
1159                 /** Enable Device OUT NAK for bulk in DDMA mode */
1160                 unsigned endevoutnak:1;
1161
1162                 unsigned reserved14_17:4;
1163                 /** In Endpoint Mis-match count */
1164                 unsigned epmscnt:5;
1165                 /** Enable Descriptor DMA in Device mode */
1166                 unsigned descdma:1;
1167                 unsigned perschintvl:2;
1168                 unsigned resvalid:6;
1169         } b;
1170 } dcfg_data_t;
1171
1172 /**
1173  * This union represents the bit fields in the Device Control
1174  * Register.  Read the register into the <i>d32</i> member then
1175  * set/clear the bits using the <i>b</i>it elements.
1176  */
1177 typedef union dctl_data {
1178         /** raw register data */
1179         uint32_t d32;
1180         /** register bits */
1181         struct {
1182                 /** Remote Wakeup */
1183                 unsigned rmtwkupsig:1;
1184                 /** Soft Disconnect */
1185                 unsigned sftdiscon:1;
1186                 /** Global Non-Periodic IN NAK Status */
1187                 unsigned gnpinnaksts:1;
1188                 /** Global OUT NAK Status */
1189                 unsigned goutnaksts:1;
1190                 /** Test Control */
1191                 unsigned tstctl:3;
1192                 /** Set Global Non-Periodic IN NAK */
1193                 unsigned sgnpinnak:1;
1194                 /** Clear Global Non-Periodic IN NAK */
1195                 unsigned cgnpinnak:1;
1196                 /** Set Global OUT NAK */
1197                 unsigned sgoutnak:1;
1198                 /** Clear Global OUT NAK */
1199                 unsigned cgoutnak:1;
1200                 /** Power-On Programming Done */
1201                 unsigned pwronprgdone:1;
1202                 /** Reserved */
1203                 unsigned reserved:1;
1204                 /** Global Multi Count */
1205                 unsigned gmc:2;
1206                 /** Ignore Frame Number for ISOC EPs */
1207                 unsigned ifrmnum:1;
1208                 /** NAK on Babble */
1209                 unsigned nakonbble:1;
1210                 /** Enable Continue on BNA */
1211                 unsigned encontonbna:1;
1212
1213                 unsigned reserved18_31:14;
1214         } b;
1215 } dctl_data_t;
1216
1217 /**
1218  * This union represents the bit fields in the Device Status
1219  * Register.  Read the register into the <i>d32</i> member then
1220  * set/clear the bits using the <i>b</i>it elements.
1221  */
1222 typedef union dsts_data {
1223         /** raw register data */
1224         uint32_t d32;
1225         /** register bits */
1226         struct {
1227                 /** Suspend Status */
1228                 unsigned suspsts:1;
1229                 /** Enumerated Speed */
1230                 unsigned enumspd:2;
1231 #define DWC_DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0
1232 #define DWC_DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1
1233 #define DWC_DSTS_ENUMSPD_LS_PHY_6MHZ               2
1234 #define DWC_DSTS_ENUMSPD_FS_PHY_48MHZ              3
1235                 /** Erratic Error */
1236                 unsigned errticerr:1;
1237                 unsigned reserved4_7:4;
1238                 /** Frame or Microframe Number of the received SOF */
1239                 unsigned soffn:14;
1240                 unsigned reserved22_31:10;
1241         } b;
1242 } dsts_data_t;
1243
1244 /**
1245  * This union represents the bit fields in the Device IN EP Interrupt
1246  * Register and the Device IN EP Common Mask Register.
1247  *
1248  * - Read the register into the <i>d32</i> member then set/clear the
1249  *       bits using the <i>b</i>it elements.
1250  */
1251 typedef union diepint_data {
1252         /** raw register data */
1253         uint32_t d32;
1254         /** register bits */
1255         struct {
1256                 /** Transfer complete mask */
1257                 unsigned xfercompl:1;
1258                 /** Endpoint disable mask */
1259                 unsigned epdisabled:1;
1260                 /** AHB Error mask */
1261                 unsigned ahberr:1;
1262                 /** TimeOUT Handshake mask (non-ISOC EPs) */
1263                 unsigned timeout:1;
1264                 /** IN Token received with TxF Empty mask */
1265                 unsigned intktxfemp:1;
1266                 /** IN Token Received with EP mismatch mask */
1267                 unsigned intknepmis:1;
1268                 /** IN Endpoint NAK Effective mask */
1269                 unsigned inepnakeff:1;
1270                 /** Reserved */
1271                 unsigned emptyintr:1;
1272
1273                 unsigned txfifoundrn:1;
1274
1275                 /** BNA Interrupt mask */
1276                 unsigned bna:1;
1277
1278                 unsigned reserved10_12:3;
1279                 /** BNA Interrupt mask */
1280                 unsigned nak:1;
1281
1282                 unsigned reserved14_31:18;
1283         } b;
1284 } diepint_data_t;
1285
1286 /**
1287  * This union represents the bit fields in the Device IN EP
1288  * Common/Dedicated Interrupt Mask Register.
1289  */
1290 typedef union diepint_data diepmsk_data_t;
1291
1292 /**
1293  * This union represents the bit fields in the Device OUT EP Interrupt
1294  * Registerand Device OUT EP Common Interrupt Mask Register.
1295  *
1296  * - Read the register into the <i>d32</i> member then set/clear the
1297  *       bits using the <i>b</i>it elements.
1298  */
1299 typedef union doepint_data {
1300         /** raw register data */
1301         uint32_t d32;
1302         /** register bits */
1303         struct {
1304                 /** Transfer complete */
1305                 unsigned xfercompl:1;
1306                 /** Endpoint disable  */
1307                 unsigned epdisabled:1;
1308                 /** AHB Error */
1309                 unsigned ahberr:1;
1310                 /** Setup Phase Done (contorl EPs) */
1311                 unsigned setup:1;
1312                 /** OUT Token Received when Endpoint Disabled */
1313                 unsigned outtknepdis:1;
1314
1315                 unsigned stsphsercvd:1;
1316                 /** Back-to-Back SETUP Packets Received */
1317                 unsigned back2backsetup:1;
1318
1319                 unsigned reserved7:1;
1320                 /** OUT packet Error */
1321                 unsigned outpkterr:1;
1322                 /** BNA Interrupt */
1323                 unsigned bna:1;
1324
1325                 unsigned reserved10:1;
1326                 /** Packet Drop Status */
1327                 unsigned pktdrpsts:1;
1328                 /** Babble Interrupt */
1329                 unsigned babble:1;
1330                 /** NAK Interrupt */
1331                 unsigned nak:1;
1332                 /** NYET Interrupt */
1333                 unsigned nyet:1;
1334                 /** Bit indicating setup packet received */
1335                 unsigned sr:1;
1336
1337                 unsigned reserved16_31:16;
1338         } b;
1339 } doepint_data_t;
1340
1341 /**
1342  * This union represents the bit fields in the Device OUT EP
1343  * Common/Dedicated Interrupt Mask Register.
1344  */
1345 typedef union doepint_data doepmsk_data_t;
1346
1347 /**
1348  * This union represents the bit fields in the Device All EP Interrupt
1349  * and Mask Registers.
1350  * - Read the register into the <i>d32</i> member then set/clear the
1351  *       bits using the <i>b</i>it elements.
1352  */
1353 typedef union daint_data {
1354         /** raw register data */
1355         uint32_t d32;
1356         /** register bits */
1357         struct {
1358                 /** IN Endpoint bits */
1359                 unsigned in:16;
1360                 /** OUT Endpoint bits */
1361                 unsigned out:16;
1362         } ep;
1363         struct {
1364                 /** IN Endpoint bits */
1365                 unsigned inep0:1;
1366                 unsigned inep1:1;
1367                 unsigned inep2:1;
1368                 unsigned inep3:1;
1369                 unsigned inep4:1;
1370                 unsigned inep5:1;
1371                 unsigned inep6:1;
1372                 unsigned inep7:1;
1373                 unsigned inep8:1;
1374                 unsigned inep9:1;
1375                 unsigned inep10:1;
1376                 unsigned inep11:1;
1377                 unsigned inep12:1;
1378                 unsigned inep13:1;
1379                 unsigned inep14:1;
1380                 unsigned inep15:1;
1381                 /** OUT Endpoint bits */
1382                 unsigned outep0:1;
1383                 unsigned outep1:1;
1384                 unsigned outep2:1;
1385                 unsigned outep3:1;
1386                 unsigned outep4:1;
1387                 unsigned outep5:1;
1388                 unsigned outep6:1;
1389                 unsigned outep7:1;
1390                 unsigned outep8:1;
1391                 unsigned outep9:1;
1392                 unsigned outep10:1;
1393                 unsigned outep11:1;
1394                 unsigned outep12:1;
1395                 unsigned outep13:1;
1396                 unsigned outep14:1;
1397                 unsigned outep15:1;
1398         } b;
1399 } daint_data_t;
1400
1401 /**
1402  * This union represents the bit fields in the Device IN Token Queue
1403  * Read Registers.
1404  * - Read the register into the <i>d32</i> member.
1405  * - READ-ONLY Register
1406  */
1407 typedef union dtknq1_data {
1408         /** raw register data */
1409         uint32_t d32;
1410         /** register bits */
1411         struct {
1412                 /** In Token Queue Write Pointer */
1413                 unsigned intknwptr:5;
1414                 /** Reserved */
1415                 unsigned reserved05_06:2;
1416                 /** write pointer has wrapped. */
1417                 unsigned wrap_bit:1;
1418                 /** EP Numbers of IN Tokens 0 ... 4 */
1419                 unsigned epnums0_5:24;
1420         } b;
1421 } dtknq1_data_t;
1422
1423 /**
1424  * This union represents Threshold control Register
1425  * - Read and write the register into the <i>d32</i> member.
1426  * - READ-WRITABLE Register
1427  */
1428 typedef union dthrctl_data {
1429         /** raw register data */
1430         uint32_t d32;
1431         /** register bits */
1432         struct {
1433                 /** non ISO Tx Thr. Enable */
1434                 unsigned non_iso_thr_en:1;
1435                 /** ISO Tx Thr. Enable */
1436                 unsigned iso_thr_en:1;
1437                 /** Tx Thr. Length */
1438                 unsigned tx_thr_len:9;
1439                 /** AHB Threshold ratio */
1440                 unsigned ahb_thr_ratio:2;
1441                 /** Reserved */
1442                 unsigned reserved13_15:3;
1443                 /** Rx Thr. Enable */
1444                 unsigned rx_thr_en:1;
1445                 /** Rx Thr. Length */
1446                 unsigned rx_thr_len:9;
1447                 unsigned reserved26:1;
1448                 /** Arbiter Parking Enable*/
1449                 unsigned arbprken:1;
1450                 /** Reserved */
1451                 unsigned reserved28_31:4;
1452         } b;
1453 } dthrctl_data_t;
1454
1455 /**
1456  * Device Logical IN Endpoint-Specific Registers. <i>Offsets
1457  * 900h-AFCh</i>
1458  *
1459  * There will be one set of endpoint registers per logical endpoint
1460  * implemented.
1461  *
1462  * <i>These registers are visible only in Device mode and must not be
1463  * accessed in Host mode, as the results are unknown.</i>
1464  */
1465 typedef struct dwc_otg_dev_in_ep_regs {
1466         /** Device IN Endpoint Control Register. <i>Offset:900h +
1467          * (ep_num * 20h) + 00h</i> */
1468         volatile uint32_t diepctl;
1469         /** Reserved. <i>Offset:900h + (ep_num * 20h) + 04h</i> */
1470         uint32_t reserved04;
1471         /** Device IN Endpoint Interrupt Register. <i>Offset:900h +
1472          * (ep_num * 20h) + 08h</i> */
1473         volatile uint32_t diepint;
1474         /** Reserved. <i>Offset:900h + (ep_num * 20h) + 0Ch</i> */
1475         uint32_t reserved0C;
1476         /** Device IN Endpoint Transfer Size
1477          * Register. <i>Offset:900h + (ep_num * 20h) + 10h</i> */
1478         volatile uint32_t dieptsiz;
1479         /** Device IN Endpoint DMA Address Register. <i>Offset:900h +
1480          * (ep_num * 20h) + 14h</i> */
1481         volatile uint32_t diepdma;
1482         /** Device IN Endpoint Transmit FIFO Status Register. <i>Offset:900h +
1483          * (ep_num * 20h) + 18h</i> */
1484         volatile uint32_t dtxfsts;
1485         /** Device IN Endpoint DMA Buffer Register. <i>Offset:900h +
1486          * (ep_num * 20h) + 1Ch</i> */
1487         volatile uint32_t diepdmab;
1488 } dwc_otg_dev_in_ep_regs_t;
1489
1490 /**
1491  * Device Logical OUT Endpoint-Specific Registers. <i>Offsets:
1492  * B00h-CFCh</i>
1493  *
1494  * There will be one set of endpoint registers per logical endpoint
1495  * implemented.
1496  *
1497  * <i>These registers are visible only in Device mode and must not be
1498  * accessed in Host mode, as the results are unknown.</i>
1499  */
1500 typedef struct dwc_otg_dev_out_ep_regs {
1501         /** Device OUT Endpoint Control Register. <i>Offset:B00h +
1502          * (ep_num * 20h) + 00h</i> */
1503         volatile uint32_t doepctl;
1504         /** Reserved. <i>Offset:B00h + (ep_num * 20h) + 04h</i> */
1505         uint32_t reserved04;
1506         /** Device OUT Endpoint Interrupt Register. <i>Offset:B00h +
1507          * (ep_num * 20h) + 08h</i> */
1508         volatile uint32_t doepint;
1509         /** Reserved. <i>Offset:B00h + (ep_num * 20h) + 0Ch</i> */
1510         uint32_t reserved0C;
1511         /** Device OUT Endpoint Transfer Size Register. <i>Offset:
1512          * B00h + (ep_num * 20h) + 10h</i> */
1513         volatile uint32_t doeptsiz;
1514         /** Device OUT Endpoint DMA Address Register. <i>Offset:B00h
1515          * + (ep_num * 20h) + 14h</i> */
1516         volatile uint32_t doepdma;
1517         /** Reserved. <i>Offset:B00h +   * (ep_num * 20h) + 18h</i> */
1518         uint32_t unused;
1519         /** Device OUT Endpoint DMA Buffer Register. <i>Offset:B00h
1520          * + (ep_num * 20h) + 1Ch</i> */
1521         uint32_t doepdmab;
1522 } dwc_otg_dev_out_ep_regs_t;
1523
1524 /**
1525  * This union represents the bit fields in the Device EP Control
1526  * Register.  Read the register into the <i>d32</i> member then
1527  * set/clear the bits using the <i>b</i>it elements.
1528  */
1529 typedef union depctl_data {
1530         /** raw register data */
1531         uint32_t d32;
1532         /** register bits */
1533         struct {
1534                 /** Maximum Packet Size
1535                  * IN/OUT EPn
1536                  * IN/OUT EP0 - 2 bits
1537                  *       2'b00: 64 Bytes
1538                  *       2'b01: 32
1539                  *       2'b10: 16
1540                  *       2'b11: 8 */
1541                 unsigned mps:11;
1542 #define DWC_DEP0CTL_MPS_64       0
1543 #define DWC_DEP0CTL_MPS_32       1
1544 #define DWC_DEP0CTL_MPS_16       2
1545 #define DWC_DEP0CTL_MPS_8        3
1546
1547                 /** Next Endpoint
1548                  * IN EPn/IN EP0
1549                  * OUT EPn/OUT EP0 - reserved */
1550                 unsigned nextep:4;
1551
1552                 /** USB Active Endpoint */
1553                 unsigned usbactep:1;
1554
1555                 /** Endpoint DPID (INTR/Bulk IN and OUT endpoints)
1556                  * This field contains the PID of the packet going to
1557                  * be received or transmitted on this endpoint. The
1558                  * application should program the PID of the first
1559                  * packet going to be received or transmitted on this
1560                  * endpoint , after the endpoint is
1561                  * activated. Application use the SetD1PID and
1562                  * SetD0PID fields of this register to program either
1563                  * D0 or D1 PID.
1564                  *
1565                  * The encoding for this field is
1566                  *       - 0: D0
1567                  *       - 1: D1
1568                  */
1569                 unsigned dpid:1;
1570
1571                 /** NAK Status */
1572                 unsigned naksts:1;
1573
1574                 /** Endpoint Type
1575                  *      2'b00: Control
1576                  *      2'b01: Isochronous
1577                  *      2'b10: Bulk
1578                  *      2'b11: Interrupt */
1579                 unsigned eptype:2;
1580
1581                 /** Snoop Mode
1582                  * OUT EPn/OUT EP0
1583                  * IN EPn/IN EP0 - reserved */
1584                 unsigned snp:1;
1585
1586                 /** Stall Handshake */
1587                 unsigned stall:1;
1588
1589                 /** Tx Fifo Number
1590                  * IN EPn/IN EP0
1591                  * OUT EPn/OUT EP0 - reserved */
1592                 unsigned txfnum:4;
1593
1594                 /** Clear NAK */
1595                 unsigned cnak:1;
1596                 /** Set NAK */
1597                 unsigned snak:1;
1598                 /** Set DATA0 PID (INTR/Bulk IN and OUT endpoints)
1599                  * Writing to this field sets the Endpoint DPID (DPID)
1600                  * field in this register to DATA0. Set Even
1601                  * (micro)frame (SetEvenFr) (ISO IN and OUT Endpoints)
1602                  * Writing to this field sets the Even/Odd
1603                  * (micro)frame (EO_FrNum) field to even (micro)
1604                  * frame.
1605                  */
1606                 unsigned setd0pid:1;
1607                 /** Set DATA1 PID (INTR/Bulk IN and OUT endpoints)
1608                  * Writing to this field sets the Endpoint DPID (DPID)
1609                  * field in this register to DATA1 Set Odd
1610                  * (micro)frame (SetOddFr) (ISO IN and OUT Endpoints)
1611                  * Writing to this field sets the Even/Odd
1612                  * (micro)frame (EO_FrNum) field to odd (micro) frame.
1613                  */
1614                 unsigned setd1pid:1;
1615
1616                 /** Endpoint Disable */
1617                 unsigned epdis:1;
1618                 /** Endpoint Enable */
1619                 unsigned epena:1;
1620         } b;
1621 } depctl_data_t;
1622
1623 /**
1624  * This union represents the bit fields in the Device EP Transfer
1625  * Size Register.  Read the register into the <i>d32</i> member then
1626  * set/clear the bits using the <i>b</i>it elements.
1627  */
1628 typedef union deptsiz_data {
1629                 /** raw register data */
1630         uint32_t d32;
1631                 /** register bits */
1632         struct {
1633                 /** Transfer size */
1634                 unsigned xfersize:19;
1635 /** Max packet count for EP (pow(2,10)-1) */
1636 #define MAX_PKT_CNT 1023
1637                 /** Packet Count */
1638                 unsigned pktcnt:10;
1639                 /** Multi Count - Periodic IN endpoints */
1640                 unsigned mc:2;
1641                 unsigned reserved:1;
1642         } b;
1643 } deptsiz_data_t;
1644
1645 /**
1646  * This union represents the bit fields in the Device EP 0 Transfer
1647  * Size Register.  Read the register into the <i>d32</i> member then
1648  * set/clear the bits using the <i>b</i>it elements.
1649  */
1650 typedef union deptsiz0_data {
1651                 /** raw register data */
1652         uint32_t d32;
1653                 /** register bits */
1654         struct {
1655                 /** Transfer size */
1656                 unsigned xfersize:7;
1657                                 /** Reserved */
1658                 unsigned reserved7_18:12;
1659                 /** Packet Count */
1660                 unsigned pktcnt:2;
1661                                 /** Reserved */
1662                 unsigned reserved21_28:8;
1663                                 /**Setup Packet Count (DOEPTSIZ0 Only) */
1664                 unsigned supcnt:2;
1665                 unsigned reserved31;
1666         } b;
1667 } deptsiz0_data_t;
1668
1669 /////////////////////////////////////////////////
1670 // DMA Descriptor Specific Structures
1671 //
1672
1673 /** Buffer status definitions */
1674
1675 #define BS_HOST_READY   0x0
1676 #define BS_DMA_BUSY             0x1
1677 #define BS_DMA_DONE             0x2
1678 #define BS_HOST_BUSY    0x3
1679
1680 /** Receive/Transmit status definitions */
1681
1682 #define RTS_SUCCESS             0x0
1683 #define RTS_BUFFLUSH    0x1
1684 #define RTS_RESERVED    0x2
1685 #define RTS_BUFERR              0x3
1686
1687 /**
1688  * This union represents the bit fields in the DMA Descriptor
1689  * status quadlet. Read the quadlet into the <i>d32</i> member then
1690  * set/clear the bits using the <i>b</i>it, <i>b_iso_out</i> and
1691  * <i>b_iso_in</i> elements.
1692  */
1693 typedef union dev_dma_desc_sts {
1694                 /** raw register data */
1695         uint32_t d32;
1696                 /** quadlet bits */
1697         struct {
1698                 /** Received number of bytes */
1699                 unsigned bytes:16;
1700                 /** NAK bit - only for OUT EPs */
1701                 unsigned nak:1;
1702                 unsigned reserved17_22:6;
1703                 /** Multiple Transfer - only for OUT EPs */
1704                 unsigned mtrf:1;
1705                 /** Setup Packet received - only for OUT EPs */
1706                 unsigned sr:1;
1707                 /** Interrupt On Complete */
1708                 unsigned ioc:1;
1709                 /** Short Packet */
1710                 unsigned sp:1;
1711                 /** Last */
1712                 unsigned l:1;
1713                 /** Receive Status */
1714                 unsigned sts:2;
1715                 /** Buffer Status */
1716                 unsigned bs:2;
1717         } b;
1718
1719 //#ifdef DWC_EN_ISOC
1720                 /** iso out quadlet bits */
1721         struct {
1722                 /** Received number of bytes */
1723                 unsigned rxbytes:11;
1724
1725                 unsigned reserved11:1;
1726                 /** Frame Number */
1727                 unsigned framenum:11;
1728                 /** Received ISO Data PID */
1729                 unsigned pid:2;
1730                 /** Interrupt On Complete */
1731                 unsigned ioc:1;
1732                 /** Short Packet */
1733                 unsigned sp:1;
1734                 /** Last */
1735                 unsigned l:1;
1736                 /** Receive Status */
1737                 unsigned rxsts:2;
1738                 /** Buffer Status */
1739                 unsigned bs:2;
1740         } b_iso_out;
1741
1742                 /** iso in quadlet bits */
1743         struct {
1744                 /** Transmited number of bytes */
1745                 unsigned txbytes:12;
1746                 /** Frame Number */
1747                 unsigned framenum:11;
1748                 /** Transmited ISO Data PID */
1749                 unsigned pid:2;
1750                 /** Interrupt On Complete */
1751                 unsigned ioc:1;
1752                 /** Short Packet */
1753                 unsigned sp:1;
1754                 /** Last */
1755                 unsigned l:1;
1756                 /** Transmit Status */
1757                 unsigned txsts:2;
1758                 /** Buffer Status */
1759                 unsigned bs:2;
1760         } b_iso_in;
1761 //#endif                                /* DWC_EN_ISOC */
1762 } dev_dma_desc_sts_t;
1763
1764 /**
1765  * DMA Descriptor structure
1766  *
1767  * DMA Descriptor structure contains two quadlets:
1768  * Status quadlet and Data buffer pointer.
1769  */
1770 typedef struct dwc_otg_dev_dma_desc {
1771         /** DMA Descriptor status quadlet */
1772         dev_dma_desc_sts_t status;
1773         /** DMA Descriptor data buffer pointer */
1774         uint32_t buf;
1775 } dwc_otg_dev_dma_desc_t;
1776
1777 /**
1778  * The dwc_otg_dev_if structure contains information needed to manage
1779  * the DWC_otg controller acting in device mode. It represents the
1780  * programming view of the device-specific aspects of the controller.
1781  */
1782 typedef struct dwc_otg_dev_if {
1783         /** Pointer to device Global registers.
1784          * Device Global Registers starting at offset 800h
1785          */
1786         dwc_otg_device_global_regs_t *dev_global_regs;
1787 #define DWC_DEV_GLOBAL_REG_OFFSET 0x800
1788
1789         /**
1790          * Device Logical IN Endpoint-Specific Registers 900h-AFCh
1791          */
1792         dwc_otg_dev_in_ep_regs_t *in_ep_regs[MAX_EPS_CHANNELS];
1793 #define DWC_DEV_IN_EP_REG_OFFSET 0x900
1794 #define DWC_EP_REG_OFFSET 0x20
1795
1796         /** Device Logical OUT Endpoint-Specific Registers B00h-CFCh */
1797         dwc_otg_dev_out_ep_regs_t *out_ep_regs[MAX_EPS_CHANNELS];
1798 #define DWC_DEV_OUT_EP_REG_OFFSET 0xB00
1799
1800         /* Device configuration information */
1801         uint8_t speed;                           /**< Device Speed      0: Unknown, 1: LS, 2:FS, 3: HS */
1802         uint8_t num_in_eps;              /**< Number # of Tx EP range: 0-15 exept ep0 */
1803         uint8_t num_out_eps;             /**< Number # of Rx EP range: 0-15 exept ep 0*/
1804
1805         /** Size of periodic FIFOs (Bytes) */
1806         uint16_t perio_tx_fifo_size[MAX_PERIO_FIFOS];
1807
1808         /** Size of Tx FIFOs (Bytes) */
1809         uint16_t tx_fifo_size[MAX_TX_FIFOS];
1810
1811         /** Thresholding enable flags and length varaiables **/
1812         uint16_t rx_thr_en;
1813         uint16_t iso_tx_thr_en;
1814         uint16_t non_iso_tx_thr_en;
1815
1816         uint16_t rx_thr_length;
1817         uint16_t tx_thr_length;
1818
1819         /**
1820          * Pointers to the DMA Descriptors for EP0 Control
1821          * transfers (virtual and physical)
1822          */
1823
1824         /** 2 descriptors for SETUP packets */
1825         dwc_dma_t dma_setup_desc_addr[2];
1826         dwc_otg_dev_dma_desc_t *setup_desc_addr[2];
1827
1828         /** Pointer to Descriptor with latest SETUP packet */
1829         dwc_otg_dev_dma_desc_t *psetup;
1830
1831         /** Index of current SETUP handler descriptor */
1832         uint32_t setup_desc_index;
1833
1834         /** Descriptor for Data In or Status In phases */
1835         dwc_dma_t dma_in_desc_addr;
1836         dwc_otg_dev_dma_desc_t *in_desc_addr;
1837
1838         /** Descriptor for Data Out or Status Out phases */
1839         dwc_dma_t dma_out_desc_addr;
1840         dwc_otg_dev_dma_desc_t *out_desc_addr;
1841
1842         /** Setup Packet Detected - if set clear NAK when queueing */
1843         uint32_t spd;
1844         /** Isoc ep pointer on which incomplete happens */
1845         void *isoc_ep;
1846
1847 } dwc_otg_dev_if_t;
1848
1849 /////////////////////////////////////////////////
1850 // Host Mode Register Structures
1851 //
1852 /**
1853  * The Host Global Registers structure defines the size and relative
1854  * field offsets for the Host Mode Global Registers.  Host Global
1855  * Registers offsets 400h-7FFh.
1856 */
1857 typedef struct dwc_otg_host_global_regs {
1858         /** Host Configuration Register.   <i>Offset: 400h</i> */
1859         volatile uint32_t hcfg;
1860         /** Host Frame Interval Register.       <i>Offset: 404h</i> */
1861         volatile uint32_t hfir;
1862         /** Host Frame Number / Frame Remaining Register. <i>Offset: 408h</i> */
1863         volatile uint32_t hfnum;
1864         /** Reserved.   <i>Offset: 40Ch</i> */
1865         uint32_t reserved40C;
1866         /** Host Periodic Transmit FIFO/ Queue Status Register. <i>Offset: 410h</i> */
1867         volatile uint32_t hptxsts;
1868         /** Host All Channels Interrupt Register. <i>Offset: 414h</i> */
1869         volatile uint32_t haint;
1870         /** Host All Channels Interrupt Mask Register. <i>Offset: 418h</i> */
1871         volatile uint32_t haintmsk;
1872         /** Host Frame List Base Address Register . <i>Offset: 41Ch</i> */
1873         volatile uint32_t hflbaddr;
1874 } dwc_otg_host_global_regs_t;
1875
1876 /**
1877  * This union represents the bit fields in the Host Configuration Register.
1878  * Read the register into the <i>d32</i> member then set/clear the bits using
1879  * the <i>b</i>it elements. Write the <i>d32</i> member to the hcfg register.
1880  */
1881 typedef union hcfg_data {
1882         /** raw register data */
1883         uint32_t d32;
1884
1885         /** register bits */
1886         struct {
1887                 /** FS/LS Phy Clock Select */
1888                 unsigned fslspclksel:2;
1889 #define DWC_HCFG_30_60_MHZ 0
1890 #define DWC_HCFG_48_MHZ    1
1891 #define DWC_HCFG_6_MHZ     2
1892
1893                 /** FS/LS Only Support */
1894                 unsigned fslssupp:1;
1895                 unsigned reserved3_6:4;
1896                 /** Enable 32-KHz Suspend Mode */
1897                 unsigned ena32khzs:1;
1898                 /** Resume Validation Periiod */
1899                 unsigned resvalid:8;
1900                 unsigned reserved16_22:7;
1901                 /** Enable Scatter/gather DMA in Host mode */
1902                 unsigned descdma:1;
1903                 /** Frame List Entries */
1904                 unsigned frlisten:2;
1905                 /** Enable Periodic Scheduling */
1906                 unsigned perschedena:1;
1907                 unsigned reserved27_30:4;
1908                 unsigned modechtimen:1;
1909         } b;
1910 } hcfg_data_t;
1911
1912 /**
1913  * This union represents the bit fields in the Host Frame Remaing/Number
1914  * Register.
1915  */
1916 typedef union hfir_data {
1917         /** raw register data */
1918         uint32_t d32;
1919
1920         /** register bits */
1921         struct {
1922                 unsigned frint:16;
1923                 unsigned hfirrldctrl:1;
1924                 unsigned reserved:15;
1925         } b;
1926 } hfir_data_t;
1927
1928 /**
1929  * This union represents the bit fields in the Host Frame Remaing/Number
1930  * Register.
1931  */
1932 typedef union hfnum_data {
1933         /** raw register data */
1934         uint32_t d32;
1935
1936         /** register bits */
1937         struct {
1938                 unsigned frnum:16;
1939 #define DWC_HFNUM_MAX_FRNUM 0x3FFF
1940                 unsigned frrem:16;
1941         } b;
1942 } hfnum_data_t;
1943
1944 typedef union hptxsts_data {
1945         /** raw register data */
1946         uint32_t d32;
1947
1948         /** register bits */
1949         struct {
1950                 unsigned ptxfspcavail:16;
1951                 unsigned ptxqspcavail:8;
1952                 /** Top of the Periodic Transmit Request Queue
1953                  *      - bit 24 - Terminate (last entry for the selected channel)
1954                  *      - bits 26:25 - Token Type
1955                  *        - 2'b00 - Zero length
1956                  *        - 2'b01 - Ping
1957                  *        - 2'b10 - Disable
1958                  *      - bits 30:27 - Channel Number
1959                  *      - bit 31 - Odd/even microframe
1960                  */
1961                 unsigned ptxqtop_terminate:1;
1962                 unsigned ptxqtop_token:2;
1963                 unsigned ptxqtop_chnum:4;
1964                 unsigned ptxqtop_odd:1;
1965         } b;
1966 } hptxsts_data_t;
1967
1968 /**
1969  * This union represents the bit fields in the Host Port Control and Status
1970  * Register. Read the register into the <i>d32</i> member then set/clear the
1971  * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
1972  * hprt0 register.
1973  */
1974 typedef union hprt0_data {
1975         /** raw register data */
1976         uint32_t d32;
1977         /** register bits */
1978         struct {
1979                 unsigned prtconnsts:1;
1980                 unsigned prtconndet:1;
1981                 unsigned prtena:1;
1982                 unsigned prtenchng:1;
1983                 unsigned prtovrcurract:1;
1984                 unsigned prtovrcurrchng:1;
1985                 unsigned prtres:1;
1986                 unsigned prtsusp:1;
1987                 unsigned prtrst:1;
1988                 unsigned reserved9:1;
1989                 unsigned prtlnsts:2;
1990                 unsigned prtpwr:1;
1991                 unsigned prttstctl:4;
1992                 unsigned prtspd:2;
1993 #define DWC_HPRT0_PRTSPD_HIGH_SPEED 0
1994 #define DWC_HPRT0_PRTSPD_FULL_SPEED 1
1995 #define DWC_HPRT0_PRTSPD_LOW_SPEED      2
1996                 unsigned reserved19_31:13;
1997         } b;
1998 } hprt0_data_t;
1999
2000 /**
2001  * This union represents the bit fields in the Host All Interrupt
2002  * Register.
2003  */
2004 typedef union haint_data {
2005         /** raw register data */
2006         uint32_t d32;
2007         /** register bits */
2008         struct {
2009                 unsigned ch0:1;
2010                 unsigned ch1:1;
2011                 unsigned ch2:1;
2012                 unsigned ch3:1;
2013                 unsigned ch4:1;
2014                 unsigned ch5:1;
2015                 unsigned ch6:1;
2016                 unsigned ch7:1;
2017                 unsigned ch8:1;
2018                 unsigned ch9:1;
2019                 unsigned ch10:1;
2020                 unsigned ch11:1;
2021                 unsigned ch12:1;
2022                 unsigned ch13:1;
2023                 unsigned ch14:1;
2024                 unsigned ch15:1;
2025                 unsigned reserved:16;
2026         } b;
2027
2028         struct {
2029                 unsigned chint:16;
2030                 unsigned reserved:16;
2031         } b2;
2032 } haint_data_t;
2033
2034 /**
2035  * This union represents the bit fields in the Host All Interrupt
2036  * Register.
2037  */
2038 typedef union haintmsk_data {
2039         /** raw register data */
2040         uint32_t d32;
2041         /** register bits */
2042         struct {
2043                 unsigned ch0:1;
2044                 unsigned ch1:1;
2045                 unsigned ch2:1;
2046                 unsigned ch3:1;
2047                 unsigned ch4:1;
2048                 unsigned ch5:1;
2049                 unsigned ch6:1;
2050                 unsigned ch7:1;
2051                 unsigned ch8:1;
2052                 unsigned ch9:1;
2053                 unsigned ch10:1;
2054                 unsigned ch11:1;
2055                 unsigned ch12:1;
2056                 unsigned ch13:1;
2057                 unsigned ch14:1;
2058                 unsigned ch15:1;
2059                 unsigned reserved:16;
2060         } b;
2061
2062         struct {
2063                 unsigned chint:16;
2064                 unsigned reserved:16;
2065         } b2;
2066 } haintmsk_data_t;
2067
2068 /**
2069  * Host Channel Specific Registers. <i>500h-5FCh</i>
2070  */
2071 typedef struct dwc_otg_hc_regs {
2072         /** Host Channel 0 Characteristic Register. <i>Offset: 500h + (chan_num * 20h) + 00h</i> */
2073         volatile uint32_t hcchar;
2074         /** Host Channel 0 Split Control Register. <i>Offset: 500h + (chan_num * 20h) + 04h</i> */
2075         volatile uint32_t hcsplt;
2076         /** Host Channel 0 Interrupt Register. <i>Offset: 500h + (chan_num * 20h) + 08h</i> */
2077         volatile uint32_t hcint;
2078         /** Host Channel 0 Interrupt Mask Register. <i>Offset: 500h + (chan_num * 20h) + 0Ch</i> */
2079         volatile uint32_t hcintmsk;
2080         /** Host Channel 0 Transfer Size Register. <i>Offset: 500h + (chan_num * 20h) + 10h</i> */
2081         volatile uint32_t hctsiz;
2082         /** Host Channel 0 DMA Address Register. <i>Offset: 500h + (chan_num * 20h) + 14h</i> */
2083         volatile uint32_t hcdma;
2084         volatile uint32_t reserved;
2085         /** Host Channel 0 DMA Buffer Address Register. <i>Offset: 500h + (chan_num * 20h) + 1Ch</i> */
2086         volatile uint32_t hcdmab;
2087 } dwc_otg_hc_regs_t;
2088
2089 /**
2090  * This union represents the bit fields in the Host Channel Characteristics
2091  * Register. Read the register into the <i>d32</i> member then set/clear the
2092  * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2093  * hcchar register.
2094  */
2095 typedef union hcchar_data {
2096         /** raw register data */
2097         uint32_t d32;
2098
2099         /** register bits */
2100         struct {
2101                 /** Maximum packet size in bytes */
2102                 unsigned mps:11;
2103
2104                 /** Endpoint number */
2105                 unsigned epnum:4;
2106
2107                 /** 0: OUT, 1: IN */
2108                 unsigned epdir:1;
2109
2110                 unsigned reserved:1;
2111
2112                 /** 0: Full/high speed device, 1: Low speed device */
2113                 unsigned lspddev:1;
2114
2115                 /** 0: Control, 1: Isoc, 2: Bulk, 3: Intr */
2116                 unsigned eptype:2;
2117
2118                 /** Packets per frame for periodic transfers. 0 is reserved. */
2119                 unsigned multicnt:2;
2120
2121                 /** Device address */
2122                 unsigned devaddr:7;
2123
2124                 /**
2125                  * Frame to transmit periodic transaction.
2126                  * 0: even, 1: odd
2127                  */
2128                 unsigned oddfrm:1;
2129
2130                 /** Channel disable */
2131                 unsigned chdis:1;
2132
2133                 /** Channel enable */
2134                 unsigned chen:1;
2135         } b;
2136 } hcchar_data_t;
2137
2138 typedef union hcsplt_data {
2139         /** raw register data */
2140         uint32_t d32;
2141
2142         /** register bits */
2143         struct {
2144                 /** Port Address */
2145                 unsigned prtaddr:7;
2146
2147                 /** Hub Address */
2148                 unsigned hubaddr:7;
2149
2150                 /** Transaction Position */
2151                 unsigned xactpos:2;
2152 #define DWC_HCSPLIT_XACTPOS_MID 0
2153 #define DWC_HCSPLIT_XACTPOS_END 1
2154 #define DWC_HCSPLIT_XACTPOS_BEGIN 2
2155 #define DWC_HCSPLIT_XACTPOS_ALL 3
2156
2157                 /** Do Complete Split */
2158                 unsigned compsplt:1;
2159
2160                 /** Reserved */
2161                 unsigned reserved:14;
2162
2163                 /** Split Enble */
2164                 unsigned spltena:1;
2165         } b;
2166 } hcsplt_data_t;
2167
2168 /**
2169  * This union represents the bit fields in the Host All Interrupt
2170  * Register.
2171  */
2172 typedef union hcint_data {
2173         /** raw register data */
2174         uint32_t d32;
2175         /** register bits */
2176         struct {
2177                 /** Transfer Complete */
2178                 unsigned xfercomp:1;
2179                 /** Channel Halted */
2180                 unsigned chhltd:1;
2181                 /** AHB Error */
2182                 unsigned ahberr:1;
2183                 /** STALL Response Received */
2184                 unsigned stall:1;
2185                 /** NAK Response Received */
2186                 unsigned nak:1;
2187                 /** ACK Response Received */
2188                 unsigned ack:1;
2189                 /** NYET Response Received */
2190                 unsigned nyet:1;
2191                 /** Transaction Err */
2192                 unsigned xacterr:1;
2193                 /** Babble Error */
2194                 unsigned bblerr:1;
2195                 /** Frame Overrun */
2196                 unsigned frmovrun:1;
2197                 /** Data Toggle Error */
2198                 unsigned datatglerr:1;
2199                 /** Buffer Not Available (only for DDMA mode) */
2200                 unsigned bna:1;
2201                 /** Exessive transaction error (only for DDMA mode) */
2202                 unsigned xcs_xact:1;
2203                 /** Frame List Rollover interrupt */
2204                 unsigned frm_list_roll:1;
2205                 /** Reserved */
2206                 unsigned reserved14_31:18;
2207         } b;
2208 } hcint_data_t;
2209
2210 /**
2211  * This union represents the bit fields in the Host Channel Interrupt Mask
2212  * Register. Read the register into the <i>d32</i> member then set/clear the
2213  * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2214  * hcintmsk register.
2215  */
2216 typedef union hcintmsk_data {
2217         /** raw register data */
2218         uint32_t d32;
2219
2220         /** register bits */
2221         struct {
2222                 unsigned xfercompl:1;
2223                 unsigned chhltd:1;
2224                 unsigned ahberr:1;
2225                 unsigned stall:1;
2226                 unsigned nak:1;
2227                 unsigned ack:1;
2228                 unsigned nyet:1;
2229                 unsigned xacterr:1;
2230                 unsigned bblerr:1;
2231                 unsigned frmovrun:1;
2232                 unsigned datatglerr:1;
2233                 unsigned bna:1;
2234                 unsigned xcs_xact:1;
2235                 unsigned frm_list_roll:1;
2236                 unsigned reserved14_31:18;
2237         } b;
2238 } hcintmsk_data_t;
2239
2240 /**
2241  * This union represents the bit fields in the Host Channel Transfer Size
2242  * Register. Read the register into the <i>d32</i> member then set/clear the
2243  * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2244  * hcchar register.
2245  */
2246
2247 typedef union hctsiz_data {
2248         /** raw register data */
2249         uint32_t d32;
2250
2251         /** register bits */
2252         struct {
2253                 /** Total transfer size in bytes */
2254                 unsigned xfersize:19;
2255
2256                 /** Data packets to transfer */
2257                 unsigned pktcnt:10;
2258
2259                 /**
2260                  * Packet ID for next data packet
2261                  * 0: DATA0
2262                  * 1: DATA2
2263                  * 2: DATA1
2264                  * 3: MDATA (non-Control), SETUP (Control)
2265                  */
2266                 unsigned pid:2;
2267 #define DWC_HCTSIZ_DATA0 0
2268 #define DWC_HCTSIZ_DATA1 2
2269 #define DWC_HCTSIZ_DATA2 1
2270 #define DWC_HCTSIZ_MDATA 3
2271 #define DWC_HCTSIZ_SETUP 3
2272
2273                 /** Do PING protocol when 1 */
2274                 unsigned dopng:1;
2275         } b;
2276
2277         /** register bits */
2278         struct {
2279                 /** Scheduling information */
2280                 unsigned schinfo:8;
2281
2282                 /** Number of transfer descriptors.
2283                  * Max value:
2284                  * 64 in general,
2285                  * 256 only for HS isochronous endpoint.
2286                  */
2287                 unsigned ntd:8;
2288
2289                 /** Data packets to transfer */
2290                 unsigned reserved16_28:13;
2291
2292                 /**
2293                  * Packet ID for next data packet
2294                  * 0: DATA0
2295                  * 1: DATA2
2296                  * 2: DATA1
2297                  * 3: MDATA (non-Control)
2298                  */
2299                 unsigned pid:2;
2300
2301                 /** Do PING protocol when 1 */
2302                 unsigned dopng:1;
2303         } b_ddma;
2304 } hctsiz_data_t;
2305
2306 /**
2307  * This union represents the bit fields in the Host DMA Address
2308  * Register used in Descriptor DMA mode.
2309  */
2310 typedef union hcdma_data {
2311         /** raw register data */
2312         uint32_t d32;
2313         /** register bits */
2314         struct {
2315                 unsigned reserved0_2:3;
2316                 /** Current Transfer Descriptor. Not used for ISOC */
2317                 unsigned ctd:8;
2318                 /** Start Address of Descriptor List */
2319                 unsigned dma_addr:21;
2320         } b;
2321 } hcdma_data_t;
2322
2323 /**
2324  * This union represents the bit fields in the DMA Descriptor
2325  * status quadlet for host mode. Read the quadlet into the <i>d32</i> member then
2326  * set/clear the bits using the <i>b</i>it elements.
2327  */
2328 typedef union host_dma_desc_sts {
2329         /** raw register data */
2330         uint32_t d32;
2331         /** quadlet bits */
2332
2333         /* for non-isochronous  */
2334         struct {
2335                 /** Number of bytes */
2336                 unsigned n_bytes:17;
2337                 /** QTD offset to jump when Short Packet received - only for IN EPs */
2338                 unsigned qtd_offset:6;
2339                 /**
2340                  * Set to request the core to jump to alternate QTD if
2341                  * Short Packet received - only for IN EPs
2342                  */
2343                 unsigned a_qtd:1;
2344                  /**
2345                   * Setup Packet bit. When set indicates that buffer contains
2346                   * setup packet.
2347                   */
2348                 unsigned sup:1;
2349                 /** Interrupt On Complete */
2350                 unsigned ioc:1;
2351                 /** End of List */
2352                 unsigned eol:1;
2353                 unsigned reserved27:1;
2354                 /** Rx/Tx Status */
2355                 unsigned sts:2;
2356 #define DMA_DESC_STS_PKTERR     1
2357                 unsigned reserved30:1;
2358                 /** Active Bit */
2359                 unsigned a:1;
2360         } b;
2361         /* for isochronous */
2362         struct {
2363                 /** Number of bytes */
2364                 unsigned n_bytes:12;
2365                 unsigned reserved12_24:13;
2366                 /** Interrupt On Complete */
2367                 unsigned ioc:1;
2368                 unsigned reserved26_27:2;
2369                 /** Rx/Tx Status */
2370                 unsigned sts:2;
2371                 unsigned reserved30:1;
2372                 /** Active Bit */
2373                 unsigned a:1;
2374         } b_isoc;
2375 } host_dma_desc_sts_t;
2376
2377 #define MAX_DMA_DESC_SIZE               131071
2378 #define MAX_DMA_DESC_NUM_GENERIC        64
2379 #define MAX_DMA_DESC_NUM_HS_ISOC        256
2380 #define MAX_FRLIST_EN_NUM               64
2381 /**
2382  * Host-mode DMA Descriptor structure
2383  *
2384  * DMA Descriptor structure contains two quadlets:
2385  * Status quadlet and Data buffer pointer.
2386  */
2387 typedef struct dwc_otg_host_dma_desc {
2388         /** DMA Descriptor status quadlet */
2389         host_dma_desc_sts_t status;
2390         /** DMA Descriptor data buffer pointer */
2391         uint32_t buf;
2392 } dwc_otg_host_dma_desc_t;
2393
2394 /** OTG Host Interface Structure.
2395  *
2396  * The OTG Host Interface Structure structure contains information
2397  * needed to manage the DWC_otg controller acting in host mode. It
2398  * represents the programming view of the host-specific aspects of the
2399  * controller.
2400  */
2401 typedef struct dwc_otg_host_if {
2402         /** Host Global Registers starting at offset 400h.*/
2403         dwc_otg_host_global_regs_t *host_global_regs;
2404 #define DWC_OTG_HOST_GLOBAL_REG_OFFSET 0x400
2405
2406         /** Host Port 0 Control and Status Register */
2407         volatile uint32_t *hprt0;
2408 #define DWC_OTG_HOST_PORT_REGS_OFFSET 0x440
2409
2410         /** Host Channel Specific Registers at offsets 500h-5FCh. */
2411         dwc_otg_hc_regs_t *hc_regs[MAX_EPS_CHANNELS];
2412 #define DWC_OTG_HOST_CHAN_REGS_OFFSET 0x500
2413 #define DWC_OTG_CHAN_REGS_OFFSET 0x20
2414
2415         /* Host configuration information */
2416         /** Number of Host Channels (range: 1-16) */
2417         uint8_t num_host_channels;
2418         /** Periodic EPs supported (0: no, 1: yes) */
2419         uint8_t perio_eps_supported;
2420         /** Periodic Tx FIFO Size (Only 1 host periodic Tx FIFO) */
2421         uint16_t perio_tx_fifo_size;
2422
2423 } dwc_otg_host_if_t;
2424
2425 /**
2426  * This union represents the bit fields in the Power and Clock Gating Control
2427  * Register. Read the register into the <i>d32</i> member then set/clear the
2428  * bits using the <i>b</i>it elements.
2429  */
2430 typedef union pcgcctl_data {
2431         /** raw register data */
2432         uint32_t d32;
2433
2434         /** register bits */
2435         struct {
2436                 /** Stop Pclk */
2437                 unsigned stoppclk:1;
2438                 /** Gate Hclk */
2439                 unsigned gatehclk:1;
2440                 /** Power Clamp */
2441                 unsigned pwrclmp:1;
2442                 /** Reset Power Down Modules */
2443                 unsigned rstpdwnmodule:1;
2444                 /** Reserved */
2445                 unsigned reserved:1;
2446                 /** Enable Sleep Clock Gating (Enbl_L1Gating) */
2447                 unsigned enbl_sleep_gating:1;
2448                 /** PHY In Sleep (PhySleep) */
2449                 unsigned phy_in_sleep:1;
2450                 /** Deep Sleep*/
2451                 unsigned deep_sleep:1;
2452                 unsigned resetaftsusp:1;
2453                 unsigned restoremode:1;
2454                 unsigned enbl_extnd_hiber:1;
2455                 unsigned extnd_hiber_pwrclmp:1;
2456                 unsigned extnd_hiber_switch:1;
2457                 unsigned ess_reg_restored:1;
2458                 unsigned prt_clk_sel:2;
2459                 unsigned port_power:1;
2460                 unsigned max_xcvrselect:2;
2461                 unsigned max_termsel:1;
2462                 unsigned mac_dev_addr:7;
2463                 unsigned p2hd_dev_enum_spd:2;
2464                 unsigned p2hd_prt_spd:2;
2465                 unsigned if_dev_mode:1;
2466         } b;
2467 } pcgcctl_data_t;
2468
2469 /**
2470  * This union represents the bit fields in the Global Data FIFO Software
2471  * Configuration Register. Read the register into the <i>d32</i> member then
2472  * set/clear the bits using the <i>b</i>it elements.
2473  */
2474 typedef union gdfifocfg_data {
2475         /* raw register data */
2476         uint32_t d32;
2477         /** register bits */
2478         struct {
2479                 /** OTG Data FIFO depth */
2480                 unsigned gdfifocfg:16;
2481                 /** Start address of EP info controller */
2482                 unsigned epinfobase:16;
2483         } b;
2484 } gdfifocfg_data_t;
2485
2486 /**
2487  * This union represents the bit fields in the Global Power Down Register
2488  * Register. Read the register into the <i>d32</i> member then set/clear the
2489  * bits using the <i>b</i>it elements.
2490  */
2491 typedef union gpwrdn_data {
2492         /* raw register data */
2493         uint32_t d32;
2494
2495         /** register bits */
2496         struct {
2497                 /** PMU Interrupt Select */
2498                 unsigned pmuintsel:1;
2499                 /** PMU Active */
2500                 unsigned pmuactv:1;
2501                 /** Restore */
2502                 unsigned restore:1;
2503                 /** Power Down Clamp */
2504                 unsigned pwrdnclmp:1;
2505                 /** Power Down Reset */
2506                 unsigned pwrdnrstn:1;
2507                 /** Power Down Switch */
2508                 unsigned pwrdnswtch:1;
2509                 /** Disable VBUS */
2510                 unsigned dis_vbus:1;
2511                 /** Line State Change */
2512                 unsigned lnstschng:1;
2513                 /** Line state change mask */
2514                 unsigned lnstchng_msk:1;
2515                 /** Reset Detected */
2516                 unsigned rst_det:1;
2517                 /** Reset Detect mask */
2518                 unsigned rst_det_msk:1;
2519                 /** Disconnect Detected */
2520                 unsigned disconn_det:1;
2521                 /** Disconnect Detect mask */
2522                 unsigned disconn_det_msk:1;
2523                 /** Connect Detected*/
2524                 unsigned connect_det:1;
2525                 /** Connect Detected Mask*/
2526                 unsigned connect_det_msk:1;
2527                 /** SRP Detected */
2528                 unsigned srp_det:1;
2529                 /** SRP Detect mask */
2530                 unsigned srp_det_msk:1;
2531                 /** Status Change Interrupt */
2532                 unsigned sts_chngint:1;
2533                 /** Status Change Interrupt Mask */
2534                 unsigned sts_chngint_msk:1;
2535                 /** Line State */
2536                 unsigned linestate:2;
2537                 /** Indicates current mode(status of IDDIG signal) */
2538                 unsigned idsts:1;
2539                 /** B Session Valid signal status*/
2540                 unsigned bsessvld:1;
2541                 /** ADP Event Detected */
2542                 unsigned adp_int:1;
2543                 /** Multi Valued ID pin */
2544                 unsigned mult_val_id_bc:5;
2545                 /** Reserved 24_31 */
2546                 unsigned reserved29_31:3;
2547         } b;
2548 } gpwrdn_data_t;
2549
2550 #endif