Root/package/platform/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 */
220static __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 */
239static __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 */
257static __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 */
288typedef 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 */
323typedef 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 */
347typedef 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 */
368typedef 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*/
395typedef 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 */
427typedef 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 */
484typedef 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 */
528typedef 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 */
562typedef 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
576typedef 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 */
603typedef 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 */
617typedef 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 */
639typedef 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 */
671typedef 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 */
714typedef 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 */
736typedef 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 */
774typedef 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
800typedef 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 */
826typedef 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 */
852typedef 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 */
874typedef 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  */
900typedef 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 */
927typedef 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 */
978typedef 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 */
994typedef 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
1026typedef 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 */
1045typedef 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 */
1062typedef 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 */
1098typedef 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 */
1134typedef 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 */
1173typedef 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 */
1187typedef 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 */
1204typedef 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 */
1217typedef 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 */
1231typedef 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 */
1260typedef 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 */
1289typedef 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 */
1330typedef 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 */
1345typedef 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 */
1367typedef 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 */
1388typedef 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 */
1413typedef 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 */
1454typedef 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__
1472

Archive Download this file



interactive