1 /* ==========================================================================
2 * $File: //dwh/usb_iip/dev/software/otg/linux/drivers/dwc_otg_regs.h $
7 * Synopsys HS OTG Linux Software Driver and documentation (hereinafter,
8 * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless
9 * otherwise expressly agreed to in writing between Synopsys and you.
11 * The Software IS NOT an item of Licensed Software or Licensed Product under
12 * any End User Software License Agreement or Agreement for Licensed Product
13 * with Synopsys or any supplement thereto. You are permitted to use and
14 * redistribute this Software in source and binary forms, with or without
15 * modification, provided that redistributions of source code must retain this
16 * notice. You may not view, use, disclose, copy or distribute this file or
17 * any information contained herein except pursuant to this license grant from
18 * Synopsys. If you do not agree with this notice, including the disclaimer
19 * below, then you are not authorized to use the Software.
21 * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS
22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24 * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT,
25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
28 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
32 * ========================================================================== */
34 #ifndef __DWC_OTG_REGS_H__
35 #define __DWC_OTG_REGS_H__
37 #include "dwc_otg_core_if.h"
42 * This file contains the data structures for accessing the DWC_otg core registers.
44 * The application interfaces with the HS OTG core by reading from and
45 * writing to the Control and Status Register (CSR) space through the
46 * AHB Slave interface. These registers are 32 bits wide, and the
47 * addresses are 32-bit-block aligned.
48 * CSRs are classified as follows:
49 * - Core Global Registers
50 * - Device Mode Registers
51 * - Device Global Registers
52 * - Device Endpoint Specific Registers
53 * - Host Mode Registers
54 * - Host Global Registers
56 * - Host Channel Specific Registers
58 * Only the Core Global registers can be accessed in both Device and
59 * Host modes. When the HS OTG core is operating in one mode, either
60 * Device or Host, the application must not access registers from the
61 * other mode. When the core switches from one mode to another, the
62 * registers in the new mode of operation must be reprogrammed as they
63 * would be after a power-on reset.
66 /****************************************************************************/
67 /** DWC_otg Core registers .
68 * The dwc_otg_core_global_regs structure defines the size
69 * and relative field offsets for the Core Global registers.
71 typedef struct dwc_otg_core_global_regs {
72 /** OTG Control and Status Register. <i>Offset: 000h</i> */
73 volatile uint32_t gotgctl;
74 /** OTG Interrupt Register. <i>Offset: 004h</i> */
75 volatile uint32_t gotgint;
76 /**Core AHB Configuration Register. <i>Offset: 008h</i> */
77 volatile uint32_t gahbcfg;
79 #define DWC_GLBINTRMASK 0x0001
80 #define DWC_DMAENABLE 0x0020
81 #define DWC_NPTXEMPTYLVL_EMPTY 0x0080
82 #define DWC_NPTXEMPTYLVL_HALFEMPTY 0x0000
83 #define DWC_PTXEMPTYLVL_EMPTY 0x0100
84 #define DWC_PTXEMPTYLVL_HALFEMPTY 0x0000
86 /**Core USB Configuration Register. <i>Offset: 00Ch</i> */
87 volatile uint32_t gusbcfg;
88 /**Core Reset Register. <i>Offset: 010h</i> */
89 volatile uint32_t grstctl;
90 /**Core Interrupt Register. <i>Offset: 014h</i> */
91 volatile uint32_t gintsts;
92 /**Core Interrupt Mask Register. <i>Offset: 018h</i> */
93 volatile uint32_t gintmsk;
94 /**Receive Status Queue Read Register (Read Only). <i>Offset: 01Ch</i> */
95 volatile uint32_t grxstsr;
96 /**Receive Status Queue Read & POP Register (Read Only). <i>Offset: 020h</i>*/
97 volatile uint32_t grxstsp;
98 /**Receive FIFO Size Register. <i>Offset: 024h</i> */
99 volatile uint32_t grxfsiz;
100 /**Non Periodic Transmit FIFO Size Register. <i>Offset: 028h</i> */
101 volatile uint32_t gnptxfsiz;
102 /**Non Periodic Transmit FIFO/Queue Status Register (Read
103 * Only). <i>Offset: 02Ch</i> */
104 volatile uint32_t gnptxsts;
105 /**I2C Access Register. <i>Offset: 030h</i> */
106 volatile uint32_t gi2cctl;
107 /**PHY Vendor Control Register. <i>Offset: 034h</i> */
108 volatile uint32_t gpvndctl;
109 /**General Purpose Input/Output Register. <i>Offset: 038h</i> */
110 volatile uint32_t ggpio;
111 /**User ID Register. <i>Offset: 03Ch</i> */
112 volatile uint32_t guid;
113 /**Synopsys ID Register (Read Only). <i>Offset: 040h</i> */
114 volatile uint32_t gsnpsid;
115 /**User HW Config1 Register (Read Only). <i>Offset: 044h</i> */
116 volatile uint32_t ghwcfg1;
117 /**User HW Config2 Register (Read Only). <i>Offset: 048h</i> */
118 volatile uint32_t ghwcfg2;
119 #define DWC_SLAVE_ONLY_ARCH 0
120 #define DWC_EXT_DMA_ARCH 1
121 #define DWC_INT_DMA_ARCH 2
123 #define DWC_MODE_HNP_SRP_CAPABLE 0
124 #define DWC_MODE_SRP_ONLY_CAPABLE 1
125 #define DWC_MODE_NO_HNP_SRP_CAPABLE 2
126 #define DWC_MODE_SRP_CAPABLE_DEVICE 3
127 #define DWC_MODE_NO_SRP_CAPABLE_DEVICE 4
128 #define DWC_MODE_SRP_CAPABLE_HOST 5
129 #define DWC_MODE_NO_SRP_CAPABLE_HOST 6
131 /**User HW Config3 Register (Read Only). <i>Offset: 04Ch</i> */
132 volatile uint32_t ghwcfg3;
133 /**User HW Config4 Register (Read Only). <i>Offset: 050h</i>*/
134 volatile uint32_t ghwcfg4;
135 /** Core LPM Configuration register <i>Offset: 054h</i>*/
136 volatile uint32_t glpmcfg;
137 /** Global PowerDn Register <i>Offset: 058h</i> */
138 volatile uint32_t gpwrdn;
139 /** Global DFIFO SW Config Register <i>Offset: 05Ch</i> */
140 volatile uint32_t gdfifocfg;
141 /** ADP Control Register <i>Offset: 060h</i> */
142 volatile uint32_t adpctl;
143 /** Reserved <i>Offset: 064h-0FFh</i> */
144 volatile uint32_t reserved39[39];
145 /** Host Periodic Transmit FIFO Size Register. <i>Offset: 100h</i> */
146 volatile uint32_t hptxfsiz;
147 /** Device Periodic Transmit FIFO#n Register if dedicated fifos are disabled,
148 otherwise Device Transmit FIFO#n Register.
149 * <i>Offset: 104h + (FIFO_Number-1)*04h, 1 <= FIFO Number <= 15 (1<=n<=15).</i> */
150 volatile uint32_t dtxfsiz[15];
151 } dwc_otg_core_global_regs_t;
154 * This union represents the bit fields of the Core OTG Control
155 * and Status Register (GOTGCTL). Set the bits using the bit
156 * fields then write the <i>d32</i> value to the register.
158 typedef union gotgctl_data {
159 /** raw register data */
163 unsigned sesreqscs:1;
165 unsigned vbvalidoven:1;
166 unsigned vbvalidovval:1;
167 unsigned avalidoven:1;
168 unsigned avalidovval:1;
169 unsigned bvalidoven:1;
170 unsigned bvalidovval:1;
171 unsigned hstnegscs:1;
173 unsigned hstsethnpen:1;
175 unsigned reserved12_15:4;
181 unsigned reserved1:1;
182 unsigned multvalidbc:5;
184 unsigned reserved28_31:4;
189 * This union represents the bit fields of the Core OTG Interrupt Register
190 * (GOTGINT). Set/clear the bits using the bit fields then write the <i>d32</i>
191 * value to the register.
193 typedef union gotgint_data {
194 /** raw register data */
199 unsigned reserved0_1:2;
201 /** Session End Detected */
202 unsigned sesenddet:1;
204 unsigned reserved3_7:5;
206 /** Session Request Success Status Change */
207 unsigned sesreqsucstschng:1;
208 /** Host Negotiation Success Status Change */
209 unsigned hstnegsucstschng:1;
211 unsigned reserved10_16:7;
213 /** Host Negotiation Detected */
214 unsigned hstnegdet:1;
215 /** A-Device Timeout Change */
216 unsigned adevtoutchng:1;
219 /** Multi-Valued input changed */
222 unsigned reserved31_21:11;
228 * This union represents the bit fields of the Core AHB Configuration
229 * Register (GAHBCFG). Set/clear the bits using the bit fields then
230 * write the <i>d32</i> value to the register.
232 typedef union gahbcfg_data {
233 /** raw register data */
237 unsigned glblintrmsk:1;
238 #define DWC_GAHBCFG_GLBINT_ENABLE 1
240 unsigned hburstlen:4;
241 #define DWC_GAHBCFG_INT_DMA_BURST_SINGLE 0
242 #define DWC_GAHBCFG_INT_DMA_BURST_INCR 1
243 #define DWC_GAHBCFG_INT_DMA_BURST_INCR4 3
244 #define DWC_GAHBCFG_INT_DMA_BURST_INCR8 5
245 #define DWC_GAHBCFG_INT_DMA_BURST_INCR16 7
247 unsigned dmaenable:1;
248 #define DWC_GAHBCFG_DMAENABLE 1
250 unsigned nptxfemplvl_txfemplvl:1;
251 unsigned ptxfemplvl:1;
252 #define DWC_GAHBCFG_TXFEMPTYLVL_EMPTY 1
253 #define DWC_GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0
254 unsigned reserved9_20:12;
255 unsigned remmemsupp:1;
256 unsigned notialldmawrit:1;
257 unsigned ahbsingle:1;
258 unsigned reserved24_31:8;
263 * This union represents the bit fields of the Core USB Configuration
264 * Register (GUSBCFG). Set the bits using the bit fields then write
265 * the <i>d32</i> value to the register.
267 typedef union gusbcfg_data {
268 /** raw register data */
274 unsigned ulpi_utmi_sel:1;
280 unsigned usbtrdtim:4;
281 unsigned reserved1:1;
282 unsigned phylpwrclksel:1;
283 unsigned otgutmifssel:1;
284 unsigned ulpi_fsls:1;
285 unsigned ulpi_auto_res:1;
286 unsigned ulpi_clk_sus_m:1;
287 unsigned ulpi_ext_vbus_drv:1;
288 unsigned ulpi_int_vbus_indicator:1;
289 unsigned term_sel_dl_pulse:1;
290 unsigned indicator_complement:1;
291 unsigned indicator_pass_through:1;
292 unsigned ulpi_int_prot_dis:1;
293 unsigned ic_usb_cap:1;
294 unsigned ic_traffic_pull_remove:1;
295 unsigned tx_end_delay:1;
296 unsigned force_host_mode:1;
297 unsigned force_dev_mode:1;
298 unsigned reserved31:1;
303 * This union represents the bit fields of the Core Reset Register
304 * (GRSTCTL). Set/clear the bits using the bit fields then write the
305 * <i>d32</i> value to the register.
307 typedef union grstctl_data {
308 /** raw register data */
312 /** Core Soft Reset (CSftRst) (Device and Host)
314 * The application can flush the control logic in the
315 * entire core using this bit. This bit resets the
316 * pipelines in the AHB Clock domain as well as the
319 * The state machines are reset to an IDLE state, the
320 * control bits in the CSRs are cleared, all the
321 * transmit FIFOs and the receive FIFO are flushed.
323 * The status mask bits that control the generation of
324 * the interrupt, are cleared, to clear the
325 * interrupt. The interrupt status bits are not
326 * cleared, so the application can get the status of
327 * any events that occurred in the core after it has
330 * Any transactions on the AHB are terminated as soon
331 * as possible following the protocol. Any
332 * transactions on the USB are terminated immediately.
334 * The configuration settings in the CSRs are
335 * unchanged, so the software doesn't have to
336 * reprogram these registers (Device
337 * Configuration/Host Configuration/Core System
338 * Configuration/Core PHY Configuration).
340 * The application can write to this bit, any time it
341 * wants to reset the core. This is a self clearing
342 * bit and the core clears this bit after all the
343 * necessary logic is reset in the core, which may
344 * take several clocks, depending on the current state
350 * The application uses this bit to reset the control logic in
351 * the AHB clock domain. Only AHB clock domain pipelines are
355 /** Host Frame Counter Reset (Host Only)<br>
357 * The application can reset the (micro)frame number
358 * counter inside the core, using this bit. When the
359 * (micro)frame counter is reset, the subsequent SOF
360 * sent out by the core, will have a (micro)frame
364 /** In Token Sequence Learning Queue Flush
365 * (INTknQFlsh) (Device Only)
367 unsigned intknqflsh:1;
368 /** RxFIFO Flush (RxFFlsh) (Device and Host)
370 * The application can flush the entire Receive FIFO
371 * using this bit. The application must first
372 * ensure that the core is not in the middle of a
373 * transaction. The application should write into
374 * this bit, only after making sure that neither the
375 * DMA engine is reading from the RxFIFO nor the MAC
376 * is writing the data in to the FIFO. The
377 * application should wait until the bit is cleared
378 * before performing any other operations. This bit
379 * will takes 8 clocks (slowest of PHY or AHB clock)
383 /** TxFIFO Flush (TxFFlsh) (Device and Host).
385 * This bit is used to selectively flush a single or
386 * all transmit FIFOs. The application must first
387 * ensure that the core is not in the middle of a
388 * transaction. The application should write into
389 * this bit, only after making sure that neither the
390 * DMA engine is writing into the TxFIFO nor the MAC
391 * is reading the data out of the FIFO. The
392 * application should wait until the core clears this
393 * bit, before performing any operations. This bit
394 * will takes 8 clocks (slowest of PHY or AHB clock)
399 /** TxFIFO Number (TxFNum) (Device and Host).
401 * This is the FIFO number which needs to be flushed,
402 * using the TxFIFO Flush bit. This field should not
403 * be changed until the TxFIFO Flush bit is cleared by
405 * - 0x0 : Non Periodic TxFIFO Flush
406 * - 0x1 : Periodic TxFIFO #1 Flush in device mode
407 * or Periodic TxFIFO in host mode
408 * - 0x2 : Periodic TxFIFO #2 Flush in device mode.
410 * - 0xF : Periodic TxFIFO #15 Flush in device mode
411 * - 0x10: Flush all the Transmit NonPeriodic and
412 * Transmit Periodic FIFOs in the core
416 unsigned reserved11_29:19;
417 /** DMA Request Signal. Indicated DMA request is in
418 * probress. Used for debug purpose. */
420 /** AHB Master Idle. Indicates the AHB Master State
421 * Machine is in IDLE condition. */
427 * This union represents the bit fields of the Core Interrupt Mask
428 * Register (GINTMSK). Set/clear the bits using the bit fields then
429 * write the <i>d32</i> value to the register.
431 typedef union gintmsk_data {
432 /** raw register data */
436 unsigned reserved0:1;
437 unsigned modemismatch:1;
440 unsigned rxstsqlvl:1;
441 unsigned nptxfempty:1;
442 unsigned ginnakeff:1;
443 unsigned goutnakeff:1;
444 unsigned ulpickint:1;
446 unsigned erlysuspend:1;
447 unsigned usbsuspend:1;
450 unsigned isooutdrop:1;
452 unsigned restoredone:1;
453 unsigned epmismatch:1;
455 unsigned outepintr:1;
456 unsigned incomplisoin:1;
457 unsigned incomplisoout:1;
462 unsigned ptxfempty:1;
463 unsigned lpmtranrcvd:1;
464 unsigned conidstschng:1;
465 unsigned disconnect:1;
466 unsigned sessreqintr:1;
471 * This union represents the bit fields of the Core Interrupt Register
472 * (GINTSTS). Set/clear the bits using the bit fields then write the
473 * <i>d32</i> value to the register.
475 typedef union gintsts_data {
476 /** raw register data */
478 #define DWC_SOF_INTR_MASK 0x0008
481 #define DWC_HOST_MODE 1
483 unsigned modemismatch:1;
486 unsigned rxstsqlvl:1;
487 unsigned nptxfempty:1;
488 unsigned ginnakeff:1;
489 unsigned goutnakeff:1;
490 unsigned ulpickint:1;
492 unsigned erlysuspend:1;
493 unsigned usbsuspend:1;
496 unsigned isooutdrop:1;
498 unsigned restoredone:1;
499 unsigned epmismatch:1;
501 unsigned outepintr:1;
502 unsigned incomplisoin:1;
503 unsigned incomplisoout:1;
508 unsigned ptxfempty:1;
509 unsigned lpmtranrcvd:1;
510 unsigned conidstschng:1;
511 unsigned disconnect:1;
512 unsigned sessreqintr:1;
518 * This union represents the bit fields in the Device Receive Status Read and
519 * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the <i>d32</i>
520 * element then read out the bits using the <i>b</i>it elements.
522 typedef union device_grxsts_data {
523 /** raw register data */
531 #define DWC_STS_DATA_UPDT 0x2 // OUT Data Packet
532 #define DWC_STS_XFER_COMP 0x3 // OUT Data Transfer Complete
534 #define DWC_DSTS_GOUT_NAK 0x1 // Global OUT NAK
535 #define DWC_DSTS_SETUP_COMP 0x4 // Setup Phase Complete
536 #define DWC_DSTS_SETUP_UPDT 0x6 // SETUP Packet
539 unsigned reserved25_31:7;
541 } device_grxsts_data_t;
544 * This union represents the bit fields in the Host Receive Status Read and
545 * Pop Registers (GRXSTSR, GRXSTSP) Read the register into the <i>d32</i>
546 * element then read out the bits using the <i>b</i>it elements.
548 typedef union host_grxsts_data {
549 /** raw register data */
558 #define DWC_GRXSTS_PKTSTS_IN 0x2
559 #define DWC_GRXSTS_PKTSTS_IN_XFER_COMP 0x3
560 #define DWC_GRXSTS_PKTSTS_DATA_TOGGLE_ERR 0x5
561 #define DWC_GRXSTS_PKTSTS_CH_HALTED 0x7
563 unsigned reserved21_31:11;
565 } host_grxsts_data_t;
568 * This union represents the bit fields in the FIFO Size Registers (HPTXFSIZ,
569 * GNPTXFSIZ, DPTXFSIZn, DIEPTXFn). Read the register into the <i>d32</i> element
570 * then read out the bits using the <i>b</i>it elements.
572 typedef union fifosize_data {
573 /** raw register data */
577 unsigned startaddr:16;
583 * This union represents the bit fields in the Non-Periodic Transmit
584 * FIFO/Queue Status Register (GNPTXSTS). Read the register into the
585 * <i>d32</i> element then read out the bits using the <i>b</i>it
588 typedef union gnptxsts_data {
589 /** raw register data */
593 unsigned nptxfspcavail:16;
594 unsigned nptxqspcavail:8;
595 /** Top of the Non-Periodic Transmit Request Queue
596 * - bit 24 - Terminate (Last entry for the selected
598 * - bits 26:25 - Token Type
600 * - 2'b01 - Zero Length OUT
601 * - 2'b10 - PING/Complete Split
602 * - 2'b11 - Channel Halt
603 * - bits 30:27 - Channel/EP Number
605 unsigned nptxqtop_terminate:1;
606 unsigned nptxqtop_token:2;
607 unsigned nptxqtop_chnep:4;
613 * This union represents the bit fields in the Transmit
614 * FIFO Status Register (DTXFSTS). Read the register into the
615 * <i>d32</i> element then read out the bits using the <i>b</i>it
618 typedef union dtxfsts_data {
619 /** raw register data */
623 unsigned txfspcavail:16;
624 unsigned reserved:16;
629 * This union represents the bit fields in the I2C Control Register
630 * (I2CCTL). Read the register into the <i>d32</i> element then read out the
631 * bits using the <i>b</i>it elements.
633 typedef union gi2cctl_data {
634 /** raw register data */
643 unsigned i2csuspctl:1;
644 unsigned i2cdevaddr:2;
645 unsigned i2cdatse0:1;
653 * This union represents the bit fields in the PHY Vendor Control Register
654 * (GPVNDCTL). Read the register into the <i>d32</i> element then read out the
655 * bits using the <i>b</i>it elements.
657 typedef union gpvndctl_data {
658 /** raw register data */
664 unsigned regaddr16_21:6;
666 unsigned reserved23_24:2;
667 unsigned newregreq:1;
670 unsigned reserved28_30:3;
671 unsigned disulpidrvr:1;
676 * This union represents the bit fields in the General Purpose
677 * Input/Output Register (GGPIO).
678 * Read the register into the <i>d32</i> element then read out the
679 * bits using the <i>b</i>it elements.
681 typedef union ggpio_data {
682 /** raw register data */
692 * This union represents the bit fields in the User ID Register
693 * (GUID). Read the register into the <i>d32</i> element then read out the
694 * bits using the <i>b</i>it elements.
696 typedef union guid_data {
697 /** raw register data */
706 * This union represents the bit fields in the Synopsys ID Register
707 * (GSNPSID). Read the register into the <i>d32</i> element then read out the
708 * bits using the <i>b</i>it elements.
710 typedef union gsnpsid_data {
711 /** raw register data */
720 * This union represents the bit fields in the User HW Config1
721 * Register. Read the register into the <i>d32</i> element then read
722 * out the bits using the <i>b</i>it elements.
724 typedef union hwcfg1_data {
725 /** raw register data */
749 * This union represents the bit fields in the User HW Config2
750 * Register. Read the register into the <i>d32</i> element then read
751 * out the bits using the <i>b</i>it elements.
753 typedef union hwcfg2_data {
754 /** raw register data */
760 #define DWC_HWCFG2_OP_MODE_HNP_SRP_CAPABLE_OTG 0
761 #define DWC_HWCFG2_OP_MODE_SRP_ONLY_CAPABLE_OTG 1
762 #define DWC_HWCFG2_OP_MODE_NO_HNP_SRP_CAPABLE_OTG 2
763 #define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_DEVICE 3
764 #define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_DEVICE 4
765 #define DWC_HWCFG2_OP_MODE_SRP_CAPABLE_HOST 5
766 #define DWC_HWCFG2_OP_MODE_NO_SRP_CAPABLE_HOST 6
768 unsigned architecture:2;
769 unsigned point2point:1;
770 unsigned hs_phy_type:2;
771 #define DWC_HWCFG2_HS_PHY_TYPE_NOT_SUPPORTED 0
772 #define DWC_HWCFG2_HS_PHY_TYPE_UTMI 1
773 #define DWC_HWCFG2_HS_PHY_TYPE_ULPI 2
774 #define DWC_HWCFG2_HS_PHY_TYPE_UTMI_ULPI 3
776 unsigned fs_phy_type:2;
777 unsigned num_dev_ep:4;
778 unsigned num_host_chan:4;
779 unsigned perio_ep_supported:1;
780 unsigned dynamic_fifo:1;
781 unsigned multi_proc_int:1;
782 unsigned reserved21:1;
783 unsigned nonperio_tx_q_depth:2;
784 unsigned host_perio_tx_q_depth:2;
785 unsigned dev_token_q_depth:5;
786 unsigned otg_enable_ic_usb:1;
791 * This union represents the bit fields in the User HW Config3
792 * Register. Read the register into the <i>d32</i> element then read
793 * out the bits using the <i>b</i>it elements.
795 typedef union hwcfg3_data {
796 /** raw register data */
801 unsigned xfer_size_cntr_width:4;
802 unsigned packet_size_cntr_width:3;
805 unsigned vendor_ctrl_if:1;
806 unsigned optional_features:1;
807 unsigned synch_reset_type:1;
809 unsigned otg_enable_hsic:1;
810 unsigned bc_support:1;
811 unsigned otg_lpm_en:1;
812 unsigned dfifo_depth:16;
817 * This union represents the bit fields in the User HW Config4
818 * Register. Read the register into the <i>d32</i> element then read
819 * out the bits using the <i>b</i>it elements.
821 typedef union hwcfg4_data {
822 /** raw register data */
826 unsigned num_dev_perio_in_ep:4;
827 unsigned power_optimiz:1;
828 unsigned min_ahb_freq:1;
832 unsigned utmi_phy_data_width:2;
833 unsigned num_dev_mode_ctrl_ep:4;
834 unsigned iddig_filt_en:1;
835 unsigned vbus_valid_filt_en:1;
836 unsigned a_valid_filt_en:1;
837 unsigned b_valid_filt_en:1;
838 unsigned session_end_filt_en:1;
839 unsigned ded_fifo_en:1;
840 unsigned num_in_eps:4;
842 unsigned desc_dma_dyn:1;
847 * This union represents the bit fields of the Core LPM Configuration
848 * Register (GLPMCFG). Set the bits using bit fields then write
849 * the <i>d32</i> value to the register.
851 typedef union glpmctl_data {
852 /** raw register data */
856 /** LPM-Capable (LPMCap) (Device and Host)
857 * The application uses this bit to control
858 * the DWC_otg core LPM capabilities.
860 unsigned lpm_cap_en:1;
861 /** LPM response programmed by application (AppL1Res) (Device)
862 * Handshake response to LPM token pre-programmed
863 * by device application software.
865 unsigned appl_resp:1;
866 /** Host Initiated Resume Duration (HIRD) (Device and Host)
867 * In Host mode this field indicates the value of HIRD
868 * to be sent in an LPM transaction.
869 * In Device mode this field is updated with the
870 * Received LPM Token HIRD bmAttribute
871 * when an ACK/NYET/STALL response is sent
872 * to an LPM transaction.
875 /** RemoteWakeEnable (bRemoteWake) (Device and Host)
876 * In Host mode this bit indicates the value of remote
877 * wake up to be sent in wIndex field of LPM transaction.
878 * In Device mode this field is updated with the
879 * Received LPM Token bRemoteWake bmAttribute
880 * when an ACK/NYET/STALL response is sent
881 * to an LPM transaction.
883 unsigned rem_wkup_en:1;
884 /** Enable utmi_sleep_n (EnblSlpM) (Device and Host)
885 * The application uses this bit to control
886 * the utmi_sleep_n assertion to the PHY when in L1 state.
888 unsigned en_utmi_sleep:1;
889 /** HIRD Threshold (HIRD_Thres) (Device and Host)
891 unsigned hird_thres:5;
892 /** LPM Response (CoreL1Res) (Device and Host)
893 * In Host mode this bit contains handsake response to
895 * In Device mode the response of the core to
896 * LPM transaction received is reflected in these two bits.
897 - 0x0 : ERROR (No handshake response)
903 /** Port Sleep Status (SlpSts) (Device and Host)
904 * This bit is set as long as a Sleep condition
905 * is present on the USB bus.
907 unsigned prt_sleep_sts:1;
908 /** Sleep State Resume OK (L1ResumeOK) (Device and Host)
909 * Indicates that the application or host
910 * can start resume from Sleep state.
912 unsigned sleep_state_resumeok:1;
913 /** LPM channel Index (LPM_Chnl_Indx) (Host)
914 * The channel number on which the LPM transaction
915 * has to be applied while sending
916 * an LPM transaction to the local device.
918 unsigned lpm_chan_index:4;
919 /** LPM Retry Count (LPM_Retry_Cnt) (Host)
920 * Number host retries that would be performed
921 * if the device response was not valid response.
923 unsigned retry_count:3;
924 /** Send LPM Transaction (SndLPM) (Host)
925 * When set by application software,
926 * an LPM transaction containing two tokens
930 /** LPM Retry status (LPM_RetryCnt_Sts) (Host)
931 * Number of LPM Host Retries still remaining
932 * to be transmitted for the current LPM sequence
934 unsigned retry_count_sts:3;
935 unsigned reserved28_29:2;
936 /** In host mode once this bit is set, the host
937 * configures to drive the HSIC Idle state on the bus.
938 * It then waits for the device to initiate the Connect sequence.
939 * In device mode once this bit is set, the device waits for
940 * the HSIC Idle line state on the bus. Upon receving the Idle
941 * line state, it initiates the HSIC Connect sequence.
943 unsigned hsic_connect:1;
944 /** This bit overrides and functionally inverts
945 * the if_select_hsic input port signal.
947 unsigned inv_sel_hsic:1;
952 * This union represents the bit fields of the Core ADP Timer, Control and
953 * Status Register (ADPTIMCTLSTS). Set the bits using bit fields then write
954 * the <i>d32</i> value to the register.
956 typedef union adpctl_data {
957 /** raw register data */
961 /** Probe Discharge (PRB_DSCHG)
962 * These bits set the times for TADP_DSCHG.
963 * These bits are defined as follows:
969 unsigned prb_dschg:2;
970 /** Probe Delta (PRB_DELTA)
971 * These bits set the resolution for RTIM value.
972 * The bits are defined in units of 32 kHz clock cycles as follows:
977 * For example if this value is chosen to 2'b01, it means that RTIM
978 * increments for every 3(three) 32Khz clock cycles.
980 unsigned prb_delta:2;
981 /** Probe Period (PRB_PER)
982 * These bits sets the TADP_PRD as shown in Figure 4 as follows:
983 * 2'b00 - 0.625 to 0.925 sec (typical 0.775 sec)
984 * 2'b01 - 1.25 to 1.85 sec (typical 1.55 sec)
985 * 2'b10 - 1.9 to 2.6 sec (typical 2.275 sec)
989 /** These bits capture the latest time it took for VBUS to ramp from
990 * VADP_SINK to VADP_PRB.
995 * 0x7FF - 2048 cycles
996 * A time of 1024 cycles at 32 kHz corresponds to a time of 32 msec.
999 /** Enable Probe (EnaPrb)
1000 * When programmed to 1'b1, the core performs a probe operation.
1001 * This bit is valid only if OTG_Ver = 1'b1.
1004 /** Enable Sense (EnaSns)
1005 * When programmed to 1'b1, the core performs a Sense operation.
1006 * This bit is valid only if OTG_Ver = 1'b1.
1009 /** ADP Reset (ADPRes)
1010 * When set, ADP controller is reset.
1011 * This bit is valid only if OTG_Ver = 1'b1.
1014 /** ADP Enable (ADPEn)
1015 * When set, the core performs either ADP probing or sensing
1016 * based on EnaPrb or EnaSns.
1017 * This bit is valid only if OTG_Ver = 1'b1.
1020 /** ADP Probe Interrupt (ADP_PRB_INT)
1021 * When this bit is set, it means that the VBUS
1022 * voltage is greater than VADP_PRB or VADP_PRB is reached.
1023 * This bit is valid only if OTG_Ver = 1'b1.
1025 unsigned adp_prb_int:1;
1027 * ADP Sense Interrupt (ADP_SNS_INT)
1028 * When this bit is set, it means that the VBUS voltage is greater than
1029 * VADP_SNS value or VADP_SNS is reached.
1030 * This bit is valid only if OTG_Ver = 1'b1.
1032 unsigned adp_sns_int:1;
1033 /** ADP Tomeout Interrupt (ADP_TMOUT_INT)
1034 * This bit is relevant only for an ADP probe.
1035 * When this bit is set, it means that the ramp time has
1036 * completed ie ADPCTL.RTIM has reached its terminal value
1037 * of 0x7FF. This is a debug feature that allows software
1038 * to read the ramp time after each cycle.
1039 * This bit is valid only if OTG_Ver = 1'b1.
1041 unsigned adp_tmout_int:1;
1042 /** ADP Probe Interrupt Mask (ADP_PRB_INT_MSK)
1043 * When this bit is set, it unmasks the interrupt due to ADP_PRB_INT.
1044 * This bit is valid only if OTG_Ver = 1'b1.
1046 unsigned adp_prb_int_msk:1;
1047 /** ADP Sense Interrupt Mask (ADP_SNS_INT_MSK)
1048 * When this bit is set, it unmasks the interrupt due to ADP_SNS_INT.
1049 * This bit is valid only if OTG_Ver = 1'b1.
1051 unsigned adp_sns_int_msk:1;
1052 /** ADP Timoeout Interrupt Mask (ADP_TMOUT_MSK)
1053 * When this bit is set, it unmasks the interrupt due to ADP_TMOUT_INT.
1054 * This bit is valid only if OTG_Ver = 1'b1.
1056 unsigned adp_tmout_int_msk:1;
1058 * 2'b00 - Read/Write Valid (updated by the core)
1065 unsigned reserved29_31:3;
1069 ////////////////////////////////////////////
1072 * Device Global Registers. <i>Offsets 800h-BFFh</i>
1074 * The following structures define the size and relative field offsets
1075 * for the Device Mode Registers.
1077 * <i>These registers are visible only in Device mode and must not be
1078 * accessed in Host mode, as the results are unknown.</i>
1080 typedef struct dwc_otg_dev_global_regs {
1081 /** Device Configuration Register. <i>Offset 800h</i> */
1082 volatile uint32_t dcfg;
1083 /** Device Control Register. <i>Offset: 804h</i> */
1084 volatile uint32_t dctl;
1085 /** Device Status Register (Read Only). <i>Offset: 808h</i> */
1086 volatile uint32_t dsts;
1087 /** Reserved. <i>Offset: 80Ch</i> */
1089 /** Device IN Endpoint Common Interrupt Mask
1090 * Register. <i>Offset: 810h</i> */
1091 volatile uint32_t diepmsk;
1092 /** Device OUT Endpoint Common Interrupt Mask
1093 * Register. <i>Offset: 814h</i> */
1094 volatile uint32_t doepmsk;
1095 /** Device All Endpoints Interrupt Register. <i>Offset: 818h</i> */
1096 volatile uint32_t daint;
1097 /** Device All Endpoints Interrupt Mask Register. <i>Offset:
1099 volatile uint32_t daintmsk;
1100 /** Device IN Token Queue Read Register-1 (Read Only).
1101 * <i>Offset: 820h</i> */
1102 volatile uint32_t dtknqr1;
1103 /** Device IN Token Queue Read Register-2 (Read Only).
1104 * <i>Offset: 824h</i> */
1105 volatile uint32_t dtknqr2;
1106 /** Device VBUS discharge Register. <i>Offset: 828h</i> */
1107 volatile uint32_t dvbusdis;
1108 /** Device VBUS Pulse Register. <i>Offset: 82Ch</i> */
1109 volatile uint32_t dvbuspulse;
1110 /** Device IN Token Queue Read Register-3 (Read Only). /
1111 * Device Thresholding control register (Read/Write)
1112 * <i>Offset: 830h</i> */
1113 volatile uint32_t dtknqr3_dthrctl;
1114 /** Device IN Token Queue Read Register-4 (Read Only). /
1115 * Device IN EPs empty Inr. Mask Register (Read/Write)
1116 * <i>Offset: 834h</i> */
1117 volatile uint32_t dtknqr4_fifoemptymsk;
1118 /** Device Each Endpoint Interrupt Register (Read Only). /
1119 * <i>Offset: 838h</i> */
1120 volatile uint32_t deachint;
1121 /** Device Each Endpoint Interrupt mask Register (Read/Write). /
1122 * <i>Offset: 83Ch</i> */
1123 volatile uint32_t deachintmsk;
1124 /** Device Each In Endpoint Interrupt mask Register (Read/Write). /
1125 * <i>Offset: 840h</i> */
1126 volatile uint32_t diepeachintmsk[MAX_EPS_CHANNELS];
1127 /** Device Each Out Endpoint Interrupt mask Register (Read/Write). /
1128 * <i>Offset: 880h</i> */
1129 volatile uint32_t doepeachintmsk[MAX_EPS_CHANNELS];
1130 } dwc_otg_device_global_regs_t;
1133 * This union represents the bit fields in the Device Configuration
1134 * Register. Read the register into the <i>d32</i> member then
1135 * set/clear the bits using the <i>b</i>it elements. Write the
1136 * <i>d32</i> member to the dcfg register.
1138 typedef union dcfg_data {
1139 /** raw register data */
1141 /** register bits */
1145 /** Non Zero Length Status OUT Handshake */
1146 unsigned nzstsouthshk:1;
1147 #define DWC_DCFG_SEND_STALL 1
1149 unsigned ena32khzs:1;
1150 /** Device Addresses */
1152 /** Periodic Frame Interval */
1153 unsigned perfrint:2;
1154 #define DWC_DCFG_FRAME_INTERVAL_80 0
1155 #define DWC_DCFG_FRAME_INTERVAL_85 1
1156 #define DWC_DCFG_FRAME_INTERVAL_90 2
1157 #define DWC_DCFG_FRAME_INTERVAL_95 3
1159 /** Enable Device OUT NAK for bulk in DDMA mode */
1160 unsigned endevoutnak:1;
1162 unsigned reserved14_17:4;
1163 /** In Endpoint Mis-match count */
1165 /** Enable Descriptor DMA in Device mode */
1167 unsigned perschintvl:2;
1168 unsigned resvalid:6;
1173 * This union represents the bit fields in the Device Control
1174 * Register. Read the register into the <i>d32</i> member then
1175 * set/clear the bits using the <i>b</i>it elements.
1177 typedef union dctl_data {
1178 /** raw register data */
1180 /** register bits */
1182 /** Remote Wakeup */
1183 unsigned rmtwkupsig:1;
1184 /** Soft Disconnect */
1185 unsigned sftdiscon:1;
1186 /** Global Non-Periodic IN NAK Status */
1187 unsigned gnpinnaksts:1;
1188 /** Global OUT NAK Status */
1189 unsigned goutnaksts:1;
1192 /** Set Global Non-Periodic IN NAK */
1193 unsigned sgnpinnak:1;
1194 /** Clear Global Non-Periodic IN NAK */
1195 unsigned cgnpinnak:1;
1196 /** Set Global OUT NAK */
1197 unsigned sgoutnak:1;
1198 /** Clear Global OUT NAK */
1199 unsigned cgoutnak:1;
1200 /** Power-On Programming Done */
1201 unsigned pwronprgdone:1;
1203 unsigned reserved:1;
1204 /** Global Multi Count */
1206 /** Ignore Frame Number for ISOC EPs */
1208 /** NAK on Babble */
1209 unsigned nakonbble:1;
1210 /** Enable Continue on BNA */
1211 unsigned encontonbna:1;
1213 unsigned reserved18_31:14;
1218 * This union represents the bit fields in the Device Status
1219 * Register. Read the register into the <i>d32</i> member then
1220 * set/clear the bits using the <i>b</i>it elements.
1222 typedef union dsts_data {
1223 /** raw register data */
1225 /** register bits */
1227 /** Suspend Status */
1229 /** Enumerated Speed */
1231 #define DWC_DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0
1232 #define DWC_DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1
1233 #define DWC_DSTS_ENUMSPD_LS_PHY_6MHZ 2
1234 #define DWC_DSTS_ENUMSPD_FS_PHY_48MHZ 3
1235 /** Erratic Error */
1236 unsigned errticerr:1;
1237 unsigned reserved4_7:4;
1238 /** Frame or Microframe Number of the received SOF */
1240 unsigned reserved22_31:10;
1245 * This union represents the bit fields in the Device IN EP Interrupt
1246 * Register and the Device IN EP Common Mask Register.
1248 * - Read the register into the <i>d32</i> member then set/clear the
1249 * bits using the <i>b</i>it elements.
1251 typedef union diepint_data {
1252 /** raw register data */
1254 /** register bits */
1256 /** Transfer complete mask */
1257 unsigned xfercompl:1;
1258 /** Endpoint disable mask */
1259 unsigned epdisabled:1;
1260 /** AHB Error mask */
1262 /** TimeOUT Handshake mask (non-ISOC EPs) */
1264 /** IN Token received with TxF Empty mask */
1265 unsigned intktxfemp:1;
1266 /** IN Token Received with EP mismatch mask */
1267 unsigned intknepmis:1;
1268 /** IN Endpoint NAK Effective mask */
1269 unsigned inepnakeff:1;
1271 unsigned emptyintr:1;
1273 unsigned txfifoundrn:1;
1275 /** BNA Interrupt mask */
1278 unsigned reserved10_12:3;
1279 /** BNA Interrupt mask */
1282 unsigned reserved14_31:18;
1287 * This union represents the bit fields in the Device IN EP
1288 * Common/Dedicated Interrupt Mask Register.
1290 typedef union diepint_data diepmsk_data_t;
1293 * This union represents the bit fields in the Device OUT EP Interrupt
1294 * Registerand Device OUT EP Common Interrupt Mask Register.
1296 * - Read the register into the <i>d32</i> member then set/clear the
1297 * bits using the <i>b</i>it elements.
1299 typedef union doepint_data {
1300 /** raw register data */
1302 /** register bits */
1304 /** Transfer complete */
1305 unsigned xfercompl:1;
1306 /** Endpoint disable */
1307 unsigned epdisabled:1;
1310 /** Setup Phase Done (contorl EPs) */
1312 /** OUT Token Received when Endpoint Disabled */
1313 unsigned outtknepdis:1;
1315 unsigned stsphsercvd:1;
1316 /** Back-to-Back SETUP Packets Received */
1317 unsigned back2backsetup:1;
1319 unsigned reserved7:1;
1320 /** OUT packet Error */
1321 unsigned outpkterr:1;
1322 /** BNA Interrupt */
1325 unsigned reserved10:1;
1326 /** Packet Drop Status */
1327 unsigned pktdrpsts:1;
1328 /** Babble Interrupt */
1330 /** NAK Interrupt */
1332 /** NYET Interrupt */
1334 /** Bit indicating setup packet received */
1337 unsigned reserved16_31:16;
1342 * This union represents the bit fields in the Device OUT EP
1343 * Common/Dedicated Interrupt Mask Register.
1345 typedef union doepint_data doepmsk_data_t;
1348 * This union represents the bit fields in the Device All EP Interrupt
1349 * and Mask Registers.
1350 * - Read the register into the <i>d32</i> member then set/clear the
1351 * bits using the <i>b</i>it elements.
1353 typedef union daint_data {
1354 /** raw register data */
1356 /** register bits */
1358 /** IN Endpoint bits */
1360 /** OUT Endpoint bits */
1364 /** IN Endpoint bits */
1381 /** OUT Endpoint bits */
1402 * This union represents the bit fields in the Device IN Token Queue
1404 * - Read the register into the <i>d32</i> member.
1405 * - READ-ONLY Register
1407 typedef union dtknq1_data {
1408 /** raw register data */
1410 /** register bits */
1412 /** In Token Queue Write Pointer */
1413 unsigned intknwptr:5;
1415 unsigned reserved05_06:2;
1416 /** write pointer has wrapped. */
1417 unsigned wrap_bit:1;
1418 /** EP Numbers of IN Tokens 0 ... 4 */
1419 unsigned epnums0_5:24;
1424 * This union represents Threshold control Register
1425 * - Read and write the register into the <i>d32</i> member.
1426 * - READ-WRITABLE Register
1428 typedef union dthrctl_data {
1429 /** raw register data */
1431 /** register bits */
1433 /** non ISO Tx Thr. Enable */
1434 unsigned non_iso_thr_en:1;
1435 /** ISO Tx Thr. Enable */
1436 unsigned iso_thr_en:1;
1437 /** Tx Thr. Length */
1438 unsigned tx_thr_len:9;
1439 /** AHB Threshold ratio */
1440 unsigned ahb_thr_ratio:2;
1442 unsigned reserved13_15:3;
1443 /** Rx Thr. Enable */
1444 unsigned rx_thr_en:1;
1445 /** Rx Thr. Length */
1446 unsigned rx_thr_len:9;
1447 unsigned reserved26:1;
1448 /** Arbiter Parking Enable*/
1449 unsigned arbprken:1;
1451 unsigned reserved28_31:4;
1456 * Device Logical IN Endpoint-Specific Registers. <i>Offsets
1459 * There will be one set of endpoint registers per logical endpoint
1462 * <i>These registers are visible only in Device mode and must not be
1463 * accessed in Host mode, as the results are unknown.</i>
1465 typedef struct dwc_otg_dev_in_ep_regs {
1466 /** Device IN Endpoint Control Register. <i>Offset:900h +
1467 * (ep_num * 20h) + 00h</i> */
1468 volatile uint32_t diepctl;
1469 /** Reserved. <i>Offset:900h + (ep_num * 20h) + 04h</i> */
1470 uint32_t reserved04;
1471 /** Device IN Endpoint Interrupt Register. <i>Offset:900h +
1472 * (ep_num * 20h) + 08h</i> */
1473 volatile uint32_t diepint;
1474 /** Reserved. <i>Offset:900h + (ep_num * 20h) + 0Ch</i> */
1475 uint32_t reserved0C;
1476 /** Device IN Endpoint Transfer Size
1477 * Register. <i>Offset:900h + (ep_num * 20h) + 10h</i> */
1478 volatile uint32_t dieptsiz;
1479 /** Device IN Endpoint DMA Address Register. <i>Offset:900h +
1480 * (ep_num * 20h) + 14h</i> */
1481 volatile uint32_t diepdma;
1482 /** Device IN Endpoint Transmit FIFO Status Register. <i>Offset:900h +
1483 * (ep_num * 20h) + 18h</i> */
1484 volatile uint32_t dtxfsts;
1485 /** Device IN Endpoint DMA Buffer Register. <i>Offset:900h +
1486 * (ep_num * 20h) + 1Ch</i> */
1487 volatile uint32_t diepdmab;
1488 } dwc_otg_dev_in_ep_regs_t;
1491 * Device Logical OUT Endpoint-Specific Registers. <i>Offsets:
1494 * There will be one set of endpoint registers per logical endpoint
1497 * <i>These registers are visible only in Device mode and must not be
1498 * accessed in Host mode, as the results are unknown.</i>
1500 typedef struct dwc_otg_dev_out_ep_regs {
1501 /** Device OUT Endpoint Control Register. <i>Offset:B00h +
1502 * (ep_num * 20h) + 00h</i> */
1503 volatile uint32_t doepctl;
1504 /** Reserved. <i>Offset:B00h + (ep_num * 20h) + 04h</i> */
1505 uint32_t reserved04;
1506 /** Device OUT Endpoint Interrupt Register. <i>Offset:B00h +
1507 * (ep_num * 20h) + 08h</i> */
1508 volatile uint32_t doepint;
1509 /** Reserved. <i>Offset:B00h + (ep_num * 20h) + 0Ch</i> */
1510 uint32_t reserved0C;
1511 /** Device OUT Endpoint Transfer Size Register. <i>Offset:
1512 * B00h + (ep_num * 20h) + 10h</i> */
1513 volatile uint32_t doeptsiz;
1514 /** Device OUT Endpoint DMA Address Register. <i>Offset:B00h
1515 * + (ep_num * 20h) + 14h</i> */
1516 volatile uint32_t doepdma;
1517 /** Reserved. <i>Offset:B00h + * (ep_num * 20h) + 18h</i> */
1519 /** Device OUT Endpoint DMA Buffer Register. <i>Offset:B00h
1520 * + (ep_num * 20h) + 1Ch</i> */
1522 } dwc_otg_dev_out_ep_regs_t;
1525 * This union represents the bit fields in the Device EP Control
1526 * Register. Read the register into the <i>d32</i> member then
1527 * set/clear the bits using the <i>b</i>it elements.
1529 typedef union depctl_data {
1530 /** raw register data */
1532 /** register bits */
1534 /** Maximum Packet Size
1536 * IN/OUT EP0 - 2 bits
1542 #define DWC_DEP0CTL_MPS_64 0
1543 #define DWC_DEP0CTL_MPS_32 1
1544 #define DWC_DEP0CTL_MPS_16 2
1545 #define DWC_DEP0CTL_MPS_8 3
1549 * OUT EPn/OUT EP0 - reserved */
1552 /** USB Active Endpoint */
1553 unsigned usbactep:1;
1555 /** Endpoint DPID (INTR/Bulk IN and OUT endpoints)
1556 * This field contains the PID of the packet going to
1557 * be received or transmitted on this endpoint. The
1558 * application should program the PID of the first
1559 * packet going to be received or transmitted on this
1560 * endpoint , after the endpoint is
1561 * activated. Application use the SetD1PID and
1562 * SetD0PID fields of this register to program either
1565 * The encoding for this field is
1576 * 2'b01: Isochronous
1578 * 2'b11: Interrupt */
1583 * IN EPn/IN EP0 - reserved */
1586 /** Stall Handshake */
1591 * OUT EPn/OUT EP0 - reserved */
1598 /** Set DATA0 PID (INTR/Bulk IN and OUT endpoints)
1599 * Writing to this field sets the Endpoint DPID (DPID)
1600 * field in this register to DATA0. Set Even
1601 * (micro)frame (SetEvenFr) (ISO IN and OUT Endpoints)
1602 * Writing to this field sets the Even/Odd
1603 * (micro)frame (EO_FrNum) field to even (micro)
1606 unsigned setd0pid:1;
1607 /** Set DATA1 PID (INTR/Bulk IN and OUT endpoints)
1608 * Writing to this field sets the Endpoint DPID (DPID)
1609 * field in this register to DATA1 Set Odd
1610 * (micro)frame (SetOddFr) (ISO IN and OUT Endpoints)
1611 * Writing to this field sets the Even/Odd
1612 * (micro)frame (EO_FrNum) field to odd (micro) frame.
1614 unsigned setd1pid:1;
1616 /** Endpoint Disable */
1618 /** Endpoint Enable */
1624 * This union represents the bit fields in the Device EP Transfer
1625 * Size Register. Read the register into the <i>d32</i> member then
1626 * set/clear the bits using the <i>b</i>it elements.
1628 typedef union deptsiz_data {
1629 /** raw register data */
1631 /** register bits */
1633 /** Transfer size */
1634 unsigned xfersize:19;
1635 /** Max packet count for EP (pow(2,10)-1) */
1636 #define MAX_PKT_CNT 1023
1639 /** Multi Count - Periodic IN endpoints */
1641 unsigned reserved:1;
1646 * This union represents the bit fields in the Device EP 0 Transfer
1647 * Size Register. Read the register into the <i>d32</i> member then
1648 * set/clear the bits using the <i>b</i>it elements.
1650 typedef union deptsiz0_data {
1651 /** raw register data */
1653 /** register bits */
1655 /** Transfer size */
1656 unsigned xfersize:7;
1658 unsigned reserved7_18:12;
1662 unsigned reserved21_28:8;
1663 /**Setup Packet Count (DOEPTSIZ0 Only) */
1665 unsigned reserved31;
1669 /////////////////////////////////////////////////
1670 // DMA Descriptor Specific Structures
1673 /** Buffer status definitions */
1675 #define BS_HOST_READY 0x0
1676 #define BS_DMA_BUSY 0x1
1677 #define BS_DMA_DONE 0x2
1678 #define BS_HOST_BUSY 0x3
1680 /** Receive/Transmit status definitions */
1682 #define RTS_SUCCESS 0x0
1683 #define RTS_BUFFLUSH 0x1
1684 #define RTS_RESERVED 0x2
1685 #define RTS_BUFERR 0x3
1688 * This union represents the bit fields in the DMA Descriptor
1689 * status quadlet. Read the quadlet into the <i>d32</i> member then
1690 * set/clear the bits using the <i>b</i>it, <i>b_iso_out</i> and
1691 * <i>b_iso_in</i> elements.
1693 typedef union dev_dma_desc_sts {
1694 /** raw register data */
1698 /** Received number of bytes */
1700 /** NAK bit - only for OUT EPs */
1702 unsigned reserved17_22:6;
1703 /** Multiple Transfer - only for OUT EPs */
1705 /** Setup Packet received - only for OUT EPs */
1707 /** Interrupt On Complete */
1713 /** Receive Status */
1715 /** Buffer Status */
1719 //#ifdef DWC_EN_ISOC
1720 /** iso out quadlet bits */
1722 /** Received number of bytes */
1723 unsigned rxbytes:11;
1725 unsigned reserved11:1;
1727 unsigned framenum:11;
1728 /** Received ISO Data PID */
1730 /** Interrupt On Complete */
1736 /** Receive Status */
1738 /** Buffer Status */
1742 /** iso in quadlet bits */
1744 /** Transmited number of bytes */
1745 unsigned txbytes:12;
1747 unsigned framenum:11;
1748 /** Transmited ISO Data PID */
1750 /** Interrupt On Complete */
1756 /** Transmit Status */
1758 /** Buffer Status */
1761 //#endif /* DWC_EN_ISOC */
1762 } dev_dma_desc_sts_t;
1765 * DMA Descriptor structure
1767 * DMA Descriptor structure contains two quadlets:
1768 * Status quadlet and Data buffer pointer.
1770 typedef struct dwc_otg_dev_dma_desc {
1771 /** DMA Descriptor status quadlet */
1772 dev_dma_desc_sts_t status;
1773 /** DMA Descriptor data buffer pointer */
1775 } dwc_otg_dev_dma_desc_t;
1778 * The dwc_otg_dev_if structure contains information needed to manage
1779 * the DWC_otg controller acting in device mode. It represents the
1780 * programming view of the device-specific aspects of the controller.
1782 typedef struct dwc_otg_dev_if {
1783 /** Pointer to device Global registers.
1784 * Device Global Registers starting at offset 800h
1786 dwc_otg_device_global_regs_t *dev_global_regs;
1787 #define DWC_DEV_GLOBAL_REG_OFFSET 0x800
1790 * Device Logical IN Endpoint-Specific Registers 900h-AFCh
1792 dwc_otg_dev_in_ep_regs_t *in_ep_regs[MAX_EPS_CHANNELS];
1793 #define DWC_DEV_IN_EP_REG_OFFSET 0x900
1794 #define DWC_EP_REG_OFFSET 0x20
1796 /** Device Logical OUT Endpoint-Specific Registers B00h-CFCh */
1797 dwc_otg_dev_out_ep_regs_t *out_ep_regs[MAX_EPS_CHANNELS];
1798 #define DWC_DEV_OUT_EP_REG_OFFSET 0xB00
1800 /* Device configuration information */
1801 uint8_t speed; /**< Device Speed 0: Unknown, 1: LS, 2:FS, 3: HS */
1802 uint8_t num_in_eps; /**< Number # of Tx EP range: 0-15 exept ep0 */
1803 uint8_t num_out_eps; /**< Number # of Rx EP range: 0-15 exept ep 0*/
1805 /** Size of periodic FIFOs (Bytes) */
1806 uint16_t perio_tx_fifo_size[MAX_PERIO_FIFOS];
1808 /** Size of Tx FIFOs (Bytes) */
1809 uint16_t tx_fifo_size[MAX_TX_FIFOS];
1811 /** Thresholding enable flags and length varaiables **/
1813 uint16_t iso_tx_thr_en;
1814 uint16_t non_iso_tx_thr_en;
1816 uint16_t rx_thr_length;
1817 uint16_t tx_thr_length;
1820 * Pointers to the DMA Descriptors for EP0 Control
1821 * transfers (virtual and physical)
1824 /** 2 descriptors for SETUP packets */
1825 dwc_dma_t dma_setup_desc_addr[2];
1826 dwc_otg_dev_dma_desc_t *setup_desc_addr[2];
1828 /** Pointer to Descriptor with latest SETUP packet */
1829 dwc_otg_dev_dma_desc_t *psetup;
1831 /** Index of current SETUP handler descriptor */
1832 uint32_t setup_desc_index;
1834 /** Descriptor for Data In or Status In phases */
1835 dwc_dma_t dma_in_desc_addr;
1836 dwc_otg_dev_dma_desc_t *in_desc_addr;
1838 /** Descriptor for Data Out or Status Out phases */
1839 dwc_dma_t dma_out_desc_addr;
1840 dwc_otg_dev_dma_desc_t *out_desc_addr;
1842 /** Setup Packet Detected - if set clear NAK when queueing */
1844 /** Isoc ep pointer on which incomplete happens */
1849 /////////////////////////////////////////////////
1850 // Host Mode Register Structures
1853 * The Host Global Registers structure defines the size and relative
1854 * field offsets for the Host Mode Global Registers. Host Global
1855 * Registers offsets 400h-7FFh.
1857 typedef struct dwc_otg_host_global_regs {
1858 /** Host Configuration Register. <i>Offset: 400h</i> */
1859 volatile uint32_t hcfg;
1860 /** Host Frame Interval Register. <i>Offset: 404h</i> */
1861 volatile uint32_t hfir;
1862 /** Host Frame Number / Frame Remaining Register. <i>Offset: 408h</i> */
1863 volatile uint32_t hfnum;
1864 /** Reserved. <i>Offset: 40Ch</i> */
1865 uint32_t reserved40C;
1866 /** Host Periodic Transmit FIFO/ Queue Status Register. <i>Offset: 410h</i> */
1867 volatile uint32_t hptxsts;
1868 /** Host All Channels Interrupt Register. <i>Offset: 414h</i> */
1869 volatile uint32_t haint;
1870 /** Host All Channels Interrupt Mask Register. <i>Offset: 418h</i> */
1871 volatile uint32_t haintmsk;
1872 /** Host Frame List Base Address Register . <i>Offset: 41Ch</i> */
1873 volatile uint32_t hflbaddr;
1874 } dwc_otg_host_global_regs_t;
1877 * This union represents the bit fields in the Host Configuration Register.
1878 * Read the register into the <i>d32</i> member then set/clear the bits using
1879 * the <i>b</i>it elements. Write the <i>d32</i> member to the hcfg register.
1881 typedef union hcfg_data {
1882 /** raw register data */
1885 /** register bits */
1887 /** FS/LS Phy Clock Select */
1888 unsigned fslspclksel:2;
1889 #define DWC_HCFG_30_60_MHZ 0
1890 #define DWC_HCFG_48_MHZ 1
1891 #define DWC_HCFG_6_MHZ 2
1893 /** FS/LS Only Support */
1894 unsigned fslssupp:1;
1895 unsigned reserved3_6:4;
1896 /** Enable 32-KHz Suspend Mode */
1897 unsigned ena32khzs:1;
1898 /** Resume Validation Periiod */
1899 unsigned resvalid:8;
1900 unsigned reserved16_22:7;
1901 /** Enable Scatter/gather DMA in Host mode */
1903 /** Frame List Entries */
1904 unsigned frlisten:2;
1905 /** Enable Periodic Scheduling */
1906 unsigned perschedena:1;
1907 unsigned reserved27_30:4;
1908 unsigned modechtimen:1;
1913 * This union represents the bit fields in the Host Frame Remaing/Number
1916 typedef union hfir_data {
1917 /** raw register data */
1920 /** register bits */
1923 unsigned hfirrldctrl:1;
1924 unsigned reserved:15;
1929 * This union represents the bit fields in the Host Frame Remaing/Number
1932 typedef union hfnum_data {
1933 /** raw register data */
1936 /** register bits */
1939 #define DWC_HFNUM_MAX_FRNUM 0x3FFF
1944 typedef union hptxsts_data {
1945 /** raw register data */
1948 /** register bits */
1950 unsigned ptxfspcavail:16;
1951 unsigned ptxqspcavail:8;
1952 /** Top of the Periodic Transmit Request Queue
1953 * - bit 24 - Terminate (last entry for the selected channel)
1954 * - bits 26:25 - Token Type
1955 * - 2'b00 - Zero length
1958 * - bits 30:27 - Channel Number
1959 * - bit 31 - Odd/even microframe
1961 unsigned ptxqtop_terminate:1;
1962 unsigned ptxqtop_token:2;
1963 unsigned ptxqtop_chnum:4;
1964 unsigned ptxqtop_odd:1;
1969 * This union represents the bit fields in the Host Port Control and Status
1970 * Register. Read the register into the <i>d32</i> member then set/clear the
1971 * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
1974 typedef union hprt0_data {
1975 /** raw register data */
1977 /** register bits */
1979 unsigned prtconnsts:1;
1980 unsigned prtconndet:1;
1982 unsigned prtenchng:1;
1983 unsigned prtovrcurract:1;
1984 unsigned prtovrcurrchng:1;
1988 unsigned reserved9:1;
1989 unsigned prtlnsts:2;
1991 unsigned prttstctl:4;
1993 #define DWC_HPRT0_PRTSPD_HIGH_SPEED 0
1994 #define DWC_HPRT0_PRTSPD_FULL_SPEED 1
1995 #define DWC_HPRT0_PRTSPD_LOW_SPEED 2
1996 unsigned reserved19_31:13;
2001 * This union represents the bit fields in the Host All Interrupt
2004 typedef union haint_data {
2005 /** raw register data */
2007 /** register bits */
2025 unsigned reserved:16;
2030 unsigned reserved:16;
2035 * This union represents the bit fields in the Host All Interrupt
2038 typedef union haintmsk_data {
2039 /** raw register data */
2041 /** register bits */
2059 unsigned reserved:16;
2064 unsigned reserved:16;
2069 * Host Channel Specific Registers. <i>500h-5FCh</i>
2071 typedef struct dwc_otg_hc_regs {
2072 /** Host Channel 0 Characteristic Register. <i>Offset: 500h + (chan_num * 20h) + 00h</i> */
2073 volatile uint32_t hcchar;
2074 /** Host Channel 0 Split Control Register. <i>Offset: 500h + (chan_num * 20h) + 04h</i> */
2075 volatile uint32_t hcsplt;
2076 /** Host Channel 0 Interrupt Register. <i>Offset: 500h + (chan_num * 20h) + 08h</i> */
2077 volatile uint32_t hcint;
2078 /** Host Channel 0 Interrupt Mask Register. <i>Offset: 500h + (chan_num * 20h) + 0Ch</i> */
2079 volatile uint32_t hcintmsk;
2080 /** Host Channel 0 Transfer Size Register. <i>Offset: 500h + (chan_num * 20h) + 10h</i> */
2081 volatile uint32_t hctsiz;
2082 /** Host Channel 0 DMA Address Register. <i>Offset: 500h + (chan_num * 20h) + 14h</i> */
2083 volatile uint32_t hcdma;
2084 volatile uint32_t reserved;
2085 /** Host Channel 0 DMA Buffer Address Register. <i>Offset: 500h + (chan_num * 20h) + 1Ch</i> */
2086 volatile uint32_t hcdmab;
2087 } dwc_otg_hc_regs_t;
2090 * This union represents the bit fields in the Host Channel Characteristics
2091 * Register. Read the register into the <i>d32</i> member then set/clear the
2092 * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2095 typedef union hcchar_data {
2096 /** raw register data */
2099 /** register bits */
2101 /** Maximum packet size in bytes */
2104 /** Endpoint number */
2107 /** 0: OUT, 1: IN */
2110 unsigned reserved:1;
2112 /** 0: Full/high speed device, 1: Low speed device */
2115 /** 0: Control, 1: Isoc, 2: Bulk, 3: Intr */
2118 /** Packets per frame for periodic transfers. 0 is reserved. */
2119 unsigned multicnt:2;
2121 /** Device address */
2125 * Frame to transmit periodic transaction.
2130 /** Channel disable */
2133 /** Channel enable */
2138 typedef union hcsplt_data {
2139 /** raw register data */
2142 /** register bits */
2150 /** Transaction Position */
2152 #define DWC_HCSPLIT_XACTPOS_MID 0
2153 #define DWC_HCSPLIT_XACTPOS_END 1
2154 #define DWC_HCSPLIT_XACTPOS_BEGIN 2
2155 #define DWC_HCSPLIT_XACTPOS_ALL 3
2157 /** Do Complete Split */
2158 unsigned compsplt:1;
2161 unsigned reserved:14;
2169 * This union represents the bit fields in the Host All Interrupt
2172 typedef union hcint_data {
2173 /** raw register data */
2175 /** register bits */
2177 /** Transfer Complete */
2178 unsigned xfercomp:1;
2179 /** Channel Halted */
2183 /** STALL Response Received */
2185 /** NAK Response Received */
2187 /** ACK Response Received */
2189 /** NYET Response Received */
2191 /** Transaction Err */
2195 /** Frame Overrun */
2196 unsigned frmovrun:1;
2197 /** Data Toggle Error */
2198 unsigned datatglerr:1;
2199 /** Buffer Not Available (only for DDMA mode) */
2201 /** Exessive transaction error (only for DDMA mode) */
2202 unsigned xcs_xact:1;
2203 /** Frame List Rollover interrupt */
2204 unsigned frm_list_roll:1;
2206 unsigned reserved14_31:18;
2211 * This union represents the bit fields in the Host Channel Interrupt Mask
2212 * Register. Read the register into the <i>d32</i> member then set/clear the
2213 * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2214 * hcintmsk register.
2216 typedef union hcintmsk_data {
2217 /** raw register data */
2220 /** register bits */
2222 unsigned xfercompl:1;
2231 unsigned frmovrun:1;
2232 unsigned datatglerr:1;
2234 unsigned xcs_xact:1;
2235 unsigned frm_list_roll:1;
2236 unsigned reserved14_31:18;
2241 * This union represents the bit fields in the Host Channel Transfer Size
2242 * Register. Read the register into the <i>d32</i> member then set/clear the
2243 * bits using the <i>b</i>it elements. Write the <i>d32</i> member to the
2247 typedef union hctsiz_data {
2248 /** raw register data */
2251 /** register bits */
2253 /** Total transfer size in bytes */
2254 unsigned xfersize:19;
2256 /** Data packets to transfer */
2260 * Packet ID for next data packet
2264 * 3: MDATA (non-Control), SETUP (Control)
2267 #define DWC_HCTSIZ_DATA0 0
2268 #define DWC_HCTSIZ_DATA1 2
2269 #define DWC_HCTSIZ_DATA2 1
2270 #define DWC_HCTSIZ_MDATA 3
2271 #define DWC_HCTSIZ_SETUP 3
2273 /** Do PING protocol when 1 */
2277 /** register bits */
2279 /** Scheduling information */
2282 /** Number of transfer descriptors.
2285 * 256 only for HS isochronous endpoint.
2289 /** Data packets to transfer */
2290 unsigned reserved16_28:13;
2293 * Packet ID for next data packet
2297 * 3: MDATA (non-Control)
2301 /** Do PING protocol when 1 */
2307 * This union represents the bit fields in the Host DMA Address
2308 * Register used in Descriptor DMA mode.
2310 typedef union hcdma_data {
2311 /** raw register data */
2313 /** register bits */
2315 unsigned reserved0_2:3;
2316 /** Current Transfer Descriptor. Not used for ISOC */
2318 /** Start Address of Descriptor List */
2319 unsigned dma_addr:21;
2324 * This union represents the bit fields in the DMA Descriptor
2325 * status quadlet for host mode. Read the quadlet into the <i>d32</i> member then
2326 * set/clear the bits using the <i>b</i>it elements.
2328 typedef union host_dma_desc_sts {
2329 /** raw register data */
2333 /* for non-isochronous */
2335 /** Number of bytes */
2336 unsigned n_bytes:17;
2337 /** QTD offset to jump when Short Packet received - only for IN EPs */
2338 unsigned qtd_offset:6;
2340 * Set to request the core to jump to alternate QTD if
2341 * Short Packet received - only for IN EPs
2345 * Setup Packet bit. When set indicates that buffer contains
2349 /** Interrupt On Complete */
2353 unsigned reserved27:1;
2356 #define DMA_DESC_STS_PKTERR 1
2357 unsigned reserved30:1;
2361 /* for isochronous */
2363 /** Number of bytes */
2364 unsigned n_bytes:12;
2365 unsigned reserved12_24:13;
2366 /** Interrupt On Complete */
2368 unsigned reserved26_27:2;
2371 unsigned reserved30:1;
2375 } host_dma_desc_sts_t;
2377 #define MAX_DMA_DESC_SIZE 131071
2378 #define MAX_DMA_DESC_NUM_GENERIC 64
2379 #define MAX_DMA_DESC_NUM_HS_ISOC 256
2380 #define MAX_FRLIST_EN_NUM 64
2382 * Host-mode DMA Descriptor structure
2384 * DMA Descriptor structure contains two quadlets:
2385 * Status quadlet and Data buffer pointer.
2387 typedef struct dwc_otg_host_dma_desc {
2388 /** DMA Descriptor status quadlet */
2389 host_dma_desc_sts_t status;
2390 /** DMA Descriptor data buffer pointer */
2392 } dwc_otg_host_dma_desc_t;
2394 /** OTG Host Interface Structure.
2396 * The OTG Host Interface Structure structure contains information
2397 * needed to manage the DWC_otg controller acting in host mode. It
2398 * represents the programming view of the host-specific aspects of the
2401 typedef struct dwc_otg_host_if {
2402 /** Host Global Registers starting at offset 400h.*/
2403 dwc_otg_host_global_regs_t *host_global_regs;
2404 #define DWC_OTG_HOST_GLOBAL_REG_OFFSET 0x400
2406 /** Host Port 0 Control and Status Register */
2407 volatile uint32_t *hprt0;
2408 #define DWC_OTG_HOST_PORT_REGS_OFFSET 0x440
2410 /** Host Channel Specific Registers at offsets 500h-5FCh. */
2411 dwc_otg_hc_regs_t *hc_regs[MAX_EPS_CHANNELS];
2412 #define DWC_OTG_HOST_CHAN_REGS_OFFSET 0x500
2413 #define DWC_OTG_CHAN_REGS_OFFSET 0x20
2415 /* Host configuration information */
2416 /** Number of Host Channels (range: 1-16) */
2417 uint8_t num_host_channels;
2418 /** Periodic EPs supported (0: no, 1: yes) */
2419 uint8_t perio_eps_supported;
2420 /** Periodic Tx FIFO Size (Only 1 host periodic Tx FIFO) */
2421 uint16_t perio_tx_fifo_size;
2423 } dwc_otg_host_if_t;
2426 * This union represents the bit fields in the Power and Clock Gating Control
2427 * Register. Read the register into the <i>d32</i> member then set/clear the
2428 * bits using the <i>b</i>it elements.
2430 typedef union pcgcctl_data {
2431 /** raw register data */
2434 /** register bits */
2437 unsigned stoppclk:1;
2439 unsigned gatehclk:1;
2442 /** Reset Power Down Modules */
2443 unsigned rstpdwnmodule:1;
2445 unsigned reserved:1;
2446 /** Enable Sleep Clock Gating (Enbl_L1Gating) */
2447 unsigned enbl_sleep_gating:1;
2448 /** PHY In Sleep (PhySleep) */
2449 unsigned phy_in_sleep:1;
2451 unsigned deep_sleep:1;
2452 unsigned resetaftsusp:1;
2453 unsigned restoremode:1;
2454 unsigned enbl_extnd_hiber:1;
2455 unsigned extnd_hiber_pwrclmp:1;
2456 unsigned extnd_hiber_switch:1;
2457 unsigned ess_reg_restored:1;
2458 unsigned prt_clk_sel:2;
2459 unsigned port_power:1;
2460 unsigned max_xcvrselect:2;
2461 unsigned max_termsel:1;
2462 unsigned mac_dev_addr:7;
2463 unsigned p2hd_dev_enum_spd:2;
2464 unsigned p2hd_prt_spd:2;
2465 unsigned if_dev_mode:1;
2470 * This union represents the bit fields in the Global Data FIFO Software
2471 * Configuration Register. Read the register into the <i>d32</i> member then
2472 * set/clear the bits using the <i>b</i>it elements.
2474 typedef union gdfifocfg_data {
2475 /* raw register data */
2477 /** register bits */
2479 /** OTG Data FIFO depth */
2480 unsigned gdfifocfg:16;
2481 /** Start address of EP info controller */
2482 unsigned epinfobase:16;
2487 * This union represents the bit fields in the Global Power Down Register
2488 * Register. Read the register into the <i>d32</i> member then set/clear the
2489 * bits using the <i>b</i>it elements.
2491 typedef union gpwrdn_data {
2492 /* raw register data */
2495 /** register bits */
2497 /** PMU Interrupt Select */
2498 unsigned pmuintsel:1;
2503 /** Power Down Clamp */
2504 unsigned pwrdnclmp:1;
2505 /** Power Down Reset */
2506 unsigned pwrdnrstn:1;
2507 /** Power Down Switch */
2508 unsigned pwrdnswtch:1;
2510 unsigned dis_vbus:1;
2511 /** Line State Change */
2512 unsigned lnstschng:1;
2513 /** Line state change mask */
2514 unsigned lnstchng_msk:1;
2515 /** Reset Detected */
2517 /** Reset Detect mask */
2518 unsigned rst_det_msk:1;
2519 /** Disconnect Detected */
2520 unsigned disconn_det:1;
2521 /** Disconnect Detect mask */
2522 unsigned disconn_det_msk:1;
2523 /** Connect Detected*/
2524 unsigned connect_det:1;
2525 /** Connect Detected Mask*/
2526 unsigned connect_det_msk:1;
2529 /** SRP Detect mask */
2530 unsigned srp_det_msk:1;
2531 /** Status Change Interrupt */
2532 unsigned sts_chngint:1;
2533 /** Status Change Interrupt Mask */
2534 unsigned sts_chngint_msk:1;
2536 unsigned linestate:2;
2537 /** Indicates current mode(status of IDDIG signal) */
2539 /** B Session Valid signal status*/
2540 unsigned bsessvld:1;
2541 /** ADP Event Detected */
2543 /** Multi Valued ID pin */
2544 unsigned mult_val_id_bc:5;
2545 /** Reserved 24_31 */
2546 unsigned reserved29_31:3;