04b6fa8330
facilities as well as support for the Octeon 2 family of SoCs. XXX Note that with our antediluvian assembler, we can't support some Octeon 2 instructions and fall back to using the old ones instead.
2537 lines
161 KiB
C
2537 lines
161 KiB
C
/***********************license start***************
|
|
* Copyright (c) 2003-2010 Cavium Networks (support@cavium.com). All rights
|
|
* reserved.
|
|
*
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are
|
|
* met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
*
|
|
* * Redistributions in binary form must reproduce the above
|
|
* copyright notice, this list of conditions and the following
|
|
* disclaimer in the documentation and/or other materials provided
|
|
* with the distribution.
|
|
|
|
* * Neither the name of Cavium Networks nor the names of
|
|
* its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written
|
|
* permission.
|
|
|
|
* This Software, including technical data, may be subject to U.S. export control
|
|
* laws, including the U.S. Export Administration Act and its associated
|
|
* regulations, and may be subject to export or import regulations in other
|
|
* countries.
|
|
|
|
* TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS"
|
|
* AND WITH ALL FAULTS AND CAVIUM NETWORKS MAKES NO PROMISES, REPRESENTATIONS OR
|
|
* WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO
|
|
* THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR
|
|
* DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM
|
|
* SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE,
|
|
* MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF
|
|
* VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR
|
|
* CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR
|
|
* PERFORMANCE OF THE SOFTWARE LIES WITH YOU.
|
|
***********************license end**************************************/
|
|
|
|
|
|
/**
|
|
* cvmx-uahcx-defs.h
|
|
*
|
|
* Configuration and status register (CSR) type definitions for
|
|
* Octeon uahcx.
|
|
*
|
|
* This file is auto generated. Do not edit.
|
|
*
|
|
* <hr>$Revision$<hr>
|
|
*
|
|
*/
|
|
#ifndef __CVMX_UAHCX_TYPEDEFS_H__
|
|
#define __CVMX_UAHCX_TYPEDEFS_H__
|
|
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_ASYNCLISTADDR(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_ASYNCLISTADDR(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000028ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_ASYNCLISTADDR(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000028ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_CONFIGFLAG(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_CONFIGFLAG(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000050ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_CONFIGFLAG(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000050ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_CTRLDSSEGMENT(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_CTRLDSSEGMENT(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000020ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_CTRLDSSEGMENT(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000020ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_FRINDEX(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_FRINDEX(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000001Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_FRINDEX(block_id) (CVMX_ADD_IO_SEG(0x00016F000000001Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_HCCAPBASE(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_HCCAPBASE(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000000ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_HCCAPBASE(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000000ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_HCCPARAMS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_HCCPARAMS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000008ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_HCCPARAMS(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000008ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_HCSPARAMS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_HCSPARAMS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000004ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_HCSPARAMS(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000004ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_INSNREG00(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_INSNREG00(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000090ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_INSNREG00(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000090ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_INSNREG03(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_INSNREG03(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000009Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_INSNREG03(block_id) (CVMX_ADD_IO_SEG(0x00016F000000009Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_INSNREG04(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_INSNREG04(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F00000000A0ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_INSNREG04(block_id) (CVMX_ADD_IO_SEG(0x00016F00000000A0ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_INSNREG06(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_INSNREG06(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F00000000E8ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_INSNREG06(block_id) (CVMX_ADD_IO_SEG(0x00016F00000000E8ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_INSNREG07(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_INSNREG07(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F00000000ECull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_INSNREG07(block_id) (CVMX_ADD_IO_SEG(0x00016F00000000ECull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_PERIODICLISTBASE(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_PERIODICLISTBASE(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000024ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_PERIODICLISTBASE(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000024ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_PORTSCX(unsigned long offset, unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((((offset >= 1) && (offset <= 2))) && ((block_id == 0))))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_PORTSCX(%lu,%lu) is invalid on this chip\n", offset, block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000050ull) + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 4;
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_PORTSCX(offset, block_id) (CVMX_ADD_IO_SEG(0x00016F0000000050ull) + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 4)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_USBCMD(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_USBCMD(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000010ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_USBCMD(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000010ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_USBINTR(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_USBINTR(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000018ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_USBINTR(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000018ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_EHCI_USBSTS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_EHCI_USBSTS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000014ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_EHCI_USBSTS(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000014ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCBULKCURRENTED(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCBULKCURRENTED(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000042Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCBULKCURRENTED(block_id) (CVMX_ADD_IO_SEG(0x00016F000000042Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCBULKHEADED(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCBULKHEADED(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000428ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCBULKHEADED(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000428ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCCOMMANDSTATUS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCCOMMANDSTATUS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000408ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCCOMMANDSTATUS(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000408ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCCONTROL(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCCONTROL(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000404ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCCONTROL(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000404ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCCONTROLCURRENTED(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCCONTROLCURRENTED(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000424ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCCONTROLCURRENTED(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000424ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCCONTROLHEADED(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCCONTROLHEADED(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000420ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCCONTROLHEADED(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000420ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCDONEHEAD(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCDONEHEAD(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000430ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCDONEHEAD(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000430ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCFMINTERVAL(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCFMINTERVAL(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000434ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCFMINTERVAL(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000434ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCFMNUMBER(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCFMNUMBER(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000043Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCFMNUMBER(block_id) (CVMX_ADD_IO_SEG(0x00016F000000043Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCFMREMAINING(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCFMREMAINING(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000438ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCFMREMAINING(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000438ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCHCCA(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCHCCA(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000418ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCHCCA(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000418ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCINTERRUPTDISABLE(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCINTERRUPTDISABLE(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000414ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCINTERRUPTDISABLE(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000414ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCINTERRUPTENABLE(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCINTERRUPTENABLE(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000410ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCINTERRUPTENABLE(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000410ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCINTERRUPTSTATUS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCINTERRUPTSTATUS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000040Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCINTERRUPTSTATUS(block_id) (CVMX_ADD_IO_SEG(0x00016F000000040Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCLSTHRESHOLD(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCLSTHRESHOLD(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000444ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCLSTHRESHOLD(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000444ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCPERIODCURRENTED(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCPERIODCURRENTED(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000041Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCPERIODCURRENTED(block_id) (CVMX_ADD_IO_SEG(0x00016F000000041Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCPERIODICSTART(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCPERIODICSTART(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000440ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCPERIODICSTART(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000440ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCREVISION(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCREVISION(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000400ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCREVISION(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000400ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCRHDESCRIPTORA(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCRHDESCRIPTORA(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000448ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCRHDESCRIPTORA(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000448ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCRHDESCRIPTORB(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCRHDESCRIPTORB(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000044Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCRHDESCRIPTORB(block_id) (CVMX_ADD_IO_SEG(0x00016F000000044Cull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCRHPORTSTATUSX(unsigned long offset, unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((((offset >= 1) && (offset <= 2))) && ((block_id == 0))))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCRHPORTSTATUSX(%lu,%lu) is invalid on this chip\n", offset, block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000450ull) + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 4;
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCRHPORTSTATUSX(offset, block_id) (CVMX_ADD_IO_SEG(0x00016F0000000450ull) + (((offset) & 3) + ((block_id) & 0) * 0x0ull) * 4)
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_HCRHSTATUS(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_HCRHSTATUS(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000450ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_HCRHSTATUS(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000450ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_INSNREG06(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_INSNREG06(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F0000000498ull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_INSNREG06(block_id) (CVMX_ADD_IO_SEG(0x00016F0000000498ull))
|
|
#endif
|
|
#if CVMX_ENABLE_CSR_ADDRESS_CHECKING
|
|
static inline uint64_t CVMX_UAHCX_OHCI0_INSNREG07(unsigned long block_id)
|
|
{
|
|
if (!(
|
|
(OCTEON_IS_MODEL(OCTEON_CN63XX) && ((block_id == 0)))))
|
|
cvmx_warn("CVMX_UAHCX_OHCI0_INSNREG07(%lu) is invalid on this chip\n", block_id);
|
|
return CVMX_ADD_IO_SEG(0x00016F000000049Cull);
|
|
}
|
|
#else
|
|
#define CVMX_UAHCX_OHCI0_INSNREG07(block_id) (CVMX_ADD_IO_SEG(0x00016F000000049Cull))
|
|
#endif
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_asynclistaddr
|
|
*
|
|
* ASYNCLISTADDR = Current Asynchronous List Address Register
|
|
*
|
|
* This 32-bit register contains the address of the next asynchronous queue head to be executed. If the host
|
|
* controller is in 64-bit mode (as indicated by a one in 64-bit Addressing Capability field in the
|
|
* HCCPARAMS register), then the most significant 32 bits of every control data structure address comes from
|
|
* the CTRLDSSEGMENT register (See Section 2.3.5). Bits [4:0] of this register cannot be modified by system
|
|
* software and will always return a zero when read. The memory structure referenced by this physical memory
|
|
* pointer is assumed to be 32-byte (cache line) aligned.
|
|
*/
|
|
union cvmx_uahcx_ehci_asynclistaddr
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_asynclistaddr_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t lpl : 27; /**< Link Pointer Low (LPL). These bits correspond to memory address signals [31:5],
|
|
respectively. This field may only reference a Queue Head (QH). */
|
|
uint32_t reserved_0_4 : 5;
|
|
#else
|
|
uint32_t reserved_0_4 : 5;
|
|
uint32_t lpl : 27;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_asynclistaddr_s cn63xx;
|
|
struct cvmx_uahcx_ehci_asynclistaddr_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_asynclistaddr cvmx_uahcx_ehci_asynclistaddr_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_configflag
|
|
*
|
|
* CONFIGFLAG = Configure Flag Register
|
|
* This register is in the auxiliary power well. It is only reset by hardware when the auxiliary power is initially
|
|
* applied or in response to a host controller reset.
|
|
*/
|
|
union cvmx_uahcx_ehci_configflag
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_configflag_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_1_31 : 31;
|
|
uint32_t cf : 1; /**< Configure Flag (CF) .Host software sets this bit as the last action in
|
|
its process of configuring the Host Controller (see Section 4.1). This bit controls the
|
|
default port-routing control logic. Bit values and side-effects are listed below.
|
|
0b: Port routing control logic default-routes each port to an implementation
|
|
dependent classic host controller.
|
|
1b: Port routing control logic default-routes all ports to this host controller. */
|
|
#else
|
|
uint32_t cf : 1;
|
|
uint32_t reserved_1_31 : 31;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_configflag_s cn63xx;
|
|
struct cvmx_uahcx_ehci_configflag_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_configflag cvmx_uahcx_ehci_configflag_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_ctrldssegment
|
|
*
|
|
* CTRLDSSEGMENT = Control Data Structure Segment Register
|
|
*
|
|
* This 32-bit register corresponds to the most significant address bits [63:32] for all EHCI data structures. If
|
|
* the 64-bit Addressing Capability field in HCCPARAMS is a zero, then this register is not used. Software
|
|
* cannot write to it and a read from this register will return zeros.
|
|
*
|
|
* If the 64-bit Addressing Capability field in HCCPARAMS is a one, then this register is used with the link
|
|
* pointers to construct 64-bit addresses to EHCI control data structures. This register is concatenated with the
|
|
* link pointer from either the PERIODICLISTBASE, ASYNCLISTADDR, or any control data structure link
|
|
* field to construct a 64-bit address.
|
|
*
|
|
* This register allows the host software to locate all control data structures within the same 4 Gigabyte
|
|
* memory segment.
|
|
*/
|
|
union cvmx_uahcx_ehci_ctrldssegment
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_ctrldssegment_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t ctrldsseg : 32; /**< Control Data Strucute Semgent Address Bit [63:32] */
|
|
#else
|
|
uint32_t ctrldsseg : 32;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_ctrldssegment_s cn63xx;
|
|
struct cvmx_uahcx_ehci_ctrldssegment_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_ctrldssegment cvmx_uahcx_ehci_ctrldssegment_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_frindex
|
|
*
|
|
* FRINDEX = Frame Index Register
|
|
* This register is used by the host controller to index into the periodic frame list. The register updates every
|
|
* 125 microseconds (once each micro-frame). Bits [N:3] are used to select a particular entry in the Periodic
|
|
* Frame List during periodic schedule execution. The number of bits used for the index depends on the size of
|
|
* the frame list as set by system software in the Frame List Size field in the USBCMD register.
|
|
* This register cannot be written unless the Host Controller is in the Halted state as indicated by the
|
|
* HCHalted bit. A write to this register while the Run/Stop bit is set to a one (USBCMD register) produces
|
|
* undefined results. Writes to this register also affect the SOF value.
|
|
*/
|
|
union cvmx_uahcx_ehci_frindex
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_frindex_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_14_31 : 18;
|
|
uint32_t fi : 14; /**< Frame Index. The value in this register increments at the end of each time frame (e.g.
|
|
micro-frame). Bits [N:3] are used for the Frame List current index. This means that each
|
|
location of the frame list is accessed 8 times (frames or micro-frames) before moving to
|
|
the next index. The following illustrates values of N based on the value of the Frame List
|
|
Size field in the USBCMD register.
|
|
USBCMD[Frame List Size] Number Elements N
|
|
00b (1024) 12
|
|
01b (512) 11
|
|
10b (256) 10
|
|
11b Reserved */
|
|
#else
|
|
uint32_t fi : 14;
|
|
uint32_t reserved_14_31 : 18;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_frindex_s cn63xx;
|
|
struct cvmx_uahcx_ehci_frindex_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_frindex cvmx_uahcx_ehci_frindex_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_hccapbase
|
|
*
|
|
* HCCAPBASE = Host Controller BASE Capability Register
|
|
*
|
|
*/
|
|
union cvmx_uahcx_ehci_hccapbase
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_hccapbase_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t hciversion : 16; /**< Host Controller Interface Version Number */
|
|
uint32_t reserved_8_15 : 8;
|
|
uint32_t caplength : 8; /**< Capabitlity Registers Length */
|
|
#else
|
|
uint32_t caplength : 8;
|
|
uint32_t reserved_8_15 : 8;
|
|
uint32_t hciversion : 16;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_hccapbase_s cn63xx;
|
|
struct cvmx_uahcx_ehci_hccapbase_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_hccapbase cvmx_uahcx_ehci_hccapbase_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_hccparams
|
|
*
|
|
* HCCPARAMS = Host Controller Capability Parameters
|
|
* Multiple Mode control (time-base bit functionality), addressing capability
|
|
*/
|
|
union cvmx_uahcx_ehci_hccparams
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_hccparams_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_16_31 : 16;
|
|
uint32_t eecp : 8; /**< EHCI Extended Capabilities Pointer. Default = Implementation Dependent.
|
|
This optional field indicates the existence of a capabilities list. A value of 00h indicates
|
|
no extended capabilities are implemented. A non-zero value in this register indicates the
|
|
offset in PCI configuration space of the first EHCI extended capability. The pointer value
|
|
must be 40h or greater if implemented to maintain the consistency of the PCI header
|
|
defined for this class of device. */
|
|
uint32_t ist : 4; /**< Isochronous Scheduling Threshold. Default = implementation dependent. This field
|
|
indicates, relative to the current position of the executing host controller, where software
|
|
can reliably update the isochronous schedule. When bit [7] is zero, the value of the least
|
|
significant 3 bits indicates the number of micro-frames a host controller can hold a set of
|
|
isochronous data structures (one or more) before flushing the state. When bit [7] is a
|
|
one, then host software assumes the host controller may cache an isochronous data
|
|
structure for an entire frame. Refer to Section 4.7.2.1 for details on how software uses
|
|
this information for scheduling isochronous transfers. */
|
|
uint32_t reserved_3_3 : 1;
|
|
uint32_t aspc : 1; /**< Asynchronous Schedule Park Capability. Default = Implementation dependent. If this
|
|
bit is set to a one, then the host controller supports the park feature for high-speed
|
|
queue heads in the Asynchronous Schedule. The feature can be disabled or enabled
|
|
and set to a specific level by using the Asynchronous Schedule Park Mode Enable and
|
|
Asynchronous Schedule Park Mode Count fields in the USBCMD register. */
|
|
uint32_t pflf : 1; /**< Programmable Frame List Flag. Default = Implementation dependent. If this bit is set
|
|
to a zero, then system software must use a frame list length of 1024 elements with this
|
|
host controller. The USBCMD register Frame List Size field is a read-only register and
|
|
should be set to zero.
|
|
If set to a one, then system software can specify and use a smaller frame list and
|
|
configure the host controller via the USBCMD register Frame List Size field. The frame
|
|
list must always be aligned on a 4K page boundary. This requirement ensures that the
|
|
frame list is always physically contiguous. */
|
|
uint32_t ac64 : 1; /**< 64-bit Addressing Capability1 . This field documents the addressing range capability of
|
|
this implementation. The value of this field determines whether software should use the
|
|
data structures defined in Section 3 (32-bit) or those defined in Appendix B (64-bit).
|
|
Values for this field have the following interpretation:
|
|
- 0: data structures using 32-bit address memory pointers
|
|
- 1: data structures using 64-bit address memory pointers */
|
|
#else
|
|
uint32_t ac64 : 1;
|
|
uint32_t pflf : 1;
|
|
uint32_t aspc : 1;
|
|
uint32_t reserved_3_3 : 1;
|
|
uint32_t ist : 4;
|
|
uint32_t eecp : 8;
|
|
uint32_t reserved_16_31 : 16;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_hccparams_s cn63xx;
|
|
struct cvmx_uahcx_ehci_hccparams_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_hccparams cvmx_uahcx_ehci_hccparams_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_hcsparams
|
|
*
|
|
* HCSPARAMS = Host Controller Structural Parameters
|
|
* This is a set of fields that are structural parameters: Number of downstream ports, etc.
|
|
*/
|
|
union cvmx_uahcx_ehci_hcsparams
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_hcsparams_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_24_31 : 8;
|
|
uint32_t dpn : 4; /**< Debug Port Number. Optional. This register identifies which of the host controller ports
|
|
is the debug port. The value is the port number (one-based) of the debug port. A nonzero
|
|
value in this field indicates the presence of a debug port. The value in this register
|
|
must not be greater than N_PORTS (see below). */
|
|
uint32_t reserved_17_19 : 3;
|
|
uint32_t p_indicator : 1; /**< Port Indicator. This bit indicates whether the ports support port
|
|
indicator control. When this bit is a one, the port status and control
|
|
registers include a read/writeable field for controlling the state of
|
|
the port indicator. */
|
|
uint32_t n_cc : 4; /**< Number of Companion Controller. This field indicates the number of
|
|
companion controllers associated with this USB 2.0 host controller.
|
|
A zero in this field indicates there are no companion host controllers.
|
|
Port-ownership hand-off is not supported. Only high-speed devices are
|
|
supported on the host controller root ports.
|
|
A value larger than zero in this field indicates there are companion USB 1.1 host
|
|
controller(s). Port-ownership hand-offs are supported. High, Full-and Low-speed
|
|
devices are supported on the host controller root ports. */
|
|
uint32_t n_pcc : 4; /**< Number of Ports per Companion Controller (N_PCC). This field indicates
|
|
the number of ports supported per companion host controller. It is used to
|
|
indicate the port routing configuration to system software. */
|
|
uint32_t prr : 1; /**< Port Routing Rules. This field indicates the method used by this implementation for
|
|
how all ports are mapped to companion controllers. The value of this field has
|
|
the following interpretation:
|
|
0 The first N_PCC ports are routed to the lowest numbered function
|
|
companion host controller, the next N_PCC port are routed to the next
|
|
lowest function companion controller, and so on.
|
|
1 The port routing is explicitly enumerated by the first N_PORTS elements
|
|
of the HCSP-PORTROUTE array. */
|
|
uint32_t reserved_5_6 : 2;
|
|
uint32_t ppc : 1; /**< Port Power Control. This field indicates whether the host controller
|
|
implementation includes port power control. A one in this bit indicates the ports have
|
|
port power switches. A zero in this bit indicates the port do not have port power
|
|
switches. The value of this field affects the functionality of the Port Power field
|
|
in each port status and control register (see Section 2.3.8). */
|
|
uint32_t n_ports : 4; /**< This field specifies the number of physical downstream ports implemented
|
|
on this host controller. The value of this field determines how many port registers are
|
|
addressable in the Operational Register Space (see Table 2-8). Valid values are in the
|
|
range of 1H to FH. A zero in this field is undefined. */
|
|
#else
|
|
uint32_t n_ports : 4;
|
|
uint32_t ppc : 1;
|
|
uint32_t reserved_5_6 : 2;
|
|
uint32_t prr : 1;
|
|
uint32_t n_pcc : 4;
|
|
uint32_t n_cc : 4;
|
|
uint32_t p_indicator : 1;
|
|
uint32_t reserved_17_19 : 3;
|
|
uint32_t dpn : 4;
|
|
uint32_t reserved_24_31 : 8;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_hcsparams_s cn63xx;
|
|
struct cvmx_uahcx_ehci_hcsparams_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_hcsparams cvmx_uahcx_ehci_hcsparams_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_insnreg00
|
|
*
|
|
* EHCI_INSNREG00 = EHCI Programmable Microframe Base Value Register (Synopsys Speicific)
|
|
* This register allows you to change the microframe length value (default is microframe SOF = 125 s) to reduce the simulation time.
|
|
*/
|
|
union cvmx_uahcx_ehci_insnreg00
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_insnreg00_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_14_31 : 18;
|
|
uint32_t mfmc : 13; /**< For byte interface (8-bits), <13:1> is used as the 1-microframe counter.
|
|
For word interface (16_bits> <12:1> is used as the 1-microframe counter with word
|
|
interface (16-bits). */
|
|
uint32_t en : 1; /**< Writing 1b1 enables this register.
|
|
Note: Do not enable this register for the gate-level netlist */
|
|
#else
|
|
uint32_t en : 1;
|
|
uint32_t mfmc : 13;
|
|
uint32_t reserved_14_31 : 18;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_insnreg00_s cn63xx;
|
|
struct cvmx_uahcx_ehci_insnreg00_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_insnreg00 cvmx_uahcx_ehci_insnreg00_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_insnreg03
|
|
*
|
|
* EHCI_INSNREG03 = EHCI Timing Adjust Register (Synopsys Speicific)
|
|
* This register allows you to change the timing of Phy Tx turnaround delay etc.
|
|
*/
|
|
union cvmx_uahcx_ehci_insnreg03
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_insnreg03_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_13_31 : 19;
|
|
uint32_t txtx_tadao : 3; /**< Tx-Tx turnaround Delay Add on. This field specifies the extra delays in phy_clks to
|
|
be added to the "Transmit to Transmit turnaround delay" value maintained in the core.
|
|
The default value of this register field is 0. This default value of 0 is sufficient
|
|
for most PHYs. But for some PHYs which puts wait states during the token packet, it
|
|
may be required to program a value greater than 0 to meet the transmit to transmit
|
|
minimum turnaround time. The recommendation to use the default value of 0 and change
|
|
it only if there is an issue with minimum transmit-to- transmit turnaround time. This
|
|
value should be programmed during core initialization and should not be changed afterwards. */
|
|
uint32_t reserved_9_9 : 1;
|
|
uint32_t ta_off : 8; /**< Time-Available Offset. This value indicates the additional number of bytes to be
|
|
accommodated for the time-available calculation. The USB traffic on the bus can be started
|
|
only when sufficient time is available to complete the packet within the EOF1 point. Refer
|
|
to the USB 2.0 specification for details of the EOF1 point. This time-available
|
|
calculation is done in the hardware, and can be further offset by programming a value in
|
|
this location.
|
|
Note: Time-available calculation is added for future flexibility. The application is not
|
|
required to program this field by default. */
|
|
uint32_t reserved_0_0 : 1;
|
|
#else
|
|
uint32_t reserved_0_0 : 1;
|
|
uint32_t ta_off : 8;
|
|
uint32_t reserved_9_9 : 1;
|
|
uint32_t txtx_tadao : 3;
|
|
uint32_t reserved_13_31 : 19;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_insnreg03_s cn63xx;
|
|
struct cvmx_uahcx_ehci_insnreg03_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_insnreg03 cvmx_uahcx_ehci_insnreg03_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_insnreg04
|
|
*
|
|
* EHCI_INSNREG04 = EHCI Debug Register (Synopsys Speicific)
|
|
* This register is used only for debug purposes.
|
|
*/
|
|
union cvmx_uahcx_ehci_insnreg04
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_insnreg04_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_6_31 : 26;
|
|
uint32_t auto_dis : 1; /**< Automatic feature disable.
|
|
1'b0: 0 by default, the automatic feature is enabled. The Suspend signal is deasserted
|
|
(logic level 1'b1) when run/stop is reset by software, but the hchalted bit is not
|
|
yet set.
|
|
1'b1: Disables the automatic feature, which takes all ports out of suspend when software
|
|
clears the run/stop bit. This is for backward compatibility.
|
|
This bit has an added functionality in release 2.80a and later. For systems where the host
|
|
is halted without waking up all ports out of suspend, the port can become stuck because
|
|
the PHYCLK is not running when the halt is programmed. To avoid this, the DWC H20AHB host
|
|
core automatically pulls ports out of suspend when the host is halted by software. This bit
|
|
is used to disable this automatic function. */
|
|
uint32_t nakrf_dis : 1; /**< NAK Reload Fix Disable.
|
|
1b0: NAK reload fix enabled.
|
|
1b1: NAK reload fix disabled. (Incorrect NAK reload transition at the end of a microframe
|
|
for backward compatibility with Release 2.40c. For more information see the USB 2.0
|
|
Host-AHB Release Notes. */
|
|
uint32_t reserved_3_3 : 1;
|
|
uint32_t pesd : 1; /**< Scales down port enumeration time.
|
|
1'b1: scale down enabled
|
|
1'b0: scale downd disabled
|
|
This is for simulation only. */
|
|
uint32_t hcp_fw : 1; /**< HCCPARAMS Field Writeable.
|
|
1'b1: The HCCPARAMS register's bits 17, 15:4, and 2:0 become writable.
|
|
1'b0: The HCCPARAMS register's bits 17, 15:4, and 2:0 are not writable. */
|
|
uint32_t hcp_rw : 1; /**< HCCPARAMS Reigster Writeable.
|
|
1'b1: The HCCPARAMS register becomes writable.
|
|
1'b0: The HCCPARAMS register is not writable. */
|
|
#else
|
|
uint32_t hcp_rw : 1;
|
|
uint32_t hcp_fw : 1;
|
|
uint32_t pesd : 1;
|
|
uint32_t reserved_3_3 : 1;
|
|
uint32_t nakrf_dis : 1;
|
|
uint32_t auto_dis : 1;
|
|
uint32_t reserved_6_31 : 26;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_insnreg04_s cn63xx;
|
|
struct cvmx_uahcx_ehci_insnreg04_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_insnreg04 cvmx_uahcx_ehci_insnreg04_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_insnreg06
|
|
*
|
|
* EHCI_INSNREG06 = EHCI AHB Error Status Register (Synopsys Speicific)
|
|
* This register contains AHB Error Status.
|
|
*/
|
|
union cvmx_uahcx_ehci_insnreg06
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_insnreg06_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t vld : 1; /**< AHB Error Captured. Indicator that an AHB error was encountered and values were captured.
|
|
To clear this field the application must write a 0 to it. */
|
|
uint32_t reserved_0_30 : 31;
|
|
#else
|
|
uint32_t reserved_0_30 : 31;
|
|
uint32_t vld : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_insnreg06_s cn63xx;
|
|
struct cvmx_uahcx_ehci_insnreg06_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_insnreg06 cvmx_uahcx_ehci_insnreg06_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_insnreg07
|
|
*
|
|
* EHCI_INSNREG07 = EHCI AHB Error Address Register (Synopsys Speicific)
|
|
* This register contains AHB Error Status.
|
|
*/
|
|
union cvmx_uahcx_ehci_insnreg07
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_insnreg07_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t err_addr : 32; /**< AHB Master Error Address. AHB address of the control phase at which the AHB error occurred */
|
|
#else
|
|
uint32_t err_addr : 32;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_insnreg07_s cn63xx;
|
|
struct cvmx_uahcx_ehci_insnreg07_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_insnreg07 cvmx_uahcx_ehci_insnreg07_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_periodiclistbase
|
|
*
|
|
* PERIODICLISTBASE = Periodic Frame List Base Address Register
|
|
*
|
|
* This 32-bit register contains the beginning address of the Periodic Frame List in the system memory. If the
|
|
* host controller is in 64-bit mode (as indicated by a one in the 64-bit Addressing Capability field in the
|
|
* HCCSPARAMS register), then the most significant 32 bits of every control data structure address comes
|
|
* from the CTRLDSSEGMENT register (see Section 2.3.5). System software loads this register prior to
|
|
* starting the schedule execution by the Host Controller (see 4.1). The memory structure referenced by this
|
|
* physical memory pointer is assumed to be 4-Kbyte aligned. The contents of this register are combined with
|
|
* the Frame Index Register (FRINDEX) to enable the Host Controller to step through the Periodic Frame List
|
|
* in sequence.
|
|
*/
|
|
union cvmx_uahcx_ehci_periodiclistbase
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_periodiclistbase_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t baddr : 20; /**< Base Address (Low). These bits correspond to memory address signals [31:12],respectively. */
|
|
uint32_t reserved_0_11 : 12;
|
|
#else
|
|
uint32_t reserved_0_11 : 12;
|
|
uint32_t baddr : 20;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_periodiclistbase_s cn63xx;
|
|
struct cvmx_uahcx_ehci_periodiclistbase_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_periodiclistbase cvmx_uahcx_ehci_periodiclistbase_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_portsc#
|
|
*
|
|
* PORTSCX = Port X Status and Control Register
|
|
* Default: 00002000h (w/PPC set to one); 00003000h (w/PPC set to a zero)
|
|
*/
|
|
union cvmx_uahcx_ehci_portscx
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_portscx_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_23_31 : 9;
|
|
uint32_t wkoc_e : 1; /**< Wake on Over-current Enable.Writing this bit to a
|
|
one enables the port to be sensitive to over-current conditions as wake-up events.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t wkdscnnt_e : 1; /**< Wake on Disconnect Enable. Writing this bit to a one enables the port to be
|
|
sensitive to device disconnects as wake-up events.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t wkcnnt_e : 1; /**< Wake on Connect Enable. Writing this bit to a one enables the port to be
|
|
sensitive to device connects as wake-up events.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t ptc : 4; /**< Port Test Control. When this field is zero, the port is NOT
|
|
operating in a test mode. A non-zero value indicates that it is operating
|
|
in test mode and the specific test mode is indicated by the specific value.
|
|
The encoding of the test mode bits are (0110b - 1111b are reserved):
|
|
Bits Test Mode
|
|
0000b Test mode not enabled
|
|
0001b Test J_STATE
|
|
0010b Test K_STATE
|
|
0011b Test SE0_NAK
|
|
0100b Test Packet
|
|
0101b Test FORCE_ENABLE */
|
|
uint32_t pic : 2; /**< Port Indicator Control. Writing to these bits has no effect if the
|
|
P_INDICATOR bit in the HCSPARAMS register is a zero. If P_INDICATOR bit is a one,
|
|
then the bit encodings are:
|
|
Bit Value Meaning
|
|
00b Port indicators are off
|
|
01b Amber
|
|
10b Green
|
|
11b Undefined
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t po : 1; /**< Port Owner.This bit unconditionally goes to a 0b when the
|
|
Configured bit in the CONFIGFLAG register makes a 0b to 1b transition. This bit
|
|
unconditionally goes to 1b whenever the Configured bit is zero.
|
|
System software uses this field to release ownership of the port to a selected host
|
|
controller (in the event that the attached device is not a high-speed device). Software
|
|
writes a one to this bit when the attached device is not a high-speed device. A one in
|
|
this bit means that a companion host controller owns and controls the port. */
|
|
uint32_t pp : 1; /**< Port Power. The function of this bit depends on the value of the Port
|
|
Power Control (PPC) field in the HCSPARAMS register. The behavior is as follows:
|
|
PPC PP Operation
|
|
0b 1b RO - Host controller does not have port power control switches.
|
|
Each port is hard-wired to power.
|
|
1b 1b/0b R/W - Host controller has port power control switches. This bit
|
|
represents the current setting of the switch (0 = off, 1 = on). When
|
|
power is not available on a port (i.e. PP equals a 0), the port is
|
|
nonfunctional and will not report attaches, detaches, etc.
|
|
When an over-current condition is detected on a powered port and PPC is a one, the PP
|
|
bit in each affected port may be transitioned by the host controller from a 1 to 0
|
|
(removing power from the port). */
|
|
uint32_t lsts : 2; /**< Line Status.These bits reflect the current logical levels of the D+ (bit 11) and D(bit 10)
|
|
signal lines. These bits are used for detection of low-speed USB devices prior to
|
|
the port reset and enable sequence. This field is valid only when the port enable bit is
|
|
zero and the current connect status bit is set to a one.
|
|
The encoding of the bits are:
|
|
Bits[11:10] USB State Interpretation
|
|
00b SE0 Not Low-speed device, perform EHCI reset
|
|
10b J-state Not Low-speed device, perform EHCI reset
|
|
01b K-state Low-speed device, release ownership of port
|
|
11b Undefined Not Low-speed device, perform EHCI reset.
|
|
This value of this field is undefined if Port Power is zero. */
|
|
uint32_t reserved_9_9 : 1;
|
|
uint32_t prst : 1; /**< Port Reset.1=Port is in Reset. 0=Port is not in Reset. Default = 0. When
|
|
software writes a one to this bit (from a zero), the bus reset sequence as defined in the
|
|
USB Specification Revision 2.0 is started. Software writes a zero to this bit to terminate
|
|
the bus reset sequence. Software must keep this bit at a one long enough to ensure the
|
|
reset sequence, as specified in the USB Specification Revision 2.0, completes. Note:
|
|
when software writes this bit to a one, it must also write a zero to the Port Enable bit.
|
|
Note that when software writes a zero to this bit there may be a delay before the bit
|
|
status changes to a zero. The bit status will not read as a zero until after the reset has
|
|
completed. If the port is in high-speed mode after reset is complete, the host controller
|
|
will automatically enable this port (e.g. set the Port Enable bit to a one). A host controller
|
|
must terminate the reset and stabilize the state of the port within 2 milliseconds of
|
|
software transitioning this bit from a one to a zero. For example: if the port detects that
|
|
the attached device is high-speed during reset, then the host controller must have the
|
|
port in the enabled state within 2ms of software writing this bit to a zero.
|
|
The HCHalted bit in the USBSTS register should be a zero before software attempts to
|
|
use this bit. The host controller may hold Port Reset asserted to a one when the
|
|
HCHalted bit is a one.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t spd : 1; /**< Suspend. 1=Port in suspend state. 0=Port not in suspend state. Default = 0. Port
|
|
Enabled Bit and Suspend bit of this register define the port states as follows:
|
|
Bits [Port Enabled, Suspend] Port State
|
|
0X Disable
|
|
10 Enable
|
|
11 Suspend
|
|
When in suspend state, downstream propagation of data is blocked on this port, except
|
|
for port reset. The blocking occurs at the end of the current transaction, if a transaction
|
|
was in progress when this bit was written to 1. In the suspend state, the port is sensitive
|
|
to resume detection. Note that the bit status does not change until the port is
|
|
suspended and that there may be a delay in suspending a port if there is a transaction
|
|
currently in progress on the USB.
|
|
A write of zero to this bit is ignored by the host controller. The host controller will
|
|
unconditionally set this bit to a zero when:
|
|
. Software sets the Force Port Resume bit to a zero (from a one).
|
|
. Software sets the Port Reset bit to a one (from a zero).
|
|
If host software sets this bit to a one when the port is not enabled (i.e. Port enabled bit is
|
|
a zero) the results are undefined.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t fpr : 1; /**< Force Port Resume.
|
|
1= Resume detected/driven on port. 0=No resume (Kstate)
|
|
detected/driven on port. Default = 0. This functionality defined for manipulating
|
|
this bit depends on the value of the Suspend bit. For example, if the port is not
|
|
suspended (Suspend and Enabled bits are a one) and software transitions this bit to a
|
|
one, then the effects on the bus are undefined.
|
|
Software sets this bit to a 1 to drive resume signaling. The Host Controller sets this bit to
|
|
a 1 if a J-to-K transition is detected while the port is in the Suspend state. When this bit
|
|
transitions to a one because a J-to-K transition is detected, the Port Change Detect bit in
|
|
the USBSTS register is also set to a one. If software sets this bit to a one, the host
|
|
controller must not set the Port Change Detect bit.
|
|
Note that when the EHCI controller owns the port, the resume sequence follows the
|
|
defined sequence documented in the USB Specification Revision 2.0. The resume
|
|
signaling (Full-speed 'K') is driven on the port as long as this bit remains a one. Software
|
|
must appropriately time the Resume and set this bit to a zero when the appropriate
|
|
amount of time has elapsed. Writing a zero (from one) causes the port to return to high-
|
|
speed mode (forcing the bus below the port into a high-speed idle). This bit will remain a
|
|
one until the port has switched to the high-speed idle. The host controller must complete
|
|
this transition within 2 milliseconds of software setting this bit to a zero.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t occ : 1; /**< Over-current Change. 1=This bit gets set to a one when there is a change to Over-current Active.
|
|
Software clears this bit by writing a one to this bit position. */
|
|
uint32_t oca : 1; /**< Over-current Active. 1=This port currently has an over-current condition. 0=This port does not
|
|
have an over-current condition. This bit will automatically transition from a one to a zero when
|
|
the over current condition is removed. */
|
|
uint32_t pedc : 1; /**< Port Enable/Disable Change. 1=Port enabled/disabled status has changed.
|
|
0=No change. Default = 0. For the root hub, this bit gets set to a one only when a port is
|
|
disabled due to the appropriate conditions existing at the EOF2 point (See Chapter 11 of
|
|
the USB Specification for the definition of a Port Error). Software clears this bit by writing
|
|
a 1 to it.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t ped : 1; /**< Port Enabled/Disabled. 1=Enable. 0=Disable. Ports can only be
|
|
enabled by the host controller as a part of the reset and enable. Software cannot enable
|
|
a port by writing a one to this field. The host controller will only set this bit to a one when
|
|
the reset sequence determines that the attached device is a high-speed device.
|
|
Ports can be disabled by either a fault condition (disconnect event or other fault
|
|
condition) or by host software. Note that the bit status does not change until the port
|
|
state actually changes. There may be a delay in disabling or enabling a port due to other
|
|
host controller and bus events. See Section 4.2 for full details on port reset and enable.
|
|
When the port is disabled (0b) downstream propagation of data is blocked on this port,
|
|
except for reset.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t csc : 1; /**< Connect Status Change. 1=Change in Current Connect Status. 0=No change. Indicates a change
|
|
has occurred in the port's Current Connect Status. The host controller sets this bit for all
|
|
changes to the port device connect status, even if system software has not cleared an existing
|
|
connect status change. For example, the insertion status changes twice before system software
|
|
has cleared the changed condition, hub hardware will be setting an already-set bit
|
|
(i.e., the bit will remain set). Software sets this bit to 0 by writing a 1 to it.
|
|
This field is zero if Port Power is zero. */
|
|
uint32_t ccs : 1; /**< Current Connect Status. 1=Device is present on port. 0=No device is present.
|
|
This value reflects the current state of the port, and may not correspond
|
|
directly to the event that caused the Connect Status Change bit (Bit 1) to be set.
|
|
This field is zero if Port Power is zero. */
|
|
#else
|
|
uint32_t ccs : 1;
|
|
uint32_t csc : 1;
|
|
uint32_t ped : 1;
|
|
uint32_t pedc : 1;
|
|
uint32_t oca : 1;
|
|
uint32_t occ : 1;
|
|
uint32_t fpr : 1;
|
|
uint32_t spd : 1;
|
|
uint32_t prst : 1;
|
|
uint32_t reserved_9_9 : 1;
|
|
uint32_t lsts : 2;
|
|
uint32_t pp : 1;
|
|
uint32_t po : 1;
|
|
uint32_t pic : 2;
|
|
uint32_t ptc : 4;
|
|
uint32_t wkcnnt_e : 1;
|
|
uint32_t wkdscnnt_e : 1;
|
|
uint32_t wkoc_e : 1;
|
|
uint32_t reserved_23_31 : 9;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_portscx_s cn63xx;
|
|
struct cvmx_uahcx_ehci_portscx_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_portscx cvmx_uahcx_ehci_portscx_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_usbcmd
|
|
*
|
|
* USBCMD = USB Command Register
|
|
* The Command Register indicates the command to be executed by the serial bus host controller. Writing to the register causes a command to be executed.
|
|
*/
|
|
union cvmx_uahcx_ehci_usbcmd
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_usbcmd_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_24_31 : 8;
|
|
uint32_t itc : 8; /**< Interrupt Threshold Control. This field is used by system software
|
|
to select the maximum rate at which the host controller will issue interrupts. The only
|
|
valid values are defined below. If software writes an invalid value to this register, the
|
|
results are undefined. Value Maximum Interrupt Interval
|
|
00h Reserved
|
|
01h 1 micro-frame
|
|
02h 2 micro-frames
|
|
04h 4 micro-frames
|
|
08h 8 micro-frames (default, equates to 1 ms)
|
|
10h 16 micro-frames (2 ms)
|
|
20h 32 micro-frames (4 ms)
|
|
40h 64 micro-frames (8 ms) */
|
|
uint32_t reserved_12_15 : 4;
|
|
uint32_t aspm_en : 1; /**< Asynchronous Schedule Park Mode Enable. */
|
|
uint32_t reserved_10_10 : 1;
|
|
uint32_t aspmc : 2; /**< Asynchronous Schedule Park Mode Count. */
|
|
uint32_t lhcr : 1; /**< Light Host Controller Reset */
|
|
uint32_t iaa_db : 1; /**< Interrupt on Async Advance Doorbell.This bit is used as a doorbell by
|
|
software to tell the host controller to issue an interrupt the next time it advances
|
|
asynchronous schedule. Software must write a 1 to this bit to ring the doorbell.
|
|
When the host controller has evicted all appropriate cached schedule state, it sets the
|
|
Interrupt on Async Advance status bit in the USBSTS register. If the Interrupt on Async
|
|
Advance Enable bit in the USBINTR register is a one then the host controller will assert
|
|
an interrupt at the next interrupt threshold. */
|
|
uint32_t as_en : 1; /**< Asynchronous Schedule Enable .This bit controls whether the host
|
|
controller skips processing the Asynchronous Schedule. Values mean:
|
|
- 0: Do not process the Asynchronous Schedule
|
|
- 1: Use the ASYNCLISTADDR register to access the Asynchronous Schedule. */
|
|
uint32_t ps_en : 1; /**< Periodic Schedule Enable. This bit controls whether the host
|
|
controller skips processing the Periodic Schedule. Values mean:
|
|
- 0: Do not process the Periodic Schedule
|
|
- 1: Use the PERIODICLISTBASE register to access the Periodic Schedule. */
|
|
uint32_t fls : 2; /**< Frame List Size. This field is R/W only if Programmable
|
|
Frame List Flag in the HCCPARAMS registers is set to a one. This field specifies the
|
|
size of the frame list. The size the frame list controls which bits in the Frame Index
|
|
Register should be used for the Frame List Current index. Values mean:
|
|
00b: 1024 elements (4096 bytes) Default value
|
|
01b: 512 elements (2048 bytes)
|
|
10b: 256 elements (1024 bytes) - for resource-constrained environments
|
|
11b: Reserved */
|
|
uint32_t hcreset : 1; /**< Host Controller Reset (HCRESET). This control bit is used by software to reset
|
|
the host controller. The effects of this on Root Hub registers are similar to a Chip
|
|
Hardware Reset. When software writes a one to this bit, the Host Controller resets
|
|
its internal pipelines, timers, counters, state machines, etc. to their initial
|
|
value. Any transaction currently in progress on USB is immediately terminated.
|
|
A USB reset is not driven on downstream ports.
|
|
This bit is set to zero by the Host Controller when the reset process is complete. Software can not
|
|
terminate the reset process early by writing zero to this register.
|
|
Software should not set this bit to a one when the HCHalted bit in the USBSTS register is a zero.
|
|
Attempting to reset an activtely running host controller will result in undefined behavior. */
|
|
uint32_t rs : 1; /**< Run/Stop (RS).
|
|
1=Run. 0=Stop.
|
|
When set to a 1, the Host Controller proceeds with execution of the schedule.
|
|
The Host Controller continues execution as long as this bit is set to a 1.
|
|
When this bit is set to 0, the Host Controller completes the current and any
|
|
actively pipelined transactions on the USB and then halts. The Host
|
|
Controller must halt within 16 micro-frames after software clears the Run bit. The HC
|
|
Halted bit in the status register indicates when the Host Controller has finished its
|
|
pending pipelined transactions and has entered the stopped state. Software must not
|
|
write a one to this field unless the host controller is in the Halted state (i.e. HCHalted in
|
|
the USBSTS register is a one). Doing so will yield undefined results. */
|
|
#else
|
|
uint32_t rs : 1;
|
|
uint32_t hcreset : 1;
|
|
uint32_t fls : 2;
|
|
uint32_t ps_en : 1;
|
|
uint32_t as_en : 1;
|
|
uint32_t iaa_db : 1;
|
|
uint32_t lhcr : 1;
|
|
uint32_t aspmc : 2;
|
|
uint32_t reserved_10_10 : 1;
|
|
uint32_t aspm_en : 1;
|
|
uint32_t reserved_12_15 : 4;
|
|
uint32_t itc : 8;
|
|
uint32_t reserved_24_31 : 8;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_usbcmd_s cn63xx;
|
|
struct cvmx_uahcx_ehci_usbcmd_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_usbcmd cvmx_uahcx_ehci_usbcmd_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_usbintr
|
|
*
|
|
* USBINTR = USB Interrupt Enable Register
|
|
* This register enables and disables reporting of the corresponding interrupt to the software. When a bit is set
|
|
* and the corresponding interrupt is active, an interrupt is generated to the host. Interrupt sources that are
|
|
* disabled in this register still appear in the USBSTS to allow the software to poll for events.
|
|
* Each interrupt enable bit description indicates whether it is dependent on the interrupt threshold mechanism.
|
|
* Note: for all enable register bits, 1= Enabled, 0= Disabled
|
|
*/
|
|
union cvmx_uahcx_ehci_usbintr
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_usbintr_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_6_31 : 26;
|
|
uint32_t ioaa_en : 1; /**< Interrupt on Async Advance Enable When this bit is a one, and the Interrupt on
|
|
Async Advance bit in the USBSTS register is a one, the host controller will issue an
|
|
interrupt at the next interrupt threshold. The interrupt is acknowledged by software
|
|
clearing the Interrupt on Async Advance bit. */
|
|
uint32_t hserr_en : 1; /**< Host System Error Enable When this bit is a one, and the Host System
|
|
Error Status bit in the USBSTS register is a one, the host controller will issue an
|
|
interrupt. The interrupt is acknowledged by software clearing the Host System Error bit. */
|
|
uint32_t flro_en : 1; /**< Frame List Rollover Enable. When this bit is a one, and the Frame List
|
|
Rollover bit in the USBSTS register is a one, the host controller will issue an
|
|
interrupt. The interrupt is acknowledged by software clearing the Frame List Rollover bit. */
|
|
uint32_t pci_en : 1; /**< Port Change Interrupt Enable. When this bit is a one, and the Port Change Detect bit in
|
|
the USBSTS register is a one, the host controller will issue an interrupt.
|
|
The interrupt is acknowledged by software clearing the Port Change Detect bit. */
|
|
uint32_t usberrint_en : 1; /**< USB Error Interrupt Enable. When this bit is a one, and the USBERRINT
|
|
bit in the USBSTS register is a one, the host controller will issue an interrupt at the next
|
|
interrupt threshold. The interrupt is acknowledged by software clearing the USBERRINT bit. */
|
|
uint32_t usbint_en : 1; /**< USB Interrupt Enable. When this bit is a one, and the USBINT bit in the USBSTS register
|
|
is a one, the host controller will issue an interrupt at the next interrupt threshold.
|
|
The interrupt is acknowledged by software clearing the USBINT bit. */
|
|
#else
|
|
uint32_t usbint_en : 1;
|
|
uint32_t usberrint_en : 1;
|
|
uint32_t pci_en : 1;
|
|
uint32_t flro_en : 1;
|
|
uint32_t hserr_en : 1;
|
|
uint32_t ioaa_en : 1;
|
|
uint32_t reserved_6_31 : 26;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_usbintr_s cn63xx;
|
|
struct cvmx_uahcx_ehci_usbintr_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_usbintr cvmx_uahcx_ehci_usbintr_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ehci_usbsts
|
|
*
|
|
* USBSTS = USB Status Register
|
|
* This register indicates pending interrupts and various states of the Host Controller. The status resulting from
|
|
* a transaction on the serial bus is not indicated in this register. Software sets a bit to 0 in this register by
|
|
* writing a 1 to it.
|
|
*/
|
|
union cvmx_uahcx_ehci_usbsts
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ehci_usbsts_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_16_31 : 16;
|
|
uint32_t ass : 1; /**< Asynchronous Schedule Status. The bit reports the current real
|
|
status of the Asynchronous Schedule. If this bit is a zero then the status of the
|
|
Asynchronous Schedule is disabled. If this bit is a one then the status of the
|
|
Asynchronous Schedule is enabled. The Host Controller is not required to immediately
|
|
disable or enable the Asynchronous Schedule when software transitions the
|
|
Asynchronous Schedule Enable bit in the USBCMD register. When this bit and the
|
|
Asynchronous Schedule Enable bit are the same value, the Asynchronous Schedule is
|
|
either enabled (1) or disabled (0). */
|
|
uint32_t pss : 1; /**< Periodic Schedule Status. The bit reports the current real status of
|
|
the Periodic Schedule. If this bit is a zero then the status of the Periodic
|
|
Schedule is disabled. If this bit is a one then the status of the Periodic Schedule
|
|
is enabled. The Host Controller is not required to immediately disable or enable the
|
|
Periodic Schedule when software transitions the Periodic Schedule Enable bit in
|
|
the USBCMD register. When this bit and the Periodic Schedule Enable bit are the
|
|
same value, the Periodic Schedule is either enabled (1) or disabled (0). */
|
|
uint32_t reclm : 1; /**< Reclamation.This is a read-only status bit, which is used to detect an
|
|
empty asynchronous schedule. */
|
|
uint32_t hchtd : 1; /**< HCHalted. This bit is a zero whenever the Run/Stop bit is a one. The
|
|
Host Controller sets this bit to one after it has stopped executing as a result of the
|
|
Run/Stop bit being set to 0, either by software or by the Host Controller hardware (e.g.
|
|
internal error). */
|
|
uint32_t reserved_6_11 : 6;
|
|
uint32_t ioaa : 1; /**< Interrupt on Async Advance. System software can force the host
|
|
controller to issue an interrupt the next time the host controller advances the
|
|
asynchronous schedule by writing a one to the Interrupt on Async Advance Doorbell bit
|
|
in the USBCMD register. This status bit indicates the assertion of that interrupt source. */
|
|
uint32_t hsyserr : 1; /**< Host System Error. The Host Controller sets this bit to 1 when a serious error
|
|
occurs during a host system access involving the Host Controller module. */
|
|
uint32_t flro : 1; /**< Frame List Rollover. The Host Controller sets this bit to a one when the
|
|
Frame List Index 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 Size field of the USBCMD register)
|
|
is 1024, the Frame Index Register rolls 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_t pcd : 1; /**< Port Change Detect. The Host Controller sets this bit to a one when any port
|
|
for which the Port Owner bit is set to zero (see Section 2.3.9) has a change bit transition
|
|
from a zero to a one or a Force Port Resume bit transition from a zero to a one as a
|
|
result of a J-K transition detected on a suspended port. This bit will also be set as a
|
|
result of the Connect Status Change being set to a one after system software has
|
|
relinquished ownership of a connected port by writing a one to a port's Port Owner bit. */
|
|
uint32_t usberrint : 1; /**< USB Error Interrupt. The Host Controller sets this bit to 1 when completion of a USB
|
|
transaction results in an error condition (e.g., error counter underflow). If the TD on
|
|
which the error interrupt occurred also had its IOC bit set, both this bit and USBINT
|
|
bit are set. */
|
|
uint32_t usbint : 1; /**< USB Interrupt. The Host Controller sets this bit to 1 on the completion of a USB
|
|
transaction, which results in the retirement of a Transfer Descriptor that had its
|
|
IOC bit set. The Host Controller also sets this bit to 1 when a short packet is
|
|
detected (actual number of bytes received was less than the expected number of bytes). */
|
|
#else
|
|
uint32_t usbint : 1;
|
|
uint32_t usberrint : 1;
|
|
uint32_t pcd : 1;
|
|
uint32_t flro : 1;
|
|
uint32_t hsyserr : 1;
|
|
uint32_t ioaa : 1;
|
|
uint32_t reserved_6_11 : 6;
|
|
uint32_t hchtd : 1;
|
|
uint32_t reclm : 1;
|
|
uint32_t pss : 1;
|
|
uint32_t ass : 1;
|
|
uint32_t reserved_16_31 : 16;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ehci_usbsts_s cn63xx;
|
|
struct cvmx_uahcx_ehci_usbsts_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ehci_usbsts cvmx_uahcx_ehci_usbsts_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcbulkcurrented
|
|
*
|
|
* HCBULKCURRENTED = Host Controller Bulk Current ED Register
|
|
*
|
|
* The HcBulkCurrentED register contains the physical address of the current endpoint of the Bulk list. As the Bulk list will be served in a round-robin
|
|
* fashion, the endpoints will be ordered according to their insertion to the list.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcbulkcurrented
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcbulkcurrented_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t bced : 28; /**< BulkCurrentED. This is advanced to the next ED after the HC has served the
|
|
present one. HC continues processing the list from where it left off in the
|
|
last Frame. When it reaches the end of the Bulk list, HC checks the
|
|
ControlListFilled of HcControl. If set, it copies the content of HcBulkHeadED
|
|
to HcBulkCurrentED and clears the bit. If it is not set, it does nothing.
|
|
HCD is only allowed to modify this register when the BulkListEnable of
|
|
HcControl is cleared. When set, the HCD only reads the instantaneous value of
|
|
this register. This is initially set to zero to indicate the end of the Bulk
|
|
list. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t bced : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcbulkcurrented_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcbulkcurrented_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcbulkcurrented cvmx_uahcx_ohci0_hcbulkcurrented_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcbulkheaded
|
|
*
|
|
* HCBULKHEADED = Host Controller Bulk Head ED Register
|
|
*
|
|
* The HcBulkHeadED register contains the physical address of the first Endpoint Descriptor of the Bulk list.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcbulkheaded
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcbulkheaded_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t bhed : 28; /**< BulkHeadED. HC traverses the Bulk list starting with the HcBulkHeadED
|
|
pointer. The content is loaded from HCCA during the initialization of HC. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t bhed : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcbulkheaded_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcbulkheaded_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcbulkheaded cvmx_uahcx_ohci0_hcbulkheaded_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hccommandstatus
|
|
*
|
|
* HCCOMMANDSTATUS = Host Controller Command Status Register
|
|
*
|
|
* The HcCommandStatus register is used by the Host Controller to receive commands issued by the Host Controller Driver, as well as reflecting the
|
|
* current status of the Host Controller. To the Host Controller Driver, it appears to be a "write to set" register. The Host Controller must ensure
|
|
* that bits written as '1' become set in the register while bits written as '0' remain unchanged in the register. The Host Controller Driver
|
|
* may issue multiple distinct commands to the Host Controller without concern for corrupting previously issued commands. The Host Controller Driver
|
|
* has normal read access to all bits.
|
|
* The SchedulingOverrunCount field indicates the number of frames with which the Host Controller has detected the scheduling overrun error. This
|
|
* occurs when the Periodic list does not complete before EOF. When a scheduling overrun error is detected, the Host Controller increments the counter
|
|
* and sets the SchedulingOverrun field in the HcInterruptStatus register.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hccommandstatus
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hccommandstatus_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_18_31 : 14;
|
|
uint32_t soc : 2; /**< SchedulingOverrunCount. These bits are incremented on each scheduling overrun
|
|
error. It is initialized to 00b and wraps around at 11b. This will be
|
|
incremented when a scheduling overrun is detected even if SchedulingOverrun
|
|
in HcInterruptStatus has already been set. This is used by HCD to monitor
|
|
any persistent scheduling problems. */
|
|
uint32_t reserved_4_15 : 12;
|
|
uint32_t ocr : 1; /**< OwnershipChangeRequest. This bit is set by an OS HCD to request a change of
|
|
control of the HC. When set HC will set the OwnershipChange field in
|
|
HcInterruptStatus. After the changeover, this bit is cleared and remains so
|
|
until the next request from OS HCD. */
|
|
uint32_t blf : 1; /**< BulkListFilled This bit is used to indicate whether there are any TDs on the
|
|
Bulk list. It is set by HCD whenever it adds a TD to an ED in the Bulk list.
|
|
When HC begins to process the head of the Bulk list, it checks BF. As long
|
|
as BulkListFilled is 0, HC will not start processing the Bulk list. If
|
|
BulkListFilled is 1, HC will start processing the Bulk list and will set BF
|
|
to 0. If HC finds a TD on the list, then HC will set BulkListFilled to 1
|
|
causing the Bulk list processing to continue. If no TD is found on the Bulk
|
|
list,and if HCD does not set BulkListFilled, then BulkListFilled will still
|
|
be 0 when HC completes processing the Bulk list and Bulk list processing will
|
|
stop. */
|
|
uint32_t clf : 1; /**< ControlListFilled. This bit is used to indicate whether there are any TDs
|
|
on the Control list. It is set by HCD whenever it adds a TD to an ED in the
|
|
Control list. When HC begins to process the head of the Control list, it
|
|
checks CLF. As long as ControlListFilled is 0, HC will not start processing
|
|
the Control list. If CF is 1, HC will start processing the Control list and
|
|
will set ControlListFilled to 0. If HC finds a TD on the list, then HC will
|
|
set ControlListFilled to 1 causing the Control list processing to continue.
|
|
If no TD is found on the Control list, and if the HCD does not set
|
|
ControlListFilled, then ControlListFilled will still be 0 when HC completes
|
|
processing the Control list and Control list processing will stop. */
|
|
uint32_t hcr : 1; /**< HostControllerReset. This bit is set by HCD to initiate a software reset of
|
|
HC. Regardless of the functional state of HC, it moves to the USBSUSPEND
|
|
state in which most of the operational registers are reset except those
|
|
stated otherwise; e.g., the InterruptRouting field of HcControl, and no
|
|
Host bus accesses are allowed. This bit is cleared by HC upon the
|
|
completion of the reset operation. The reset operation must be completed
|
|
within 10 ms. This bit, when set, should not cause a reset to the Root Hub
|
|
and no subsequent reset signaling should be asserted to its downstream ports. */
|
|
#else
|
|
uint32_t hcr : 1;
|
|
uint32_t clf : 1;
|
|
uint32_t blf : 1;
|
|
uint32_t ocr : 1;
|
|
uint32_t reserved_4_15 : 12;
|
|
uint32_t soc : 2;
|
|
uint32_t reserved_18_31 : 14;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hccommandstatus_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hccommandstatus_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hccommandstatus cvmx_uahcx_ohci0_hccommandstatus_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hccontrol
|
|
*
|
|
* HCCONTROL = Host Controller Control Register
|
|
*
|
|
* The HcControl register defines the operating modes for the Host Controller. Most of the fields in this register are modified only by the Host Controller
|
|
* Driver, except HostControllerFunctionalState and RemoteWakeupConnected.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hccontrol
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hccontrol_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_11_31 : 21;
|
|
uint32_t rwe : 1; /**< RemoteWakeupEnable. This bit is used by HCD to enable or disable the remote wakeup
|
|
feature upon the detection of upstream resume signaling. When this bit is set and
|
|
the ResumeDetected bit in HcInterruptStatus is set, a remote wakeup is signaled
|
|
to the host system. Setting this bit has no impact on the generation of hardware
|
|
interrupt. */
|
|
uint32_t rwc : 1; /**< RemoteWakeupConnected.This bit indicates whether HC supports remote wakeup signaling.
|
|
If remote wakeup is supported and used by the system it is the responsibility of
|
|
system firmware to set this bit during POST. HC clears the bit upon a hardware reset
|
|
but does not alter it upon a software reset. Remote wakeup signaling of the host
|
|
system is host-bus-specific and is not described in this specification. */
|
|
uint32_t ir : 1; /**< InterruptRouting
|
|
This bit determines the routing of interrupts generated by events registered in
|
|
HcInterruptStatus. If clear, all interrupts are routed to the normal host bus
|
|
interrupt mechanism. If set, interrupts are routed to the System Management
|
|
Interrupt. HCD clears this bit upon a hardware reset, but it does not alter
|
|
this bit upon a software reset. HCD uses this bit as a tag to indicate the
|
|
ownership of HC. */
|
|
uint32_t hcfs : 2; /**< HostControllerFunctionalState for USB
|
|
00b: USBRESET
|
|
01b: USBRESUME
|
|
10b: USBOPERATIONAL
|
|
11b: USBSUSPEND
|
|
A transition to USBOPERATIONAL from another state causes SOF generation to begin
|
|
1 ms later. HCD may determine whether HC has begun sending SOFs by reading the
|
|
StartofFrame field of HcInterruptStatus.
|
|
This field may be changed by HC only when in the USBSUSPEND state. HC may move from
|
|
the USBSUSPEND state to the USBRESUME state after detecting the resume signaling
|
|
from a downstream port.
|
|
HC enters USBSUSPEND after a software reset, whereas it enters USBRESET after a
|
|
hardware reset. The latter also resets the Root Hub and asserts subsequent reset
|
|
signaling to downstream ports. */
|
|
uint32_t ble : 1; /**< BulkListEnable. This bit is set to enable the processing of the Bulk list in the
|
|
next Frame. If cleared by HCD, processing of the Bulk list does not occur after
|
|
the next SOF. HC checks this bit whenever it determines to process the list. When
|
|
disabled, HCD may modify the list. If HcBulkCurrentED is pointing to an ED to be
|
|
removed, HCD must advance the pointer by updating HcBulkCurrentED before re-enabling
|
|
processing of the list. */
|
|
uint32_t cle : 1; /**< ControlListEnable. This bit is set to enable the processing of the Control list in
|
|
the next Frame. If cleared by HCD, processing of the Control list does not occur
|
|
after the next SOF. HC must check this bit whenever it determines to process the
|
|
list. When disabled, HCD may modify the list. If HcControlCurrentED is pointing to
|
|
an ED to be removed, HCD must advance the pointer by updating HcControlCurrentED
|
|
before re-enabling processing of the list. */
|
|
uint32_t ie : 1; /**< IsochronousEnable This bit is used by HCD to enable/disable processing of
|
|
isochronous EDs. While processing the periodic list in a Frame, HC checks the
|
|
status of this bit when it finds an Isochronous ED (F=1). If set (enabled), HC
|
|
continues processing the EDs. If cleared (disabled), HC halts processing of the
|
|
periodic list (which now contains only isochronous EDs) and begins processing the
|
|
Bulk/Control lists. Setting this bit is guaranteed to take effect in the next
|
|
Frame (not the current Frame). */
|
|
uint32_t ple : 1; /**< PeriodicListEnable. This bit is set to enable the processing of the periodic list
|
|
in the next Frame. If cleared by HCD, processing of the periodic list does not
|
|
occur after the next SOF. HC must check this bit before it starts processing
|
|
the list. */
|
|
uint32_t cbsr : 2; /**< ControlBulkServiceRatio. This specifies the service ratio between Control and
|
|
Bulk EDs. Before processing any of the nonperiodic lists, HC must compare the
|
|
ratio specified with its internal count on how many nonempty Control EDs have
|
|
been processed, in determining whether to continue serving another Control ED
|
|
or switching to Bulk EDs. The internal count will be retained when crossing
|
|
the frame boundary. In case of reset, HCD is responsible for restoring this
|
|
value.
|
|
|
|
CBSR No. of Control EDs Over Bulk EDs Served
|
|
0 1:1
|
|
1 2:1
|
|
2 3:1
|
|
3 4:1 */
|
|
#else
|
|
uint32_t cbsr : 2;
|
|
uint32_t ple : 1;
|
|
uint32_t ie : 1;
|
|
uint32_t cle : 1;
|
|
uint32_t ble : 1;
|
|
uint32_t hcfs : 2;
|
|
uint32_t ir : 1;
|
|
uint32_t rwc : 1;
|
|
uint32_t rwe : 1;
|
|
uint32_t reserved_11_31 : 21;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hccontrol_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hccontrol_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hccontrol cvmx_uahcx_ohci0_hccontrol_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hccontrolcurrented
|
|
*
|
|
* HCCONTROLCURRENTED = Host Controller Control Current ED Register
|
|
*
|
|
* The HcControlCurrentED register contains the physical address of the current Endpoint Descriptor of the Control list.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hccontrolcurrented
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hccontrolcurrented_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t cced : 28; /**< ControlCurrentED. This pointer is advanced to the next ED after serving the
|
|
present one. HC will continue processing the list from where it left off in
|
|
the last Frame. When it reaches the end of the Control list, HC checks the
|
|
ControlListFilled of in HcCommandStatus. If set, it copies the content of
|
|
HcControlHeadED to HcControlCurrentED and clears the bit. If not set, it
|
|
does nothing. HCD is allowed to modify this register only when the
|
|
ControlListEnable of HcControl is cleared. When set, HCD only reads the
|
|
instantaneous value of this register. Initially, this is set to zero to
|
|
indicate the end of the Control list. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t cced : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hccontrolcurrented_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hccontrolcurrented_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hccontrolcurrented cvmx_uahcx_ohci0_hccontrolcurrented_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hccontrolheaded
|
|
*
|
|
* HCCONTROLHEADED = Host Controller Control Head ED Register
|
|
*
|
|
* The HcControlHeadED register contains the physical address of the first Endpoint Descriptor of the Control list.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hccontrolheaded
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hccontrolheaded_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t ched : 28; /**< ControlHeadED. HC traverses the Control list starting with the HcControlHeadED
|
|
pointer. The content is loaded from HCCA during the initialization of HC. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t ched : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hccontrolheaded_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hccontrolheaded_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hccontrolheaded cvmx_uahcx_ohci0_hccontrolheaded_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcdonehead
|
|
*
|
|
* HCDONEHEAD = Host Controller Done Head Register
|
|
*
|
|
* The HcDoneHead register contains the physical address of the last completed Transfer Descriptor that was added to the Done queue. In normal operation,
|
|
* the Host Controller Driver should not need to read this register as its content is periodically written to the HCCA.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcdonehead
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcdonehead_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t dh : 28; /**< DoneHead. When a TD is completed, HC writes the content of HcDoneHead to the
|
|
NextTD field of the TD. HC then overwrites the content of HcDoneHead with the
|
|
address of this TD. This is set to zero whenever HC writes the content of
|
|
this register to HCCA. It also sets the WritebackDoneHead of HcInterruptStatus. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t dh : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcdonehead_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcdonehead_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcdonehead cvmx_uahcx_ohci0_hcdonehead_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcfminterval
|
|
*
|
|
* HCFMINTERVAL = Host Controller Frame Interval Register
|
|
*
|
|
* The HcFmInterval register contains a 14-bit value which indicates the bit time interval in a Frame, (i.e., between two consecutive SOFs), and a 15-bit value
|
|
* indicating the Full Speed maximum packet size that the Host Controller may transmit or receive without causing scheduling overrun. The Host Controller Driver
|
|
* may carry out minor adjustment on the FrameInterval by writing a new value over the present one at each SOF. This provides the programmability necessary for
|
|
* the Host Controller to synchronize with an external clocking resource and to adjust any unknown local clock offset.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcfminterval
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcfminterval_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t fit : 1; /**< FrameIntervalToggle. HCD toggles this bit whenever it loads a new value to
|
|
FrameInterval. */
|
|
uint32_t fsmps : 15; /**< FSLargestDataPacket. This field specifies a value which is loaded into the
|
|
Largest Data Packet Counter at the beginning of each frame. The counter value
|
|
represents the largest amount of data in bits which can be sent or received by
|
|
the HC in a single transaction at any given time without causing scheduling
|
|
overrun. The field value is calculated by the HCD. */
|
|
uint32_t reserved_14_15 : 2;
|
|
uint32_t fi : 14; /**< FrameInterval. This specifies the interval between two consecutive SOFs in bit
|
|
times. The nominal value is set to be 11,999. HCD should store the current
|
|
value of this field before resetting HC. By setting the HostControllerReset
|
|
field of HcCommandStatus as this will cause the HC to reset this field to its
|
|
nominal value. HCD may choose to restore the stored value upon the completion
|
|
of the Reset sequence. */
|
|
#else
|
|
uint32_t fi : 14;
|
|
uint32_t reserved_14_15 : 2;
|
|
uint32_t fsmps : 15;
|
|
uint32_t fit : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcfminterval_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcfminterval_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcfminterval cvmx_uahcx_ohci0_hcfminterval_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcfmnumber
|
|
*
|
|
* HCFMNUMBER = Host Cotroller Frame Number Register
|
|
*
|
|
* The HcFmNumber register is a 16-bit counter. It provides a timing reference among events happening in the Host Controller and the Host Controller Driver.
|
|
* The Host Controller Driver may use the 16-bit value specified in this register and generate a 32-bit frame number without requiring frequent access to
|
|
* the register.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcfmnumber
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcfmnumber_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_16_31 : 16;
|
|
uint32_t fn : 16; /**< FrameNumber. This is incremented when HcFmRemaining is re-loaded. It will be
|
|
rolled over to 0h after ffffh. When entering the USBOPERATIONAL state,
|
|
this will be incremented automatically. The content will be written to HCCA
|
|
after HC has incremented the FrameNumber at each frame boundary and sent a
|
|
SOF but before HC reads the first ED in that Frame. After writing to HCCA,
|
|
HC will set the StartofFrame in HcInterruptStatus. */
|
|
#else
|
|
uint32_t fn : 16;
|
|
uint32_t reserved_16_31 : 16;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcfmnumber_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcfmnumber_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcfmnumber cvmx_uahcx_ohci0_hcfmnumber_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcfmremaining
|
|
*
|
|
* HCFMREMAINING = Host Controller Frame Remaining Register
|
|
* The HcFmRemaining register is a 14-bit down counter showing the bit time remaining in the current Frame.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcfmremaining
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcfmremaining_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t frt : 1; /**< FrameRemainingToggle. This bit is loaded from the FrameIntervalToggle field
|
|
of HcFmInterval whenever FrameRemaining reaches 0. This bit is used by HCD
|
|
for the synchronization between FrameInterval and FrameRemaining. */
|
|
uint32_t reserved_14_30 : 17;
|
|
uint32_t fr : 14; /**< FrameRemaining. This counter is decremented at each bit time. When it
|
|
reaches zero, it is reset by loading the FrameInterval value specified in
|
|
HcFmInterval at the next bit time boundary. When entering the USBOPERATIONAL
|
|
state, HC re-loads the content with the FrameInterval of HcFmInterval and uses
|
|
the updated value from the next SOF. */
|
|
#else
|
|
uint32_t fr : 14;
|
|
uint32_t reserved_14_30 : 17;
|
|
uint32_t frt : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcfmremaining_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcfmremaining_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcfmremaining cvmx_uahcx_ohci0_hcfmremaining_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hchcca
|
|
*
|
|
* HCHCCA = Host Controller Host Controller Communication Area Register
|
|
*
|
|
* The HcHCCA register contains the physical address of the Host Controller Communication Area. The Host Controller Driver determines the alignment restrictions
|
|
* by writing all 1s to HcHCCA and reading the content of HcHCCA. The alignment is evaluated by examining the number of zeroes in the lower order bits. The
|
|
* minimum alignment is 256 bytes; therefore, bits 0 through 7 must always return '0' when read. Detailed description can be found in Chapter 4. This area
|
|
* is used to hold the control structures and the Interrupt table that are accessed by both the Host Controller and the Host Controller Driver.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hchcca
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hchcca_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t hcca : 24; /**< This is the base address (bits [31:8]) of the Host Controller Communication Area. */
|
|
uint32_t reserved_0_7 : 8;
|
|
#else
|
|
uint32_t reserved_0_7 : 8;
|
|
uint32_t hcca : 24;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hchcca_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hchcca_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hchcca cvmx_uahcx_ohci0_hchcca_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcinterruptdisable
|
|
*
|
|
* HCINTERRUPTDISABLE = Host Controller InterruptDisable Register
|
|
*
|
|
* Each disable bit in the HcInterruptDisable register corresponds to an associated interrupt bit in the HcInterruptStatus register. The HcInterruptDisable
|
|
* register is coupled with the HcInterruptEnable register. Thus, writing a '1' to a bit in this register clears the corresponding bit in the HcInterruptEnable
|
|
* register, whereas writing a '0' to a bit in this register leaves the corresponding bit in the HcInterruptEnable register unchanged. On read, the current
|
|
* value of the HcInterruptEnable register is returned.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcinterruptdisable
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcinterruptdisable_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t mie : 1; /**< A '0' written to this field is ignored by HC.
|
|
A '1' written to this field disables interrupt generation due to events
|
|
specified in the other bits of this register. This field is set after a
|
|
hardware or software reset. */
|
|
uint32_t oc : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Ownership Change. */
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t rhsc : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Root Hub Status Change. */
|
|
uint32_t fno : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Frame Number Overflow. */
|
|
uint32_t ue : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Unrecoverable Error. */
|
|
uint32_t rd : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Resume Detect. */
|
|
uint32_t sf : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Start of Frame. */
|
|
uint32_t wdh : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to HcDoneHead Writeback. */
|
|
uint32_t so : 1; /**< 0 - Ignore; 1 - Disable interrupt generation due to Scheduling Overrun. */
|
|
#else
|
|
uint32_t so : 1;
|
|
uint32_t wdh : 1;
|
|
uint32_t sf : 1;
|
|
uint32_t rd : 1;
|
|
uint32_t ue : 1;
|
|
uint32_t fno : 1;
|
|
uint32_t rhsc : 1;
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t oc : 1;
|
|
uint32_t mie : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcinterruptdisable_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcinterruptdisable_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcinterruptdisable cvmx_uahcx_ohci0_hcinterruptdisable_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcinterruptenable
|
|
*
|
|
* HCINTERRUPTENABLE = Host Controller InterruptEnable Register
|
|
*
|
|
* Each enable bit in the HcInterruptEnable register corresponds to an associated interrupt bit in the HcInterruptStatus register. The HcInterruptEnable
|
|
* register is used to control which events generate a hardware interrupt. When a bit is set in the HcInterruptStatus register AND the corresponding bit
|
|
* in the HcInterruptEnable register is set AND the MasterInterruptEnable bit is set, then a hardware interrupt is requested on the host bus.
|
|
* Writing a '1' to a bit in this register sets the corresponding bit, whereas writing a '0' to a bit in this register leaves the corresponding bit
|
|
* unchanged. On read, the current value of this register is returned.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcinterruptenable
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcinterruptenable_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t mie : 1; /**< A '0' written to this field is ignored by HC.
|
|
A '1' written to this field enables interrupt generation due to events
|
|
specified in the other bits of this register. This is used by HCD as a Master
|
|
Interrupt Enable. */
|
|
uint32_t oc : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Ownership Change. */
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t rhsc : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Root Hub Status Change. */
|
|
uint32_t fno : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Frame Number Overflow. */
|
|
uint32_t ue : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Unrecoverable Error. */
|
|
uint32_t rd : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Resume Detect. */
|
|
uint32_t sf : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Start of Frame. */
|
|
uint32_t wdh : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to HcDoneHead Writeback. */
|
|
uint32_t so : 1; /**< 0 - Ignore; 1 - Enable interrupt generation due to Scheduling Overrun. */
|
|
#else
|
|
uint32_t so : 1;
|
|
uint32_t wdh : 1;
|
|
uint32_t sf : 1;
|
|
uint32_t rd : 1;
|
|
uint32_t ue : 1;
|
|
uint32_t fno : 1;
|
|
uint32_t rhsc : 1;
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t oc : 1;
|
|
uint32_t mie : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcinterruptenable_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcinterruptenable_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcinterruptenable cvmx_uahcx_ohci0_hcinterruptenable_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcinterruptstatus
|
|
*
|
|
* HCINTERRUPTSTATUS = Host Controller InterruptStatus Register
|
|
*
|
|
* This register provides status on various events that cause hardware interrupts. When an event occurs, Host Controller sets the corresponding bit
|
|
* in this register. When a bit becomes set, a hardware interrupt is generated if the interrupt is enabled in the HcInterruptEnable register
|
|
* and the MasterInterruptEnable bit is set. The Host Controller Driver may clear specific bits in this register by writing '1' to bit positions
|
|
* to be cleared. The Host Controller Driver may not set any of these bits. The Host Controller will never clear the bit.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcinterruptstatus
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcinterruptstatus_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_31_31 : 1;
|
|
uint32_t oc : 1; /**< OwnershipChange. This bit is set by HC when HCD sets the OwnershipChangeRequest
|
|
field in HcCommandStatus. This event, when unmasked, will always generate an
|
|
System Management Interrupt (SMI) immediately. This bit is tied to 0b when the
|
|
SMI pin is not implemented. */
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t rhsc : 1; /**< RootHubStatusChange. This bit is set when the content of HcRhStatus or the
|
|
content of any of HcRhPortStatus[NumberofDownstreamPort] has changed. */
|
|
uint32_t fno : 1; /**< FrameNumberOverflow. This bit is set when the MSb of HcFmNumber (bit 15)
|
|
changes value, from 0 to 1 or from 1 to 0, and after HccaFrameNumber has been
|
|
updated. */
|
|
uint32_t ue : 1; /**< UnrecoverableError. This bit is set when HC detects a system error not related
|
|
to USB. HC should not proceed with any processing nor signaling before the
|
|
system error has been corrected. HCD clears this bit after HC has been reset. */
|
|
uint32_t rd : 1; /**< ResumeDetected. This bit is set when HC detects that a device on the USB is
|
|
asserting resume signaling. It is the transition from no resume signaling to
|
|
resume signaling causing this bit to be set. This bit is not set when HCD
|
|
sets the USBRESUME state. */
|
|
uint32_t sf : 1; /**< StartofFrame. This bit is set by HC at each start of a frame and after the
|
|
update of HccaFrameNumber. HC also generates a SOF token at the same time. */
|
|
uint32_t wdh : 1; /**< WritebackDoneHead. This bit is set immediately after HC has written
|
|
HcDoneHead to HccaDoneHead. Further updates of the HccaDoneHead will not
|
|
occur until this bit has been cleared. HCD should only clear this bit after
|
|
it has saved the content of HccaDoneHead. */
|
|
uint32_t so : 1; /**< SchedulingOverrun. This bit is set when the USB schedule for the current
|
|
Frame overruns and after the update of HccaFrameNumber. A scheduling overrun
|
|
will also cause the SchedulingOverrunCount of HcCommandStatus to be
|
|
incremented. */
|
|
#else
|
|
uint32_t so : 1;
|
|
uint32_t wdh : 1;
|
|
uint32_t sf : 1;
|
|
uint32_t rd : 1;
|
|
uint32_t ue : 1;
|
|
uint32_t fno : 1;
|
|
uint32_t rhsc : 1;
|
|
uint32_t reserved_7_29 : 23;
|
|
uint32_t oc : 1;
|
|
uint32_t reserved_31_31 : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcinterruptstatus_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcinterruptstatus_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcinterruptstatus cvmx_uahcx_ohci0_hcinterruptstatus_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hclsthreshold
|
|
*
|
|
* HCLSTHRESHOLD = Host Controller LS Threshold Register
|
|
*
|
|
* The HcLSThreshold register contains an 11-bit value used by the Host Controller to determine whether to commit to the transfer of a maximum of 8-byte
|
|
* LS packet before EOF. Neither the Host Controller nor the Host Controller Driver are allowed to change this value.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hclsthreshold
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hclsthreshold_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_12_31 : 20;
|
|
uint32_t lst : 12; /**< LSThreshold
|
|
This field contains a value which is compared to the FrameRemaining field
|
|
prior to initiating a Low Speed transaction. The transaction is started only
|
|
if FrameRemaining >= this field. The value is calculated by HCD
|
|
with the consideration of transmission and setup overhead. */
|
|
#else
|
|
uint32_t lst : 12;
|
|
uint32_t reserved_12_31 : 20;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hclsthreshold_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hclsthreshold_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hclsthreshold cvmx_uahcx_ohci0_hclsthreshold_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcperiodcurrented
|
|
*
|
|
* HCPERIODCURRENTED = Host Controller Period Current ED Register
|
|
*
|
|
* The HcPeriodCurrentED register contains the physical address of the current Isochronous or Interrupt Endpoint Descriptor.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcperiodcurrented
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcperiodcurrented_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t pced : 28; /**< PeriodCurrentED. This is used by HC to point to the head of one of the
|
|
Periodic lists which will be processed in the current Frame. The content of
|
|
this register is updated by HC after a periodic ED has been processed. HCD
|
|
may read the content in determining which ED is currently being processed
|
|
at the time of reading. */
|
|
uint32_t reserved_0_3 : 4;
|
|
#else
|
|
uint32_t reserved_0_3 : 4;
|
|
uint32_t pced : 28;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcperiodcurrented_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcperiodcurrented_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcperiodcurrented cvmx_uahcx_ohci0_hcperiodcurrented_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcperiodicstart
|
|
*
|
|
* HCPERIODICSTART = Host Controller Periodic Start Register
|
|
*
|
|
* The HcPeriodicStart register has a 14-bit programmable value which determines when is the earliest time HC should start processing the periodic list.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcperiodicstart
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcperiodicstart_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_14_31 : 18;
|
|
uint32_t ps : 14; /**< PeriodicStart After a hardware reset, this field is cleared. This is then set
|
|
by HCD during the HC initialization. The value is calculated roughly as 10%
|
|
off from HcFmInterval.. A typical value will be 3E67h. When HcFmRemaining
|
|
reaches the value specified, processing of the periodic lists will have
|
|
priority over Control/Bulk processing. HC will therefore start processing
|
|
the Interrupt list after completing the current Control or Bulk transaction
|
|
that is in progress. */
|
|
#else
|
|
uint32_t ps : 14;
|
|
uint32_t reserved_14_31 : 18;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcperiodicstart_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcperiodicstart_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcperiodicstart cvmx_uahcx_ohci0_hcperiodicstart_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcrevision
|
|
*
|
|
* HCREVISION = Host Controller Revision Register
|
|
*
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcrevision
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcrevision_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_8_31 : 24;
|
|
uint32_t rev : 8; /**< Revision This read-only field contains the BCD representation of the version
|
|
of the HCI specification that is implemented by this HC. For example, a value
|
|
of 11h corresponds to version 1.1. All of the HC implementations that are
|
|
compliant with this specification will have a value of 10h. */
|
|
#else
|
|
uint32_t rev : 8;
|
|
uint32_t reserved_8_31 : 24;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcrevision_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcrevision_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcrevision cvmx_uahcx_ohci0_hcrevision_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcrhdescriptora
|
|
*
|
|
* HCRHDESCRIPTORA = Host Controller Root Hub DescriptorA Register
|
|
*
|
|
* The HcRhDescriptorA register is the first register of two describing the characteristics of the Root Hub. Reset values are implementation-specific.
|
|
* The descriptor length (11), descriptor type (TBD), and hub controller current (0) fields of the hub Class Descriptor are emulated by the HCD. All
|
|
* other fields are located in the HcRhDescriptorA and HcRhDescriptorB registers.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcrhdescriptora
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptora_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t potpgt : 8; /**< PowerOnToPowerGoodTime. This byte specifies the duration HCD has to wait before
|
|
accessing a powered-on port of the Root Hub. It is implementation-specific. The
|
|
unit of time is 2 ms. The duration is calculated as POTPGT * 2 ms. */
|
|
uint32_t reserved_13_23 : 11;
|
|
uint32_t nocp : 1; /**< NoOverCurrentProtection. This bit describes how the overcurrent status for the
|
|
Root Hub ports are reported. When this bit is cleared, the
|
|
OverCurrentProtectionMode field specifies global or per-port reporting.
|
|
- 0: Over-current status is reported collectively for all downstream ports
|
|
- 1: No overcurrent protection supported */
|
|
uint32_t ocpm : 1; /**< OverCurrentProtectionMode. This bit describes how the overcurrent status for
|
|
the Root Hub ports are reported. At reset, this fields should reflect the same
|
|
mode as PowerSwitchingMode. This field is valid only if the
|
|
NoOverCurrentProtection field is cleared. 0: over-current status is reported
|
|
collectively for all downstream ports 1: over-current status is reported on a
|
|
per-port basis */
|
|
uint32_t dt : 1; /**< DeviceType. This bit specifies that the Root Hub is not a compound device. The
|
|
Root Hub is not permitted to be a compound device. This field should always
|
|
read/write 0. */
|
|
uint32_t psm : 1; /**< PowerSwitchingMode. This bit is used to specify how the power switching of
|
|
the Root Hub ports is controlled. It is implementation-specific. This field
|
|
is only valid if the NoPowerSwitching field is cleared. 0: all ports are
|
|
powered at the same time. 1: each port is powered individually. This mode
|
|
allows port power to be controlled by either the global switch or per-port
|
|
switching. If the PortPowerControlMask bit is set, the port responds only
|
|
to port power commands (Set/ClearPortPower). If the port mask is cleared,
|
|
then the port is controlled only by the global power switch
|
|
(Set/ClearGlobalPower). */
|
|
uint32_t nps : 1; /**< NoPowerSwitching These bits are used to specify whether power switching is
|
|
supported or port are always powered. It is implementation-specific. When
|
|
this bit is cleared, the PowerSwitchingMode specifies global or per-port
|
|
switching.
|
|
- 0: Ports are power switched
|
|
- 1: Ports are always powered on when the HC is powered on */
|
|
uint32_t ndp : 8; /**< NumberDownstreamPorts. These bits specify the number of downstream ports
|
|
supported by the Root Hub. It is implementation-specific. The minimum number
|
|
of ports is 1. The maximum number of ports supported by OpenHCI is 15. */
|
|
#else
|
|
uint32_t ndp : 8;
|
|
uint32_t nps : 1;
|
|
uint32_t psm : 1;
|
|
uint32_t dt : 1;
|
|
uint32_t ocpm : 1;
|
|
uint32_t nocp : 1;
|
|
uint32_t reserved_13_23 : 11;
|
|
uint32_t potpgt : 8;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptora_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptora_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcrhdescriptora cvmx_uahcx_ohci0_hcrhdescriptora_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcrhdescriptorb
|
|
*
|
|
* HCRHDESCRIPTORB = Host Controller Root Hub DescriptorB Register
|
|
*
|
|
* The HcRhDescriptorB register is the second register of two describing the characteristics of the Root Hub. These fields are written during
|
|
* initialization to correspond with the system implementation. Reset values are implementation-specific.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcrhdescriptorb
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptorb_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t ppcm : 16; /**< PortPowerControlMask.
|
|
Each bit indicates if a port is affected by a global power control command
|
|
when PowerSwitchingMode is set. When set, the port's power state is only
|
|
affected by per-port power control (Set/ClearPortPower). When cleared, the
|
|
port is controlled by the global power switch (Set/ClearGlobalPower). If
|
|
the device is configured to global switching mode (PowerSwitchingMode=0),
|
|
this field is not valid.
|
|
bit 0: Reserved
|
|
bit 1: Ganged-power mask on Port \#1
|
|
bit 2: Ganged-power mask on Port \#2
|
|
- ...
|
|
bit15: Ganged-power mask on Port \#15 */
|
|
uint32_t dr : 16; /**< DeviceRemovable.
|
|
Each bit is dedicated to a port of the Root Hub. When cleared,the attached
|
|
device is removable. When set, the attached device is not removable.
|
|
bit 0: Reserved
|
|
bit 1: Device attached to Port \#1
|
|
bit 2: Device attached to Port \#2
|
|
- ...
|
|
bit15: Device attached to Port \#15 */
|
|
#else
|
|
uint32_t dr : 16;
|
|
uint32_t ppcm : 16;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptorb_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcrhdescriptorb_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcrhdescriptorb cvmx_uahcx_ohci0_hcrhdescriptorb_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcrhportstatus#
|
|
*
|
|
* HCRHPORTSTATUSX = Host Controller Root Hub Port X Status Registers
|
|
*
|
|
* The HcRhPortStatus[1:NDP] register is used to control and report port events on a per-port basis. NumberDownstreamPorts represents the number
|
|
* of HcRhPortStatus registers that are implemented in hardware. The lower word is used to reflect the port status, whereas the upper word reflects
|
|
* the status change bits. Some status bits are implemented with special write behavior (see below). If a transaction (token through handshake) is
|
|
* in progress when a write to change port status occurs, the resulting port status change must be postponed until the transaction completes.
|
|
* Reserved bits should always be written '0'.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcrhportstatusx
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcrhportstatusx_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t reserved_21_31 : 11;
|
|
uint32_t prsc : 1; /**< PortResetStatusChange. This bit is set at the end of the 10-ms port reset
|
|
signal. The HCD writes a '1' to clear this bit. Writing a '0' has no effect.
|
|
0 = port reset is not complete
|
|
1 = port reset is complete */
|
|
uint32_t ocic : 1; /**< PortOverCurrentIndicatorChange. This bit is valid only if overcurrent
|
|
conditions are reported on a per-port basis. This bit is set when Root Hub
|
|
changes the PortOverCurrentIndicator bit. The HCD writes a '1' to clear this
|
|
bit. Writing a '0' has no effect.
|
|
0 = no change in PortOverCurrentIndicator
|
|
1 = PortOverCurrentIndicator has changed */
|
|
uint32_t pssc : 1; /**< PortSuspendStatusChange. This bit is set when the full resume sequence has
|
|
been completed. This sequence includes the 20-s resume pulse, LS EOP, and
|
|
3-ms resychronization delay.
|
|
The HCD writes a '1' to clear this bit. Writing a '0' has no effect. This
|
|
bit is also cleared when ResetStatusChange is set.
|
|
0 = resume is not completed
|
|
1 = resume completed */
|
|
uint32_t pesc : 1; /**< PortEnableStatusChange. This bit is set when hardware events cause the
|
|
PortEnableStatus bit to be cleared. Changes from HCD writes do not set this
|
|
bit. The HCD writes a '1' to clear this bit. Writing a '0' has no effect.
|
|
0 = no change in PortEnableStatus
|
|
1 = change in PortEnableStatus */
|
|
uint32_t csc : 1; /**< ConnectStatusChange. This bit is set whenever a connect or disconnect event
|
|
occurs. The HCD writes a '1' to clear this bit. Writing a '0' has no
|
|
effect. If CurrentConnectStatus is cleared when a SetPortReset,SetPortEnable,
|
|
or SetPortSuspend write occurs, this bit is set to force the driver to
|
|
re-evaluate the connection status since these writes should not occur if the
|
|
port is disconnected.
|
|
0 = no change in CurrentConnectStatus
|
|
1 = change in CurrentConnectStatus
|
|
Note: If the DeviceRemovable[NDP] bit is set, this bit is set only after a
|
|
Root Hub reset to inform the system that the device is attached. Description */
|
|
uint32_t reserved_10_15 : 6;
|
|
uint32_t lsda : 1; /**< (read) LowSpeedDeviceAttached. This bit indicates the speed of the device
|
|
attached to this port. When set, a Low Speed device is attached to this
|
|
port. When clear, a Full Speed device is attached to this port. This
|
|
field is valid only when the CurrentConnectStatus is set.
|
|
0 = full speed device attached
|
|
1 = low speed device attached
|
|
(write) ClearPortPower. The HCD clears the PortPowerStatus bit by writing a
|
|
'1' to this bit. Writing a '0' has no effect. */
|
|
uint32_t pps : 1; /**< (read) PortPowerStatus. This bit reflects the port's power status, regardless
|
|
of the type of power switching implemented. This bit is cleared if an
|
|
overcurrent condition is detected. HCD sets this bit by writing
|
|
SetPortPower or SetGlobalPower. HCD clears this bit by writing
|
|
ClearPortPower or ClearGlobalPower. Which power control switches are
|
|
enabled is determined by PowerSwitchingMode and PortPortControlMask[NDP].
|
|
In global switching mode (PowerSwitchingMode=0), only Set/ClearGlobalPower
|
|
controls this bit. In per-port power switching (PowerSwitchingMode=1),
|
|
if the PortPowerControlMask[NDP] bit for the port is set, only
|
|
Set/ClearPortPower commands are enabled. If the mask is not set, only
|
|
Set/ClearGlobalPower commands are enabled. When port power is disabled,
|
|
CurrentConnectStatus, PortEnableStatus, PortSuspendStatus, and
|
|
PortResetStatus should be reset.
|
|
0 = port power is off
|
|
1 = port power is on
|
|
(write) SetPortPower. The HCD writes a '1' to set the PortPowerStatus bit.
|
|
Writing a '0' has no effect. Note: This bit is always reads '1'
|
|
if power switching is not supported. */
|
|
uint32_t reserved_5_7 : 3;
|
|
uint32_t prs : 1; /**< (read) PortResetStatus. When this bit is set by a write to SetPortReset, port
|
|
reset signaling is asserted. When reset is completed, this bit is
|
|
cleared when PortResetStatusChange is set. This bit cannot be set if
|
|
CurrentConnectStatus is cleared.
|
|
0 = port reset signal is not active
|
|
1 = port reset signal is active
|
|
(write) SetPortReset. The HCD sets the port reset signaling by writing a '1'
|
|
to this bit. Writing a '0'has no effect. If CurrentConnectStatus is
|
|
cleared, this write does not set PortResetStatus, but instead sets
|
|
ConnectStatusChange. This informs the driver that it attempted to reset
|
|
a disconnected port. Description */
|
|
uint32_t poci : 1; /**< (read) PortOverCurrentIndicator. This bit is only valid when the Root Hub is
|
|
configured in such a way that overcurrent conditions are reported on a
|
|
per-port basis. If per-port overcurrent reporting is not supported, this
|
|
bit is set to 0. If cleared, all power operations are normal for this
|
|
port. If set, an overcurrent condition exists on this port. This bit
|
|
always reflects the overcurrent input signal
|
|
0 = no overcurrent condition.
|
|
1 = overcurrent condition detected.
|
|
(write) ClearSuspendStatus. The HCD writes a '1' to initiate a resume.
|
|
Writing a '0' has no effect. A resume is initiated only if
|
|
PortSuspendStatus is set. */
|
|
uint32_t pss : 1; /**< (read) PortSuspendStatus. This bit indicates the port is suspended or in the
|
|
resume sequence. It is set by a SetSuspendState write and cleared when
|
|
PortSuspendStatusChange is set at the end of the resume interval. This
|
|
bit cannot be set if CurrentConnectStatus is cleared. This bit is also
|
|
cleared when PortResetStatusChange is set at the end of the port reset
|
|
or when the HC is placed in the USBRESUME state. If an upstream resume is
|
|
in progress, it should propagate to the HC.
|
|
0 = port is not suspended
|
|
1 = port is suspended
|
|
(write) SetPortSuspend. The HCD sets the PortSuspendStatus bit by writing a
|
|
'1' to this bit. Writing a '0' has no effect. If CurrentConnectStatus
|
|
is cleared, this write does not set PortSuspendStatus; instead it sets
|
|
ConnectStatusChange.This informs the driver that it attempted to suspend
|
|
a disconnected port. */
|
|
uint32_t pes : 1; /**< (read) PortEnableStatus. This bit indicates whether the port is enabled or
|
|
disabled. The Root Hub may clear this bit when an overcurrent condition,
|
|
disconnect event, switched-off power, or operational bus error such
|
|
as babble is detected. This change also causes PortEnabledStatusChange
|
|
to be set. HCD sets this bit by writing SetPortEnable and clears it by
|
|
writing ClearPortEnable. This bit cannot be set when CurrentConnectStatus
|
|
is cleared. This bit is also set, if not already, at the completion of a
|
|
port reset when ResetStatusChange is set or port suspend when
|
|
SuspendStatusChange is set.
|
|
0 = port is disabled
|
|
1 = port is enabled
|
|
(write) SetPortEnable. The HCD sets PortEnableStatus by writing a '1'.
|
|
Writing a '0' has no effect. If CurrentConnectStatus is cleared, this
|
|
write does not set PortEnableStatus, but instead sets ConnectStatusChange.
|
|
This informs the driver that it attempted to enable a disconnected port. */
|
|
uint32_t ccs : 1; /**< (read) CurrentConnectStatus. This bit reflects the current state of the
|
|
downstream port.
|
|
0 = no device connected
|
|
1 = device connected
|
|
(write) ClearPortEnable.
|
|
The HCD writes a '1' to this bit to clear the PortEnableStatus bit.
|
|
Writing a '0' has no effect. The CurrentConnectStatus is not
|
|
affected by any write.
|
|
Note: This bit is always read '1b' when the attached device is
|
|
nonremovable (DeviceRemoveable[NDP]). */
|
|
#else
|
|
uint32_t ccs : 1;
|
|
uint32_t pes : 1;
|
|
uint32_t pss : 1;
|
|
uint32_t poci : 1;
|
|
uint32_t prs : 1;
|
|
uint32_t reserved_5_7 : 3;
|
|
uint32_t pps : 1;
|
|
uint32_t lsda : 1;
|
|
uint32_t reserved_10_15 : 6;
|
|
uint32_t csc : 1;
|
|
uint32_t pesc : 1;
|
|
uint32_t pssc : 1;
|
|
uint32_t ocic : 1;
|
|
uint32_t prsc : 1;
|
|
uint32_t reserved_21_31 : 11;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcrhportstatusx_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcrhportstatusx_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcrhportstatusx cvmx_uahcx_ohci0_hcrhportstatusx_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_hcrhstatus
|
|
*
|
|
* HCRHSTATUS = Host Controller Root Hub Status Register
|
|
*
|
|
* The HcRhStatus register is divided into two parts. The lower word of a Dword represents the Hub Status field and the upper word represents the Hub
|
|
* Status Change field. Reserved bits should always be written '0'.
|
|
*/
|
|
union cvmx_uahcx_ohci0_hcrhstatus
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_hcrhstatus_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t crwe : 1; /**< (write) ClearRemoteWakeupEnable Writing a '1' clears DeviceRemoveWakeupEnable.
|
|
Writing a '0' has no effect. */
|
|
uint32_t reserved_18_30 : 13;
|
|
uint32_t ccic : 1; /**< OverCurrentIndicatorChange. This bit is set by hardware when a change has
|
|
occurred to the OCI field of this register. The HCD clears this bit by
|
|
writing a '1'. Writing a '0' has no effect. */
|
|
uint32_t lpsc : 1; /**< (read) LocalPowerStatusChange. The Root Hub does not support the local power
|
|
status feature; thus, this bit is always read as '0'.
|
|
(write) SetGlobalPower In global power mode (PowerSwitchingMode=0), This bit
|
|
is written to '1' to turn on power to all ports (clear PortPowerStatus).
|
|
In per-port power mode, it sets PortPowerStatus only on ports whose
|
|
PortPowerControlMask bit is not set. Writing a '0' has no effect. */
|
|
uint32_t drwe : 1; /**< (read) DeviceRemoteWakeupEnable. This bit enables a ConnectStatusChange bit as
|
|
a resume event, causing a USBSUSPEND to USBRESUME state transition and
|
|
setting the ResumeDetected interrupt. 0 = ConnectStatusChange is not a
|
|
remote wakeup event. 1 = ConnectStatusChange is a remote wakeup event.
|
|
(write) SetRemoteWakeupEnable Writing a '1' sets DeviceRemoveWakeupEnable.
|
|
Writing a '0' has no effect. */
|
|
uint32_t reserved_2_14 : 13;
|
|
uint32_t oci : 1; /**< OverCurrentIndicator. This bit reports overcurrent conditions when the global
|
|
reporting is implemented. When set, an overcurrent condition exists. When
|
|
cleared, all power operations are normal. If per-port overcurrent protection
|
|
is implemented this bit is always '0' */
|
|
uint32_t lps : 1; /**< (read) LocalPowerStatus. The Root Hub does not support the local power status
|
|
feature; thus, this bit is always read as '0.
|
|
(write) ClearGlobalPower. In global power mode (PowerSwitchingMode=0), This
|
|
bit is written to '1' to turn off power to all ports
|
|
(clear PortPowerStatus). In per-port power mode, it clears
|
|
PortPowerStatus only on ports whose PortPowerControlMask bit is not
|
|
set. Writing a '0' has no effect. Description */
|
|
#else
|
|
uint32_t lps : 1;
|
|
uint32_t oci : 1;
|
|
uint32_t reserved_2_14 : 13;
|
|
uint32_t drwe : 1;
|
|
uint32_t lpsc : 1;
|
|
uint32_t ccic : 1;
|
|
uint32_t reserved_18_30 : 13;
|
|
uint32_t crwe : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_hcrhstatus_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_hcrhstatus_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_hcrhstatus cvmx_uahcx_ohci0_hcrhstatus_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_insnreg06
|
|
*
|
|
* OHCI0_INSNREG06 = OHCI AHB Error Status Register (Synopsys Speicific)
|
|
*
|
|
* This register contains AHB Error Status.
|
|
*/
|
|
union cvmx_uahcx_ohci0_insnreg06
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_insnreg06_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t vld : 1; /**< AHB Error Captured. Indicator that an AHB error was encountered and values were captured.
|
|
To clear this field the application must write a 0 to it. */
|
|
uint32_t reserved_0_30 : 31;
|
|
#else
|
|
uint32_t reserved_0_30 : 31;
|
|
uint32_t vld : 1;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_insnreg06_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_insnreg06_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_insnreg06 cvmx_uahcx_ohci0_insnreg06_t;
|
|
|
|
/**
|
|
* cvmx_uahc#_ohci0_insnreg07
|
|
*
|
|
* OHCI0_INSNREG07 = OHCI AHB Error Address Register (Synopsys Speicific)
|
|
*
|
|
* This register contains AHB Error Status.
|
|
*/
|
|
union cvmx_uahcx_ohci0_insnreg07
|
|
{
|
|
uint32_t u32;
|
|
struct cvmx_uahcx_ohci0_insnreg07_s
|
|
{
|
|
#if __BYTE_ORDER == __BIG_ENDIAN
|
|
uint32_t err_addr : 32; /**< AHB Master Error Address. AHB address of the control phase at which the AHB error occurred */
|
|
#else
|
|
uint32_t err_addr : 32;
|
|
#endif
|
|
} s;
|
|
struct cvmx_uahcx_ohci0_insnreg07_s cn63xx;
|
|
struct cvmx_uahcx_ohci0_insnreg07_s cn63xxp1;
|
|
};
|
|
typedef union cvmx_uahcx_ohci0_insnreg07 cvmx_uahcx_ohci0_insnreg07_t;
|
|
|
|
#endif
|