/// Buffer Page Pointer List, Each element in the list is a 4K page aligned, physical memory address. The lower 12 bits in each pointer are reserved (except for the first one) as each memory pointer must reference the start of a 4K page
volatileuint32_toffset:12;///< This field is a value that is an offset, expressed in bytes, from the beginning of a buffer.
volatileuint32_tpage_select:3;///< These bits are set by software to indicate which of the buffer page pointers the offset field in this slot should be concatenated to produce the starting memory address for this transaction. The valid range of values for this field is 0 to 6
uint32_tint_on_complete:1;///< If this bit is set to a one, it specifies that when this transaction completes, the Host Controller should issue an interrupt at the next interrupt threshold
volatileuint32_tlength:12;///< For an OUT, this field is the number of data bytes the host controller will send during the transaction. The host controller is not required to update this field to reflect the actual number of bytes transferred during the transfer
///< For an IN, the initial value of the field is the number of bytes the host expects the endpoint to deliver. During the status update, the host controller writes back the number of bytes successfully received. The value in this register is the actual byte count
// iTD Status
volatileuint32_terror:1;///< Set to a one by the Host Controller during status update in the case where the host did not receive a valid response from the device (Timeout, CRC, Bad PID, etc.). This bit may only be set for isochronous IN transactions.
volatileuint32_tbabble_err:1;///< Set to a 1 by the Host Controller during status update when a babble is detected during the transaction
volatileuint32_tbuffer_err:1;///< Set to a 1 by the Host Controller during status update to indicate that the Host Controller is unable to keep up with the reception of incoming data (overrun) or is unable to supply data fast enough during transmission (underrun).
volatileuint32_tactive:1;///< Set to 1 by software to enable the execution of an isochronous transaction by the Host Controller
uint32_tdev_addr:7;///< This field selects the specific device serving as the data source or sink.
uint32_t:1;///< reserved
uint32_tep_number:4;///< This 4-bit field selects the particular endpoint number on the device serving as the data source or sink.
uint32_t:4;///< This field is reserved and should be set to zero.
uint32_thub_addr:7;///< This field holds the device address of the transaction translators’ hub.
uint32_t:1;///< reserved
uint32_tport_number:7;///< This field is the port number of the recipient transaction translator.
uint32_tdirection:1;///< 0 = OUT; 1 = IN. This field encodes whether the full-speed transaction should be an IN or OUT.
uint32_t:0;// padding to the end of current storage unit
// Word 2: Micro-frame Schedule Control
uint8_tint_smask;///< This field (along with the Activeand SplitX-statefields in the Statusbyte) are used to determine during which micro-frames the host controller should execute complete-split transactions
uint8_tfl_int_cmask;///< This field (along with the Activeand SplitX-statefields in the Statusbyte) are used to determine during which micro-frames the host controller should execute start-split transactions.
// Status [7:0] TODO indentical to qTD Token'status --> refractor later
volatileuint32_t:1;// reserved
volatileuint32_tsplit_state:1;
volatileuint32_tmissed_uframe:1;
volatileuint32_txact_err:1;
volatileuint32_tbabble_err:1;
volatileuint32_tbuffer_err:1;
volatileuint32_terror:1;
volatileuint32_tactive:1;
// Micro-frame Schedule Control
volatileuint32_tcmask_progress:8;///< This field is used by the host controller to record which split-completes have been executed. See Section 4.12.3.3.2 for behavioral requirements.
volatileuint32_ttotal_bytes:10;///< This field is initialized by software to the total number of bytes expected in this transfer. Maximum value is 1023
volatileuint32_t:4;///< reserved
volatileuint32_tpage_select:1;///< Used to indicate which data page pointer should be concatenated with the CurrentOffsetfield to construct a data buffer pointer
uint32_tint_on_complete:1;///< Do not interrupt when transaction is complete. 1 = Do interrupt when transaction is complete
uint32_t:0;// padding to the end of current storage unit
/// Word 4-5: Buffer Pointer List
uint32_tbuffer[2];// buffer[1] TP: Transaction Position - T-Count: Transaction Count
uint32_tperiodic_enable:1;///< This bit controls whether the host controller skips processing the Periodic Schedule. Values mean: 0b Do not process the Periodic Schedule 1b Use the PERIODICLISTBASE register to access the Periodic Schedule.
uint32_tasync_enable:1;///< This bit controls whether the host controller skips processing the Asynchronous Schedule. Values mean: 0b Do not process the Asynchronous Schedule 1b Use the ASYNCLISTADDR register to access the Asynchronous Schedule.
uint32_tnxp_framelist_size_msb:1;///< NXP customized : Bit 2 of the Frame List Size bits \n 011b: 128 elements \n 100b: 64 elements \n 101b: 32 elements \n 110b: 16 elements \n 111b: 8 elements
uint32_tport_change_detect:1;///< Set when PortOwner or ForcePortResume change from 0 -> 1
uint32_tframelist_rollover:1;///< R/WC The Host Controller sets this bit to a one when the Frame List Index(see Section 2.3.4) rolls over from its maximum value to zero. The exact value at which the rollover occurs depends on the frame list size. For example, if the frame list size (as programmed in the Frame List Sizefield of the USBCMD register) is 1024, the Frame Index Registerrolls over every time FRINDEX[13] toggles. Similarly, if the size is 512, the Host Controller sets this bit to a one every time FRINDEX[12] toggles.
uint32_tpci_host_system_error:1;///< R/WC (not used by NXP) The Host Controller sets this bit to 1 when a serious error occurs during a host system access involving the Host Controller module. In a PCI system, conditions that set this bit to 1 include PCI Parity error, PCI Master Abort, and PCI Target Abort. When this error occurs, the Host Controller clears the Run/Stop bit in the Command register to prevent further execution of the scheduled TDs.
uint32_tasync_adv:1;///< Async Advance interrupt
uint32_t:1;
uint32_tnxp_int_sof:1;///< NXP customized: this bit will be set every 125us and can be used by host controller driver as a time base.
uint32_t:4;
uint32_thc_halted:1;///< Opposite value to run_stop bit.
uint32_treclamation:1;///< Used to detect empty async shecudle
uint32_tperiodic_status:1;///< Periodic schedule status
uint32_tasync_status:1;///< Async schedule status
uint32_t:2;
uint32_tnxp_int_async:1;///< NXP customized: This bit is set by the Host Controller when the cause of an interrupt is a completion of a USB transaction where the Transfer Descriptor (TD) has an interrupt on complete (IOC) bit set andthe TD was from the asynchronous schedule. This bit is also set by the Host when a short packet is detected andthe packet is on the asynchronous schedule.
uint32_tnxp_int_period:1;///< NXP customized: This bit is set by the Host Controller when the cause of an interrupt is a completion of a USB transaction where the Transfer Descriptor (TD) has an interrupt on complete (IOC) bit set andthe TD was from the periodic schedule.
uint32_tcurrent_connect_status:1;///< 0: No device, 1: Device is present on port
uint32_tconnect_status_change:1;///< Change in Current Connect Status
uint32_tport_enabled:1;///< Ports can only be enabled by HC as a part of the reset and enable. SW can write 0 to disable
uint32_tport_enable_change:1;///< Port Enabled has changed
uint32_tover_current_active:1;///< Port has an over-current condition
uint32_tover_current_change:1;///< Change to Over-current Active
uint32_tforce_port_resume:1;///< Resume detected/driven on port. This functionality defined for manipulating this bit depends on the value of the Suspend bit.
uint32_tsuspend:1;///< Port in suspend state
uint32_tport_reset:1;///< 1=Port is in Reset. 0=Port is not in Reset
uint32_tnxp_phy_clock_disable:1;///< NXP customized: the PHY can be put into Low Power Suspend – Clock Disable when the downstream device has been put into suspend mode or when no downstream device is connected. Low power suspend is completely under the control of software. 0: enable PHY clock, 1: disable PHY clock
uint32_tnxp_port_force_fullspeed:1;///< NXP customized: Writing this bit to a 1 will force the port to only connect at Full Speed. It disables the chirp sequence that allowsthe port to identify itself as High Speed. This is useful for testing FS configurations with a HS host, hub or device.
uint32_t:1;
uint32_tnxp_port_speed:2;///< NXP customized: This register field indicates the speed atwhich the port is operating. For HS mode operation in the host controllerand HS/FS operation in the device controller the port routing steers data to the Protocol engine. For FS and LS mode operation in the host controller, the port routing steers data to the Protocol Engine w/ Embedded Transaction Translator. 0x0: Fullspeed, 0x1: Lowspeed, 0x2: Highspeed
uint32_t:0;// padding to the boundary of storage unit