gpio-button-hotplug: add more buttons
[openwrt/openwrt.git] / package / kernel / lantiq / ltq-hcd / src / ifxusb_regs.h
1 /*****************************************************************************
2 ** FILE NAME : ifxusb_regs.h
3 ** PROJECT : IFX USB sub-system V3
4 ** MODULES : IFX USB sub-system Host and Device driver
5 ** SRC VERSION : 3.2
6 ** DATE : 1/Jan/2011
7 ** AUTHOR : Chen, Howard
8 ** DESCRIPTION : This file contains the data structures for accessing the IFXUSB core
9 ** registers.
10 ** The application interfaces with the USB core by reading from and
11 ** writing to the Control and Status Register (CSR) space through the
12 ** AHB Slave interface. These registers are 32 bits wide, and the
13 ** addresses are 32-bit-block aligned.
14 ** CSRs are classified as follows:
15 ** - Core Global Registers
16 ** - Device Mode Registers
17 ** - Device Global Registers
18 ** - Device Endpoint Specific Registers
19 ** - Host Mode Registers
20 ** - Host Global Registers
21 ** - Host Port CSRs
22 ** - Host Channel Specific Registers
23 **
24 ** Only the Core Global registers can be accessed in both Device and
25 ** Host modes. When the USB core is operating in one mode, either
26 ** Device or Host, the application must not access registers from the
27 ** other mode. When the core switches from one mode to another, the
28 ** registers in the new mode of operation must be reprogrammed as they
29 ** would be after a power-on reset.
30 ** FUNCTIONS :
31 ** COMPILER : gcc
32 ** REFERENCE : Synopsys DWC-OTG Driver 2.7
33 ** COPYRIGHT : Copyright (c) 2010
34 ** LANTIQ DEUTSCHLAND GMBH,
35 ** Am Campeon 3, 85579 Neubiberg, Germany
36 **
37 ** This program is free software; you can redistribute it and/or modify
38 ** it under the terms of the GNU General Public License as published by
39 ** the Free Software Foundation; either version 2 of the License, or
40 ** (at your option) any later version.
41 **
42 ** Version Control Section **
43 ** $Author$
44 ** $Date$
45 ** $Revisions$
46 ** $Log$ Revision history
47 *****************************************************************************/
48 /******************************************************************************
49 ** COPYRIGHT : Copyright (c) 2006
50 ** Infineon Technologies AG
51 ** Am Campeon 1-12, 85579 Neubiberg, Germany
52 **
53 ** This program is free software; you can redistribute it and/or modify
54 ** it under the terms of the GNU General Public License as published by
55 ** the Free Software Foundation; either version 2 of the License, or
56 ** (at your option) any later version.
57 **
58 ** HISTORY
59 ** $Date $Author $Comment
60 ** 10 NOV 2008 Wu Qi Ming Initial Version, to comply with COC
61 *******************************************************************************/
62
63
64 /*
65 * This file contains code fragments from Synopsys HS OTG Linux Software Driver.
66 * For this code the following notice is applicable:
67 *
68 * ==========================================================================
69 *
70 * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
71 * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
72 * otherwise expressly agreed to in writing between Synopsys and you.
73 *
74 * The Software IS NOT an item of Licensed Software or Licensed Product under
75 * any End User Software License Agreement or Agreement for Licensed Product
76 * with Synopsys or any supplement thereto. You are permitted to use and
77 * redistribute this Software in source and binary forms, with or without
78 * modification, provided that redistributions of source code must retain this
79 * notice. You may not view, use, disclose, copy or distribute this file or
80 * any information contained herein except pursuant to this license grant from
81 * Synopsys. If you do not agree with this notice, including the disclaimer
82 * below, then you are not authorized to use the Software.
83 *
84 * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
85 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
86 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
87 * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
88 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
89 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
90 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
91 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
92 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
93 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
94 * DAMAGE.
95 * ========================================================================== */
96
97
98 /*!
99 \defgroup IFXUSB_CSR_DEFINITION Control and Status Register bit-map definition
100 \ingroup IFXUSB_DRIVER_V3
101 \brief Data structures for accessing the IFXUSB core registers.
102 The application interfaces with the USB core by reading from and
103 writing to the Control and Status Register (CSR) space through the
104 AHB Slave interface. These registers are 32 bits wide, and the
105 addresses are 32-bit-block aligned.
106 CSRs are classified as follows:
107 - Core Global Registers
108 - Device Mode Registers
109 - Device Global Registers
110 - Device Endpoint Specific Registers
111 - Host Mode Registers
112 - Host Global Registers
113 - Host Port CSRs
114 - Host Channel Specific Registers
115
116 Only the Core Global registers can be accessed in both Device andHost modes.
117 When the USB core is operating in one mode, either Device or Host, the
118 application must not access registers from the other mode. When the core
119 switches from one mode to another, the registers in the new mode of operation
120 must be reprogrammed as they would be after a power-on reset.
121 */
122
123 /*!
124 \defgroup IFXUSB_CSR_DEVICE_GLOBAL_REG Device Mode Registers
125 \ingroup IFXUSB_CSR_DEFINITION
126 \brief Bit-mapped structure to access Device Mode Global Registers
127 */
128
129 /*!
130 \defgroup IFXUSB_CSR_DEVICE_EP_REG Device Mode EP Registers
131 \ingroup IFXUSB_CSR_DEFINITION
132 \brief Bit-mapped structure to access Device Mode EP Registers
133 There will be one set of endpoint registers per logical endpoint
134 implemented.
135 These registers are visible only in Device mode and must not be
136 accessed in Host mode, as the results are unknown.
137 */
138
139 /*!
140 \defgroup IFXUSB_CSR_DEVICE_DMA_DESC Device mode scatter dma descriptor strusture
141 \ingroup IFXUSB_CSR_DEFINITION
142 \brief Bit-mapped structure to DMA descriptor
143 */
144
145
146 /*!
147 \defgroup IFXUSB_CSR_HOST_GLOBAL_REG Host Mode Registers
148 \ingroup IFXUSB_CSR_DEFINITION
149 \brief Bit-mapped structure to access Host Mode Global Registers
150 */
151
152 /*!
153 \defgroup IFXUSB_CSR_HOST_HC_REG Host Mode HC Registers
154 \ingroup IFXUSB_CSR_DEFINITION
155 \brief Bit-mapped structure to access Host Mode Host Channel Registers
156 There will be one set of endpoint registers per host channel
157 implemented.
158 These registers are visible only in Host mode and must not be
159 accessed in Device mode, as the results are unknown.
160 */
161
162 /*!
163 \defgroup IFXUSB_CSR_PWR_CLK_GATING_REG Power and Clock Gating Control Register
164 \ingroup IFXUSB_CSR_DEFINITION
165 \brief Bit-mapped structure to Power and Clock Gating Control Register
166 */
167
168 /*!
169 \defgroup IFXUSB_CSR_CORE_GLOBAL_REG Core Global Registers
170 \ingroup IFXUSB_CSR_DEFINITION
171 \brief Bit-mapped structure to access Core Global Registers
172 */
173
174 /*!
175 \defgroup IFXUSB_CSR_CORE_GLOBAL_REG Core Global Registers
176 \ingroup IFXUSB_CSR_DEFINITION
177 \brief Bit-mapped structure to access Core Global Registers
178 */
179
180
181
182 /*!
183 \defgroup IFXUSB_CSR_ACCESS_MACROS Macros to manipulate CSRs
184 \ingroup IFXUSB_CSR_DEFINITION
185 \brief Macros to manipulate CSRs
186 */
187
188
189
190
191
192
193 /*!
194 \file ifxusb_regs.h
195 \ingroup IFXUSB_DRIVER_V3
196 \brief This file contains the data structures for accessing the IFXUSB core registers.
197 */
198
199
200 #ifndef __IFXUSB_REGS_H__
201 #define __IFXUSB_REGS_H__
202
203 /****************************************************************************/
204
205 #define MAX_PERIO_FIFOS 15 /** Maximum number of Periodic FIFOs */
206 #define MAX_TX_FIFOS 15 /** Maximum number of Periodic FIFOs */
207 #define MAX_EPS_CHANNELS 16 /** Maximum number of Endpoints/HostChannels */
208
209 /****************************************************************************/
210
211 //#define __RecordRegRW__
212
213 /*!
214 \fn static __inline__ uint32_t ifxusb_rreg( volatile uint32_t *_reg)
215 \brief Reads the content of a register.
216 \param _reg address of register to read.
217 \return contents of the register.
218 \ingroup IFXUSB_CSR_ACCESS_MACROS
219 */
220 static __inline__ uint32_t ifxusb_rreg( volatile uint32_t *_reg)
221 {
222 #ifdef __RecordRegRW__
223 uint32_t r;
224 r=*(_reg);
225 return (r);
226 #else
227 return (*(_reg));
228 #endif
229 };
230
231
232 /*!
233 \fn static __inline__ void ifxusb_wreg( volatile uint32_t *_reg, const uint32_t _value)
234 \brief Writes a register with a 32 bit value.
235 \param _reg address of register to write.
236 \param _value value to write to _reg.
237 \ingroup IFXUSB_CSR_ACCESS_MACROS
238 */
239 static __inline__ void ifxusb_wreg( volatile uint32_t *_reg, const uint32_t _value)
240 {
241 #ifdef __RecordRegRW__
242 printk(KERN_INFO "[W %p<-%08X]\n",_reg,_value);
243 #else
244 *(_reg)=_value;
245 #endif
246 };
247
248 /*!
249 \fn static __inline__ void ifxusb_mreg( volatile uint32_t *_reg, const uint32_t _clear_mask, const uint32_t _set_mask)
250 \brief Modifies bit values in a register. Using the
251 algorithm: (reg_contents & ~clear_mask) | set_mask.
252 \param _reg address of register to modify.
253 \param _clear_mask bit mask to be cleared.
254 \param _set_mask bit mask to be set.
255 \ingroup IFXUSB_CSR_ACCESS_MACROS
256 */
257 static __inline__ void ifxusb_mreg( volatile uint32_t *_reg, const uint32_t _clear_mask, const uint32_t _set_mask)
258 {
259 uint32_t v;
260 #ifdef __RecordRegRW__
261 uint32_t r;
262 v= *(_reg);
263 r=v;
264 r&=(~_clear_mask);
265 r|= _set_mask;
266 *(_reg)=r ;
267 printk(KERN_INFO "[M %p->%08X+%08X/%08X<-%08X]\n",_reg,r,_clear_mask,_set_mask,r);
268 #else
269 v= *(_reg);
270 v&=(~_clear_mask);
271 v|= _set_mask;
272 *(_reg)=v ;
273 #endif
274 };
275
276 /****************************************************************************/
277
278 /*!
279 \addtogroup IFXUSB_CSR_CORE_GLOBAL_REG
280 */
281 /*@{*/
282
283 /*! typedef ifxusb_core_global_regs_t
284 \brief IFXUSB Core registers .
285 The ifxusb_core_global_regs structure defines the size
286 and relative field offsets for the Core Global registers.
287 */
288 typedef struct ifxusb_core_global_regs
289 {
290 volatile uint32_t gotgctl; /*!< 000h OTG Control and Status Register. */
291 volatile uint32_t gotgint; /*!< 004h OTG Interrupt Register. */
292 volatile uint32_t gahbcfg; /*!< 008h Core AHB Configuration Register. */
293 volatile uint32_t gusbcfg; /*!< 00Ch Core USB Configuration Register. */
294 volatile uint32_t grstctl; /*!< 010h Core Reset Register. */
295 volatile uint32_t gintsts; /*!< 014h Core Interrupt Register. */
296 volatile uint32_t gintmsk; /*!< 018h Core Interrupt Mask Register. */
297 volatile uint32_t grxstsr; /*!< 01Ch Receive Status Queue Read Register (Read Only). */
298 volatile uint32_t grxstsp; /*!< 020h Receive Status Queue Read & POP Register (Read Only). */
299 volatile uint32_t grxfsiz; /*!< 024h Receive FIFO Size Register. */
300 volatile uint32_t gnptxfsiz; /*!< 028h Non Periodic Transmit FIFO Size Register. */
301 volatile uint32_t gnptxsts; /*!< 02Ch Non Periodic Transmit FIFO/Queue Status Register (Read Only). */
302 volatile uint32_t gi2cctl; /*!< 030h I2C Access Register. */
303 volatile uint32_t gpvndctl; /*!< 034h PHY Vendor Control Register. */
304 volatile uint32_t ggpio; /*!< 038h General Purpose Input/Output Register. */
305 volatile uint32_t guid; /*!< 03Ch User ID Register. */
306 volatile uint32_t gsnpsid; /*!< 040h Synopsys ID Register (Read Only). */
307 volatile uint32_t ghwcfg1; /*!< 044h User HW Config1 Register (Read Only). */
308 volatile uint32_t ghwcfg2; /*!< 048h User HW Config2 Register (Read Only). */
309 volatile uint32_t ghwcfg3; /*!< 04Ch User HW Config3 Register (Read Only). */
310 volatile uint32_t ghwcfg4; /*!< 050h User HW Config4 Register (Read Only). */
311 volatile uint32_t reserved[43]; /*!< 054h Reserved 054h-0FFh */
312 volatile uint32_t hptxfsiz; /*!< 100h Host Periodic Transmit FIFO Size Register. */
313 volatile uint32_t dptxfsiz_dieptxf[15];/*!< 104h + (FIFO_Number-1)*04h, 1 <= FIFO Number <= 15.
314 Device Periodic Transmit FIFO#n Register if dedicated
315 fifos are disabled, otherwise Device Transmit FIFO#n
316 Register.
317 */
318 } ifxusb_core_global_regs_t;
319
320 /*!
321 \brief Bits of the Core OTG Control and Status Register (GOTGCTL).
322 */
323 typedef union gotgctl_data
324 {
325 uint32_t d32;
326 struct{
327 unsigned reserved21_31 : 11;
328 unsigned currmod : 1 ; /*!< 20 */
329 unsigned bsesvld : 1 ; /*!< 19 */
330 unsigned asesvld : 1 ; /*!< 18 */
331 unsigned reserved17 : 1 ;
332 unsigned conidsts : 1 ; /*!< 16 */
333 unsigned reserved12_15 : 4 ;
334 unsigned devhnpen : 1 ; /*!< 11 */
335 unsigned hstsethnpen : 1 ; /*!< 10 */
336 unsigned hnpreq : 1 ; /*!< 09 */
337 unsigned hstnegscs : 1 ; /*!< 08 */
338 unsigned reserved2_7 : 6 ;
339 unsigned sesreq : 1 ; /*!< 01 */
340 unsigned sesreqscs : 1 ; /*!< 00 */
341 } b;
342 } gotgctl_data_t;
343
344 /*!
345 \brief Bit fields of the Core OTG Interrupt Register (GOTGINT).
346 */
347 typedef union gotgint_data
348 {
349 uint32_t d32;
350 struct
351 {
352 unsigned reserved31_20 : 12;
353 unsigned debdone : 1 ; /*!< 19 Debounce Done */
354 unsigned adevtoutchng : 1 ; /*!< 18 A-Device Timeout Change */
355 unsigned hstnegdet : 1 ; /*!< 17 Host Negotiation Detected */
356 unsigned reserver10_16 : 7 ;
357 unsigned hstnegsucstschng : 1 ; /*!< 09 Host Negotiation Success Status Change */
358 unsigned sesreqsucstschng : 1 ; /*!< 08 Session Request Success Status Change */
359 unsigned reserved3_7 : 5 ;
360 unsigned sesenddet : 1 ; /*!< 02 Session End Detected */
361 unsigned reserved0_1 : 2 ;
362 } b;
363 } gotgint_data_t;
364
365 /*!
366 \brief Bit fields of the Core AHB Configuration Register (GAHBCFG).
367 */
368 typedef union gahbcfg_data
369 {
370 uint32_t d32;
371 struct
372 {
373 unsigned reserved9_31 : 23;
374 unsigned ptxfemplvl : 1 ; /*!< 08 Periodic FIFO empty level trigger condition*/
375 unsigned nptxfemplvl : 1 ; /*!< 07 Non-Periodic FIFO empty level trigger condition*/
376 #define IFXUSB_GAHBCFG_TXFEMPTYLVL_EMPTY 1
377 #define IFXUSB_GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0
378 unsigned reserved : 1 ;
379 unsigned dmaenable : 1 ; /*!< 05 DMA enable*/
380 #define IFXUSB_GAHBCFG_DMAENABLE 1
381 unsigned hburstlen : 4 ; /*!< 01-04 DMA Burst-length*/
382 #define IFXUSB_GAHBCFG_INT_DMA_BURST_SINGLE 0
383 #define IFXUSB_GAHBCFG_INT_DMA_BURST_INCR 1
384 #define IFXUSB_GAHBCFG_INT_DMA_BURST_INCR4 3
385 #define IFXUSB_GAHBCFG_INT_DMA_BURST_INCR8 5
386 #define IFXUSB_GAHBCFG_INT_DMA_BURST_INCR16 7
387 unsigned glblintrmsk : 1 ; /*!< 00 USB Global Interrupt Enable */
388 #define IFXUSB_GAHBCFG_GLBINT_ENABLE 1
389 } b;
390 } gahbcfg_data_t;
391
392 /*!
393 \brief Bit fields of the Core USB Configuration Register (GUSBCFG).
394 */
395 typedef union gusbcfg_data
396 {
397 uint32_t d32;
398 struct
399 {
400 unsigned reserved31 : 1;
401 unsigned ForceDevMode : 1; /*!< 30 Force Device Mode */
402 unsigned ForceHstMode : 1; /*!< 29 Force Host Mode */
403 unsigned TxEndDelay : 1; /*!< 28 Tx End Delay */
404 unsigned reserved2723 : 5;
405 unsigned term_sel_dl_pulse : 1; /*!< 22 TermSel DLine Pulsing Selection */
406 unsigned reserved2117 : 5;
407 unsigned otgutmifssel : 1; /*!< 16 UTMIFS Select */
408 unsigned phylpwrclksel : 1; /*!< 15 PHY Low-Power Clock Select */
409 unsigned reserved14 : 1;
410 unsigned usbtrdtim : 4; /*!< 13-10 USB Turnaround Time */
411 unsigned hnpcap : 1; /*!< 09 HNP-Capable */
412 unsigned srpcap : 1; /*!< 08 SRP-Capable */
413 unsigned reserved07 : 1;
414 unsigned physel : 1; /*!< 06 USB 2.0 High-Speed PHY or
415 USB 1.1 Full-Speed Serial
416 Transceiver Select */
417 unsigned fsintf : 1; /*!< 05 Full-Speed Serial Interface Select */
418 unsigned ulpi_utmi_sel : 1; /*!< 04 ULPI or UTMI+ Select */
419 unsigned phyif : 1; /*!< 03 PHY Interface */
420 unsigned toutcal : 3; /*!< 00-02 HS/FS Timeout Calibration */
421 }b;
422 } gusbcfg_data_t;
423
424 /*!
425 \brief Bit fields of the Core Reset Register (GRSTCTL).
426 */
427 typedef union grstctl_data
428 {
429 uint32_t d32;
430 struct
431 {
432 unsigned ahbidle : 1; /*!< 31 AHB Master Idle. Indicates the AHB Master State
433 Machine is in IDLE condition. */
434 unsigned dmareq : 1; /*!< 30 DMA Request Signal. Indicated DMA request is in
435 probress. Used for debug purpose. */
436 unsigned reserved11_29 :19;
437 unsigned txfnum : 5; /*!< 10-06 TxFIFO Number (TxFNum) to be flushed.
438 0x00: Non Periodic TxFIFO Flush or TxFIFO 0
439 0x01-0x0F: Periodic TxFIFO Flush or TxFIFO n
440 0x10: Flush all TxFIFO
441 */
442 unsigned txfflsh : 1; /*!< 05 TxFIFO Flush */
443 unsigned rxfflsh : 1; /*!< 04 RxFIFO Flush */
444 unsigned intknqflsh : 1; /*!< 03 In Token Sequence Learning Queue Flush (Device Only) */
445 unsigned hstfrm : 1; /*!< 02 Host Frame Counter Reset (Host Only) */
446 unsigned hsftrst : 1; /*!< 01 Hclk Soft Reset */
447
448 unsigned csftrst : 1; /*!< 00 Core Soft Reset
449 The application can flush the control logic in the
450 entire core using this bit. This bit resets the
451 pipelines in the AHB Clock domain as well as the
452 PHY Clock domain.
453 The state machines are reset to an IDLE state, the
454 control bits in the CSRs are cleared, all the
455 transmit FIFOs and the receive FIFO are flushed.
456 The status mask bits that control the generation of
457 the interrupt, are cleared, to clear the
458 interrupt. The interrupt status bits are not
459 cleared, so the application can get the status of
460 any events that occurred in the core after it has
461 set this bit.
462 Any transactions on the AHB are terminated as soon
463 as possible following the protocol. Any
464 transactions on the USB are terminated immediately.
465 The configuration settings in the CSRs are
466 unchanged, so the software doesn't have to
467 reprogram these registers (Device
468 Configuration/Host Configuration/Core System
469 Configuration/Core PHY Configuration).
470 The application can write to this bit, any time it
471 wants to reset the core. This is a self clearing
472 bit and the core clears this bit after all the
473 necessary logic is reset in the core, which may
474 take several clocks, depending on the current state
475 of the core.
476 */
477 }b;
478 } grstctl_t;
479
480 /*!
481 \brief Bit fields of the Core Interrupt Mask Register (GINTMSK) and
482 Core Interrupt Register (GINTSTS).
483 */
484 typedef union gint_data
485 {
486 uint32_t d32;
487 #define IFXUSB_SOF_INTR_MASK 0x0008
488 struct
489 {
490 unsigned wkupintr : 1; /*!< 31 Resume/Remote Wakeup Detected Interrupt */
491 unsigned sessreqintr : 1; /*!< 30 Session Request/New Session Detected Interrupt */
492 unsigned disconnect : 1; /*!< 29 Disconnect Detected Interrupt */
493 unsigned conidstschng : 1; /*!< 28 Connector ID Status Change */
494 unsigned reserved27 : 1;
495 unsigned ptxfempty : 1; /*!< 26 Periodic TxFIFO Empty */
496 unsigned hcintr : 1; /*!< 25 Host Channels Interrupt */
497 unsigned portintr : 1; /*!< 24 Host Port Interrupt */
498 unsigned reserved23 : 1;
499 unsigned fetsuspmsk : 1; /*!< 22 Data Fetch Suspended */
500 unsigned incomplisoout : 1; /*!< 21 Incomplete IsochronousOUT/Period Transfer */
501 unsigned incomplisoin : 1; /*!< 20 Incomplete Isochronous IN Transfer */
502 unsigned outepintr : 1; /*!< 19 OUT Endpoints Interrupt */
503 unsigned inepintr : 1; /*!< 18 IN Endpoints Interrupt */
504 unsigned epmismatch : 1; /*!< 17 Endpoint Mismatch Interrupt */
505 unsigned reserved16 : 1;
506 unsigned eopframe : 1; /*!< 15 End of Periodic Frame Interrupt */
507 unsigned isooutdrop : 1; /*!< 14 Isochronous OUT Packet Dropped Interrupt */
508 unsigned enumdone : 1; /*!< 13 Enumeration Done */
509 unsigned usbreset : 1; /*!< 12 USB Reset */
510 unsigned usbsuspend : 1; /*!< 11 USB Suspend */
511 unsigned erlysuspend : 1; /*!< 10 Early Suspend */
512 unsigned i2cintr : 1; /*!< 09 I2C Interrupt */
513 unsigned reserved8 : 1;
514 unsigned goutnakeff : 1; /*!< 07 Global OUT NAK Effective */
515 unsigned ginnakeff : 1; /*!< 06 Global Non-periodic IN NAK Effective */
516 unsigned nptxfempty : 1; /*!< 05 Non-periodic TxFIFO Empty */
517 unsigned rxstsqlvl : 1; /*!< 04 Receive FIFO Non-Empty */
518 unsigned sofintr : 1; /*!< 03 Start of (u)Frame */
519 unsigned otgintr : 1; /*!< 02 OTG Interrupt */
520 unsigned modemismatch : 1; /*!< 01 Mode Mismatch Interrupt */
521 unsigned reserved0 : 1;
522 } b;
523 } gint_data_t;
524
525 /*!
526 \brief Bit fields in the Receive Status Read and Pop Registers (GRXSTSR, GRXSTSP)
527 */
528 typedef union grxsts_data
529 {
530 uint32_t d32;
531 struct
532 {
533 unsigned reserved : 7;
534 unsigned fn : 4; /*!< 24-21 Frame Number */
535 unsigned pktsts : 4; /*!< 20-17 Packet Status */
536 #define IFXUSB_DSTS_DATA_UPDT 0x2 // OUT Data Packet
537 #define IFXUSB_DSTS_XFER_COMP 0x3 // OUT Data Transfer Complete
538 #define IFXUSB_DSTS_GOUT_NAK 0x1 // Global OUT NAK
539 #define IFXUSB_DSTS_SETUP_COMP 0x4 // Setup Phase Complete
540 #define IFXUSB_DSTS_SETUP_UPDT 0x6 // SETUP Packet
541 unsigned dpid : 2; /*!< 16-15 Data PID */
542 unsigned bcnt :11; /*!< 14-04 Byte Count */
543 unsigned epnum : 4; /*!< 03-00 Endpoint Number */
544 } db;
545 struct
546 {
547 unsigned reserved :11;
548 unsigned pktsts : 4; /*!< 20-17 Packet Status */
549 #define IFXUSB_HSTS_DATA_UPDT 0x2 // OUT Data Packet
550 #define IFXUSB_HSTS_XFER_COMP 0x3 // OUT Data Transfer Complete
551 #define IFXUSB_HSTS_DATA_TOGGLE_ERR 0x5 // DATA TOGGLE Error
552 #define IFXUSB_HSTS_CH_HALTED 0x7 // Channel Halted
553 unsigned dpid : 2; /*!< 16-15 Data PID */
554 unsigned bcnt :11; /*!< 14-04 Byte Count */
555 unsigned chnum : 4; /*!< 03-00 Channel Number */
556 } hb;
557 } grxsts_data_t;
558
559 /*!
560 \brief Bit fields in the FIFO Size Registers (HPTXFSIZ, GNPTXFSIZ, DPTXFSIZn).
561 */
562 typedef union fifosize_data
563 {
564 uint32_t d32;
565 struct
566 {
567 unsigned depth : 16; /*!< 31-16 TxFIFO Depth (in DWord)*/
568 unsigned startaddr : 16; /*!< 15-00 RAM Starting address */
569 } b;
570 } fifosize_data_t;
571
572 /*!
573 \brief Bit fields in the Non-Periodic Transmit FIFO/Queue Status Register (GNPTXSTS).
574 */
575
576 typedef union gnptxsts_data
577 {
578 uint32_t d32;
579 struct
580 {
581 unsigned reserved : 1;
582 unsigned nptxqtop_chnep : 4; /*!< 30-27 Channel/EP Number of top of the Non-Periodic
583 Transmit Request Queue
584 */
585 unsigned nptxqtop_token : 2; /*!< 26-25 Token Type top of the Non-Periodic
586 Transmit Request Queue
587 0 - IN/OUT
588 1 - Zero Length OUT
589 2 - PING/Complete Split
590 3 - Channel Halt
591 */
592 unsigned nptxqtop_terminate : 1; /*!< 24 Terminate (Last entry for the selected
593 channel/EP)*/
594 unsigned nptxqspcavail : 8; /*!< 23-16 Transmit Request Queue Space Available */
595 unsigned nptxfspcavail :16; /*!< 15-00 TxFIFO Space Avail (in DWord)*/
596 }b;
597 } gnptxsts_data_t;
598
599
600 /*!
601 \brief Bit fields in the Transmit FIFO Status Register (DTXFSTS).
602 */
603 typedef union dtxfsts_data
604 {
605 uint32_t d32;
606 struct
607 {
608 unsigned reserved : 16;
609 unsigned txfspcavail : 16; /*!< 15-00 TxFIFO Space Avail (in DWord)*/
610 }b;
611 } dtxfsts_data_t;
612
613
614 /*!
615 \brief Bit fields in the I2C Control Register (I2CCTL).
616 */
617 typedef union gi2cctl_data
618 {
619 uint32_t d32;
620 struct
621 {
622 unsigned bsydne : 1; /*!< 31 I2C Busy/Done*/
623 unsigned rw : 1; /*!< 30 Read/Write Indicator */
624 unsigned reserved : 2;
625 unsigned i2cdevaddr : 2; /*!< 27-26 I2C Device Address */
626 unsigned i2csuspctl : 1; /*!< 25 I2C Suspend Control */
627 unsigned ack : 1; /*!< 24 I2C ACK */
628 unsigned i2cen : 1; /*!< 23 I2C Enable */
629 unsigned addr : 7; /*!< 22-16 I2C Address */
630 unsigned regaddr : 8; /*!< 15-08 I2C Register Addr */
631 unsigned rwdata : 8; /*!< I2C Read/Write Data */
632 } b;
633 } gi2cctl_data_t;
634
635
636 /*!
637 \brief Bit fields in the User HW Config1 Register.
638 */
639 typedef union hwcfg1_data
640 {
641 uint32_t d32;
642 struct
643 {
644 unsigned ep_dir15 : 2; /*!< Direction of each EP
645 0: BIDIR (IN and OUT) endpoint
646 1: IN endpoint
647 2: OUT endpoint
648 3: Reserved
649 */
650 unsigned ep_dir14 : 2;
651 unsigned ep_dir13 : 2;
652 unsigned ep_dir12 : 2;
653 unsigned ep_dir11 : 2;
654 unsigned ep_dir10 : 2;
655 unsigned ep_dir09 : 2;
656 unsigned ep_dir08 : 2;
657 unsigned ep_dir07 : 2;
658 unsigned ep_dir06 : 2;
659 unsigned ep_dir05 : 2;
660 unsigned ep_dir04 : 2;
661 unsigned ep_dir03 : 2;
662 unsigned ep_dir02 : 2;
663 unsigned ep_dir01 : 2;
664 unsigned ep_dir00 : 2;
665 }b;
666 } hwcfg1_data_t;
667
668 /*!
669 \brief Bit fields in the User HW Config2 Register.
670 */
671 typedef union hwcfg2_data
672 {
673 uint32_t d32;
674 struct
675 {
676 unsigned reserved31 : 1;
677 unsigned dev_token_q_depth : 5; /*!< 30-26 Device Mode IN Token Sequence Learning Queue Depth */
678 unsigned host_perio_tx_q_depth : 2; /*!< 25-24 Host Mode Periodic Request Queue Depth */
679 unsigned nonperio_tx_q_depth : 2; /*!< 23-22 Non-periodic Request Queue Depth */
680 unsigned rx_status_q_depth : 2; /*!< 21-20 Multi Processor Interrupt Enabled */
681 unsigned dynamic_fifo : 1; /*!< 19 Dynamic FIFO Sizing Enabled */
682 unsigned perio_ep_supported : 1; /*!< 18 Periodic OUT Channels Supported in Host Mode */
683 unsigned num_host_chan : 4; /*!< 17-14 Number of Host Channels */
684 unsigned num_dev_ep : 4; /*!< 13-10 Number of Device Endpoints */
685 unsigned fs_phy_type : 2; /*!< 09-08 Full-Speed PHY Interface Type */
686 #define IFXUSB_HWCFG2_FS_PHY_TYPE_NOT_SUPPORTED 0
687 #define IFXUSB_HWCFG2_FS_PHY_TYPE_DEDICATE 1
688 #define IFXUSB_HWCFG2_FS_PHY_TYPE_UTMI 2
689 #define IFXUSB_HWCFG2_FS_PHY_TYPE_ULPI 3
690 unsigned hs_phy_type : 2; /*!< 07-06 High-Speed PHY Interface Type */
691 #define IFXUSB_HWCFG2_HS_PHY_TYPE_NOT_SUPPORTED 0
692 #define IFXUSB_HWCFG2_HS_PHY_TYPE_UTMI 1
693 #define IFXUSB_HWCFG2_HS_PHY_TYPE_ULPI 2
694 #define IFXUSB_HWCFG2_HS_PHY_TYPE_UTMI_ULPI 3
695 unsigned point2point : 1; /*!< 05 Point-to-Point */
696 unsigned architecture : 2; /*!< 04-03 Architecture */
697 #define IFXUSB_HWCFG2_ARCH_SLAVE_ONLY 0
698 #define IFXUSB_HWCFG2_ARCH_EXT_DMA 1
699 #define IFXUSB_HWCFG2_ARCH_INT_DMA 2
700 unsigned op_mode : 3; /*!< 02-00 Mode of Operation */
701 #define IFXUSB_HWCFG2_OP_MODE_HNP_SRP_CAPABLE_OTG 0
702 #define IFXUSB_HWCFG2_OP_MODE_SRP_ONLY_CAPABLE_OTG 1
703 #define IFXUSB_HWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE_OTG 2
704 #define IFXUSB_HWCFG2_OP_MODE_SRP_CAPABLE_DEVICE 3
705 #define IFXUSB_HWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE 4
706 #define IFXUSB_HWCFG2_OP_MODE_SRP_CAPABLE_HOST 5
707 #define IFXUSB_HWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST 6
708 } b;
709 } hwcfg2_data_t;
710
711 /*!
712 \brief Bit fields in the User HW Config3 Register.
713 */
714 typedef union hwcfg3_data
715 {
716 uint32_t d32;
717 struct
718 {
719 unsigned dfifo_depth :16; /*!< 31-16 DFIFO Depth */
720 unsigned reserved15_12 : 4;
721 unsigned synch_reset_type : 1; /*!< 11 Reset Style for Clocked always Blocks in RTL */
722 unsigned optional_features : 1; /*!< 10 Optional Features Removed */
723 unsigned vendor_ctrl_if : 1; /*!< 09 Vendor Control Interface Support */
724 unsigned i2c : 1; /*!< 08 I2C Selection */
725 unsigned otg_func : 1; /*!< 07 OTG Function Enabled */
726 unsigned packet_size_cntr_width : 3; /*!< 06-04 Width of Packet Size Counters */
727 unsigned xfer_size_cntr_width : 4; /*!< 03-00 Width of Transfer Size Counters */
728 } b;
729 } hwcfg3_data_t;
730
731 /*!
732 \brief Bit fields in the User HW Config4
733 * Register. Read the register into the <i>d32</i> element then read
734 * out the bits using the <i>b</i>it elements.
735 */
736 typedef union hwcfg4_data
737 {
738 uint32_t d32;
739 struct
740 {
741 unsigned desc_dma_dyn : 1; /*!< 31 Scatter/Gather DMA */
742 unsigned desc_dma : 1; /*!< 30 Scatter/Gather DMA configuration */
743 unsigned num_in_eps : 4; /*!< 29-26 Number of Device Mode IN Endpoints Including Control Endpoints */
744 unsigned ded_fifo_en : 1; /*!< 25 Enable Dedicated Transmit FIFO for device IN Endpoints */
745 unsigned session_end_filt_en : 1; /*!< 24 session_end Filter Enabled */
746 unsigned b_valid_filt_en : 1; /*!< 23 b_valid Filter Enabled */
747 unsigned a_valid_filt_en : 1; /*!< 22 a_valid Filter Enabled */
748 unsigned vbus_valid_filt_en : 1; /*!< 21 vbus_valid Filter Enabled */
749 unsigned iddig_filt_en : 1; /*!< 20 iddig Filter Enable */
750 unsigned num_dev_mode_ctrl_ep : 4; /*!< 19-16 Number of Device Mode Control Endpoints in Addition to Endpoint 0 */
751 unsigned utmi_phy_data_width : 2; /*!< 15-14 UTMI+ PHY/ULPI-to-Internal UTMI+ Wrapper Data Width */
752 unsigned reserved13_06 : 8;
753 unsigned min_ahb_freq : 1; /*!< 05 Minimum AHB Frequency Less Than 60 MHz */
754 unsigned power_optimiz : 1; /*!< 04 Enable Power Optimization? */
755 unsigned num_dev_perio_in_ep : 4; /*!< 03-00 Number of Device Mode Periodic IN Endpoints */
756 } b;
757 } hwcfg4_data_t;
758
759 /*@}*//*IFXUSB_CSR_CORE_GLOBAL_REG*/
760
761 /****************************************************************************/
762 /*!
763 \addtogroup IFXUSB_CSR_DEVICE_GLOBAL_REG
764 */
765 /*@{*/
766
767 /*! typedef ifxusb_dev_global_regs_t
768 \brief IFXUSB Device Mode Global registers. Offsets 800h-BFFh
769 The ifxusb_dev_global_regs structure defines the size
770 and relative field offsets for the Device Global registers.
771 These registers are visible only in Device mode and must not be
772 accessed in Host mode, as the results are unknown.
773 */
774 typedef struct ifxusb_dev_global_regs
775 {
776 volatile uint32_t dcfg; /*!< 800h Device Configuration Register. */
777 volatile uint32_t dctl; /*!< 804h Device Control Register. */
778 volatile uint32_t dsts; /*!< 808h Device Status Register (Read Only). */
779 uint32_t unused;
780 volatile uint32_t diepmsk; /*!< 810h Device IN Endpoint Common Interrupt Mask Register. */
781 volatile uint32_t doepmsk; /*!< 814h Device OUT Endpoint Common Interrupt Mask Register. */
782 volatile uint32_t daint; /*!< 818h Device All Endpoints Interrupt Register. */
783 volatile uint32_t daintmsk; /*!< 81Ch Device All Endpoints Interrupt Mask Register. */
784 volatile uint32_t dtknqr1; /*!< 820h Device IN Token Queue Read Register-1 (Read Only). */
785 volatile uint32_t dtknqr2; /*!< 824h Device IN Token Queue Read Register-2 (Read Only). */
786 volatile uint32_t dvbusdis; /*!< 828h Device VBUS discharge Register.*/
787 volatile uint32_t dvbuspulse; /*!< 82Ch Device VBUS Pulse Register. */
788 volatile uint32_t dtknqr3_dthrctl; /*!< 830h Device IN Token Queue Read Register-3 (Read Only).
789 Device Thresholding control register (Read/Write)
790 */
791 volatile uint32_t dtknqr4_fifoemptymsk; /*!< 834h Device IN Token Queue Read Register-4 (Read Only).
792 Device IN EPs empty Inr. Mask Register (Read/Write)
793 */
794 } ifxusb_device_global_regs_t;
795
796 /*!
797 \brief Bit fields in the Device Configuration Register.
798 */
799
800 typedef union dcfg_data
801 {
802 uint32_t d32;
803 struct
804 {
805 unsigned reserved31_26 : 6;
806 unsigned perschintvl : 2; /*!< 25-24 Periodic Scheduling Interval */
807 unsigned descdma : 1; /*!< 23 Enable Descriptor DMA in Device mode */
808 unsigned epmscnt : 5; /*!< 22-18 In Endpoint Mis-match count */
809 unsigned reserved13_17 : 5;
810 unsigned perfrint : 2; /*!< 12-11 Periodic Frame Interval */
811 #define IFXUSB_DCFG_FRAME_INTERVAL_80 0
812 #define IFXUSB_DCFG_FRAME_INTERVAL_85 1
813 #define IFXUSB_DCFG_FRAME_INTERVAL_90 2
814 #define IFXUSB_DCFG_FRAME_INTERVAL_95 3
815 unsigned devaddr : 7; /*!< 10-04 Device Addresses */
816 unsigned reserved3 : 1;
817 unsigned nzstsouthshk : 1; /*!< 02 Non Zero Length Status OUT Handshake */
818 #define IFXUSB_DCFG_SEND_STALL 1
819 unsigned devspd : 2; /*!< 01-00 Device Speed */
820 } b;
821 } dcfg_data_t;
822
823 /*!
824 \brief Bit fields in the Device Control Register.
825 */
826 typedef union dctl_data
827 {
828 uint32_t d32;
829 struct
830 {
831 unsigned reserved16_31 :16;
832 unsigned ifrmnum : 1; /*!< 15 Ignore Frame Number for ISOC EPs */
833 unsigned gmc : 2; /*!< 14-13 Global Multi Count */
834 unsigned gcontbna : 1; /*!< 12 Global Continue on BNA */
835 unsigned pwronprgdone : 1; /*!< 11 Power-On Programming Done */
836 unsigned cgoutnak : 1; /*!< 10 Clear Global OUT NAK */
837 unsigned sgoutnak : 1; /*!< 09 Set Global OUT NAK */
838 unsigned cgnpinnak : 1; /*!< 08 Clear Global Non-Periodic IN NAK */
839 unsigned sgnpinnak : 1; /*!< 07 Set Global Non-Periodic IN NAK */
840 unsigned tstctl : 3; /*!< 06-04 Test Control */
841 unsigned goutnaksts : 1; /*!< 03 Global OUT NAK Status */
842 unsigned gnpinnaksts : 1; /*!< 02 Global Non-Periodic IN NAK Status */
843 unsigned sftdiscon : 1; /*!< 01 Soft Disconnect */
844 unsigned rmtwkupsig : 1; /*!< 00 Remote Wakeup */
845 } b;
846 } dctl_data_t;
847
848
849 /*!
850 \brief Bit fields in the Device Status Register.
851 */
852 typedef union dsts_data
853 {
854 uint32_t d32;
855 struct
856 {
857 unsigned reserved22_31 :10;
858 unsigned soffn :14; /*!< 21-08 Frame or Microframe Number of the received SOF */
859 unsigned reserved4_7 : 4;
860 unsigned errticerr : 1; /*!< 03 Erratic Error */
861 unsigned enumspd : 2; /*!< 02-01 Enumerated Speed */
862 #define IFXUSB_DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0
863 #define IFXUSB_DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1
864 #define IFXUSB_DSTS_ENUMSPD_LS_PHY_6MHZ 2
865 #define IFXUSB_DSTS_ENUMSPD_FS_PHY_48MHZ 3
866 unsigned suspsts : 1; /*!< 00 Suspend Status */
867 } b;
868 } dsts_data_t;
869
870 /*!
871 \brief Bit fields in the Device IN EP Interrupt Register
872 and the Device IN EP Common Mask Register.
873 */
874 typedef union diepint_data
875 {
876 uint32_t d32;
877 struct
878 {
879 unsigned reserved14_31 :18;
880 unsigned nakmsk : 1; /*!< 13 NAK interrupt Mask */
881 unsigned reserved10_12 : 3;
882 unsigned bna : 1; /*!< 09 BNA Interrupt mask */
883 unsigned txfifoundrn : 1; /*!< 08 Fifo Underrun Mask */
884 unsigned emptyintr : 1; /*!< 07 IN Endpoint HAK Effective mask */
885 unsigned inepnakeff : 1; /*!< 06 IN Endpoint HAK Effective mask */
886 unsigned intknepmis : 1; /*!< 05 IN Token Received with EP mismatch mask */
887 unsigned intktxfemp : 1; /*!< 04 IN Token received with TxF Empty mask */
888 unsigned timeout : 1; /*!< 03 TimeOUT Handshake mask (non-ISOC EPs) */
889 unsigned ahberr : 1; /*!< 02 AHB Error mask */
890 unsigned epdisabled : 1; /*!< 01 Endpoint disable mask */
891 unsigned xfercompl : 1; /*!< 00 Transfer complete mask */
892 } b;
893 } diepint_data_t;
894
895
896 /*!
897 \brief Bit fields in the Device OUT EP Interrupt Register and
898 Device OUT EP Common Interrupt Mask Register.
899 */
900 typedef union doepint_data
901 {
902 uint32_t d32;
903 struct
904 {
905 unsigned reserved15_31 :17;
906 unsigned nyetmsk : 1; /*!< 14 NYET Interrupt */
907 unsigned nakmsk : 1; /*!< 13 NAK Interrupt */
908 unsigned bbleerrmsk : 1; /*!< 12 Babble Interrupt */
909 unsigned reserved10_11 : 2;
910 unsigned bna : 1; /*!< 09 BNA Interrupt */
911 unsigned outpkterr : 1; /*!< 08 OUT packet Error */
912 unsigned reserved07 : 1;
913 unsigned back2backsetup : 1; /*!< 06 Back-to-Back SETUP Packets Received */
914 unsigned stsphsercvd : 1; /*!< 05 */
915 unsigned outtknepdis : 1; /*!< 04 OUT Token Received when Endpoint Disabled */
916 unsigned setup : 1; /*!< 03 Setup Phase Done (contorl EPs) */
917 unsigned ahberr : 1; /*!< 02 AHB Error */
918 unsigned epdisabled : 1; /*!< 01 Endpoint disable */
919 unsigned xfercompl : 1; /*!< 00 Transfer complete */
920 } b;
921 } doepint_data_t;
922
923
924 /*!
925 \brief Bit fields in the Device All EP Interrupt Registers.
926 */
927 typedef union daint_data
928 {
929 uint32_t d32;
930 struct
931 {
932 unsigned out : 16; /*!< 31-16 OUT Endpoint bits */
933 unsigned in : 16; /*!< 15-00 IN Endpoint bits */
934 } eps;
935 struct
936 {
937 /** OUT Endpoint bits */
938 unsigned outep15 : 1;
939 unsigned outep14 : 1;
940 unsigned outep13 : 1;
941 unsigned outep12 : 1;
942 unsigned outep11 : 1;
943 unsigned outep10 : 1;
944 unsigned outep09 : 1;
945 unsigned outep08 : 1;
946 unsigned outep07 : 1;
947 unsigned outep06 : 1;
948 unsigned outep05 : 1;
949 unsigned outep04 : 1;
950 unsigned outep03 : 1;
951 unsigned outep02 : 1;
952 unsigned outep01 : 1;
953 unsigned outep00 : 1;
954 /** IN Endpoint bits */
955 unsigned inep15 : 1;
956 unsigned inep14 : 1;
957 unsigned inep13 : 1;
958 unsigned inep12 : 1;
959 unsigned inep11 : 1;
960 unsigned inep10 : 1;
961 unsigned inep09 : 1;
962 unsigned inep08 : 1;
963 unsigned inep07 : 1;
964 unsigned inep06 : 1;
965 unsigned inep05 : 1;
966 unsigned inep04 : 1;
967 unsigned inep03 : 1;
968 unsigned inep02 : 1;
969 unsigned inep01 : 1;
970 unsigned inep00 : 1;
971 } ep;
972 } daint_data_t;
973
974
975 /*!
976 \brief Bit fields in the Device IN Token Queue Read Registers.
977 */
978 typedef union dtknq1_data
979 {
980 uint32_t d32;
981 struct
982 {
983 unsigned epnums0_5 :24; /*!< 31-08 EP Numbers of IN Tokens 0 ... 4 */
984 unsigned wrap_bit : 1; /*!< 07 write pointer has wrapped */
985 unsigned reserved05_06 : 2;
986 unsigned intknwptr : 5; /*!< 04-00 In Token Queue Write Pointer */
987 }b;
988 } dtknq1_data_t;
989
990
991 /*!
992 \brief Bit fields in Threshold control Register
993 */
994 typedef union dthrctl_data
995 {
996 uint32_t d32;
997 struct
998 {
999 unsigned reserved26_31 : 6;
1000 unsigned rx_thr_len : 9; /*!< 25-17 Rx Thr. Length */
1001 unsigned rx_thr_en : 1; /*!< 16 Rx Thr. Enable */
1002 unsigned reserved11_15 : 5;
1003 unsigned tx_thr_len : 9; /*!< 10-02 Tx Thr. Length */
1004 unsigned iso_thr_en : 1; /*!< 01 ISO Tx Thr. Enable */
1005 unsigned non_iso_thr_en : 1; /*!< 00 non ISO Tx Thr. Enable */
1006 } b;
1007 } dthrctl_data_t;
1008
1009 /*@}*//*IFXUSB_CSR_DEVICE_GLOBAL_REG*/
1010
1011 /****************************************************************************/
1012
1013 /*!
1014 \addtogroup IFXUSB_CSR_DEVICE_EP_REG
1015 */
1016 /*@{*/
1017
1018 /*! typedef ifxusb_dev_in_ep_regs_t
1019 \brief Device Logical IN Endpoint-Specific Registers.
1020 There will be one set of endpoint registers per logical endpoint
1021 implemented.
1022 each EP's IN EP Register are offset at :
1023 900h + * (ep_num * 20h)
1024 */
1025
1026 typedef struct ifxusb_dev_in_ep_regs
1027 {
1028 volatile uint32_t diepctl; /*!< 00h: Endpoint Control Register */
1029 uint32_t reserved04; /*!< 04h: */
1030 volatile uint32_t diepint; /*!< 08h: Endpoint Interrupt Register */
1031 uint32_t reserved0C; /*!< 0Ch: */
1032 volatile uint32_t dieptsiz; /*!< 10h: Endpoint Transfer Size Register.*/
1033 volatile uint32_t diepdma; /*!< 14h: Endpoint DMA Address Register. */
1034 volatile uint32_t dtxfsts; /*!< 18h: Endpoint Transmit FIFO Status Register. */
1035 volatile uint32_t diepdmab; /*!< 1Ch: Endpoint DMA Buffer Register. */
1036 } ifxusb_dev_in_ep_regs_t;
1037
1038 /*! typedef ifxusb_dev_out_ep_regs_t
1039 \brief Device Logical OUT Endpoint-Specific Registers.
1040 There will be one set of endpoint registers per logical endpoint
1041 implemented.
1042 each EP's OUT EP Register are offset at :
1043 B00h + * (ep_num * 20h) + 00h
1044 */
1045 typedef struct ifxusb_dev_out_ep_regs
1046 {
1047 volatile uint32_t doepctl; /*!< 00h: Endpoint Control Register */
1048 volatile uint32_t doepfn; /*!< 04h: Endpoint Frame number Register */
1049 volatile uint32_t doepint; /*!< 08h: Endpoint Interrupt Register */
1050 uint32_t reserved0C; /*!< 0Ch: */
1051 volatile uint32_t doeptsiz; /*!< 10h: Endpoint Transfer Size Register.*/
1052 volatile uint32_t doepdma; /*!< 14h: Endpoint DMA Address Register. */
1053 uint32_t reserved18; /*!< 18h: */
1054 volatile uint32_t doepdmab; /*!< 1Ch: Endpoint DMA Buffer Register. */
1055 } ifxusb_dev_out_ep_regs_t;
1056
1057
1058 /*!
1059 \brief Bit fields in the Device EP Control
1060 Register.
1061 */
1062 typedef union depctl_data
1063 {
1064 uint32_t d32;
1065 struct
1066 {
1067 unsigned epena : 1; /*!< 31 Endpoint Enable */
1068 unsigned epdis : 1; /*!< 30 Endpoint Disable */
1069 unsigned setd1pid : 1; /*!< 29 Set DATA1 PID (INTR/Bulk IN and OUT endpoints) */
1070 unsigned setd0pid : 1; /*!< 28 Set DATA0 PID (INTR/Bulk IN and OUT endpoints) */
1071 unsigned snak : 1; /*!< 27 Set NAK */
1072 unsigned cnak : 1; /*!< 26 Clear NAK */
1073 unsigned txfnum : 4; /*!< 25-22 Tx Fifo Number */
1074 unsigned stall : 1; /*!< 21 Stall Handshake */
1075 unsigned snp : 1; /*!< 20 Snoop Mode */
1076 unsigned eptype : 2; /*!< 19-18 Endpoint Type
1077 0: Control
1078 1: Isochronous
1079 2: Bulk
1080 3: Interrupt
1081 */
1082 unsigned naksts : 1; /*!< 17 NAK Status */
1083 unsigned dpid : 1; /*!< 16 Endpoint DPID (INTR/Bulk IN and OUT endpoints) */
1084 unsigned usbactep : 1; /*!< 15 USB Active Endpoint */
1085 unsigned nextep : 4; /*!< 14-11 Next Endpoint */
1086 unsigned mps :11; /*!< 10-00 Maximum Packet Size */
1087 #define IFXUSB_DEP0CTL_MPS_64 0
1088 #define IFXUSB_DEP0CTL_MPS_32 1
1089 #define IFXUSB_DEP0CTL_MPS_16 2
1090 #define IFXUSB_DEP0CTL_MPS_8 3
1091 } b;
1092 } depctl_data_t;
1093
1094
1095 /*!
1096 \brief Bit fields in the Device EP Transfer Size Register. (EP0 and EPn)
1097 */
1098 typedef union deptsiz_data
1099 {
1100 uint32_t d32;
1101 struct
1102 {
1103 unsigned reserved31 : 1;
1104 unsigned supcnt : 2; /*!< 30-29 Setup Packet Count */
1105 #ifdef __DED_FIFO__
1106 unsigned reserved21_28 : 8;
1107 unsigned pktcnt : 2; /*!< 19-20 Packet Count */
1108 #else
1109 unsigned reserved20_28 : 9;
1110 unsigned pktcnt : 1; /*!< 19 Packet Count */
1111 #endif
1112 unsigned reserved7_18 :12;
1113 unsigned xfersize : 7; /*!< 06-00 Transfer size */
1114 }b0;
1115 struct
1116 {
1117 unsigned reserved : 1;
1118 unsigned mc : 2; /*!< 30-29 Multi Count */
1119 unsigned pktcnt :10; /*!< 28-19 Packet Count */
1120 unsigned xfersize :19; /*!< 18-00 Transfer size */
1121 } b;
1122 } deptsiz_data_t;
1123
1124 /*@}*//*IFXUSB_CSR_DEVICE_EP_REG*/
1125 /****************************************************************************/
1126
1127 /*!
1128 \addtogroup IFXUSB_CSR_DEVICE_DMA_DESC
1129 */
1130 /*@{*/
1131 /*!
1132 \brief Bit fields in the DMA Descriptor status quadlet.
1133 */
1134 typedef union desc_sts_data
1135 {
1136 struct
1137 {
1138 unsigned bs : 2; /*!< 31-30 Buffer Status */
1139 #define BS_HOST_READY 0x0
1140 #define BS_DMA_BUSY 0x1
1141 #define BS_DMA_DONE 0x2
1142 #define BS_HOST_BUSY 0x3
1143 unsigned sts : 2; /*!< 29-28 Receive/Trasmit Status */
1144 #define RTS_SUCCESS 0x0
1145 #define RTS_BUFFLUSH 0x1
1146 #define RTS_RESERVED 0x2
1147 #define RTS_BUFERR 0x3
1148 unsigned l : 1; /*!< 27 Last */
1149 unsigned sp : 1; /*!< 26 Short Packet */
1150 unsigned ioc : 1; /*!< 25 Interrupt On Complete */
1151 unsigned sr : 1; /*!< 24 Setup Packet received */
1152 unsigned mtrf : 1; /*!< 23 Multiple Transfer */
1153 unsigned reserved16_22 : 7;
1154 unsigned bytes :16; /*!< 15-00 Transfer size in bytes */
1155 } b;
1156 uint32_t d32; /*!< DMA Descriptor data buffer pointer */
1157 } desc_sts_data_t;
1158
1159 /*@}*//*IFXUSB_CSR_DEVICE_DMA_DESC*/
1160 /****************************************************************************/
1161
1162 /*!
1163 \addtogroup IFXUSB_CSR_HOST_GLOBAL_REG
1164 */
1165 /*@{*/
1166 /*! typedef ifxusb_host_global_regs_t
1167 \brief IFXUSB Host Mode Global registers. Offsets 400h-7FFh
1168 The ifxusb_host_global_regs structure defines the size
1169 and relative field offsets for the Host Global registers.
1170 These registers are visible only in Host mode and must not be
1171 accessed in Device mode, as the results are unknown.
1172 */
1173 typedef struct ifxusb_host_global_regs
1174 {
1175 volatile uint32_t hcfg; /*!< 400h Host Configuration Register. */
1176 volatile uint32_t hfir; /*!< 404h Host Frame Interval Register. */
1177 volatile uint32_t hfnum; /*!< 408h Host Frame Number / Frame Remaining Register. */
1178 uint32_t reserved40C;
1179 volatile uint32_t hptxsts; /*!< 410h Host Periodic Transmit FIFO/ Queue Status Register. */
1180 volatile uint32_t haint; /*!< 414h Host All Channels Interrupt Register. */
1181 volatile uint32_t haintmsk; /*!< 418h Host All Channels Interrupt Mask Register. */
1182 } ifxusb_host_global_regs_t;
1183
1184 /*!
1185 \brief Bit fields in the Host Configuration Register.
1186 */
1187 typedef union hcfg_data
1188 {
1189 uint32_t d32;
1190 struct
1191 {
1192 unsigned reserved31_03 :29;
1193 unsigned fslssupp : 1; /*!< 02 FS/LS Only Support */
1194 unsigned fslspclksel : 2; /*!< 01-00 FS/LS Phy Clock Select */
1195 #define IFXUSB_HCFG_30_60_MHZ 0
1196 #define IFXUSB_HCFG_48_MHZ 1
1197 #define IFXUSB_HCFG_6_MHZ 2
1198 } b;
1199 } hcfg_data_t;
1200
1201 /*!
1202 \brief Bit fields in the Host Frame Interval Register.
1203 */
1204 typedef union hfir_data
1205 {
1206 uint32_t d32;
1207 struct
1208 {
1209 unsigned reserved : 16;
1210 unsigned frint : 16; /*!< 15-00 Frame Interval */
1211 } b;
1212 } hfir_data_t;
1213
1214 /*!
1215 \brief Bit fields in the Host Frame Time Remaing/Number Register.
1216 */
1217 typedef union hfnum_data
1218 {
1219 uint32_t d32;
1220 struct
1221 {
1222 unsigned frrem : 16; /*!< 31-16 Frame Time Remaining */
1223 unsigned frnum : 16; /*!< 15-00 Frame Number*/
1224 #define IFXUSB_HFNUM_MAX_FRNUM 0x3FFF
1225 } b;
1226 } hfnum_data_t;
1227
1228 /*!
1229 \brief Bit fields in the Host Periodic Transmit FIFO/Queue Status Register
1230 */
1231 typedef union hptxsts_data
1232 {
1233 /** raw register data */
1234 uint32_t d32;
1235 struct
1236 {
1237 /** Top of the Periodic Transmit Request Queue
1238 * - bit 24 - Terminate (last entry for the selected channel)
1239 */
1240 unsigned ptxqtop_odd : 1; /*!< 31 Top of the Periodic Transmit Request
1241 Queue Odd/even microframe*/
1242 unsigned ptxqtop_chnum : 4; /*!< 30-27 Top of the Periodic Transmit Request
1243 Channel Number */
1244 unsigned ptxqtop_token : 2; /*!< 26-25 Top of the Periodic Transmit Request
1245 Token Type
1246 0 - Zero length
1247 1 - Ping
1248 2 - Disable
1249 */
1250 unsigned ptxqtop_terminate : 1; /*!< 24 Top of the Periodic Transmit Request
1251 Terminate (last entry for the selected channel)*/
1252 unsigned ptxqspcavail : 8; /*!< 23-16 Periodic Transmit Request Queue Space Available */
1253 unsigned ptxfspcavail :16; /*!< 15-00 Periodic Transmit Data FIFO Space Available */
1254 } b;
1255 } hptxsts_data_t;
1256
1257 /*!
1258 \brief Bit fields in the Host Port Control and Status Register.
1259 */
1260 typedef union hprt0_data
1261 {
1262 uint32_t d32;
1263 struct
1264 {
1265 unsigned reserved19_31 :13;
1266 unsigned prtspd : 2; /*!< 18-17 Port Speed */
1267 #define IFXUSB_HPRT0_PRTSPD_HIGH_SPEED 0
1268 #define IFXUSB_HPRT0_PRTSPD_FULL_SPEED 1
1269 #define IFXUSB_HPRT0_PRTSPD_LOW_SPEED 2
1270 unsigned prttstctl : 4; /*!< 16-13 Port Test Control */
1271 unsigned prtpwr : 1; /*!< 12 Port Power */
1272 unsigned prtlnsts : 2; /*!< 11-10 Port Line Status */
1273 unsigned reserved9 : 1;
1274 unsigned prtrst : 1; /*!< 08 Port Reset */
1275 unsigned prtsusp : 1; /*!< 07 Port Suspend */
1276 unsigned prtres : 1; /*!< 06 Port Resume */
1277 unsigned prtovrcurrchng : 1; /*!< 05 Port Overcurrent Change */
1278 unsigned prtovrcurract : 1; /*!< 04 Port Overcurrent Active */
1279 unsigned prtenchng : 1; /*!< 03 Port Enable/Disable Change */
1280 unsigned prtena : 1; /*!< 02 Port Enable */
1281 unsigned prtconndet : 1; /*!< 01 Port Connect Detected */
1282 unsigned prtconnsts : 1; /*!< 00 Port Connect Status */
1283 }b;
1284 } hprt0_data_t;
1285
1286 /*!
1287 \brief Bit fields in the Host All Interrupt Register.
1288 */
1289 typedef union haint_data
1290 {
1291 uint32_t d32;
1292 struct
1293 {
1294 unsigned reserved : 16;
1295 unsigned ch15 : 1;
1296 unsigned ch14 : 1;
1297 unsigned ch13 : 1;
1298 unsigned ch12 : 1;
1299 unsigned ch11 : 1;
1300 unsigned ch10 : 1;
1301 unsigned ch09 : 1;
1302 unsigned ch08 : 1;
1303 unsigned ch07 : 1;
1304 unsigned ch06 : 1;
1305 unsigned ch05 : 1;
1306 unsigned ch04 : 1;
1307 unsigned ch03 : 1;
1308 unsigned ch02 : 1;
1309 unsigned ch01 : 1;
1310 unsigned ch00 : 1;
1311 } b;
1312 struct
1313 {
1314 unsigned reserved : 16;
1315 unsigned chint : 16;
1316 } b2;
1317 } haint_data_t;
1318 /*@}*//*IFXUSB_CSR_HOST_GLOBAL_REG*/
1319 /****************************************************************************/
1320 /*!
1321 \addtogroup IFXUSB_CSR_HOST_HC_REG
1322 */
1323 /*@{*/
1324 /*! typedef ifxusb_hc_regs_t
1325 \brief Host Channel Specific Registers
1326 There will be one set of hc registers per host channelimplemented.
1327 each HC's Register are offset at :
1328 500h + * (hc_num * 20h)
1329 */
1330 typedef struct ifxusb_hc_regs
1331 {
1332 volatile uint32_t hcchar; /*!< 00h Host Channel Characteristic Register.*/
1333 volatile uint32_t hcsplt; /*!< 04h Host Channel Split Control Register.*/
1334 volatile uint32_t hcint; /*!< 08h Host Channel Interrupt Register. */
1335 volatile uint32_t hcintmsk; /*!< 0Ch Host Channel Interrupt Mask Register. */
1336 volatile uint32_t hctsiz; /*!< 10h Host Channel Transfer Size Register. */
1337 volatile uint32_t hcdma; /*!< 14h Host Channel DMA Address Register. */
1338 uint32_t reserved[2]; /*!< 18h Reserved. */
1339 } ifxusb_hc_regs_t;
1340
1341
1342 /*!
1343 \brief Bit fields in the Host Channel Characteristics Register.
1344 */
1345 typedef union hcchar_data
1346 {
1347 uint32_t d32;
1348 struct
1349 {
1350 unsigned chen : 1; /*!< 31 Channel enable */
1351 unsigned chdis : 1; /*!< 30 Channel disable */
1352 unsigned oddfrm : 1; /*!< 29 Frame to transmit periodic transaction */
1353 unsigned devaddr : 7; /*!< 28-22 Device address */
1354 unsigned multicnt : 2; /*!< 21-20 Packets per frame for periodic transfers */
1355 unsigned eptype : 2; /*!< 19-18 0: Control, 1: Isoc, 2: Bulk, 3: Intr */
1356 unsigned lspddev : 1; /*!< 17 0: Full/high speed device, 1: Low speed device */
1357 unsigned reserved : 1;
1358 unsigned epdir : 1; /*!< 15 0: OUT, 1: IN */
1359 unsigned epnum : 4; /*!< 14-11 Endpoint number */
1360 unsigned mps :11; /*!< 10-00 Maximum packet size in bytes */
1361 } b;
1362 } hcchar_data_t;
1363
1364 /*!
1365 \brief Bit fields in the Host Channel Split Control Register
1366 */
1367 typedef union hcsplt_data
1368 {
1369 uint32_t d32;
1370 struct
1371 {
1372 unsigned spltena : 1; /*!< 31 Split Enble */
1373 unsigned reserved :14;
1374 unsigned compsplt : 1; /*!< 16 Do Complete Split */
1375 unsigned xactpos : 2; /*!< 15-14 Transaction Position */
1376 #define IFXUSB_HCSPLIT_XACTPOS_MID 0
1377 #define IFXUSB_HCSPLIT_XACTPOS_END 1
1378 #define IFXUSB_HCSPLIT_XACTPOS_BEGIN 2
1379 #define IFXUSB_HCSPLIT_XACTPOS_ALL 3
1380 unsigned hubaddr : 7; /*!< 13-07 Hub Address */
1381 unsigned prtaddr : 7; /*!< 06-00 Port Address */
1382 } b;
1383 } hcsplt_data_t;
1384
1385 /*!
1386 \brief Bit fields in the Host Interrupt Register.
1387 */
1388 typedef union hcint_data
1389 {
1390 uint32_t d32;
1391 struct
1392 {
1393 unsigned reserved :21;
1394 unsigned datatglerr : 1; /*!< 10 Data Toggle Error */
1395 unsigned frmovrun : 1; /*!< 09 Frame Overrun */
1396 unsigned bblerr : 1; /*!< 08 Babble Error */
1397 unsigned xacterr : 1; /*!< 07 Transaction Err */
1398 unsigned nyet : 1; /*!< 06 NYET Response Received */
1399 unsigned ack : 1; /*!< 05 ACK Response Received */
1400 unsigned nak : 1; /*!< 04 NAK Response Received */
1401 unsigned stall : 1; /*!< 03 STALL Response Received */
1402 unsigned ahberr : 1; /*!< 02 AHB Error */
1403 unsigned chhltd : 1; /*!< 01 Channel Halted */
1404 unsigned xfercomp : 1; /*!< 00 Channel Halted */
1405 }b;
1406 } hcint_data_t;
1407
1408
1409 /*!
1410 \brief Bit fields in the Host Channel Transfer Size
1411 Register.
1412 */
1413 typedef union hctsiz_data
1414 {
1415 uint32_t d32;
1416 struct
1417 {
1418 /** */
1419 unsigned dopng : 1; /*!< 31 Do PING protocol when 1 */
1420 /**
1421 * Packet ID for next data packet
1422 * 0: DATA0
1423 * 1: DATA2
1424 * 2: DATA1
1425 * 3: MDATA (non-Control), SETUP (Control)
1426 */
1427 unsigned pid : 2; /*!< 30-29 Packet ID for next data packet
1428 0: DATA0
1429 1: DATA2
1430 2: DATA1
1431 3: MDATA (non-Control), SETUP (Control)
1432 */
1433 #define IFXUSB_HCTSIZ_DATA0 0
1434 #define IFXUSB_HCTSIZ_DATA1 2
1435 #define IFXUSB_HCTSIZ_DATA2 1
1436 #define IFXUSB_HCTSIZ_MDATA 3
1437 #define IFXUSB_HCTSIZ_SETUP 3
1438 unsigned pktcnt :10; /*!< 28-19 Data packets to transfer */
1439 unsigned xfersize :19; /*!< 18-00 Total transfer size in bytes */
1440 }b;
1441 } hctsiz_data_t;
1442
1443 /*@}*//*IFXUSB_CSR_HOST_HC_REG*/
1444
1445 /****************************************************************************/
1446
1447 /*!
1448 \addtogroup IFXUSB_CSR_PWR_CLK_GATING_REG
1449 */
1450 /*@{*/
1451 /*!
1452 \brief Bit fields in the Power and Clock Gating Control Register
1453 */
1454 typedef union pcgcctl_data
1455 {
1456 uint32_t d32;
1457 struct
1458 {
1459 unsigned reserved : 27;
1460 unsigned physuspended : 1; /*!< 04 PHY Suspended */
1461 unsigned rstpdwnmodule : 1; /*!< 03 Reset Power Down Modules */
1462 unsigned pwrclmp : 1; /*!< 02 Power Clamp */
1463 unsigned gatehclk : 1; /*!< 01 Gate Hclk */
1464 unsigned stoppclk : 1; /*!< 00 Stop Pclk */
1465 } b;
1466 } pcgcctl_data_t;
1467 /*@}*//*IFXUSB_CSR_PWR_CLK_GATING_REG*/
1468
1469 /****************************************************************************/
1470
1471 #endif //__IFXUSB_REGS_H__