diff options
Diffstat (limited to 'sys/contrib/octeon-sdk/cvmx-pci-defs.h')
-rw-r--r-- | sys/contrib/octeon-sdk/cvmx-pci-defs.h | 4714 |
1 files changed, 4714 insertions, 0 deletions
diff --git a/sys/contrib/octeon-sdk/cvmx-pci-defs.h b/sys/contrib/octeon-sdk/cvmx-pci-defs.h new file mode 100644 index 0000000..df38d8d --- /dev/null +++ b/sys/contrib/octeon-sdk/cvmx-pci-defs.h @@ -0,0 +1,4714 @@ +/***********************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-pci-defs.h + * + * Configuration and status register (CSR) type definitions for + * Octeon pci. + * + * This file is auto generated. Do not edit. + * + * <hr>$Revision$<hr> + * + */ +#ifndef __CVMX_PCI_TYPEDEFS_H__ +#define __CVMX_PCI_TYPEDEFS_H__ + +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_BAR1_INDEXX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 31))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 31))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 31))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 31))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 31))))) + cvmx_warn("CVMX_PCI_BAR1_INDEXX(%lu) is invalid on this chip\n", offset); + return 0x0000000000000100ull + ((offset) & 31) * 4; +} +#else +#define CVMX_PCI_BAR1_INDEXX(offset) (0x0000000000000100ull + ((offset) & 31) * 4) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_BIST_REG CVMX_PCI_BIST_REG_FUNC() +static inline uint64_t CVMX_PCI_BIST_REG_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN50XX))) + cvmx_warn("CVMX_PCI_BIST_REG not supported on this chip\n"); + return 0x00000000000001C0ull; +} +#else +#define CVMX_PCI_BIST_REG (0x00000000000001C0ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG00 CVMX_PCI_CFG00_FUNC() +static inline uint64_t CVMX_PCI_CFG00_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG00 not supported on this chip\n"); + return 0x0000000000000000ull; +} +#else +#define CVMX_PCI_CFG00 (0x0000000000000000ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG01 CVMX_PCI_CFG01_FUNC() +static inline uint64_t CVMX_PCI_CFG01_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG01 not supported on this chip\n"); + return 0x0000000000000004ull; +} +#else +#define CVMX_PCI_CFG01 (0x0000000000000004ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG02 CVMX_PCI_CFG02_FUNC() +static inline uint64_t CVMX_PCI_CFG02_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG02 not supported on this chip\n"); + return 0x0000000000000008ull; +} +#else +#define CVMX_PCI_CFG02 (0x0000000000000008ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG03 CVMX_PCI_CFG03_FUNC() +static inline uint64_t CVMX_PCI_CFG03_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG03 not supported on this chip\n"); + return 0x000000000000000Cull; +} +#else +#define CVMX_PCI_CFG03 (0x000000000000000Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG04 CVMX_PCI_CFG04_FUNC() +static inline uint64_t CVMX_PCI_CFG04_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG04 not supported on this chip\n"); + return 0x0000000000000010ull; +} +#else +#define CVMX_PCI_CFG04 (0x0000000000000010ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG05 CVMX_PCI_CFG05_FUNC() +static inline uint64_t CVMX_PCI_CFG05_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG05 not supported on this chip\n"); + return 0x0000000000000014ull; +} +#else +#define CVMX_PCI_CFG05 (0x0000000000000014ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG06 CVMX_PCI_CFG06_FUNC() +static inline uint64_t CVMX_PCI_CFG06_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG06 not supported on this chip\n"); + return 0x0000000000000018ull; +} +#else +#define CVMX_PCI_CFG06 (0x0000000000000018ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG07 CVMX_PCI_CFG07_FUNC() +static inline uint64_t CVMX_PCI_CFG07_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG07 not supported on this chip\n"); + return 0x000000000000001Cull; +} +#else +#define CVMX_PCI_CFG07 (0x000000000000001Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG08 CVMX_PCI_CFG08_FUNC() +static inline uint64_t CVMX_PCI_CFG08_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG08 not supported on this chip\n"); + return 0x0000000000000020ull; +} +#else +#define CVMX_PCI_CFG08 (0x0000000000000020ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG09 CVMX_PCI_CFG09_FUNC() +static inline uint64_t CVMX_PCI_CFG09_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG09 not supported on this chip\n"); + return 0x0000000000000024ull; +} +#else +#define CVMX_PCI_CFG09 (0x0000000000000024ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG10 CVMX_PCI_CFG10_FUNC() +static inline uint64_t CVMX_PCI_CFG10_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG10 not supported on this chip\n"); + return 0x0000000000000028ull; +} +#else +#define CVMX_PCI_CFG10 (0x0000000000000028ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG11 CVMX_PCI_CFG11_FUNC() +static inline uint64_t CVMX_PCI_CFG11_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG11 not supported on this chip\n"); + return 0x000000000000002Cull; +} +#else +#define CVMX_PCI_CFG11 (0x000000000000002Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG12 CVMX_PCI_CFG12_FUNC() +static inline uint64_t CVMX_PCI_CFG12_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG12 not supported on this chip\n"); + return 0x0000000000000030ull; +} +#else +#define CVMX_PCI_CFG12 (0x0000000000000030ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG13 CVMX_PCI_CFG13_FUNC() +static inline uint64_t CVMX_PCI_CFG13_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG13 not supported on this chip\n"); + return 0x0000000000000034ull; +} +#else +#define CVMX_PCI_CFG13 (0x0000000000000034ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG15 CVMX_PCI_CFG15_FUNC() +static inline uint64_t CVMX_PCI_CFG15_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG15 not supported on this chip\n"); + return 0x000000000000003Cull; +} +#else +#define CVMX_PCI_CFG15 (0x000000000000003Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG16 CVMX_PCI_CFG16_FUNC() +static inline uint64_t CVMX_PCI_CFG16_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG16 not supported on this chip\n"); + return 0x0000000000000040ull; +} +#else +#define CVMX_PCI_CFG16 (0x0000000000000040ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG17 CVMX_PCI_CFG17_FUNC() +static inline uint64_t CVMX_PCI_CFG17_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG17 not supported on this chip\n"); + return 0x0000000000000044ull; +} +#else +#define CVMX_PCI_CFG17 (0x0000000000000044ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG18 CVMX_PCI_CFG18_FUNC() +static inline uint64_t CVMX_PCI_CFG18_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG18 not supported on this chip\n"); + return 0x0000000000000048ull; +} +#else +#define CVMX_PCI_CFG18 (0x0000000000000048ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG19 CVMX_PCI_CFG19_FUNC() +static inline uint64_t CVMX_PCI_CFG19_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG19 not supported on this chip\n"); + return 0x000000000000004Cull; +} +#else +#define CVMX_PCI_CFG19 (0x000000000000004Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG20 CVMX_PCI_CFG20_FUNC() +static inline uint64_t CVMX_PCI_CFG20_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG20 not supported on this chip\n"); + return 0x0000000000000050ull; +} +#else +#define CVMX_PCI_CFG20 (0x0000000000000050ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG21 CVMX_PCI_CFG21_FUNC() +static inline uint64_t CVMX_PCI_CFG21_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG21 not supported on this chip\n"); + return 0x0000000000000054ull; +} +#else +#define CVMX_PCI_CFG21 (0x0000000000000054ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG22 CVMX_PCI_CFG22_FUNC() +static inline uint64_t CVMX_PCI_CFG22_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG22 not supported on this chip\n"); + return 0x0000000000000058ull; +} +#else +#define CVMX_PCI_CFG22 (0x0000000000000058ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG56 CVMX_PCI_CFG56_FUNC() +static inline uint64_t CVMX_PCI_CFG56_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG56 not supported on this chip\n"); + return 0x00000000000000E0ull; +} +#else +#define CVMX_PCI_CFG56 (0x00000000000000E0ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG57 CVMX_PCI_CFG57_FUNC() +static inline uint64_t CVMX_PCI_CFG57_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG57 not supported on this chip\n"); + return 0x00000000000000E4ull; +} +#else +#define CVMX_PCI_CFG57 (0x00000000000000E4ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG58 CVMX_PCI_CFG58_FUNC() +static inline uint64_t CVMX_PCI_CFG58_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG58 not supported on this chip\n"); + return 0x00000000000000E8ull; +} +#else +#define CVMX_PCI_CFG58 (0x00000000000000E8ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG59 CVMX_PCI_CFG59_FUNC() +static inline uint64_t CVMX_PCI_CFG59_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG59 not supported on this chip\n"); + return 0x00000000000000ECull; +} +#else +#define CVMX_PCI_CFG59 (0x00000000000000ECull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG60 CVMX_PCI_CFG60_FUNC() +static inline uint64_t CVMX_PCI_CFG60_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG60 not supported on this chip\n"); + return 0x00000000000000F0ull; +} +#else +#define CVMX_PCI_CFG60 (0x00000000000000F0ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG61 CVMX_PCI_CFG61_FUNC() +static inline uint64_t CVMX_PCI_CFG61_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG61 not supported on this chip\n"); + return 0x00000000000000F4ull; +} +#else +#define CVMX_PCI_CFG61 (0x00000000000000F4ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG62 CVMX_PCI_CFG62_FUNC() +static inline uint64_t CVMX_PCI_CFG62_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG62 not supported on this chip\n"); + return 0x00000000000000F8ull; +} +#else +#define CVMX_PCI_CFG62 (0x00000000000000F8ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CFG63 CVMX_PCI_CFG63_FUNC() +static inline uint64_t CVMX_PCI_CFG63_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CFG63 not supported on this chip\n"); + return 0x00000000000000FCull; +} +#else +#define CVMX_PCI_CFG63 (0x00000000000000FCull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CNT_REG CVMX_PCI_CNT_REG_FUNC() +static inline uint64_t CVMX_PCI_CNT_REG_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CNT_REG not supported on this chip\n"); + return 0x00000000000001B8ull; +} +#else +#define CVMX_PCI_CNT_REG (0x00000000000001B8ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_CTL_STATUS_2 CVMX_PCI_CTL_STATUS_2_FUNC() +static inline uint64_t CVMX_PCI_CTL_STATUS_2_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_CTL_STATUS_2 not supported on this chip\n"); + return 0x000000000000018Cull; +} +#else +#define CVMX_PCI_CTL_STATUS_2 (0x000000000000018Cull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_DBELL_X(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_DBELL_X(%lu) is invalid on this chip\n", offset); + return 0x0000000000000080ull + ((offset) & 3) * 8; +} +#else +#define CVMX_PCI_DBELL_X(offset) (0x0000000000000080ull + ((offset) & 3) * 8) +#endif +#define CVMX_PCI_DMA_CNT0 CVMX_PCI_DMA_CNTX(0) +#define CVMX_PCI_DMA_CNT1 CVMX_PCI_DMA_CNTX(1) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_DMA_CNTX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1))))) + cvmx_warn("CVMX_PCI_DMA_CNTX(%lu) is invalid on this chip\n", offset); + return 0x00000000000000A0ull + ((offset) & 1) * 8; +} +#else +#define CVMX_PCI_DMA_CNTX(offset) (0x00000000000000A0ull + ((offset) & 1) * 8) +#endif +#define CVMX_PCI_DMA_INT_LEV0 CVMX_PCI_DMA_INT_LEVX(0) +#define CVMX_PCI_DMA_INT_LEV1 CVMX_PCI_DMA_INT_LEVX(1) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_DMA_INT_LEVX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1))))) + cvmx_warn("CVMX_PCI_DMA_INT_LEVX(%lu) is invalid on this chip\n", offset); + return 0x00000000000000A4ull + ((offset) & 1) * 8; +} +#else +#define CVMX_PCI_DMA_INT_LEVX(offset) (0x00000000000000A4ull + ((offset) & 1) * 8) +#endif +#define CVMX_PCI_DMA_TIME0 CVMX_PCI_DMA_TIMEX(0) +#define CVMX_PCI_DMA_TIME1 CVMX_PCI_DMA_TIMEX(1) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_DMA_TIMEX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 1))))) + cvmx_warn("CVMX_PCI_DMA_TIMEX(%lu) is invalid on this chip\n", offset); + return 0x00000000000000B0ull + ((offset) & 1) * 4; +} +#else +#define CVMX_PCI_DMA_TIMEX(offset) (0x00000000000000B0ull + ((offset) & 1) * 4) +#endif +#define CVMX_PCI_INSTR_COUNT0 CVMX_PCI_INSTR_COUNTX(0) +#define CVMX_PCI_INSTR_COUNT1 CVMX_PCI_INSTR_COUNTX(1) +#define CVMX_PCI_INSTR_COUNT2 CVMX_PCI_INSTR_COUNTX(2) +#define CVMX_PCI_INSTR_COUNT3 CVMX_PCI_INSTR_COUNTX(3) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_INSTR_COUNTX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_INSTR_COUNTX(%lu) is invalid on this chip\n", offset); + return 0x0000000000000084ull + ((offset) & 3) * 8; +} +#else +#define CVMX_PCI_INSTR_COUNTX(offset) (0x0000000000000084ull + ((offset) & 3) * 8) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_INT_ENB CVMX_PCI_INT_ENB_FUNC() +static inline uint64_t CVMX_PCI_INT_ENB_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_INT_ENB not supported on this chip\n"); + return 0x0000000000000038ull; +} +#else +#define CVMX_PCI_INT_ENB (0x0000000000000038ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_INT_ENB2 CVMX_PCI_INT_ENB2_FUNC() +static inline uint64_t CVMX_PCI_INT_ENB2_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_INT_ENB2 not supported on this chip\n"); + return 0x00000000000001A0ull; +} +#else +#define CVMX_PCI_INT_ENB2 (0x00000000000001A0ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_INT_SUM CVMX_PCI_INT_SUM_FUNC() +static inline uint64_t CVMX_PCI_INT_SUM_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_INT_SUM not supported on this chip\n"); + return 0x0000000000000030ull; +} +#else +#define CVMX_PCI_INT_SUM (0x0000000000000030ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_INT_SUM2 CVMX_PCI_INT_SUM2_FUNC() +static inline uint64_t CVMX_PCI_INT_SUM2_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_INT_SUM2 not supported on this chip\n"); + return 0x0000000000000198ull; +} +#else +#define CVMX_PCI_INT_SUM2 (0x0000000000000198ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_MSI_RCV CVMX_PCI_MSI_RCV_FUNC() +static inline uint64_t CVMX_PCI_MSI_RCV_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_MSI_RCV not supported on this chip\n"); + return 0x00000000000000F0ull; +} +#else +#define CVMX_PCI_MSI_RCV (0x00000000000000F0ull) +#endif +#define CVMX_PCI_PKTS_SENT0 CVMX_PCI_PKTS_SENTX(0) +#define CVMX_PCI_PKTS_SENT1 CVMX_PCI_PKTS_SENTX(1) +#define CVMX_PCI_PKTS_SENT2 CVMX_PCI_PKTS_SENTX(2) +#define CVMX_PCI_PKTS_SENT3 CVMX_PCI_PKTS_SENTX(3) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_PKTS_SENTX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_PKTS_SENTX(%lu) is invalid on this chip\n", offset); + return 0x0000000000000040ull + ((offset) & 3) * 16; +} +#else +#define CVMX_PCI_PKTS_SENTX(offset) (0x0000000000000040ull + ((offset) & 3) * 16) +#endif +#define CVMX_PCI_PKTS_SENT_INT_LEV0 CVMX_PCI_PKTS_SENT_INT_LEVX(0) +#define CVMX_PCI_PKTS_SENT_INT_LEV1 CVMX_PCI_PKTS_SENT_INT_LEVX(1) +#define CVMX_PCI_PKTS_SENT_INT_LEV2 CVMX_PCI_PKTS_SENT_INT_LEVX(2) +#define CVMX_PCI_PKTS_SENT_INT_LEV3 CVMX_PCI_PKTS_SENT_INT_LEVX(3) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_PKTS_SENT_INT_LEVX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_PKTS_SENT_INT_LEVX(%lu) is invalid on this chip\n", offset); + return 0x0000000000000048ull + ((offset) & 3) * 16; +} +#else +#define CVMX_PCI_PKTS_SENT_INT_LEVX(offset) (0x0000000000000048ull + ((offset) & 3) * 16) +#endif +#define CVMX_PCI_PKTS_SENT_TIME0 CVMX_PCI_PKTS_SENT_TIMEX(0) +#define CVMX_PCI_PKTS_SENT_TIME1 CVMX_PCI_PKTS_SENT_TIMEX(1) +#define CVMX_PCI_PKTS_SENT_TIME2 CVMX_PCI_PKTS_SENT_TIMEX(2) +#define CVMX_PCI_PKTS_SENT_TIME3 CVMX_PCI_PKTS_SENT_TIMEX(3) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_PKTS_SENT_TIMEX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_PKTS_SENT_TIMEX(%lu) is invalid on this chip\n", offset); + return 0x000000000000004Cull + ((offset) & 3) * 16; +} +#else +#define CVMX_PCI_PKTS_SENT_TIMEX(offset) (0x000000000000004Cull + ((offset) & 3) * 16) +#endif +#define CVMX_PCI_PKT_CREDITS0 CVMX_PCI_PKT_CREDITSX(0) +#define CVMX_PCI_PKT_CREDITS1 CVMX_PCI_PKT_CREDITSX(1) +#define CVMX_PCI_PKT_CREDITS2 CVMX_PCI_PKT_CREDITSX(2) +#define CVMX_PCI_PKT_CREDITS3 CVMX_PCI_PKT_CREDITSX(3) +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +static inline uint64_t CVMX_PCI_PKT_CREDITSX(unsigned long offset) +{ + if (!( + (OCTEON_IS_MODEL(OCTEON_CN30XX) && ((offset == 0))) || + (OCTEON_IS_MODEL(OCTEON_CN31XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN38XX) && ((offset <= 3))) || + (OCTEON_IS_MODEL(OCTEON_CN50XX) && ((offset <= 1))) || + (OCTEON_IS_MODEL(OCTEON_CN58XX) && ((offset <= 3))))) + cvmx_warn("CVMX_PCI_PKT_CREDITSX(%lu) is invalid on this chip\n", offset); + return 0x0000000000000044ull + ((offset) & 3) * 16; +} +#else +#define CVMX_PCI_PKT_CREDITSX(offset) (0x0000000000000044ull + ((offset) & 3) * 16) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_READ_CMD_6 CVMX_PCI_READ_CMD_6_FUNC() +static inline uint64_t CVMX_PCI_READ_CMD_6_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_READ_CMD_6 not supported on this chip\n"); + return 0x0000000000000180ull; +} +#else +#define CVMX_PCI_READ_CMD_6 (0x0000000000000180ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_READ_CMD_C CVMX_PCI_READ_CMD_C_FUNC() +static inline uint64_t CVMX_PCI_READ_CMD_C_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_READ_CMD_C not supported on this chip\n"); + return 0x0000000000000184ull; +} +#else +#define CVMX_PCI_READ_CMD_C (0x0000000000000184ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_READ_CMD_E CVMX_PCI_READ_CMD_E_FUNC() +static inline uint64_t CVMX_PCI_READ_CMD_E_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_READ_CMD_E not supported on this chip\n"); + return 0x0000000000000188ull; +} +#else +#define CVMX_PCI_READ_CMD_E (0x0000000000000188ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_READ_TIMEOUT CVMX_PCI_READ_TIMEOUT_FUNC() +static inline uint64_t CVMX_PCI_READ_TIMEOUT_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_READ_TIMEOUT not supported on this chip\n"); + return CVMX_ADD_IO_SEG(0x00011F00000000B0ull); +} +#else +#define CVMX_PCI_READ_TIMEOUT (CVMX_ADD_IO_SEG(0x00011F00000000B0ull)) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_SCM_REG CVMX_PCI_SCM_REG_FUNC() +static inline uint64_t CVMX_PCI_SCM_REG_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_SCM_REG not supported on this chip\n"); + return 0x00000000000001A8ull; +} +#else +#define CVMX_PCI_SCM_REG (0x00000000000001A8ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_TSR_REG CVMX_PCI_TSR_REG_FUNC() +static inline uint64_t CVMX_PCI_TSR_REG_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_TSR_REG not supported on this chip\n"); + return 0x00000000000001B0ull; +} +#else +#define CVMX_PCI_TSR_REG (0x00000000000001B0ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_WIN_RD_ADDR CVMX_PCI_WIN_RD_ADDR_FUNC() +static inline uint64_t CVMX_PCI_WIN_RD_ADDR_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_WIN_RD_ADDR not supported on this chip\n"); + return 0x0000000000000008ull; +} +#else +#define CVMX_PCI_WIN_RD_ADDR (0x0000000000000008ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_WIN_RD_DATA CVMX_PCI_WIN_RD_DATA_FUNC() +static inline uint64_t CVMX_PCI_WIN_RD_DATA_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_WIN_RD_DATA not supported on this chip\n"); + return 0x0000000000000020ull; +} +#else +#define CVMX_PCI_WIN_RD_DATA (0x0000000000000020ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_WIN_WR_ADDR CVMX_PCI_WIN_WR_ADDR_FUNC() +static inline uint64_t CVMX_PCI_WIN_WR_ADDR_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_WIN_WR_ADDR not supported on this chip\n"); + return 0x0000000000000000ull; +} +#else +#define CVMX_PCI_WIN_WR_ADDR (0x0000000000000000ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_WIN_WR_DATA CVMX_PCI_WIN_WR_DATA_FUNC() +static inline uint64_t CVMX_PCI_WIN_WR_DATA_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_WIN_WR_DATA not supported on this chip\n"); + return 0x0000000000000010ull; +} +#else +#define CVMX_PCI_WIN_WR_DATA (0x0000000000000010ull) +#endif +#if CVMX_ENABLE_CSR_ADDRESS_CHECKING +#define CVMX_PCI_WIN_WR_MASK CVMX_PCI_WIN_WR_MASK_FUNC() +static inline uint64_t CVMX_PCI_WIN_WR_MASK_FUNC(void) +{ + if (!(OCTEON_IS_MODEL(OCTEON_CN3XXX) || OCTEON_IS_MODEL(OCTEON_CN50XX) || OCTEON_IS_MODEL(OCTEON_CN58XX))) + cvmx_warn("CVMX_PCI_WIN_WR_MASK not supported on this chip\n"); + return 0x0000000000000018ull; +} +#else +#define CVMX_PCI_WIN_WR_MASK (0x0000000000000018ull) +#endif + +/** + * cvmx_pci_bar1_index# + * + * PCI_BAR1_INDEXX = PCI IndexX Register + * + * Contains address index and control bits for access to memory ranges of Bar-1, + * when PCI supplied address-bits [26:22] == X. + */ +union cvmx_pci_bar1_indexx +{ + uint32_t u32; + struct cvmx_pci_bar1_indexx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_18_31 : 14; + uint32_t addr_idx : 14; /**< Address bits [35:22] sent to L2C */ + uint32_t ca : 1; /**< Set '1' when access is not to be cached in L2. */ + uint32_t end_swp : 2; /**< Endian Swap Mode */ + uint32_t addr_v : 1; /**< Set '1' when the selected address range is valid. */ +#else + uint32_t addr_v : 1; + uint32_t end_swp : 2; + uint32_t ca : 1; + uint32_t addr_idx : 14; + uint32_t reserved_18_31 : 14; +#endif + } s; + struct cvmx_pci_bar1_indexx_s cn30xx; + struct cvmx_pci_bar1_indexx_s cn31xx; + struct cvmx_pci_bar1_indexx_s cn38xx; + struct cvmx_pci_bar1_indexx_s cn38xxp2; + struct cvmx_pci_bar1_indexx_s cn50xx; + struct cvmx_pci_bar1_indexx_s cn58xx; + struct cvmx_pci_bar1_indexx_s cn58xxp1; +}; +typedef union cvmx_pci_bar1_indexx cvmx_pci_bar1_indexx_t; + +/** + * cvmx_pci_bist_reg + * + * PCI_BIST_REG = PCI PNI BIST Status Register + * + * Contains the bist results for the PNI memories. + */ +union cvmx_pci_bist_reg +{ + uint64_t u64; + struct cvmx_pci_bist_reg_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_10_63 : 54; + uint64_t rsp_bs : 1; /**< Bist Status For b12_rsp_fifo_bist + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t dma0_bs : 1; /**< Bist Status For dmao_count + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t cmd0_bs : 1; /**< Bist Status For npi_cmd0_pni_am0 + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t cmd_bs : 1; /**< Bist Status For npi_cmd_pni_am1 + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t csr2p_bs : 1; /**< Bist Status For npi_csr_2_pni_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t csrr_bs : 1; /**< Bist Status For npi_csr_rsp_2_pni_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t rsp2p_bs : 1; /**< Bist Status For npi_rsp_2_pni_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t csr2n_bs : 1; /**< Bist Status For pni_csr_2_npi_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t dat2n_bs : 1; /**< Bist Status For pni_data_2_npi_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ + uint64_t dbg2n_bs : 1; /**< Bist Status For pni_dbg_data_2_npi_am + The value of this register is available 100,000 + core clocks + 21,000 pclks after: + Host Mode - deassertion of pci_rst_n + Non Host Mode - deassertion of pci_rst_n */ +#else + uint64_t dbg2n_bs : 1; + uint64_t dat2n_bs : 1; + uint64_t csr2n_bs : 1; + uint64_t rsp2p_bs : 1; + uint64_t csrr_bs : 1; + uint64_t csr2p_bs : 1; + uint64_t cmd_bs : 1; + uint64_t cmd0_bs : 1; + uint64_t dma0_bs : 1; + uint64_t rsp_bs : 1; + uint64_t reserved_10_63 : 54; +#endif + } s; + struct cvmx_pci_bist_reg_s cn50xx; +}; +typedef union cvmx_pci_bist_reg cvmx_pci_bist_reg_t; + +/** + * cvmx_pci_cfg00 + * + * Registers at address 0x1000 -> 0x17FF are PNI + * Start at 0x100 into range + * these are shifted by 2 to the left to make address + * Registers at address 0x1800 -> 0x18FF are CFG + * these are shifted by 2 to the left to make address + * + * PCI_CFG00 = First 32-bits of PCI config space (PCI Vendor + Device) + * + * This register contains the first 32-bits of the PCI config space registers + */ +union cvmx_pci_cfg00 +{ + uint32_t u32; + struct cvmx_pci_cfg00_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t devid : 16; /**< This is the device ID for OCTEON (90nm shhrink) */ + uint32_t vendid : 16; /**< This is the Cavium's vendor ID */ +#else + uint32_t vendid : 16; + uint32_t devid : 16; +#endif + } s; + struct cvmx_pci_cfg00_s cn30xx; + struct cvmx_pci_cfg00_s cn31xx; + struct cvmx_pci_cfg00_s cn38xx; + struct cvmx_pci_cfg00_s cn38xxp2; + struct cvmx_pci_cfg00_s cn50xx; + struct cvmx_pci_cfg00_s cn58xx; + struct cvmx_pci_cfg00_s cn58xxp1; +}; +typedef union cvmx_pci_cfg00 cvmx_pci_cfg00_t; + +/** + * cvmx_pci_cfg01 + * + * PCI_CFG01 = Second 32-bits of PCI config space (Command/Status Register) + * + */ +union cvmx_pci_cfg01 +{ + uint32_t u32; + struct cvmx_pci_cfg01_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t dpe : 1; /**< Detected Parity Error */ + uint32_t sse : 1; /**< Signaled System Error */ + uint32_t rma : 1; /**< Received Master Abort */ + uint32_t rta : 1; /**< Received Target Abort */ + uint32_t sta : 1; /**< Signaled Target Abort */ + uint32_t devt : 2; /**< DEVSEL# timing (for PCI only/for PCIX = don't care) */ + uint32_t mdpe : 1; /**< Master Data Parity Error */ + uint32_t fbb : 1; /**< Fast Back-to-Back Transactions Capable + Mode Dependent (1 = PCI Mode / 0 = PCIX Mode) */ + uint32_t reserved_22_22 : 1; + uint32_t m66 : 1; /**< 66MHz Capable */ + uint32_t cle : 1; /**< Capabilities List Enable */ + uint32_t i_stat : 1; /**< When INTx# is asserted by OCTEON this bit will be set. + When deasserted by OCTEON this bit will be cleared. */ + uint32_t reserved_11_18 : 8; + uint32_t i_dis : 1; /**< When asserted '1' disables the generation of INTx# + by OCTEON. When disabled '0' allows assertion of INTx# + by OCTEON. */ + uint32_t fbbe : 1; /**< Fast Back to Back Transaction Enable */ + uint32_t see : 1; /**< System Error Enable */ + uint32_t ads : 1; /**< Address/Data Stepping + NOTE: Octeon does NOT support address/data stepping. */ + uint32_t pee : 1; /**< PERR# Enable */ + uint32_t vps : 1; /**< VGA Palette Snooping */ + uint32_t mwice : 1; /**< Memory Write & Invalidate Command Enable */ + uint32_t scse : 1; /**< Special Cycle Snooping Enable */ + uint32_t me : 1; /**< Master Enable + Must be set for OCTEON to master a PCI/PCI-X + transaction. This should always be set any time + that OCTEON is connected to a PCI/PCI-X bus. */ + uint32_t msae : 1; /**< Memory Space Access Enable + Must be set to recieve a PCI/PCI-X memory space + transaction. This must always be set any time that + OCTEON is connected to a PCI/PCI-X bus. */ + uint32_t isae : 1; /**< I/O Space Access Enable + NOTE: For OCTEON, this bit MUST NEVER be set + (it is read-only and OCTEON does not respond to I/O + Space accesses). */ +#else + uint32_t isae : 1; + uint32_t msae : 1; + uint32_t me : 1; + uint32_t scse : 1; + uint32_t mwice : 1; + uint32_t vps : 1; + uint32_t pee : 1; + uint32_t ads : 1; + uint32_t see : 1; + uint32_t fbbe : 1; + uint32_t i_dis : 1; + uint32_t reserved_11_18 : 8; + uint32_t i_stat : 1; + uint32_t cle : 1; + uint32_t m66 : 1; + uint32_t reserved_22_22 : 1; + uint32_t fbb : 1; + uint32_t mdpe : 1; + uint32_t devt : 2; + uint32_t sta : 1; + uint32_t rta : 1; + uint32_t rma : 1; + uint32_t sse : 1; + uint32_t dpe : 1; +#endif + } s; + struct cvmx_pci_cfg01_s cn30xx; + struct cvmx_pci_cfg01_s cn31xx; + struct cvmx_pci_cfg01_s cn38xx; + struct cvmx_pci_cfg01_s cn38xxp2; + struct cvmx_pci_cfg01_s cn50xx; + struct cvmx_pci_cfg01_s cn58xx; + struct cvmx_pci_cfg01_s cn58xxp1; +}; +typedef union cvmx_pci_cfg01 cvmx_pci_cfg01_t; + +/** + * cvmx_pci_cfg02 + * + * PCI_CFG02 = Third 32-bits of PCI config space (Class Code / Revision ID) + * + */ +union cvmx_pci_cfg02 +{ + uint32_t u32; + struct cvmx_pci_cfg02_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t cc : 24; /**< Class Code (Processor/MIPS) + (was 0x100000 in pass 1 and pass 2) */ + uint32_t rid : 8; /**< Revision ID + (0 in pass 1, 1 in pass 1.1, 8 in pass 2.0) */ +#else + uint32_t rid : 8; + uint32_t cc : 24; +#endif + } s; + struct cvmx_pci_cfg02_s cn30xx; + struct cvmx_pci_cfg02_s cn31xx; + struct cvmx_pci_cfg02_s cn38xx; + struct cvmx_pci_cfg02_s cn38xxp2; + struct cvmx_pci_cfg02_s cn50xx; + struct cvmx_pci_cfg02_s cn58xx; + struct cvmx_pci_cfg02_s cn58xxp1; +}; +typedef union cvmx_pci_cfg02 cvmx_pci_cfg02_t; + +/** + * cvmx_pci_cfg03 + * + * PCI_CFG03 = Fourth 32-bits of PCI config space (BIST, HEADER Type, Latency timer, line size) + * + */ +union cvmx_pci_cfg03 +{ + uint32_t u32; + struct cvmx_pci_cfg03_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t bcap : 1; /**< BIST Capable */ + uint32_t brb : 1; /**< BIST Request/busy bit + Note: OCTEON does not support PCI BIST, therefore + this bit should remain zero. */ + uint32_t reserved_28_29 : 2; + uint32_t bcod : 4; /**< BIST Code */ + uint32_t ht : 8; /**< Header Type (Type 0) */ + uint32_t lt : 8; /**< Latency Timer + (0=PCI) (0=PCI) + (0x40=PCIX) (0x40=PCIX) */ + uint32_t cls : 8; /**< Cache Line Size */ +#else + uint32_t cls : 8; + uint32_t lt : 8; + uint32_t ht : 8; + uint32_t bcod : 4; + uint32_t reserved_28_29 : 2; + uint32_t brb : 1; + uint32_t bcap : 1; +#endif + } s; + struct cvmx_pci_cfg03_s cn30xx; + struct cvmx_pci_cfg03_s cn31xx; + struct cvmx_pci_cfg03_s cn38xx; + struct cvmx_pci_cfg03_s cn38xxp2; + struct cvmx_pci_cfg03_s cn50xx; + struct cvmx_pci_cfg03_s cn58xx; + struct cvmx_pci_cfg03_s cn58xxp1; +}; +typedef union cvmx_pci_cfg03 cvmx_pci_cfg03_t; + +/** + * cvmx_pci_cfg04 + * + * PCI_CFG04 = Fifth 32-bits of PCI config space (Base Address Register 0 - Low) + * + * Description: BAR0: 4KB 64-bit Prefetchable Memory Space + * [0]: 0 (Memory Space) + * [2:1]: 2 (64bit memory decoder) + * [3]: 1 (Prefetchable) + * [11:4]: RAZ (to imply 4KB space) + * [31:12]: RW (User may define base address) + */ +union cvmx_pci_cfg04 +{ + uint32_t u32; + struct cvmx_pci_cfg04_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t lbase : 20; /**< Base Address[31:12] + Base Address[30:12] read as zero if + PCI_CTL_STATUS_2[BB0] is set (in pass 3+) */ + uint32_t lbasez : 8; /**< Base Address[11:4] (Read as Zero) */ + uint32_t pf : 1; /**< Prefetchable Space */ + uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ + uint32_t mspc : 1; /**< Memory Space Indicator */ +#else + uint32_t mspc : 1; + uint32_t typ : 2; + uint32_t pf : 1; + uint32_t lbasez : 8; + uint32_t lbase : 20; +#endif + } s; + struct cvmx_pci_cfg04_s cn30xx; + struct cvmx_pci_cfg04_s cn31xx; + struct cvmx_pci_cfg04_s cn38xx; + struct cvmx_pci_cfg04_s cn38xxp2; + struct cvmx_pci_cfg04_s cn50xx; + struct cvmx_pci_cfg04_s cn58xx; + struct cvmx_pci_cfg04_s cn58xxp1; +}; +typedef union cvmx_pci_cfg04 cvmx_pci_cfg04_t; + +/** + * cvmx_pci_cfg05 + * + * PCI_CFG05 = Sixth 32-bits of PCI config space (Base Address Register 0 - High) + * + */ +union cvmx_pci_cfg05 +{ + uint32_t u32; + struct cvmx_pci_cfg05_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t hbase : 32; /**< Base Address[63:32] */ +#else + uint32_t hbase : 32; +#endif + } s; + struct cvmx_pci_cfg05_s cn30xx; + struct cvmx_pci_cfg05_s cn31xx; + struct cvmx_pci_cfg05_s cn38xx; + struct cvmx_pci_cfg05_s cn38xxp2; + struct cvmx_pci_cfg05_s cn50xx; + struct cvmx_pci_cfg05_s cn58xx; + struct cvmx_pci_cfg05_s cn58xxp1; +}; +typedef union cvmx_pci_cfg05 cvmx_pci_cfg05_t; + +/** + * cvmx_pci_cfg06 + * + * PCI_CFG06 = Seventh 32-bits of PCI config space (Base Address Register 1 - Low) + * + * Description: BAR1: 128MB 64-bit Prefetchable Memory Space + * [0]: 0 (Memory Space) + * [2:1]: 2 (64bit memory decoder) + * [3]: 1 (Prefetchable) + * [26:4]: RAZ (to imply 128MB space) + * [31:27]: RW (User may define base address) + */ +union cvmx_pci_cfg06 +{ + uint32_t u32; + struct cvmx_pci_cfg06_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t lbase : 5; /**< Base Address[31:27] + In pass 3+: + Base Address[29:27] read as zero if + PCI_CTL_STATUS_2[BB1] is set + Base Address[30] reads as zero if + PCI_CTL_STATUS_2[BB1] is set and + PCI_CTL_STATUS_2[BB1_SIZE] is set */ + uint32_t lbasez : 23; /**< Base Address[26:4] (Read as Zero) */ + uint32_t pf : 1; /**< Prefetchable Space */ + uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ + uint32_t mspc : 1; /**< Memory Space Indicator */ +#else + uint32_t mspc : 1; + uint32_t typ : 2; + uint32_t pf : 1; + uint32_t lbasez : 23; + uint32_t lbase : 5; +#endif + } s; + struct cvmx_pci_cfg06_s cn30xx; + struct cvmx_pci_cfg06_s cn31xx; + struct cvmx_pci_cfg06_s cn38xx; + struct cvmx_pci_cfg06_s cn38xxp2; + struct cvmx_pci_cfg06_s cn50xx; + struct cvmx_pci_cfg06_s cn58xx; + struct cvmx_pci_cfg06_s cn58xxp1; +}; +typedef union cvmx_pci_cfg06 cvmx_pci_cfg06_t; + +/** + * cvmx_pci_cfg07 + * + * PCI_CFG07 = Eighth 32-bits of PCI config space (Base Address Register 1 - High) + * + */ +union cvmx_pci_cfg07 +{ + uint32_t u32; + struct cvmx_pci_cfg07_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t hbase : 32; /**< Base Address[63:32] */ +#else + uint32_t hbase : 32; +#endif + } s; + struct cvmx_pci_cfg07_s cn30xx; + struct cvmx_pci_cfg07_s cn31xx; + struct cvmx_pci_cfg07_s cn38xx; + struct cvmx_pci_cfg07_s cn38xxp2; + struct cvmx_pci_cfg07_s cn50xx; + struct cvmx_pci_cfg07_s cn58xx; + struct cvmx_pci_cfg07_s cn58xxp1; +}; +typedef union cvmx_pci_cfg07 cvmx_pci_cfg07_t; + +/** + * cvmx_pci_cfg08 + * + * PCI_CFG08 = Ninth 32-bits of PCI config space (Base Address Register 2 - Low) + * + * Description: BAR1: 2^39 (512GB) 64-bit Prefetchable Memory Space + * [0]: 0 (Memory Space) + * [2:1]: 2 (64bit memory decoder) + * [3]: 1 (Prefetchable) + * [31:4]: RAZ + */ +union cvmx_pci_cfg08 +{ + uint32_t u32; + struct cvmx_pci_cfg08_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t lbasez : 28; /**< Base Address[31:4] (Read as Zero) */ + uint32_t pf : 1; /**< Prefetchable Space */ + uint32_t typ : 2; /**< Type (00=32b/01=below 1MB/10=64b/11=RSV) */ + uint32_t mspc : 1; /**< Memory Space Indicator */ +#else + uint32_t mspc : 1; + uint32_t typ : 2; + uint32_t pf : 1; + uint32_t lbasez : 28; +#endif + } s; + struct cvmx_pci_cfg08_s cn30xx; + struct cvmx_pci_cfg08_s cn31xx; + struct cvmx_pci_cfg08_s cn38xx; + struct cvmx_pci_cfg08_s cn38xxp2; + struct cvmx_pci_cfg08_s cn50xx; + struct cvmx_pci_cfg08_s cn58xx; + struct cvmx_pci_cfg08_s cn58xxp1; +}; +typedef union cvmx_pci_cfg08 cvmx_pci_cfg08_t; + +/** + * cvmx_pci_cfg09 + * + * PCI_CFG09 = Tenth 32-bits of PCI config space (Base Address Register 2 - High) + * + */ +union cvmx_pci_cfg09 +{ + uint32_t u32; + struct cvmx_pci_cfg09_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t hbase : 25; /**< Base Address[63:39] */ + uint32_t hbasez : 7; /**< Base Address[38:31] (Read as Zero) */ +#else + uint32_t hbasez : 7; + uint32_t hbase : 25; +#endif + } s; + struct cvmx_pci_cfg09_s cn30xx; + struct cvmx_pci_cfg09_s cn31xx; + struct cvmx_pci_cfg09_s cn38xx; + struct cvmx_pci_cfg09_s cn38xxp2; + struct cvmx_pci_cfg09_s cn50xx; + struct cvmx_pci_cfg09_s cn58xx; + struct cvmx_pci_cfg09_s cn58xxp1; +}; +typedef union cvmx_pci_cfg09 cvmx_pci_cfg09_t; + +/** + * cvmx_pci_cfg10 + * + * PCI_CFG10 = Eleventh 32-bits of PCI config space (Card Bus CIS Pointer) + * + */ +union cvmx_pci_cfg10 +{ + uint32_t u32; + struct cvmx_pci_cfg10_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t cisp : 32; /**< CardBus CIS Pointer (UNUSED) */ +#else + uint32_t cisp : 32; +#endif + } s; + struct cvmx_pci_cfg10_s cn30xx; + struct cvmx_pci_cfg10_s cn31xx; + struct cvmx_pci_cfg10_s cn38xx; + struct cvmx_pci_cfg10_s cn38xxp2; + struct cvmx_pci_cfg10_s cn50xx; + struct cvmx_pci_cfg10_s cn58xx; + struct cvmx_pci_cfg10_s cn58xxp1; +}; +typedef union cvmx_pci_cfg10 cvmx_pci_cfg10_t; + +/** + * cvmx_pci_cfg11 + * + * PCI_CFG11 = Twelfth 32-bits of PCI config space (SubSystem ID/Subsystem Vendor ID Register) + * + */ +union cvmx_pci_cfg11 +{ + uint32_t u32; + struct cvmx_pci_cfg11_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t ssid : 16; /**< SubSystem ID */ + uint32_t ssvid : 16; /**< Subsystem Vendor ID */ +#else + uint32_t ssvid : 16; + uint32_t ssid : 16; +#endif + } s; + struct cvmx_pci_cfg11_s cn30xx; + struct cvmx_pci_cfg11_s cn31xx; + struct cvmx_pci_cfg11_s cn38xx; + struct cvmx_pci_cfg11_s cn38xxp2; + struct cvmx_pci_cfg11_s cn50xx; + struct cvmx_pci_cfg11_s cn58xx; + struct cvmx_pci_cfg11_s cn58xxp1; +}; +typedef union cvmx_pci_cfg11 cvmx_pci_cfg11_t; + +/** + * cvmx_pci_cfg12 + * + * PCI_CFG12 = Thirteenth 32-bits of PCI config space (Expansion ROM Base Address Register) + * + */ +union cvmx_pci_cfg12 +{ + uint32_t u32; + struct cvmx_pci_cfg12_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t erbar : 16; /**< Expansion ROM Base Address[31:16] 64KB in size */ + uint32_t erbarz : 5; /**< Expansion ROM Base Base Address (Read as Zero) */ + uint32_t reserved_1_10 : 10; + uint32_t erbar_en : 1; /**< Expansion ROM Address Decode Enable */ +#else + uint32_t erbar_en : 1; + uint32_t reserved_1_10 : 10; + uint32_t erbarz : 5; + uint32_t erbar : 16; +#endif + } s; + struct cvmx_pci_cfg12_s cn30xx; + struct cvmx_pci_cfg12_s cn31xx; + struct cvmx_pci_cfg12_s cn38xx; + struct cvmx_pci_cfg12_s cn38xxp2; + struct cvmx_pci_cfg12_s cn50xx; + struct cvmx_pci_cfg12_s cn58xx; + struct cvmx_pci_cfg12_s cn58xxp1; +}; +typedef union cvmx_pci_cfg12 cvmx_pci_cfg12_t; + +/** + * cvmx_pci_cfg13 + * + * PCI_CFG13 = Fourteenth 32-bits of PCI config space (Capabilities Pointer Register) + * + */ +union cvmx_pci_cfg13 +{ + uint32_t u32; + struct cvmx_pci_cfg13_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_8_31 : 24; + uint32_t cp : 8; /**< Capabilities Pointer */ +#else + uint32_t cp : 8; + uint32_t reserved_8_31 : 24; +#endif + } s; + struct cvmx_pci_cfg13_s cn30xx; + struct cvmx_pci_cfg13_s cn31xx; + struct cvmx_pci_cfg13_s cn38xx; + struct cvmx_pci_cfg13_s cn38xxp2; + struct cvmx_pci_cfg13_s cn50xx; + struct cvmx_pci_cfg13_s cn58xx; + struct cvmx_pci_cfg13_s cn58xxp1; +}; +typedef union cvmx_pci_cfg13 cvmx_pci_cfg13_t; + +/** + * cvmx_pci_cfg15 + * + * PCI_CFG15 = Sixteenth 32-bits of PCI config space (INT/ARB/LATENCY Register) + * + */ +union cvmx_pci_cfg15 +{ + uint32_t u32; + struct cvmx_pci_cfg15_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t ml : 8; /**< Maximum Latency */ + uint32_t mg : 8; /**< Minimum Grant */ + uint32_t inta : 8; /**< Interrupt Pin (INTA#) */ + uint32_t il : 8; /**< Interrupt Line */ +#else + uint32_t il : 8; + uint32_t inta : 8; + uint32_t mg : 8; + uint32_t ml : 8; +#endif + } s; + struct cvmx_pci_cfg15_s cn30xx; + struct cvmx_pci_cfg15_s cn31xx; + struct cvmx_pci_cfg15_s cn38xx; + struct cvmx_pci_cfg15_s cn38xxp2; + struct cvmx_pci_cfg15_s cn50xx; + struct cvmx_pci_cfg15_s cn58xx; + struct cvmx_pci_cfg15_s cn58xxp1; +}; +typedef union cvmx_pci_cfg15 cvmx_pci_cfg15_t; + +/** + * cvmx_pci_cfg16 + * + * PCI_CFG16 = Seventeenth 32-bits of PCI config space (Target Implementation Register) + * + */ +union cvmx_pci_cfg16 +{ + uint32_t u32; + struct cvmx_pci_cfg16_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t trdnpr : 1; /**< Target Read Delayed Transaction for I/O and + non-prefetchable regions discarded. */ + uint32_t trdard : 1; /**< Target Read Delayed Transaction for all regions + discarded. */ + uint32_t rdsati : 1; /**< Target(I/O and Memory) Read Delayed/Split at + timeout/immediately (default timeout). + Note: OCTEON requires that this bit MBZ(must be zero). */ + uint32_t trdrs : 1; /**< Target(I/O and Memory) Read Delayed/Split or Retry + select (of the application interface is not ready) + 0 = Delayed Split Transaction + 1 = Retry Transaction (always Immediate Retry, no + AT_REQ to application). */ + uint32_t trtae : 1; /**< Target(I/O and Memory) Read Target Abort Enable + (if application interface is not ready at the + latency timeout). + Note: OCTEON as target will never target-abort, + therefore this bit should never be set. */ + uint32_t twsei : 1; /**< Target(I/O) Write Split Enable (at timeout / + immediately; default timeout) */ + uint32_t twsen : 1; /**< T(I/O) write split Enable (if the application + interface is not ready) */ + uint32_t twtae : 1; /**< Target(I/O and Memory) Write Target Abort Enable + (if the application interface is not ready at the + start of the cycle). + Note: OCTEON as target will never target-abort, + therefore this bit should never be set. */ + uint32_t tmae : 1; /**< Target(Read/Write) Master Abort Enable; check + at the start of each transaction. + Note: This bit can be used to force a Master + Abort when OCTEON is acting as the intended target + device. */ + uint32_t tslte : 3; /**< Target Subsequent(2nd-last) Latency Timeout Enable + Valid range: [1..7] and 0=8. */ + uint32_t tilt : 4; /**< Target Initial(1st data) Latency Timeout in PCI + ModeValid range: [8..15] and 0=16. */ + uint32_t pbe : 12; /**< Programmable Boundary Enable to disconnect/prefetch + for target burst read cycles to prefetchable + region in PCI. A value of 1 indicates end of + boundary (64 KB down to 16 Bytes). */ + uint32_t dppmr : 1; /**< Disconnect/Prefetch to prefetchable memory + regions Enable. Prefetchable memory regions + are always disconnected on a region boundary. + Non-prefetchable regions for PCI are always + disconnected on the first transfer. + Note: OCTEON as target will never target-disconnect, + therefore this bit should never be set. */ + uint32_t reserved_2_2 : 1; + uint32_t tswc : 1; /**< Target Split Write Control + 0 = Blocks all requests except PMW + 1 = Blocks all requests including PMW until + split completion occurs. */ + uint32_t mltd : 1; /**< Master Latency Timer Disable + Note: For OCTEON, it is recommended that this bit + be set(to disable the Master Latency timer). */ +#else + uint32_t mltd : 1; + uint32_t tswc : 1; + uint32_t reserved_2_2 : 1; + uint32_t dppmr : 1; + uint32_t pbe : 12; + uint32_t tilt : 4; + uint32_t tslte : 3; + uint32_t tmae : 1; + uint32_t twtae : 1; + uint32_t twsen : 1; + uint32_t twsei : 1; + uint32_t trtae : 1; + uint32_t trdrs : 1; + uint32_t rdsati : 1; + uint32_t trdard : 1; + uint32_t trdnpr : 1; +#endif + } s; + struct cvmx_pci_cfg16_s cn30xx; + struct cvmx_pci_cfg16_s cn31xx; + struct cvmx_pci_cfg16_s cn38xx; + struct cvmx_pci_cfg16_s cn38xxp2; + struct cvmx_pci_cfg16_s cn50xx; + struct cvmx_pci_cfg16_s cn58xx; + struct cvmx_pci_cfg16_s cn58xxp1; +}; +typedef union cvmx_pci_cfg16 cvmx_pci_cfg16_t; + +/** + * cvmx_pci_cfg17 + * + * PCI_CFG17 = Eighteenth 32-bits of PCI config space (Target Split Completion Message + * Enable Register) + */ +union cvmx_pci_cfg17 +{ + uint32_t u32; + struct cvmx_pci_cfg17_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t tscme : 32; /**< Target Split Completion Message Enable + [31:30]: 00 + [29]: Split Completion Error Indication + [28]: 0 + [27:20]: Split Completion Message Index + [19:0]: 0x00000 + For OCTEON, this register is intended for debug use + only. (as such, it is recommended NOT to be written + with anything other than ZEROES). */ +#else + uint32_t tscme : 32; +#endif + } s; + struct cvmx_pci_cfg17_s cn30xx; + struct cvmx_pci_cfg17_s cn31xx; + struct cvmx_pci_cfg17_s cn38xx; + struct cvmx_pci_cfg17_s cn38xxp2; + struct cvmx_pci_cfg17_s cn50xx; + struct cvmx_pci_cfg17_s cn58xx; + struct cvmx_pci_cfg17_s cn58xxp1; +}; +typedef union cvmx_pci_cfg17 cvmx_pci_cfg17_t; + +/** + * cvmx_pci_cfg18 + * + * PCI_CFG18 = Nineteenth 32-bits of PCI config space (Target Delayed/Split Request + * Pending Sequences) + */ +union cvmx_pci_cfg18 +{ + uint32_t u32; + struct cvmx_pci_cfg18_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t tdsrps : 32; /**< Target Delayed/Split Request Pending Sequences + The application uses this address to remove a + pending split sequence from the target queue by + clearing the appropriate bit. Example: Clearing [14] + clears the pending sequence \#14. An application + or configuration write to this address can clear this + register. + For OCTEON, this register is intended for debug use + only and MUST NEVER be written with anything other + than ZEROES. */ +#else + uint32_t tdsrps : 32; +#endif + } s; + struct cvmx_pci_cfg18_s cn30xx; + struct cvmx_pci_cfg18_s cn31xx; + struct cvmx_pci_cfg18_s cn38xx; + struct cvmx_pci_cfg18_s cn38xxp2; + struct cvmx_pci_cfg18_s cn50xx; + struct cvmx_pci_cfg18_s cn58xx; + struct cvmx_pci_cfg18_s cn58xxp1; +}; +typedef union cvmx_pci_cfg18 cvmx_pci_cfg18_t; + +/** + * cvmx_pci_cfg19 + * + * PCI_CFG19 = Twentieth 32-bits of PCI config space (Master/Target Implementation Register) + * + */ +union cvmx_pci_cfg19 +{ + uint32_t u32; + struct cvmx_pci_cfg19_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t mrbcm : 1; /**< Master Request (Memory Read) Byte Count/Byte + Enable select. + 0 = Byte Enables valid. In PCI mode, a burst + transaction cannot be performed using + Memory Read command=4'h6. + 1 = DWORD Byte Count valid (default). In PCI + Mode, the memory read byte enables are + automatically generated by the core. + NOTE: For OCTEON, this bit must always be one + for proper operation. */ + uint32_t mrbci : 1; /**< Master Request (I/O and CR cycles) byte count/byte + enable select. + 0 = Byte Enables valid (default) + 1 = DWORD byte count valid + NOTE: For OCTEON, this bit must always be zero + for proper operation (in support of + Type0/1 Cfg Space accesses which require byte + enable generation directly from a read mask). */ + uint32_t mdwe : 1; /**< Master (Retry) Deferred Write Enable (allow + read requests to pass). + NOTE: Applicable to PCI Mode I/O and memory + transactions only. + 0 = New read requests are NOT accepted until + the current write cycle completes. [Reads + cannot pass writes] + 1 = New read requests are accepted, even when + there is a write cycle pending [Reads can + pass writes]. + NOTE: For OCTEON, this bit must always be zero + for proper operation. */ + uint32_t mdre : 1; /**< Master (Retry) Deferred Read Enable (Allows + read/write requests to pass). + NOTE: Applicable to PCI mode I/O and memory + transactions only. + 0 = New read/write requests are NOT accepted + until the current read cycle completes. + [Read/write requests CANNOT pass reads] + 1 = New read/write requests are accepted, even + when there is a read cycle pending. + [Read/write requests CAN pass reads] + NOTE: For OCTEON, this bit must always be zero + for proper operation. */ + uint32_t mdrimc : 1; /**< Master I/O Deferred/Split Request Outstanding + Maximum Count + 0 = MDRRMC[26:24] + 1 = 1 */ + uint32_t mdrrmc : 3; /**< Master Deferred Read Request Outstanding Max + Count (PCI only). + CR4C[26:24] Max SAC cycles MAX DAC cycles + 000 8 4 + 001 1 0 + 010 2 1 + 011 3 1 + 100 4 2 + 101 5 2 + 110 6 3 + 111 7 3 + For example, if these bits are programmed to + 100, the core can support 2 DAC cycles, 4 SAC + cycles or a combination of 1 DAC and 2 SAC cycles. + NOTE: For the PCI-X maximum outstanding split + transactions, refer to CRE0[22:20] */ + uint32_t tmes : 8; /**< Target/Master Error Sequence \# */ + uint32_t teci : 1; /**< Target Error Command Indication + 0 = Delayed/Split + 1 = Others */ + uint32_t tmei : 1; /**< Target/Master Error Indication + 0 = Target + 1 = Master */ + uint32_t tmse : 1; /**< Target/Master System Error. This bit is set + whenever ATM_SERR_O is active. */ + uint32_t tmdpes : 1; /**< Target/Master Data PERR# error status. This + bit is set whenever ATM_DATA_PERR_O is active. */ + uint32_t tmapes : 1; /**< Target/Master Address PERR# error status. This + bit is set whenever ATM_ADDR_PERR_O is active. */ + uint32_t reserved_9_10 : 2; + uint32_t tibcd : 1; /**< Target Illegal I/O DWORD byte combinations detected. */ + uint32_t tibde : 1; /**< Target Illegal I/O DWORD byte detection enable */ + uint32_t reserved_6_6 : 1; + uint32_t tidomc : 1; /**< Target I/O Delayed/Split request outstanding + maximum count. + 0 = TDOMC[4:0] + 1 = 1 */ + uint32_t tdomc : 5; /**< Target Delayed/Split request outstanding maximum + count. [1..31] and 0=32. + NOTE: If the user programs these bits beyond the + Designed Maximum outstanding count, then the + designed maximum table depth will be used instead. + No additional Deferred/Split transactions will be + accepted if this outstanding maximum count + is reached. Furthermore, no additional + deferred/split transactions will be accepted if + the I/O delay/ I/O Split Request outstanding + maximum is reached. + NOTE: For OCTEON in PCI Mode, this field MUST BE + programmed to 1. (OCTEON can only handle 1 delayed + read at a time). + For OCTEON in PCIX Mode, this field can range from + 1-4. (The designed maximum table depth is 4 + for PCIX mode splits). */ +#else + uint32_t tdomc : 5; + uint32_t tidomc : 1; + uint32_t reserved_6_6 : 1; + uint32_t tibde : 1; + uint32_t tibcd : 1; + uint32_t reserved_9_10 : 2; + uint32_t tmapes : 1; + uint32_t tmdpes : 1; + uint32_t tmse : 1; + uint32_t tmei : 1; + uint32_t teci : 1; + uint32_t tmes : 8; + uint32_t mdrrmc : 3; + uint32_t mdrimc : 1; + uint32_t mdre : 1; + uint32_t mdwe : 1; + uint32_t mrbci : 1; + uint32_t mrbcm : 1; +#endif + } s; + struct cvmx_pci_cfg19_s cn30xx; + struct cvmx_pci_cfg19_s cn31xx; + struct cvmx_pci_cfg19_s cn38xx; + struct cvmx_pci_cfg19_s cn38xxp2; + struct cvmx_pci_cfg19_s cn50xx; + struct cvmx_pci_cfg19_s cn58xx; + struct cvmx_pci_cfg19_s cn58xxp1; +}; +typedef union cvmx_pci_cfg19 cvmx_pci_cfg19_t; + +/** + * cvmx_pci_cfg20 + * + * PCI_CFG20 = Twenty-first 32-bits of PCI config space (Master Deferred/Split Sequence Pending) + * + */ +union cvmx_pci_cfg20 +{ + uint32_t u32; + struct cvmx_pci_cfg20_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t mdsp : 32; /**< Master Deferred/Split sequence Pending + For OCTEON, this register is intended for debug use + only and MUST NEVER be written with anything other + than ZEROES. */ +#else + uint32_t mdsp : 32; +#endif + } s; + struct cvmx_pci_cfg20_s cn30xx; + struct cvmx_pci_cfg20_s cn31xx; + struct cvmx_pci_cfg20_s cn38xx; + struct cvmx_pci_cfg20_s cn38xxp2; + struct cvmx_pci_cfg20_s cn50xx; + struct cvmx_pci_cfg20_s cn58xx; + struct cvmx_pci_cfg20_s cn58xxp1; +}; +typedef union cvmx_pci_cfg20 cvmx_pci_cfg20_t; + +/** + * cvmx_pci_cfg21 + * + * PCI_CFG21 = Twenty-second 32-bits of PCI config space (Master Split Completion Message Register) + * + */ +union cvmx_pci_cfg21 +{ + uint32_t u32; + struct cvmx_pci_cfg21_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t scmre : 32; /**< Master Split Completion message received with + error message. + For OCTEON, this register is intended for debug use + only and MUST NEVER be written with anything other + than ZEROES. */ +#else + uint32_t scmre : 32; +#endif + } s; + struct cvmx_pci_cfg21_s cn30xx; + struct cvmx_pci_cfg21_s cn31xx; + struct cvmx_pci_cfg21_s cn38xx; + struct cvmx_pci_cfg21_s cn38xxp2; + struct cvmx_pci_cfg21_s cn50xx; + struct cvmx_pci_cfg21_s cn58xx; + struct cvmx_pci_cfg21_s cn58xxp1; +}; +typedef union cvmx_pci_cfg21 cvmx_pci_cfg21_t; + +/** + * cvmx_pci_cfg22 + * + * PCI_CFG22 = Twenty-third 32-bits of PCI config space (Master Arbiter Control Register) + * + */ +union cvmx_pci_cfg22 +{ + uint32_t u32; + struct cvmx_pci_cfg22_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t mac : 7; /**< Master Arbiter Control + [31:26]: Used only in Fixed Priority mode + (when [25]=1) + [31:30]: MSI Request + 00 = Highest Priority + 01 = Medium Priority + 10 = Lowest Priority + 11 = RESERVED + [29:28]: Target Split Completion + 00 = Highest Priority + 01 = Medium Priority + 10 = Lowest Priority + 11 = RESERVED + [27:26]: New Request; Deferred Read,Deferred Write + 00 = Highest Priority + 01 = Medium Priority + 10 = Lowest Priority + 11 = RESERVED + [25]: Fixed/Round Robin Priority Selector + 0 = Round Robin + 1 = Fixed + NOTE: When [25]=1(fixed priority), the three levels + [31:26] MUST BE programmed to have mutually exclusive + priority levels for proper operation. (Failure to do + so may result in PCI hangs). */ + uint32_t reserved_19_24 : 6; + uint32_t flush : 1; /**< AM_DO_FLUSH_I control + NOTE: This bit MUST BE ONE for proper OCTEON operation */ + uint32_t mra : 1; /**< Master Retry Aborted */ + uint32_t mtta : 1; /**< Master TRDY timeout aborted */ + uint32_t mrv : 8; /**< Master Retry Value [1..255] and 0=infinite */ + uint32_t mttv : 8; /**< Master TRDY timeout value [1..255] and 0=disabled + NOTE: For OCTEON, this bit must always be zero + for proper operation. (OCTEON does not support + master TRDY timeout - target is expected to be + well behaved). */ +#else + uint32_t mttv : 8; + uint32_t mrv : 8; + uint32_t mtta : 1; + uint32_t mra : 1; + uint32_t flush : 1; + uint32_t reserved_19_24 : 6; + uint32_t mac : 7; +#endif + } s; + struct cvmx_pci_cfg22_s cn30xx; + struct cvmx_pci_cfg22_s cn31xx; + struct cvmx_pci_cfg22_s cn38xx; + struct cvmx_pci_cfg22_s cn38xxp2; + struct cvmx_pci_cfg22_s cn50xx; + struct cvmx_pci_cfg22_s cn58xx; + struct cvmx_pci_cfg22_s cn58xxp1; +}; +typedef union cvmx_pci_cfg22 cvmx_pci_cfg22_t; + +/** + * cvmx_pci_cfg56 + * + * PCI_CFG56 = Fifty-seventh 32-bits of PCI config space (PCIX Capabilities Register) + * + */ +union cvmx_pci_cfg56 +{ + uint32_t u32; + struct cvmx_pci_cfg56_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_23_31 : 9; + uint32_t most : 3; /**< Maximum outstanding Split transactions + Encoded Value \#Max outstanding splits + 000 1 + 001 2 + 010 3 + 011 4 + 100 8 + 101 8(clamped) + 110 8(clamped) + 111 8(clamped) + NOTE: OCTEON only supports upto a MAXIMUM of 8 + outstanding master split transactions. */ + uint32_t mmbc : 2; /**< Maximum Memory Byte Count + [0=512B,1=1024B,2=2048B,3=4096B] + NOTE: OCTEON does not support this field and has + no effect on limiting the maximum memory byte count. */ + uint32_t roe : 1; /**< Relaxed Ordering Enable */ + uint32_t dpere : 1; /**< Data Parity Error Recovery Enable */ + uint32_t ncp : 8; /**< Next Capability Pointer */ + uint32_t pxcid : 8; /**< PCI-X Capability ID */ +#else + uint32_t pxcid : 8; + uint32_t ncp : 8; + uint32_t dpere : 1; + uint32_t roe : 1; + uint32_t mmbc : 2; + uint32_t most : 3; + uint32_t reserved_23_31 : 9; +#endif + } s; + struct cvmx_pci_cfg56_s cn30xx; + struct cvmx_pci_cfg56_s cn31xx; + struct cvmx_pci_cfg56_s cn38xx; + struct cvmx_pci_cfg56_s cn38xxp2; + struct cvmx_pci_cfg56_s cn50xx; + struct cvmx_pci_cfg56_s cn58xx; + struct cvmx_pci_cfg56_s cn58xxp1; +}; +typedef union cvmx_pci_cfg56 cvmx_pci_cfg56_t; + +/** + * cvmx_pci_cfg57 + * + * PCI_CFG57 = Fifty-eigth 32-bits of PCI config space (PCIX Status Register) + * + */ +union cvmx_pci_cfg57 +{ + uint32_t u32; + struct cvmx_pci_cfg57_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_30_31 : 2; + uint32_t scemr : 1; /**< Split Completion Error Message Received */ + uint32_t mcrsd : 3; /**< Maximum Cumulative Read Size designed */ + uint32_t mostd : 3; /**< Maximum Outstanding Split transaction designed */ + uint32_t mmrbcd : 2; /**< Maximum Memory Read byte count designed */ + uint32_t dc : 1; /**< Device Complexity + 0 = Simple Device + 1 = Bridge Device */ + uint32_t usc : 1; /**< Unexpected Split Completion */ + uint32_t scd : 1; /**< Split Completion Discarded */ + uint32_t m133 : 1; /**< 133MHz Capable */ + uint32_t w64 : 1; /**< Indicates a 32b(=0) or 64b(=1) device */ + uint32_t bn : 8; /**< Bus Number. Updated on all configuration write + (0x11=PCI) cycles. Its value is dependent upon the PCI/X + (0xFF=PCIX) mode. */ + uint32_t dn : 5; /**< Device Number. Updated on all configuration + write cycles. */ + uint32_t fn : 3; /**< Function Number */ +#else + uint32_t fn : 3; + uint32_t dn : 5; + uint32_t bn : 8; + uint32_t w64 : 1; + uint32_t m133 : 1; + uint32_t scd : 1; + uint32_t usc : 1; + uint32_t dc : 1; + uint32_t mmrbcd : 2; + uint32_t mostd : 3; + uint32_t mcrsd : 3; + uint32_t scemr : 1; + uint32_t reserved_30_31 : 2; +#endif + } s; + struct cvmx_pci_cfg57_s cn30xx; + struct cvmx_pci_cfg57_s cn31xx; + struct cvmx_pci_cfg57_s cn38xx; + struct cvmx_pci_cfg57_s cn38xxp2; + struct cvmx_pci_cfg57_s cn50xx; + struct cvmx_pci_cfg57_s cn58xx; + struct cvmx_pci_cfg57_s cn58xxp1; +}; +typedef union cvmx_pci_cfg57 cvmx_pci_cfg57_t; + +/** + * cvmx_pci_cfg58 + * + * PCI_CFG58 = Fifty-ninth 32-bits of PCI config space (Power Management Capabilities Register) + * + */ +union cvmx_pci_cfg58 +{ + uint32_t u32; + struct cvmx_pci_cfg58_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pmes : 5; /**< PME Support (D0 to D3cold) */ + uint32_t d2s : 1; /**< D2_Support */ + uint32_t d1s : 1; /**< D1_Support */ + uint32_t auxc : 3; /**< AUX_Current (0..375mA) */ + uint32_t dsi : 1; /**< Device Specific Initialization */ + uint32_t reserved_20_20 : 1; + uint32_t pmec : 1; /**< PME Clock */ + uint32_t pcimiv : 3; /**< Indicates the version of the PCI + Management + Interface Specification with which the core + complies. + 010b = Complies with PCI Management Interface + Specification Revision 1.1 */ + uint32_t ncp : 8; /**< Next Capability Pointer */ + uint32_t pmcid : 8; /**< Power Management Capability ID */ +#else + uint32_t pmcid : 8; + uint32_t ncp : 8; + uint32_t pcimiv : 3; + uint32_t pmec : 1; + uint32_t reserved_20_20 : 1; + uint32_t dsi : 1; + uint32_t auxc : 3; + uint32_t d1s : 1; + uint32_t d2s : 1; + uint32_t pmes : 5; +#endif + } s; + struct cvmx_pci_cfg58_s cn30xx; + struct cvmx_pci_cfg58_s cn31xx; + struct cvmx_pci_cfg58_s cn38xx; + struct cvmx_pci_cfg58_s cn38xxp2; + struct cvmx_pci_cfg58_s cn50xx; + struct cvmx_pci_cfg58_s cn58xx; + struct cvmx_pci_cfg58_s cn58xxp1; +}; +typedef union cvmx_pci_cfg58 cvmx_pci_cfg58_t; + +/** + * cvmx_pci_cfg59 + * + * PCI_CFG59 = Sixtieth 32-bits of PCI config space (Power Management Data/PMCSR Register(s)) + * + */ +union cvmx_pci_cfg59 +{ + uint32_t u32; + struct cvmx_pci_cfg59_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pmdia : 8; /**< Power Management data input from application + (PME_DATA) */ + uint32_t bpccen : 1; /**< BPCC_En (bus power/clock control) enable */ + uint32_t bd3h : 1; /**< B2_B3\#, B2/B3 Support for D3hot */ + uint32_t reserved_16_21 : 6; + uint32_t pmess : 1; /**< PME_Status sticky bit */ + uint32_t pmedsia : 2; /**< PME_Data_Scale input from application + Device (PME_DATA_SCALE[1:0]) + Specific */ + uint32_t pmds : 4; /**< Power Management Data_select */ + uint32_t pmeens : 1; /**< PME_En sticky bit */ + uint32_t reserved_2_7 : 6; + uint32_t ps : 2; /**< Power State (D0 to D3) + The N2 DOES NOT support D1/D2 Power Management + states, therefore writing to this register has + no effect (please refer to the PCI Power + Management + Specification v1.1 for further details about + it?s R/W nature. This is not a conventional + R/W style register. */ +#else + uint32_t ps : 2; + uint32_t reserved_2_7 : 6; + uint32_t pmeens : 1; + uint32_t pmds : 4; + uint32_t pmedsia : 2; + uint32_t pmess : 1; + uint32_t reserved_16_21 : 6; + uint32_t bd3h : 1; + uint32_t bpccen : 1; + uint32_t pmdia : 8; +#endif + } s; + struct cvmx_pci_cfg59_s cn30xx; + struct cvmx_pci_cfg59_s cn31xx; + struct cvmx_pci_cfg59_s cn38xx; + struct cvmx_pci_cfg59_s cn38xxp2; + struct cvmx_pci_cfg59_s cn50xx; + struct cvmx_pci_cfg59_s cn58xx; + struct cvmx_pci_cfg59_s cn58xxp1; +}; +typedef union cvmx_pci_cfg59 cvmx_pci_cfg59_t; + +/** + * cvmx_pci_cfg60 + * + * PCI_CFG60 = Sixty-first 32-bits of PCI config space (MSI Capabilities Register) + * + */ +union cvmx_pci_cfg60 +{ + uint32_t u32; + struct cvmx_pci_cfg60_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_24_31 : 8; + uint32_t m64 : 1; /**< 32/64 b message */ + uint32_t mme : 3; /**< Multiple Message Enable(1,2,4,8,16,32) */ + uint32_t mmc : 3; /**< Multiple Message Capable(0=1,1=2,2=4,3=8,4=16,5=32) */ + uint32_t msien : 1; /**< MSI Enable */ + uint32_t ncp : 8; /**< Next Capability Pointer */ + uint32_t msicid : 8; /**< MSI Capability ID */ +#else + uint32_t msicid : 8; + uint32_t ncp : 8; + uint32_t msien : 1; + uint32_t mmc : 3; + uint32_t mme : 3; + uint32_t m64 : 1; + uint32_t reserved_24_31 : 8; +#endif + } s; + struct cvmx_pci_cfg60_s cn30xx; + struct cvmx_pci_cfg60_s cn31xx; + struct cvmx_pci_cfg60_s cn38xx; + struct cvmx_pci_cfg60_s cn38xxp2; + struct cvmx_pci_cfg60_s cn50xx; + struct cvmx_pci_cfg60_s cn58xx; + struct cvmx_pci_cfg60_s cn58xxp1; +}; +typedef union cvmx_pci_cfg60 cvmx_pci_cfg60_t; + +/** + * cvmx_pci_cfg61 + * + * PCI_CFG61 = Sixty-second 32-bits of PCI config space (MSI Lower Address Register) + * + */ +union cvmx_pci_cfg61 +{ + uint32_t u32; + struct cvmx_pci_cfg61_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t msi31t2 : 30; /**< App Specific MSI Address [31:2] */ + uint32_t reserved_0_1 : 2; +#else + uint32_t reserved_0_1 : 2; + uint32_t msi31t2 : 30; +#endif + } s; + struct cvmx_pci_cfg61_s cn30xx; + struct cvmx_pci_cfg61_s cn31xx; + struct cvmx_pci_cfg61_s cn38xx; + struct cvmx_pci_cfg61_s cn38xxp2; + struct cvmx_pci_cfg61_s cn50xx; + struct cvmx_pci_cfg61_s cn58xx; + struct cvmx_pci_cfg61_s cn58xxp1; +}; +typedef union cvmx_pci_cfg61 cvmx_pci_cfg61_t; + +/** + * cvmx_pci_cfg62 + * + * PCI_CFG62 = Sixty-third 32-bits of PCI config space (MSI Upper Address Register) + * + */ +union cvmx_pci_cfg62 +{ + uint32_t u32; + struct cvmx_pci_cfg62_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t msi : 32; /**< MSI Address [63:32] */ +#else + uint32_t msi : 32; +#endif + } s; + struct cvmx_pci_cfg62_s cn30xx; + struct cvmx_pci_cfg62_s cn31xx; + struct cvmx_pci_cfg62_s cn38xx; + struct cvmx_pci_cfg62_s cn38xxp2; + struct cvmx_pci_cfg62_s cn50xx; + struct cvmx_pci_cfg62_s cn58xx; + struct cvmx_pci_cfg62_s cn58xxp1; +}; +typedef union cvmx_pci_cfg62 cvmx_pci_cfg62_t; + +/** + * cvmx_pci_cfg63 + * + * PCI_CFG63 = Sixty-fourth 32-bits of PCI config space (MSI Message Data Register) + * + */ +union cvmx_pci_cfg63 +{ + uint32_t u32; + struct cvmx_pci_cfg63_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_16_31 : 16; + uint32_t msimd : 16; /**< MSI Message Data */ +#else + uint32_t msimd : 16; + uint32_t reserved_16_31 : 16; +#endif + } s; + struct cvmx_pci_cfg63_s cn30xx; + struct cvmx_pci_cfg63_s cn31xx; + struct cvmx_pci_cfg63_s cn38xx; + struct cvmx_pci_cfg63_s cn38xxp2; + struct cvmx_pci_cfg63_s cn50xx; + struct cvmx_pci_cfg63_s cn58xx; + struct cvmx_pci_cfg63_s cn58xxp1; +}; +typedef union cvmx_pci_cfg63 cvmx_pci_cfg63_t; + +/** + * cvmx_pci_cnt_reg + * + * PCI_CNT_REG = PCI Clock Count Register + * + * This register is provided to software as a means to determine PCI Bus Type/Speed. + */ +union cvmx_pci_cnt_reg +{ + uint64_t u64; + struct cvmx_pci_cnt_reg_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_38_63 : 26; + uint64_t hm_pcix : 1; /**< PCI Host Mode Sampled Bus Type (0:PCI/1:PCIX) + This field represents what OCTEON(in Host mode) + sampled as the 'intended' PCI Bus Type based on + the PCI_PCIXCAP pin. (see HM_SPEED Bus Type/Speed + encoding table). */ + uint64_t hm_speed : 2; /**< PCI Host Mode Sampled Bus Speed + This field represents what OCTEON(in Host mode) + sampled as the 'intended' PCI Bus Speed based on + the PCI100, PCI_M66EN and PCI_PCIXCAP pins. + NOTE: This DOES NOT reflect what the actual PCI + Bus Type/Speed values are. They only indicate what + OCTEON sampled as the 'intended' values. + PCI Host Mode Sampled Bus Type/Speed Table: + M66EN | PCIXCAP | PCI100 | HM_PCIX | HM_SPEED[1:0] + ---------+---------+---------+----------+------------- + 0 | 0 | 0 | 0=PCI | 00=33 MHz + 0 | 0 | 1 | 0=PCI | 00=33 MHz + 0 | Z | 0 | 0=PCI | 01=66 MHz + 0 | Z | 1 | 0=PCI | 01=66 MHz + 1 | 0 | 0 | 0=PCI | 01=66 MHz + 1 | 0 | 1 | 0=PCI | 01=66 MHz + 1 | Z | 0 | 0=PCI | 01=66 MHz + 1 | Z | 1 | 0=PCI | 01=66 MHz + 0 | 1 | 1 | 1=PCIX | 10=100 MHz + 1 | 1 | 1 | 1=PCIX | 10=100 MHz + 0 | 1 | 0 | 1=PCIX | 11=133 MHz + 1 | 1 | 0 | 1=PCIX | 11=133 MHz + NOTE: PCIXCAP has tri-level value (0,1,Z). See PCI specification + for more details on board level hookup to achieve these + values. + NOTE: Software can use the NPI_PCI_INT_ARB_CFG[PCI_OVR] + to override the 'sampled' PCI Bus Type/Speed. + NOTE: Software can also use the PCI_CNT_REG[PCICNT] to determine + the exact PCI(X) Bus speed. + Example: PCI_REF_CLKIN=133MHz + PCI_HOST_MODE=1 + PCI_M66EN=0 + PCI_PCIXCAP=1 + PCI_PCI100=1 + For this example, OCTEON will generate + PCI_CLK_OUT=100MHz and drive the proper PCI + Initialization sequence (DEVSEL#=Deasserted, + STOP#=Asserted, TRDY#=Asserted) during PCI_RST_N + deassertion. + NOTE: The HM_SPEED field is only valid after + PLL_REF_CLK is active and PLL_DCOK is asserted. + (see HRM description for power-on/reset sequence). + NOTE: PCI_REF_CLKIN input must be 133MHz (and is used + to generate the PCI_CLK_OUT pin in Host Mode). */ + uint64_t ap_pcix : 1; /**< PCI(X) Bus Type (0:PCI/1:PCIX) + At PCI_RST_N de-assertion, the PCI Initialization + pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is + captured to provide information to software regarding + the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range. */ + uint64_t ap_speed : 2; /**< PCI(X) Bus Speed (0:33/1:66/2:100/3:133) + At PCI_RST_N de-assertion, the PCI Initialization + pattern(PCI_DEVSEL_N, PCI_STOP_N, PCI_TRDY_N) is + captured to provide information to software regarding + the PCI Bus Type(PCI/PCIX) and PCI Bus Speed Range. + PCI-X Initialization Pattern(see PCIX Spec): + PCI_DEVSEL_N PCI_STOP_N PCI_TRDY_N Mode MaxClk(ns) MinClk(ns) MinClk(MHz) MaxClk(MHz) + -------------+----------+----------+-------+---------+----------+----------+------------------ + Deasserted Deasserted Deasserted PCI 33 -- 30 0 33 + PCI 66 30 15 33 66 + Deasserted Deasserted Asserted PCI-X 20 15 50 66 + Deasserted Asserted Deasserted PCI-X 15 10 66 100 + Deasserted Asserted Asserted PCI-X 10 7.5 100 133 + Asserted Deasserted Deasserted PCI-X Reserved Reserved Reserved Reserved + Asserted Deasserted Asserted PCI-X Reserved Reserved Reserved Reserved + Asserted Asserted Deasserted PCI-X Reserved Reserved Reserved Reserved + Asserted Asserted Asserted PCI-X Reserved Reserved Reserved Reserved + NOTE: The PCI Bus speed 'assumed' from the initialization + pattern is really intended for an operational range. + For example: If PINIT=100, this indicates PCI-X in the + 100-133MHz range. The PCI_CNT field can be used to further + determine a more exacting PCI Bus frequency value if + required. */ + uint64_t pcicnt : 32; /**< Free Running PCI Clock counter. + At PCI Reset, the PCICNT=0, and is auto-incremented + on every PCI clock and will auto-wrap back to zero + when saturated. + NOTE: Writes override the auto-increment to allow + software to preload any initial value. + The PCICNT field is provided to software as a means + to determine the PCI Bus Speed. + Assuming software has knowledge of the core frequency + (eclk), this register can be written with a value X, + wait 'n' core clocks(eclk) and then read later(Y) to + determine \#PCI clocks(Y-X) have elapsed within 'n' core + clocks to determine the PCI input Clock frequency. */ +#else + uint64_t pcicnt : 32; + uint64_t ap_speed : 2; + uint64_t ap_pcix : 1; + uint64_t hm_speed : 2; + uint64_t hm_pcix : 1; + uint64_t reserved_38_63 : 26; +#endif + } s; + struct cvmx_pci_cnt_reg_s cn50xx; + struct cvmx_pci_cnt_reg_s cn58xx; + struct cvmx_pci_cnt_reg_s cn58xxp1; +}; +typedef union cvmx_pci_cnt_reg cvmx_pci_cnt_reg_t; + +/** + * cvmx_pci_ctl_status_2 + * + * PCI_CTL_STATUS_2 = PCI Control Status 2 Register + * + * Control status register accessable from both PCI and NCB. + */ +union cvmx_pci_ctl_status_2 +{ + uint32_t u32; + struct cvmx_pci_ctl_status_2_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_29_31 : 3; + uint32_t bb1_hole : 3; /**< Big BAR 1 Hole + NOT IN PASS 1 NOR PASS 2 + When PCI_CTL_STATUS_2[BB1]=1, this field defines + an encoded size of the upper BAR1 region which + OCTEON will mask out (ie: not respond to). + (see definition of BB1_HOLE and BB1_SIZ encodings + in the PCI_CTL_STATUS_2[BB1] definition below). */ + uint32_t bb1_siz : 1; /**< Big BAR 1 Size + NOT IN PASS 1 NOR PASS 2 + When PCI_CTL_STATUS_2[BB1]=1, this field defines + the programmable SIZE of BAR 1. + - 0: 1GB / 1: 2GB */ + uint32_t bb_ca : 1; /**< Set to '1' for Big Bar Mode to do STT/LDT L2C + operations. + NOT IN PASS 1 NOR PASS 2 */ + uint32_t bb_es : 2; /**< Big Bar Node Endian Swap Mode + - 0: No Swizzle + - 1: Byte Swizzle (per-QW) + - 2: Byte Swizzle (per-LW) + - 3: LongWord Swizzle + NOT IN PASS 1 NOR PASS 2 */ + uint32_t bb1 : 1; /**< Big Bar 1 Enable + NOT IN PASS 1 NOR PASS 2 + When PCI_CTL_STATUS_2[BB1] is set, the following differences + occur: + - OCTEON's BAR1 becomes somewhere in the range 512-2048 MB rather + than the default 128MB. + - The following table indicates the effective size of + BAR1 when BB1 is set: + BB1_SIZ BB1_HOLE Effective size Comment + +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + 0 0 1024 MB Normal 1GB BAR + 0 1 1008 MB 1 GB, 16 MB hole + 0 2 992 MB 1 GB, 32 MB hole + 0 3 960 MB 1 GB, 64 MB hole + 0 4 896 MB 1 GB,128 MB hole + 0 5 768 MB 1 GB,256 MB hole + 0 6 512 MB 1 GB,512 MB hole + 0 7 Illegal + 1 0 2048 MB Normal 2GB BAR + 1 1 2032 MB 2 GB, 16 MB hole + 1 2 2016 MB 2 GB, 32 MB hole + 1 3 1984 MB 2 GB, 64 MB hole + 1 4 1920 MB 2 GB,128 MB hole + 1 5 1792 MB 2 GB,256 MB hole + 1 6 1536 MB 2 GB,512 MB hole + 1 7 Illegal + - When BB1_SIZ is 0: PCI_CFG06[LBASE<2:0>] reads as zero + and are ignored on write. BAR1 is an entirely ordinary + 1 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0. + When BB1_HOLE is not zero, BAR1 addresses are programmed + as if the BAR were 1GB, but, OCTEON does not respond + to addresses in the programmed holes. + - When BB1_SIZ is 1: PCI_CFG06[LBASE<3:0>] reads as zero + and are ignored on write. BAR1 is an entirely ordinary + 2 GB (power-of-two) BAR in all aspects when BB1_HOLE is 0. + When BB1_HOLE is not zero, BAR1 addresses are programmed + as if the BAR were 2GB, but, OCTEON does not respond + to addresses in the programmed holes. + - Note that the BB1_HOLE value has no effect on the + PCI_CFG06[LBASE] behavior. BB1_HOLE only affects whether + OCTEON accepts an address. BB1_SIZ does affect PCI_CFG06[LBASE] + behavior, however. + - The first 128MB, i.e. addresses on the PCI bus in the range + BAR1+0 .. BAR1+0x07FFFFFF + access OCTEON's DRAM addresses with PCI_BAR1_INDEX CSR's + as before + - The remaining address space, i.e. addresses + on the PCI bus in the range + BAR1+0x08000000 .. BAR1+size-1, + where size is the size of BAR1 as selected by the above + table (based on the BB1_SIZ and BB1_HOLE values), are mapped to + OCTEON physical DRAM addresses as follows: + PCI Address Range OCTEON Physical Address Range + ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + BAR1+0x08000000 .. BAR1+size-1 | 0x88000000 .. 0x7FFFFFFF+size + and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and + PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit + for these references. + The consequences of any burst that crosses the end of the PCI + Address Range for BAR1 are unpredicable. + - The consequences of any burst access that crosses the boundary + between BAR1+0x07FFFFFF and BAR1+0x08000000 are unpredictable in PCI-X + mode. OCTEON may disconnect PCI references at this boundary. */ + uint32_t bb0 : 1; /**< Big Bar 0 Enable + NOT IN PASS 1 NOR PASS 2 + When PCI_CTL_STATUS_2[BB0] is set, the following + differences occur: + - OCTEON's BAR0 becomes 2GB rather than the default 4KB. + PCI_CFG04[LBASE<18:0>] reads as zero and is ignored on write. + - OCTEON's BAR0 becomes burstable. (When BB0 is clear, OCTEON + single-phase disconnects PCI BAR0 reads and PCI/PCI-X BAR0 + writes, and splits (burstably) PCI-X BAR0 reads.) + - The first 4KB, i.e. addresses on the PCI bus in the range + BAR0+0 .. BAR0+0xFFF + access OCTEON's PCI-type CSR's as when BB0 is clear. + - The remaining address space, i.e. addresses on the PCI bus + in the range + BAR0+0x1000 .. BAR0+0x7FFFFFFF + are mapped to OCTEON physical DRAM addresses as follows: + PCI Address Range OCTEON Physical Address Range + ------------------------------------+------------------------------ + BAR0+0x00001000 .. BAR0+0x0FFFFFFF | 0x000001000 .. 0x00FFFFFFF + BAR0+0x10000000 .. BAR0+0x1FFFFFFF | 0x410000000 .. 0x41FFFFFFF + BAR0+0x20000000 .. BAR0+0x7FFFFFFF | 0x020000000 .. 0x07FFFFFFF + and PCI_CTL_STATUS_2[BB_ES] is the endian-swap and + PCI_CTL_STATUS_2[BB_CA] is the L2 cache allocation bit + for these references. + The consequences of any burst that crosses the end of the PCI + Address Range for BAR0 are unpredicable. + - The consequences of any burst access that crosses the boundary + between BAR0+0xFFF and BAR0+0x1000 are unpredictable in PCI-X + mode. OCTEON may disconnect PCI references at this boundary. + - The results of any burst read that crosses the boundary + between BAR0+0x0FFFFFFF and BAR0+0x10000000 are unpredictable. + The consequences of any burst write that crosses this same + boundary are unpredictable. + - The results of any burst read that crosses the boundary + between BAR0+0x1FFFFFFF and BAR0+0x20000000 are unpredictable. + The consequences of any burst write that crosses this same + boundary are unpredictable. */ + uint32_t erst_n : 1; /**< Reset active Low. PASS-2 */ + uint32_t bar2pres : 1; /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN]) + is NOT blown the value of this field is '0' after + reset and BAR2 is NOT present. When the fuse IS + blown the value of this field is '1' after reset + and BAR2 is present. Note that SW can change this + field after reset. This is a PASS-2 field. */ + uint32_t scmtyp : 1; /**< Split Completion Message CMD Type (0=RD/1=WR) + When SCM=1, SCMTYP specifies the CMD intent (R/W) */ + uint32_t scm : 1; /**< Split Completion Message Detected (Read or Write) */ + uint32_t en_wfilt : 1; /**< When '1' the window-access filter is enabled. + Unfilter writes are: + MIO, SubId0 + MIO, SubId7 + NPI, SubId0 + NPI, SubId7 + POW, SubId7 + DFA, SubId7 + IPD, SubId7 + Unfiltered Reads are: + MIO, SubId0 + MIO, SubId7 + NPI, SubId0 + NPI, SubId7 + POW, SubId1 + POW, SubId2 + POW, SubId3 + POW, SubId7 + DFA, SubId7 + IPD, SubId7 */ + uint32_t reserved_14_14 : 1; + uint32_t ap_pcix : 1; /**< PCX Core Mode status (0=PCI Bus/1=PCIX) + If one or more of PCI_DEVSEL_N, PCI_STOP_N, and + PCI_TRDY_N are asserted at the rising edge of + PCI_RST_N, the device enters PCI-X mode. + Otherwise, the device enters conventional PCI + mode at the rising edge of RST#. */ + uint32_t ap_64ad : 1; /**< PCX Core Bus status (0=32b Bus/1=64b Bus) + When PCI_RST_N pin is de-asserted, the state + of PCI_REQ64_N(driven by central agent) determines + the width of the PCI/X bus. */ + uint32_t b12_bist : 1; /**< Bist Status For Memeory In B12 */ + uint32_t pmo_amod : 1; /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */ + uint32_t pmo_fpc : 3; /**< PMO-ARB Fixed Priority Counter + When PMO_AMOD=0 (FP mode), this field represents + the \# of CMD1 requests that are issued (at higher + priority) before a single lower priority CMD0 + is allowed to issue (to ensure foward progress). + - 0: 1 CMD1 Request issued before CMD0 allowed + - ... + - 7: 8 CMD1 Requests issued before CMD0 allowed */ + uint32_t tsr_hwm : 3; /**< Target Split-Read ADB(allowable disconnect boundary) + High Water Mark. + Specifies the number of ADBs(128 Byte aligned chunks) + that are accumulated(pending) BEFORE the Target Split + completion is attempted on the PCI bus. + - 0: RESERVED/ILLEGAL + - 1: 2 Pending ADBs (129B-256B) + - 2: 3 Pending ADBs (257B-384B) + - 3: 4 Pending ADBs (385B-512B) + - 4: 5 Pending ADBs (513B-640B) + - 5: 6 Pending ADBs (641B-768B) + - 6: 7 Pending ADBs (769B-896B) + - 7: 8 Pending ADBs (897B-1024B) + Example: Suppose a 1KB target memory request with + starting byte offset address[6:0]=0x7F is split by + the OCTEON and the TSR_HWM=1(2 ADBs). + The OCTEON will start the target split completion + on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B + of data have been received from memory (even though + the remaining 895B has not yet been received). The + OCTEON will continue the split completion until it + has consumed all of the pended split data. If the + full transaction length(1KB) of data was NOT entirely + transferred, then OCTEON will terminate the split + completion and again wait for another 2 ADB-aligned data + chunks(256B) of pended split data to be received from + memory before starting another split completion request. + This allows Octeon (as split completer), to send back + multiple split completions for a given large split + transaction without having to wait for the entire + transaction length to be received from memory. + NOTE: For split transaction sizes 'smaller' than the + specified TSR_HWM value, the split completion + is started when the last datum has been received from + memory. + NOTE: It is IMPERATIVE that this field NEVER BE + written to a ZERO value. A value of zero is + reserved/illegal and can result in PCIX bus hangs). */ + uint32_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when + clear '0' BAR2 access will be target-aborted. */ + uint32_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to + determine the endian swap mode. */ + uint32_t bar2_cax : 1; /**< Value will be XORed with pci-address[38] to + determine the L2 cache attribute. + When XOR result is 1, not cached in L2 */ +#else + uint32_t bar2_cax : 1; + uint32_t bar2_esx : 2; + uint32_t bar2_enb : 1; + uint32_t tsr_hwm : 3; + uint32_t pmo_fpc : 3; + uint32_t pmo_amod : 1; + uint32_t b12_bist : 1; + uint32_t ap_64ad : 1; + uint32_t ap_pcix : 1; + uint32_t reserved_14_14 : 1; + uint32_t en_wfilt : 1; + uint32_t scm : 1; + uint32_t scmtyp : 1; + uint32_t bar2pres : 1; + uint32_t erst_n : 1; + uint32_t bb0 : 1; + uint32_t bb1 : 1; + uint32_t bb_es : 2; + uint32_t bb_ca : 1; + uint32_t bb1_siz : 1; + uint32_t bb1_hole : 3; + uint32_t reserved_29_31 : 3; +#endif + } s; + struct cvmx_pci_ctl_status_2_s cn30xx; + struct cvmx_pci_ctl_status_2_cn31xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_20_31 : 12; + uint32_t erst_n : 1; /**< Reset active Low. */ + uint32_t bar2pres : 1; /**< From fuse block. When fuse(MIO_FUS_DAT3[BAR2_EN]) + is NOT blown the value of this field is '0' after + reset and BAR2 is NOT present. When the fuse IS + blown the value of this field is '1' after reset + and BAR2 is present. Note that SW can change this + field after reset. */ + uint32_t scmtyp : 1; /**< Split Completion Message CMD Type (0=RD/1=WR) + When SCM=1, SCMTYP specifies the CMD intent (R/W) */ + uint32_t scm : 1; /**< Split Completion Message Detected (Read or Write) */ + uint32_t en_wfilt : 1; /**< When '1' the window-access filter is enabled. + Unfilter writes are: + MIO, SubId0 + MIO, SubId7 + NPI, SubId0 + NPI, SubId7 + POW, SubId7 + DFA, SubId7 + IPD, SubId7 + USBN, SubId7 + Unfiltered Reads are: + MIO, SubId0 + MIO, SubId7 + NPI, SubId0 + NPI, SubId7 + POW, SubId1 + POW, SubId2 + POW, SubId3 + POW, SubId7 + DFA, SubId7 + IPD, SubId7 + USBN, SubId7 */ + uint32_t reserved_14_14 : 1; + uint32_t ap_pcix : 1; /**< PCX Core Mode status (0=PCI Bus/1=PCIX) */ + uint32_t ap_64ad : 1; /**< PCX Core Bus status (0=32b Bus/1=64b Bus) */ + uint32_t b12_bist : 1; /**< Bist Status For Memeory In B12 */ + uint32_t pmo_amod : 1; /**< PMO-ARB Mode (0=FP[HP=CMD1,LP=CMD0]/1=RR) */ + uint32_t pmo_fpc : 3; /**< PMO-ARB Fixed Priority Counter + When PMO_AMOD=0 (FP mode), this field represents + the \# of CMD1 requests that are issued (at higher + priority) before a single lower priority CMD0 + is allowed to issue (to ensure foward progress). + - 0: 1 CMD1 Request issued before CMD0 allowed + - ... + - 7: 8 CMD1 Requests issued before CMD0 allowed */ + uint32_t tsr_hwm : 3; /**< Target Split-Read ADB(allowable disconnect boundary) + High Water Mark. + Specifies the number of ADBs(128 Byte aligned chunks) + that are accumulated(pending) BEFORE the Target Split + completion is attempted on the PCI bus. + - 0: RESERVED/ILLEGAL + - 1: 2 Pending ADBs (129B-256B) + - 2: 3 Pending ADBs (257B-384B) + - 3: 4 Pending ADBs (385B-512B) + - 4: 5 Pending ADBs (513B-640B) + - 5: 6 Pending ADBs (641B-768B) + - 6: 7 Pending ADBs (769B-896B) + - 7: 8 Pending ADBs (897B-1024B) + Example: Suppose a 1KB target memory request with + starting byte offset address[6:0]=0x7F is split by + the OCTEON and the TSR_HWM=1(2 ADBs). + The OCTEON will start the target split completion + on the PCI Bus after 1B(1st ADB)+128B(2nd ADB)=129B + of data have been received from memory (even though + the remaining 895B has not yet been received). The + OCTEON will continue the split completion until it + has consumed all of the pended split data. If the + full transaction length(1KB) of data was NOT entirely + transferred, then OCTEON will terminate the split + completion and again wait for another 2 ADB-aligned data + chunks(256B) of pended split data to be received from + memory before starting another split completion request. + This allows Octeon (as split completer), to send back + multiple split completions for a given large split + transaction without having to wait for the entire + transaction length to be received from memory. + NOTE: For split transaction sizes 'smaller' than the + specified TSR_HWM value, the split completion + is started when the last datum has been received from + memory. + NOTE: It is IMPERATIVE that this field NEVER BE + written to a ZERO value. A value of zero is + reserved/illegal and can result in PCIX bus hangs). */ + uint32_t bar2_enb : 1; /**< When set '1' BAR2 is enable and will respond when + clear '0' BAR2 access will be target-aborted. */ + uint32_t bar2_esx : 2; /**< Value will be XORed with pci-address[37:36] to + determine the endian swap mode. */ + uint32_t bar2_cax : 1; /**< Value will be XORed with pci-address[38] to + determine the L2 cache attribute. + When XOR result is 1, not allocated in L2 cache */ +#else + uint32_t bar2_cax : 1; + uint32_t bar2_esx : 2; + uint32_t bar2_enb : 1; + uint32_t tsr_hwm : 3; + uint32_t pmo_fpc : 3; + uint32_t pmo_amod : 1; + uint32_t b12_bist : 1; + uint32_t ap_64ad : 1; + uint32_t ap_pcix : 1; + uint32_t reserved_14_14 : 1; + uint32_t en_wfilt : 1; + uint32_t scm : 1; + uint32_t scmtyp : 1; + uint32_t bar2pres : 1; + uint32_t erst_n : 1; + uint32_t reserved_20_31 : 12; +#endif + } cn31xx; + struct cvmx_pci_ctl_status_2_s cn38xx; + struct cvmx_pci_ctl_status_2_cn31xx cn38xxp2; + struct cvmx_pci_ctl_status_2_s cn50xx; + struct cvmx_pci_ctl_status_2_s cn58xx; + struct cvmx_pci_ctl_status_2_s cn58xxp1; +}; +typedef union cvmx_pci_ctl_status_2 cvmx_pci_ctl_status_2_t; + +/** + * cvmx_pci_dbell# + * + * PCI_DBELL0 = PCI Doorbell-0 + * + * The value to write to the doorbell 0 register. The value in this register is acted upon when the + * least-significant-byte of this register is written. + */ +union cvmx_pci_dbellx +{ + uint32_t u32; + struct cvmx_pci_dbellx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_16_31 : 16; + uint32_t inc_val : 16; /**< Software writes this register with the + number of new Instructions to be processed + on the Instruction Queue. When read this + register contains the last write value. */ +#else + uint32_t inc_val : 16; + uint32_t reserved_16_31 : 16; +#endif + } s; + struct cvmx_pci_dbellx_s cn30xx; + struct cvmx_pci_dbellx_s cn31xx; + struct cvmx_pci_dbellx_s cn38xx; + struct cvmx_pci_dbellx_s cn38xxp2; + struct cvmx_pci_dbellx_s cn50xx; + struct cvmx_pci_dbellx_s cn58xx; + struct cvmx_pci_dbellx_s cn58xxp1; +}; +typedef union cvmx_pci_dbellx cvmx_pci_dbellx_t; + +/** + * cvmx_pci_dma_cnt# + * + * PCI_DMA_CNT0 = PCI DMA Count0 + * + * Keeps track of the number of DMAs or bytes sent by DMAs. The value in this register is acted upon when the + * least-significant-byte of this register is written. + */ +union cvmx_pci_dma_cntx +{ + uint32_t u32; + struct cvmx_pci_dma_cntx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t dma_cnt : 32; /**< Update with the number of DMAs completed or the + number of bytes sent for DMA's associated with + this counter. When this register is written the + value written to [15:0] will be subtracted from + the value in this register. */ +#else + uint32_t dma_cnt : 32; +#endif + } s; + struct cvmx_pci_dma_cntx_s cn30xx; + struct cvmx_pci_dma_cntx_s cn31xx; + struct cvmx_pci_dma_cntx_s cn38xx; + struct cvmx_pci_dma_cntx_s cn38xxp2; + struct cvmx_pci_dma_cntx_s cn50xx; + struct cvmx_pci_dma_cntx_s cn58xx; + struct cvmx_pci_dma_cntx_s cn58xxp1; +}; +typedef union cvmx_pci_dma_cntx cvmx_pci_dma_cntx_t; + +/** + * cvmx_pci_dma_int_lev# + * + * PCI_DMA_INT_LEV0 = PCI DMA Sent Interrupt Level For DMA 0 + * + * Interrupt when the value in PCI_DMA_CNT0 is equal to or greater than the register value. + */ +union cvmx_pci_dma_int_levx +{ + uint32_t u32; + struct cvmx_pci_dma_int_levx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pkt_cnt : 32; /**< When PCI_DMA_CNT0 exceeds the value in this + DCNT0 will be set in PCI_INT_SUM and PCI_INT_SUM2. */ +#else + uint32_t pkt_cnt : 32; +#endif + } s; + struct cvmx_pci_dma_int_levx_s cn30xx; + struct cvmx_pci_dma_int_levx_s cn31xx; + struct cvmx_pci_dma_int_levx_s cn38xx; + struct cvmx_pci_dma_int_levx_s cn38xxp2; + struct cvmx_pci_dma_int_levx_s cn50xx; + struct cvmx_pci_dma_int_levx_s cn58xx; + struct cvmx_pci_dma_int_levx_s cn58xxp1; +}; +typedef union cvmx_pci_dma_int_levx cvmx_pci_dma_int_levx_t; + +/** + * cvmx_pci_dma_time# + * + * PCI_DMA_TIME0 = PCI DMA Sent Timer For DMA0 + * + * Time to wait from DMA being sent before issuing an interrupt. + */ +union cvmx_pci_dma_timex +{ + uint32_t u32; + struct cvmx_pci_dma_timex_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t dma_time : 32; /**< Number of PCI clock cycle to wait before + setting DTIME0 in PCI_INT_SUM and PCI_INT_SUM2. + After PCI_DMA_CNT0 becomes non-zero. + The timer is reset when the + PCI_INT_SUM[27] register is cleared. */ +#else + uint32_t dma_time : 32; +#endif + } s; + struct cvmx_pci_dma_timex_s cn30xx; + struct cvmx_pci_dma_timex_s cn31xx; + struct cvmx_pci_dma_timex_s cn38xx; + struct cvmx_pci_dma_timex_s cn38xxp2; + struct cvmx_pci_dma_timex_s cn50xx; + struct cvmx_pci_dma_timex_s cn58xx; + struct cvmx_pci_dma_timex_s cn58xxp1; +}; +typedef union cvmx_pci_dma_timex cvmx_pci_dma_timex_t; + +/** + * cvmx_pci_instr_count# + * + * PCI_INSTR_COUNT0 = PCI Instructions Outstanding Request Count + * + * The number of instructions to be fetched by the Instruction-0 Engine. + */ +union cvmx_pci_instr_countx +{ + uint32_t u32; + struct cvmx_pci_instr_countx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t icnt : 32; /**< Number of Instructions to be fetched by the + Instruction Engine. + A write of any non zero value to this register + will clear the value of this register. */ +#else + uint32_t icnt : 32; +#endif + } s; + struct cvmx_pci_instr_countx_s cn30xx; + struct cvmx_pci_instr_countx_s cn31xx; + struct cvmx_pci_instr_countx_s cn38xx; + struct cvmx_pci_instr_countx_s cn38xxp2; + struct cvmx_pci_instr_countx_s cn50xx; + struct cvmx_pci_instr_countx_s cn58xx; + struct cvmx_pci_instr_countx_s cn58xxp1; +}; +typedef union cvmx_pci_instr_countx cvmx_pci_instr_countx_t; + +/** + * cvmx_pci_int_enb + * + * PCI_INT_ENB = PCI Interrupt Enable + * + * Enables interrupt bits in the PCI_INT_SUM register. + */ +union cvmx_pci_int_enb +{ + uint64_t u64; + struct cvmx_pci_int_enb_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ + uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ + uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ + uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ + uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ + uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ + uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ + uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ + uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ + uint64_t iptime3 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[24] */ + uint64_t iptime2 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[23] */ + uint64_t iptime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */ + uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ + uint64_t ipcnt3 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[20] */ + uint64_t ipcnt2 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[19] */ + uint64_t ipcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */ + uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ + uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ + uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ + uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ + uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ + uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ + uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ + uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ + uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ + uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ + uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ + uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ + uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ + uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ + uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ + uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ + uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ + uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ +#else + uint64_t itr_wabt : 1; + uint64_t imr_wabt : 1; + uint64_t imr_wtto : 1; + uint64_t itr_abt : 1; + uint64_t imr_abt : 1; + uint64_t imr_tto : 1; + uint64_t imsi_per : 1; + uint64_t imsi_tabt : 1; + uint64_t imsi_mabt : 1; + uint64_t imsc_msg : 1; + uint64_t itsr_abt : 1; + uint64_t iserr : 1; + uint64_t iaperr : 1; + uint64_t idperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t irsl_int : 1; + uint64_t ipcnt0 : 1; + uint64_t ipcnt1 : 1; + uint64_t ipcnt2 : 1; + uint64_t ipcnt3 : 1; + uint64_t iptime0 : 1; + uint64_t iptime1 : 1; + uint64_t iptime2 : 1; + uint64_t iptime3 : 1; + uint64_t idcnt0 : 1; + uint64_t idcnt1 : 1; + uint64_t idtime0 : 1; + uint64_t idtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } s; + struct cvmx_pci_int_enb_cn30xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ + uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ + uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ + uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ + uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ + uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ + uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ + uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ + uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ + uint64_t reserved_22_24 : 3; + uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ + uint64_t reserved_18_20 : 3; + uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ + uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ + uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ + uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ + uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ + uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ + uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ + uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ + uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ + uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ + uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ + uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ + uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ + uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ + uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ + uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ + uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ + uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ +#else + uint64_t itr_wabt : 1; + uint64_t imr_wabt : 1; + uint64_t imr_wtto : 1; + uint64_t itr_abt : 1; + uint64_t imr_abt : 1; + uint64_t imr_tto : 1; + uint64_t imsi_per : 1; + uint64_t imsi_tabt : 1; + uint64_t imsi_mabt : 1; + uint64_t imsc_msg : 1; + uint64_t itsr_abt : 1; + uint64_t iserr : 1; + uint64_t iaperr : 1; + uint64_t idperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t irsl_int : 1; + uint64_t ipcnt0 : 1; + uint64_t reserved_18_20 : 3; + uint64_t iptime0 : 1; + uint64_t reserved_22_24 : 3; + uint64_t idcnt0 : 1; + uint64_t idcnt1 : 1; + uint64_t idtime0 : 1; + uint64_t idtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn30xx; + struct cvmx_pci_int_enb_cn31xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[33] */ + uint64_t ill_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[32] */ + uint64_t win_wr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[31] */ + uint64_t dma1_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[30] */ + uint64_t dma0_fi : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[29] */ + uint64_t idtime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[28] */ + uint64_t idtime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[27] */ + uint64_t idcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[26] */ + uint64_t idcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[25] */ + uint64_t reserved_23_24 : 2; + uint64_t iptime1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[22] */ + uint64_t iptime0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[21] */ + uint64_t reserved_19_20 : 2; + uint64_t ipcnt1 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[18] */ + uint64_t ipcnt0 : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[17] */ + uint64_t irsl_int : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[16] */ + uint64_t ill_rrd : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[15] */ + uint64_t ill_rwr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[14] */ + uint64_t idperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[13] */ + uint64_t iaperr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[12] */ + uint64_t iserr : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[11] */ + uint64_t itsr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[10] */ + uint64_t imsc_msg : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[9] */ + uint64_t imsi_mabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[8] */ + uint64_t imsi_tabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[7] */ + uint64_t imsi_per : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[6] */ + uint64_t imr_tto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[5] */ + uint64_t imr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[4] */ + uint64_t itr_abt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[3] */ + uint64_t imr_wtto : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[2] */ + uint64_t imr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[1] */ + uint64_t itr_wabt : 1; /**< INTA# Pin Interrupt Enable for PCI_INT_SUM[0] */ +#else + uint64_t itr_wabt : 1; + uint64_t imr_wabt : 1; + uint64_t imr_wtto : 1; + uint64_t itr_abt : 1; + uint64_t imr_abt : 1; + uint64_t imr_tto : 1; + uint64_t imsi_per : 1; + uint64_t imsi_tabt : 1; + uint64_t imsi_mabt : 1; + uint64_t imsc_msg : 1; + uint64_t itsr_abt : 1; + uint64_t iserr : 1; + uint64_t iaperr : 1; + uint64_t idperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t irsl_int : 1; + uint64_t ipcnt0 : 1; + uint64_t ipcnt1 : 1; + uint64_t reserved_19_20 : 2; + uint64_t iptime0 : 1; + uint64_t iptime1 : 1; + uint64_t reserved_23_24 : 2; + uint64_t idcnt0 : 1; + uint64_t idcnt1 : 1; + uint64_t idtime0 : 1; + uint64_t idtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn31xx; + struct cvmx_pci_int_enb_s cn38xx; + struct cvmx_pci_int_enb_s cn38xxp2; + struct cvmx_pci_int_enb_cn31xx cn50xx; + struct cvmx_pci_int_enb_s cn58xx; + struct cvmx_pci_int_enb_s cn58xxp1; +}; +typedef union cvmx_pci_int_enb cvmx_pci_int_enb_t; + +/** + * cvmx_pci_int_enb2 + * + * PCI_INT_ENB2 = PCI Interrupt Enable2 Register + * + * Enables interrupt bits in the PCI_INT_SUM2 register. + */ +union cvmx_pci_int_enb2 +{ + uint64_t u64; + struct cvmx_pci_int_enb2_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ + uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ + uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ + uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ + uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ + uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ + uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ + uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ + uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ + uint64_t rptime3 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[24] */ + uint64_t rptime2 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[23] */ + uint64_t rptime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */ + uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ + uint64_t rpcnt3 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[20] */ + uint64_t rpcnt2 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[19] */ + uint64_t rpcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */ + uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ + uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ + uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ + uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ + uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ + uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ + uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ + uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ + uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ + uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ + uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ + uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ + uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ + uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ + uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ + uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ + uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ + uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ +#else + uint64_t rtr_wabt : 1; + uint64_t rmr_wabt : 1; + uint64_t rmr_wtto : 1; + uint64_t rtr_abt : 1; + uint64_t rmr_abt : 1; + uint64_t rmr_tto : 1; + uint64_t rmsi_per : 1; + uint64_t rmsi_tabt : 1; + uint64_t rmsi_mabt : 1; + uint64_t rmsc_msg : 1; + uint64_t rtsr_abt : 1; + uint64_t rserr : 1; + uint64_t raperr : 1; + uint64_t rdperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rrsl_int : 1; + uint64_t rpcnt0 : 1; + uint64_t rpcnt1 : 1; + uint64_t rpcnt2 : 1; + uint64_t rpcnt3 : 1; + uint64_t rptime0 : 1; + uint64_t rptime1 : 1; + uint64_t rptime2 : 1; + uint64_t rptime3 : 1; + uint64_t rdcnt0 : 1; + uint64_t rdcnt1 : 1; + uint64_t rdtime0 : 1; + uint64_t rdtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } s; + struct cvmx_pci_int_enb2_cn30xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ + uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ + uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ + uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ + uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ + uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ + uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ + uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ + uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ + uint64_t reserved_22_24 : 3; + uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ + uint64_t reserved_18_20 : 3; + uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ + uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ + uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ + uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ + uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ + uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ + uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ + uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ + uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ + uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ + uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ + uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ + uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ + uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ + uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ + uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ + uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ + uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ +#else + uint64_t rtr_wabt : 1; + uint64_t rmr_wabt : 1; + uint64_t rmr_wtto : 1; + uint64_t rtr_abt : 1; + uint64_t rmr_abt : 1; + uint64_t rmr_tto : 1; + uint64_t rmsi_per : 1; + uint64_t rmsi_tabt : 1; + uint64_t rmsi_mabt : 1; + uint64_t rmsc_msg : 1; + uint64_t rtsr_abt : 1; + uint64_t rserr : 1; + uint64_t raperr : 1; + uint64_t rdperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rrsl_int : 1; + uint64_t rpcnt0 : 1; + uint64_t reserved_18_20 : 3; + uint64_t rptime0 : 1; + uint64_t reserved_22_24 : 3; + uint64_t rdcnt0 : 1; + uint64_t rdcnt1 : 1; + uint64_t rdtime0 : 1; + uint64_t rdtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn30xx; + struct cvmx_pci_int_enb2_cn31xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[33] */ + uint64_t ill_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[32] */ + uint64_t win_wr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[31] */ + uint64_t dma1_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[30] */ + uint64_t dma0_fi : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[29] */ + uint64_t rdtime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[28] */ + uint64_t rdtime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[27] */ + uint64_t rdcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[26] */ + uint64_t rdcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[25] */ + uint64_t reserved_23_24 : 2; + uint64_t rptime1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[22] */ + uint64_t rptime0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[21] */ + uint64_t reserved_19_20 : 2; + uint64_t rpcnt1 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[18] */ + uint64_t rpcnt0 : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[17] */ + uint64_t rrsl_int : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[16] */ + uint64_t ill_rrd : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[15] */ + uint64_t ill_rwr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[14] */ + uint64_t rdperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[13] */ + uint64_t raperr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[12] */ + uint64_t rserr : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[11] */ + uint64_t rtsr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[10] */ + uint64_t rmsc_msg : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[9] */ + uint64_t rmsi_mabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[8] */ + uint64_t rmsi_tabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[7] */ + uint64_t rmsi_per : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[6] */ + uint64_t rmr_tto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[5] */ + uint64_t rmr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[4] */ + uint64_t rtr_abt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[3] */ + uint64_t rmr_wtto : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[2] */ + uint64_t rmr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[1] */ + uint64_t rtr_wabt : 1; /**< RSL Chain Interrupt Enable for PCI_INT_SUM2[0] */ +#else + uint64_t rtr_wabt : 1; + uint64_t rmr_wabt : 1; + uint64_t rmr_wtto : 1; + uint64_t rtr_abt : 1; + uint64_t rmr_abt : 1; + uint64_t rmr_tto : 1; + uint64_t rmsi_per : 1; + uint64_t rmsi_tabt : 1; + uint64_t rmsi_mabt : 1; + uint64_t rmsc_msg : 1; + uint64_t rtsr_abt : 1; + uint64_t rserr : 1; + uint64_t raperr : 1; + uint64_t rdperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rrsl_int : 1; + uint64_t rpcnt0 : 1; + uint64_t rpcnt1 : 1; + uint64_t reserved_19_20 : 2; + uint64_t rptime0 : 1; + uint64_t rptime1 : 1; + uint64_t reserved_23_24 : 2; + uint64_t rdcnt0 : 1; + uint64_t rdcnt1 : 1; + uint64_t rdtime0 : 1; + uint64_t rdtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn31xx; + struct cvmx_pci_int_enb2_s cn38xx; + struct cvmx_pci_int_enb2_s cn38xxp2; + struct cvmx_pci_int_enb2_cn31xx cn50xx; + struct cvmx_pci_int_enb2_s cn58xx; + struct cvmx_pci_int_enb2_s cn58xxp1; +}; +typedef union cvmx_pci_int_enb2 cvmx_pci_int_enb2_t; + +/** + * cvmx_pci_int_sum + * + * PCI_INT_SUM = PCI Interrupt Summary + * + * The PCI Interrupt Summary Register. + */ +union cvmx_pci_int_sum +{ + uint64_t u64; + struct cvmx_pci_int_sum_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t ptime3 : 1; /**< When the value in the PCI_PKTS_SENT3 + register is not 0 the Sent-3 timer counts. + When the Sent-3 timer has a value greater + than the PCI_PKTS_SENT_TIME3 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime2 : 1; /**< When the value in the PCI_PKTS_SENT2 + register is not 0 the Sent-2 timer counts. + When the Sent-2 timer has a value greater + than the PCI_PKTS_SENT_TIME2 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 + register is not 0 the Sent-1 timer counts. + When the Sent-1 timer has a value greater + than the PCI_PKTS_SENT_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t pcnt3 : 1; /**< This bit indicates that PCI_PKTS_SENT3 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV3 register. */ + uint64_t pcnt2 : 1; /**< This bit indicates that PCI_PKTS_SENT2 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV2 register. */ + uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV1 register. */ + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire + is asserted by the MIO. */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected + CN58XX (as completer), has encountered an error + which prevents the split transaction from + completing. In this event, the CN58XX (as completer), + sends a SCM (Split Completion Message) to the + initiator. See: PCIX Spec v1.0a Fig 2-40. + [31:28]: Message Class = 2(completer error) + [27:20]: Message Index = 0x80 + [18:12]: Remaining Lower Address + [11:0]: Remaining Byte Count */ + uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected + for either a Split-Read/Write error case. + Set if: + a) A Split-Write SCM is detected with SCE=1. + b) A Split-Read SCM is detected (regardless + of SCE status). + The Split completion message(SCM) + is also latched into the PCI_SCM_REG[SCM] to + assist SW with error recovery. */ + uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ + uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ + uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t pcnt1 : 1; + uint64_t pcnt2 : 1; + uint64_t pcnt3 : 1; + uint64_t ptime0 : 1; + uint64_t ptime1 : 1; + uint64_t ptime2 : 1; + uint64_t ptime3 : 1; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } s; + struct cvmx_pci_int_sum_cn30xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t reserved_22_24 : 3; + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t reserved_18_20 : 3; + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire + is asserted by the MIO */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected + N3K (as completer), has encountered an error + which prevents the split transaction from + completing. In this event, the N3K (as completer), + sends a SCM (Split Completion Message) to the + initiator. See: PCIX Spec v1.0a Fig 2-40. + [31:28]: Message Class = 2(completer error) + [27:20]: Message Index = 0x80 + [18:12]: Remaining Lower Address + [11:0]: Remaining Byte Count */ + uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected + for either a Split-Read/Write error case. + Set if: + a) A Split-Write SCM is detected with SCE=1. + b) A Split-Read SCM is detected (regardless + of SCE status). + The Split completion message(SCM) + is also latched into the PCI_SCM_REG[SCM] to + assist SW with error recovery. */ + uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ + uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ + uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t reserved_18_20 : 3; + uint64_t ptime0 : 1; + uint64_t reserved_22_24 : 3; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn30xx; + struct cvmx_pci_int_sum_cn31xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t reserved_23_24 : 2; + uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 + register is not 0 the Sent-1 timer counts. + When the Sent-1 timer has a value greater + than the PCI_PKTS_SENT_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t reserved_19_20 : 2; + uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV1 register. */ + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the mio_pci_inta_dr wire + is asserted by the MIO */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected + N3K (as completer), has encountered an error + which prevents the split transaction from + completing. In this event, the N3K (as completer), + sends a SCM (Split Completion Message) to the + initiator. See: PCIX Spec v1.0a Fig 2-40. + [31:28]: Message Class = 2(completer error) + [27:20]: Message Index = 0x80 + [18:12]: Remaining Lower Address + [11:0]: Remaining Byte Count */ + uint64_t msc_msg : 1; /**< Master Split Completion Message (SCM) Detected + for either a Split-Read/Write error case. + Set if: + a) A Split-Write SCM is detected with SCE=1. + b) A Split-Read SCM is detected (regardless + of SCE status). + The Split completion message(SCM) + is also latched into the PCI_SCM_REG[SCM] to + assist SW with error recovery. */ + uint64_t msi_mabt : 1; /**< PCI Master Abort on Master MSI */ + uint64_t msi_tabt : 1; /**< PCI Target-Abort on Master MSI */ + uint64_t msi_per : 1; /**< PCI Parity Error on Master MSI */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Master-Read */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Master-Read */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Master-Read */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on Master-write */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on Master-write */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on Master-write */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t pcnt1 : 1; + uint64_t reserved_19_20 : 2; + uint64_t ptime0 : 1; + uint64_t ptime1 : 1; + uint64_t reserved_23_24 : 2; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn31xx; + struct cvmx_pci_int_sum_s cn38xx; + struct cvmx_pci_int_sum_s cn38xxp2; + struct cvmx_pci_int_sum_cn31xx cn50xx; + struct cvmx_pci_int_sum_s cn58xx; + struct cvmx_pci_int_sum_s cn58xxp1; +}; +typedef union cvmx_pci_int_sum cvmx_pci_int_sum_t; + +/** + * cvmx_pci_int_sum2 + * + * PCI_INT_SUM2 = PCI Interrupt Summary2 Register + * + * The PCI Interrupt Summary2 Register copy used for RSL interrupts. + */ +union cvmx_pci_int_sum2 +{ + uint64_t u64; + struct cvmx_pci_int_sum2_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t ptime3 : 1; /**< When the value in the PCI_PKTS_SENT3 + register is not 0 the Sent-3 timer counts. + When the Sent-3 timer has a value greater + than the PCI_PKTS_SENT_TIME3 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime2 : 1; /**< When the value in the PCI_PKTS_SENT2 + register is not 0 the Sent-2 timer counts. + When the Sent-2 timer has a value greater + than the PCI_PKTS_SENT_TIME2 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 + register is not 0 the Sent-1 timer counts. + When the Sent-1 timer has a value greater + than the PCI_PKTS_SENT_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t pcnt3 : 1; /**< This bit indicates that PCI_PKTS_SENT3 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV3 register. */ + uint64_t pcnt2 : 1; /**< This bit indicates that PCI_PKTS_SENT2 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV2 register. */ + uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV1 register. */ + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has + generated an interrupt. */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ + uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ + uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ + uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ + uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t pcnt1 : 1; + uint64_t pcnt2 : 1; + uint64_t pcnt3 : 1; + uint64_t ptime0 : 1; + uint64_t ptime1 : 1; + uint64_t ptime2 : 1; + uint64_t ptime3 : 1; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } s; + struct cvmx_pci_int_sum2_cn30xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t reserved_22_24 : 3; + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t reserved_18_20 : 3; + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has + generated an interrupt. */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ + uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ + uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ + uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ + uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t reserved_18_20 : 3; + uint64_t ptime0 : 1; + uint64_t reserved_22_24 : 3; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn30xx; + struct cvmx_pci_int_sum2_cn31xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_34_63 : 30; + uint64_t ill_rd : 1; /**< A read to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t ill_wr : 1; /**< A write to a disabled area of bar1 or bar2, + when the mem area is disabled. */ + uint64_t win_wr : 1; /**< A write to the disabled Window Write Data or + Read-Address Register took place. */ + uint64_t dma1_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 1. */ + uint64_t dma0_fi : 1; /**< A DMA operation operation finished that was + required to set the FORCE-INT bit for counter 0. */ + uint64_t dtime1 : 1; /**< When the value in the PCI_DMA_CNT1 + register is not 0 the DMA_CNT1 timer counts. + When the DMA1_CNT timer has a value greater + than the PCI_DMA_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dtime0 : 1; /**< When the value in the PCI_DMA_CNT0 + register is not 0 the DMA_CNT0 timer counts. + When the DMA0_CNT timer has a value greater + than the PCI_DMA_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t dcnt1 : 1; /**< This bit indicates that PCI_DMA_CNT1 + value is greater than the value + in the PCI_DMA_INT_LEV1 register. */ + uint64_t dcnt0 : 1; /**< This bit indicates that PCI_DMA_CNT0 + value is greater than the value + in the PCI_DMA_INT_LEV0 register. */ + uint64_t reserved_23_24 : 2; + uint64_t ptime1 : 1; /**< When the value in the PCI_PKTS_SENT1 + register is not 0 the Sent-1 timer counts. + When the Sent-1 timer has a value greater + than the PCI_PKTS_SENT_TIME1 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t ptime0 : 1; /**< When the value in the PCI_PKTS_SENT0 + register is not 0 the Sent-0 timer counts. + When the Sent-0 timer has a value greater + than the PCI_PKTS_SENT_TIME0 register this + bit is set. The timer is reset when bit is + written with a one. */ + uint64_t reserved_19_20 : 2; + uint64_t pcnt1 : 1; /**< This bit indicates that PCI_PKTS_SENT1 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV1 register. */ + uint64_t pcnt0 : 1; /**< This bit indicates that PCI_PKTS_SENT0 + value is greater than the value + in the PCI_PKTS_SENT_INT_LEV0 register. */ + uint64_t rsl_int : 1; /**< This bit is set when the RSL Chain has + generated an interrupt. */ + uint64_t ill_rrd : 1; /**< A read to the disabled PCI registers took place. */ + uint64_t ill_rwr : 1; /**< A write to the disabled PCI registers took place. */ + uint64_t dperr : 1; /**< Data Parity Error detected by PCX Core */ + uint64_t aperr : 1; /**< Address Parity Error detected by PCX Core */ + uint64_t serr : 1; /**< SERR# detected by PCX Core */ + uint64_t tsr_abt : 1; /**< Target Split-Read Abort Detected */ + uint64_t msc_msg : 1; /**< Master Split Completion Message Detected */ + uint64_t msi_mabt : 1; /**< PCI MSI Master Abort. */ + uint64_t msi_tabt : 1; /**< PCI MSI Target Abort. */ + uint64_t msi_per : 1; /**< PCI MSI Parity Error. */ + uint64_t mr_tto : 1; /**< PCI Master Retry Timeout On Read. */ + uint64_t mr_abt : 1; /**< PCI Master Abort On Read. */ + uint64_t tr_abt : 1; /**< PCI Target Abort On Read. */ + uint64_t mr_wtto : 1; /**< PCI Master Retry Timeout on write. */ + uint64_t mr_wabt : 1; /**< PCI Master Abort detected on write. */ + uint64_t tr_wabt : 1; /**< PCI Target Abort detected on write. */ +#else + uint64_t tr_wabt : 1; + uint64_t mr_wabt : 1; + uint64_t mr_wtto : 1; + uint64_t tr_abt : 1; + uint64_t mr_abt : 1; + uint64_t mr_tto : 1; + uint64_t msi_per : 1; + uint64_t msi_tabt : 1; + uint64_t msi_mabt : 1; + uint64_t msc_msg : 1; + uint64_t tsr_abt : 1; + uint64_t serr : 1; + uint64_t aperr : 1; + uint64_t dperr : 1; + uint64_t ill_rwr : 1; + uint64_t ill_rrd : 1; + uint64_t rsl_int : 1; + uint64_t pcnt0 : 1; + uint64_t pcnt1 : 1; + uint64_t reserved_19_20 : 2; + uint64_t ptime0 : 1; + uint64_t ptime1 : 1; + uint64_t reserved_23_24 : 2; + uint64_t dcnt0 : 1; + uint64_t dcnt1 : 1; + uint64_t dtime0 : 1; + uint64_t dtime1 : 1; + uint64_t dma0_fi : 1; + uint64_t dma1_fi : 1; + uint64_t win_wr : 1; + uint64_t ill_wr : 1; + uint64_t ill_rd : 1; + uint64_t reserved_34_63 : 30; +#endif + } cn31xx; + struct cvmx_pci_int_sum2_s cn38xx; + struct cvmx_pci_int_sum2_s cn38xxp2; + struct cvmx_pci_int_sum2_cn31xx cn50xx; + struct cvmx_pci_int_sum2_s cn58xx; + struct cvmx_pci_int_sum2_s cn58xxp1; +}; +typedef union cvmx_pci_int_sum2 cvmx_pci_int_sum2_t; + +/** + * cvmx_pci_msi_rcv + * + * PCI_MSI_RCV = PCI's MSI Received Vector Register + * + * A bit is set in this register relative to the vector received during a MSI. The value in this + * register is acted upon when the least-significant-byte of this register is written. + */ +union cvmx_pci_msi_rcv +{ + uint32_t u32; + struct cvmx_pci_msi_rcv_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_6_31 : 26; + uint32_t intr : 6; /**< When an MSI is received on the PCI the bit selected + by data [5:0] will be set in this register. To + clear this bit a write must take place to the + NPI_MSI_RCV register where any bit set to 1 is + cleared. Reading this address will return an + unpredicatable value. */ +#else + uint32_t intr : 6; + uint32_t reserved_6_31 : 26; +#endif + } s; + struct cvmx_pci_msi_rcv_s cn30xx; + struct cvmx_pci_msi_rcv_s cn31xx; + struct cvmx_pci_msi_rcv_s cn38xx; + struct cvmx_pci_msi_rcv_s cn38xxp2; + struct cvmx_pci_msi_rcv_s cn50xx; + struct cvmx_pci_msi_rcv_s cn58xx; + struct cvmx_pci_msi_rcv_s cn58xxp1; +}; +typedef union cvmx_pci_msi_rcv cvmx_pci_msi_rcv_t; + +/** + * cvmx_pci_pkt_credits# + * + * PCI_PKT_CREDITS0 = PCI Packet Credits For Output 0 + * + * Used to decrease the number of packets to be processed by the host from Output-0 and return + * buffer/info pointer pairs to OCTEON Output-0. The value in this register is acted upon when the + * least-significant-byte of this register is written. + */ +union cvmx_pci_pkt_creditsx +{ + uint32_t u32; + struct cvmx_pci_pkt_creditsx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pkt_cnt : 16; /**< The value written to this field will be + subtracted from PCI_PKTS_SENT0[PKT_CNT]. */ + uint32_t ptr_cnt : 16; /**< This field value is added to the + NPI's internal Buffer/Info Pointer Pair count. */ +#else + uint32_t ptr_cnt : 16; + uint32_t pkt_cnt : 16; +#endif + } s; + struct cvmx_pci_pkt_creditsx_s cn30xx; + struct cvmx_pci_pkt_creditsx_s cn31xx; + struct cvmx_pci_pkt_creditsx_s cn38xx; + struct cvmx_pci_pkt_creditsx_s cn38xxp2; + struct cvmx_pci_pkt_creditsx_s cn50xx; + struct cvmx_pci_pkt_creditsx_s cn58xx; + struct cvmx_pci_pkt_creditsx_s cn58xxp1; +}; +typedef union cvmx_pci_pkt_creditsx cvmx_pci_pkt_creditsx_t; + +/** + * cvmx_pci_pkts_sent# + * + * PCI_PKTS_SENT0 = PCI Packets Sent 0 + * + * Number of packets sent to the host memory from PCI Output 0 + */ +union cvmx_pci_pkts_sentx +{ + uint32_t u32; + struct cvmx_pci_pkts_sentx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pkt_cnt : 32; /**< Each time a packet is written to the memory via + PCI from PCI Output 0, this counter is + incremented by 1 or the byte count of the packet + as set in NPI_OUTPUT_CONTROL[P0_BMODE]. */ +#else + uint32_t pkt_cnt : 32; +#endif + } s; + struct cvmx_pci_pkts_sentx_s cn30xx; + struct cvmx_pci_pkts_sentx_s cn31xx; + struct cvmx_pci_pkts_sentx_s cn38xx; + struct cvmx_pci_pkts_sentx_s cn38xxp2; + struct cvmx_pci_pkts_sentx_s cn50xx; + struct cvmx_pci_pkts_sentx_s cn58xx; + struct cvmx_pci_pkts_sentx_s cn58xxp1; +}; +typedef union cvmx_pci_pkts_sentx cvmx_pci_pkts_sentx_t; + +/** + * cvmx_pci_pkts_sent_int_lev# + * + * PCI_PKTS_SENT_INT_LEV0 = PCI Packets Sent Interrupt Level For Output 0 + * + * Interrupt when number of packets sent is equal to or greater than the register value. + */ +union cvmx_pci_pkts_sent_int_levx +{ + uint32_t u32; + struct cvmx_pci_pkts_sent_int_levx_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pkt_cnt : 32; /**< When corresponding port's PCI_PKTS_SENT0 value + exceeds the value in this register, PCNT0 of the + PCI_INT_SUM and PCI_INT_SUM2 will be set. */ +#else + uint32_t pkt_cnt : 32; +#endif + } s; + struct cvmx_pci_pkts_sent_int_levx_s cn30xx; + struct cvmx_pci_pkts_sent_int_levx_s cn31xx; + struct cvmx_pci_pkts_sent_int_levx_s cn38xx; + struct cvmx_pci_pkts_sent_int_levx_s cn38xxp2; + struct cvmx_pci_pkts_sent_int_levx_s cn50xx; + struct cvmx_pci_pkts_sent_int_levx_s cn58xx; + struct cvmx_pci_pkts_sent_int_levx_s cn58xxp1; +}; +typedef union cvmx_pci_pkts_sent_int_levx cvmx_pci_pkts_sent_int_levx_t; + +/** + * cvmx_pci_pkts_sent_time# + * + * PCI_PKTS_SENT_TIME0 = PCI Packets Sent Timer For Output-0 + * + * Time to wait from packet being sent to host from Output-0 before issuing an interrupt. + */ +union cvmx_pci_pkts_sent_timex +{ + uint32_t u32; + struct cvmx_pci_pkts_sent_timex_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t pkt_time : 32; /**< Number of PCI clock cycle to wait before + issuing an interrupt to the host when a + packet from this port has been sent to the + host. The timer is reset when the + PCI_INT_SUM[21] register is cleared. */ +#else + uint32_t pkt_time : 32; +#endif + } s; + struct cvmx_pci_pkts_sent_timex_s cn30xx; + struct cvmx_pci_pkts_sent_timex_s cn31xx; + struct cvmx_pci_pkts_sent_timex_s cn38xx; + struct cvmx_pci_pkts_sent_timex_s cn38xxp2; + struct cvmx_pci_pkts_sent_timex_s cn50xx; + struct cvmx_pci_pkts_sent_timex_s cn58xx; + struct cvmx_pci_pkts_sent_timex_s cn58xxp1; +}; +typedef union cvmx_pci_pkts_sent_timex cvmx_pci_pkts_sent_timex_t; + +/** + * cvmx_pci_read_cmd_6 + * + * PCI_READ_CMD_6 = PCI Read Command 6 Register + * + * Contains control inforamtion related to a received PCI Command 6. + */ +union cvmx_pci_read_cmd_6 +{ + uint32_t u32; + struct cvmx_pci_read_cmd_6_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_9_31 : 23; + uint32_t min_data : 6; /**< The number of words to have buffered in the PNI + before informing the PCIX-Core that we have + read data available for the outstanding Delayed + read. 0 is treated as a 64. + For reads to the expansion this value is not used. */ + uint32_t prefetch : 3; /**< Control the amount of data to be preteched when + this type of bhmstREAD command is received. + 0 = 1 32/64 bit word. + 1 = From address to end of 128B block. + 2 = From address to end of 128B block plus 128B. + 3 = From address to end of 128B block plus 256B. + 4 = From address to end of 128B block plus 384B. + For reads to the expansion this value is not used. */ +#else + uint32_t prefetch : 3; + uint32_t min_data : 6; + uint32_t reserved_9_31 : 23; +#endif + } s; + struct cvmx_pci_read_cmd_6_s cn30xx; + struct cvmx_pci_read_cmd_6_s cn31xx; + struct cvmx_pci_read_cmd_6_s cn38xx; + struct cvmx_pci_read_cmd_6_s cn38xxp2; + struct cvmx_pci_read_cmd_6_s cn50xx; + struct cvmx_pci_read_cmd_6_s cn58xx; + struct cvmx_pci_read_cmd_6_s cn58xxp1; +}; +typedef union cvmx_pci_read_cmd_6 cvmx_pci_read_cmd_6_t; + +/** + * cvmx_pci_read_cmd_c + * + * PCI_READ_CMD_C = PCI Read Command C Register + * + * Contains control inforamtion related to a received PCI Command C. + */ +union cvmx_pci_read_cmd_c +{ + uint32_t u32; + struct cvmx_pci_read_cmd_c_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_9_31 : 23; + uint32_t min_data : 6; /**< The number of words to have buffered in the PNI + before informing the PCIX-Core that we have + read data available for the outstanding Delayed + read. 0 is treated as a 64. + For reads to the expansion this value is not used. */ + uint32_t prefetch : 3; /**< Control the amount of data to be preteched when + this type of READ command is received. + 0 = 1 32/64 bit word. + 1 = From address to end of 128B block. + 2 = From address to end of 128B block plus 128B. + 3 = From address to end of 128B block plus 256B. + 4 = From address to end of 128B block plus 384B. + For reads to the expansion this value is not used. */ +#else + uint32_t prefetch : 3; + uint32_t min_data : 6; + uint32_t reserved_9_31 : 23; +#endif + } s; + struct cvmx_pci_read_cmd_c_s cn30xx; + struct cvmx_pci_read_cmd_c_s cn31xx; + struct cvmx_pci_read_cmd_c_s cn38xx; + struct cvmx_pci_read_cmd_c_s cn38xxp2; + struct cvmx_pci_read_cmd_c_s cn50xx; + struct cvmx_pci_read_cmd_c_s cn58xx; + struct cvmx_pci_read_cmd_c_s cn58xxp1; +}; +typedef union cvmx_pci_read_cmd_c cvmx_pci_read_cmd_c_t; + +/** + * cvmx_pci_read_cmd_e + * + * PCI_READ_CMD_E = PCI Read Command E Register + * + * Contains control inforamtion related to a received PCI Command 6. + */ +union cvmx_pci_read_cmd_e +{ + uint32_t u32; + struct cvmx_pci_read_cmd_e_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint32_t reserved_9_31 : 23; + uint32_t min_data : 6; /**< The number of words to have buffered in the PNI + before informaing the PCIX-Core that we have + read data available for the outstanding Delayed + read. 0 is treated as a 64. + For reads to the expansion this value is not used. */ + uint32_t prefetch : 3; /**< Control the amount of data to be preteched when + this type of READ command is received. + 0 = 1 32/64 bit word. + 1 = From address to end of 128B block. + 2 = From address to end of 128B block plus 128B. + 3 = From address to end of 128B block plus 256B. + 4 = From address to end of 128B block plus 384B. + For reads to the expansion this value is not used. */ +#else + uint32_t prefetch : 3; + uint32_t min_data : 6; + uint32_t reserved_9_31 : 23; +#endif + } s; + struct cvmx_pci_read_cmd_e_s cn30xx; + struct cvmx_pci_read_cmd_e_s cn31xx; + struct cvmx_pci_read_cmd_e_s cn38xx; + struct cvmx_pci_read_cmd_e_s cn38xxp2; + struct cvmx_pci_read_cmd_e_s cn50xx; + struct cvmx_pci_read_cmd_e_s cn58xx; + struct cvmx_pci_read_cmd_e_s cn58xxp1; +}; +typedef union cvmx_pci_read_cmd_e cvmx_pci_read_cmd_e_t; + +/** + * cvmx_pci_read_timeout + * + * PCI_READ_TIMEOUT = PCI Read Timeour Register + * + * The address to start reading Instructions from for Input-3. + */ +union cvmx_pci_read_timeout +{ + uint64_t u64; + struct cvmx_pci_read_timeout_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_32_63 : 32; + uint64_t enb : 1; /**< Enable the use of the Timeout function. */ + uint64_t cnt : 31; /**< The number of eclk cycles to wait after issuing + a read request to the PNI before setting a + timeout and not expecting the data to return. + This is considered a fatal condition by the NPI. */ +#else + uint64_t cnt : 31; + uint64_t enb : 1; + uint64_t reserved_32_63 : 32; +#endif + } s; + struct cvmx_pci_read_timeout_s cn30xx; + struct cvmx_pci_read_timeout_s cn31xx; + struct cvmx_pci_read_timeout_s cn38xx; + struct cvmx_pci_read_timeout_s cn38xxp2; + struct cvmx_pci_read_timeout_s cn50xx; + struct cvmx_pci_read_timeout_s cn58xx; + struct cvmx_pci_read_timeout_s cn58xxp1; +}; +typedef union cvmx_pci_read_timeout cvmx_pci_read_timeout_t; + +/** + * cvmx_pci_scm_reg + * + * PCI_SCM_REG = PCI Master Split Completion Message Register + * + * This register contains the Master Split Completion Message(SCM) generated when a master split + * transaction is aborted. + */ +union cvmx_pci_scm_reg +{ + uint64_t u64; + struct cvmx_pci_scm_reg_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_32_63 : 32; + uint64_t scm : 32; /**< Contains the Split Completion Message (SCM) + driven when a master-split transaction is aborted. + [31:28]: Message Class + [27:20]: Message Index + [19]: Reserved + [18:12]: Remaining Lower Address + [11:8]: Upper Remaining Byte Count + [7:0]: Lower Remaining Byte Count + Refer to the PCIX1.0a specification, Fig 2-40 + for additional details for the split completion + message format. */ +#else + uint64_t scm : 32; + uint64_t reserved_32_63 : 32; +#endif + } s; + struct cvmx_pci_scm_reg_s cn30xx; + struct cvmx_pci_scm_reg_s cn31xx; + struct cvmx_pci_scm_reg_s cn38xx; + struct cvmx_pci_scm_reg_s cn38xxp2; + struct cvmx_pci_scm_reg_s cn50xx; + struct cvmx_pci_scm_reg_s cn58xx; + struct cvmx_pci_scm_reg_s cn58xxp1; +}; +typedef union cvmx_pci_scm_reg cvmx_pci_scm_reg_t; + +/** + * cvmx_pci_tsr_reg + * + * PCI_TSR_REG = PCI Target Split Attribute Register + * + * This register contains the Attribute field Master Split Completion Message(SCM) generated when a master split + * transaction is aborted. + */ +union cvmx_pci_tsr_reg +{ + uint64_t u64; + struct cvmx_pci_tsr_reg_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_36_63 : 28; + uint64_t tsr : 36; /**< Contains the Target Split Attribute field when a + target-split transaction is aborted. + [35:32]: Upper Byte Count + [31]: BCM=Byte Count Modified + [30]: SCE=Split Completion Error + [29]: SCM=Split Completion Message + [28:24]: RESERVED + [23:16]: Completer Bus Number + [15:11]: Completer Device Number + [10:8]: Completer Function Number + [7:0]: Lower Byte Count + Refer to the PCIX1.0a specification, Fig 2-39 + for additional details on the completer attribute + bit assignments. */ +#else + uint64_t tsr : 36; + uint64_t reserved_36_63 : 28; +#endif + } s; + struct cvmx_pci_tsr_reg_s cn30xx; + struct cvmx_pci_tsr_reg_s cn31xx; + struct cvmx_pci_tsr_reg_s cn38xx; + struct cvmx_pci_tsr_reg_s cn38xxp2; + struct cvmx_pci_tsr_reg_s cn50xx; + struct cvmx_pci_tsr_reg_s cn58xx; + struct cvmx_pci_tsr_reg_s cn58xxp1; +}; +typedef union cvmx_pci_tsr_reg cvmx_pci_tsr_reg_t; + +/** + * cvmx_pci_win_rd_addr + * + * PCI_WIN_RD_ADDR = PCI Window Read Address Register + * + * Writing the least-significant-byte of this register will cause a read operation to take place, + * UNLESS, a read operation is already taking place. A read is consider to end when the PCI_WIN_RD_DATA + * register is read. + */ +union cvmx_pci_win_rd_addr +{ + uint64_t u64; + struct cvmx_pci_win_rd_addr_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_49_63 : 15; + uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always + read as '0'. */ + uint64_t reserved_0_47 : 48; +#else + uint64_t reserved_0_47 : 48; + uint64_t iobit : 1; + uint64_t reserved_49_63 : 15; +#endif + } s; + struct cvmx_pci_win_rd_addr_cn30xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_49_63 : 15; + uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always + read as '0'. */ + uint64_t rd_addr : 46; /**< The address to be read from. Whenever the LSB of + this register is written, the Read Operation will + take place. + [47:40] = NCB_ID + [39:3] = Address + When [47:43] == NPI & [42:0] == 0 bits [39:0] are: + [39:32] == x, Not Used + [31:27] == RSL_ID + [12:2] == RSL Register Offset + [1:0] == x, Not Used */ + uint64_t reserved_0_1 : 2; +#else + uint64_t reserved_0_1 : 2; + uint64_t rd_addr : 46; + uint64_t iobit : 1; + uint64_t reserved_49_63 : 15; +#endif + } cn30xx; + struct cvmx_pci_win_rd_addr_cn30xx cn31xx; + struct cvmx_pci_win_rd_addr_cn38xx + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_49_63 : 15; + uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always + read as '0'. */ + uint64_t rd_addr : 45; /**< The address to be read from. Whenever the LSB of + this register is written, the Read Operation will + take place. + [47:40] = NCB_ID + [39:3] = Address + When [47:43] == NPI & [42:0] == 0 bits [39:0] are: + [39:32] == x, Not Used + [31:27] == RSL_ID + [12:3] == RSL Register Offset + [2:0] == x, Not Used */ + uint64_t reserved_0_2 : 3; +#else + uint64_t reserved_0_2 : 3; + uint64_t rd_addr : 45; + uint64_t iobit : 1; + uint64_t reserved_49_63 : 15; +#endif + } cn38xx; + struct cvmx_pci_win_rd_addr_cn38xx cn38xxp2; + struct cvmx_pci_win_rd_addr_cn30xx cn50xx; + struct cvmx_pci_win_rd_addr_cn38xx cn58xx; + struct cvmx_pci_win_rd_addr_cn38xx cn58xxp1; +}; +typedef union cvmx_pci_win_rd_addr cvmx_pci_win_rd_addr_t; + +/** + * cvmx_pci_win_rd_data + * + * PCI_WIN_RD_DATA = PCI Window Read Data Register + * + * Contains the result from the read operation that took place when the LSB of the PCI_WIN_RD_ADDR + * register was written. + */ +union cvmx_pci_win_rd_data +{ + uint64_t u64; + struct cvmx_pci_win_rd_data_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t rd_data : 64; /**< The read data. */ +#else + uint64_t rd_data : 64; +#endif + } s; + struct cvmx_pci_win_rd_data_s cn30xx; + struct cvmx_pci_win_rd_data_s cn31xx; + struct cvmx_pci_win_rd_data_s cn38xx; + struct cvmx_pci_win_rd_data_s cn38xxp2; + struct cvmx_pci_win_rd_data_s cn50xx; + struct cvmx_pci_win_rd_data_s cn58xx; + struct cvmx_pci_win_rd_data_s cn58xxp1; +}; +typedef union cvmx_pci_win_rd_data cvmx_pci_win_rd_data_t; + +/** + * cvmx_pci_win_wr_addr + * + * PCI_WIN_WR_ADDR = PCI Window Write Address Register + * + * Contains the address to be writen to when a write operation is started by writing the + * PCI_WIN_WR_DATA register (see below). + */ +union cvmx_pci_win_wr_addr +{ + uint64_t u64; + struct cvmx_pci_win_wr_addr_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_49_63 : 15; + uint64_t iobit : 1; /**< A 1 or 0 can be written here but this will always + read as '0'. */ + uint64_t wr_addr : 45; /**< The address that will be written to when the + PCI_WIN_WR_DATA register is written. + [47:40] = NCB_ID + [39:3] = Address + When [47:43] == NPI & [42:0] == 0 bits [39:0] are: + [39:32] == x, Not Used + [31:27] == RSL_ID + [12:3] == RSL Register Offset + [2:0] == x, Not Used */ + uint64_t reserved_0_2 : 3; +#else + uint64_t reserved_0_2 : 3; + uint64_t wr_addr : 45; + uint64_t iobit : 1; + uint64_t reserved_49_63 : 15; +#endif + } s; + struct cvmx_pci_win_wr_addr_s cn30xx; + struct cvmx_pci_win_wr_addr_s cn31xx; + struct cvmx_pci_win_wr_addr_s cn38xx; + struct cvmx_pci_win_wr_addr_s cn38xxp2; + struct cvmx_pci_win_wr_addr_s cn50xx; + struct cvmx_pci_win_wr_addr_s cn58xx; + struct cvmx_pci_win_wr_addr_s cn58xxp1; +}; +typedef union cvmx_pci_win_wr_addr cvmx_pci_win_wr_addr_t; + +/** + * cvmx_pci_win_wr_data + * + * PCI_WIN_WR_DATA = PCI Window Write Data Register + * + * Contains the data to write to the address located in the PCI_WIN_WR_ADDR Register. + * Writing the least-significant-byte of this register will cause a write operation to take place. + */ +union cvmx_pci_win_wr_data +{ + uint64_t u64; + struct cvmx_pci_win_wr_data_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t wr_data : 64; /**< The data to be written. Whenever the LSB of this + register is written, the Window Write will take + place. */ +#else + uint64_t wr_data : 64; +#endif + } s; + struct cvmx_pci_win_wr_data_s cn30xx; + struct cvmx_pci_win_wr_data_s cn31xx; + struct cvmx_pci_win_wr_data_s cn38xx; + struct cvmx_pci_win_wr_data_s cn38xxp2; + struct cvmx_pci_win_wr_data_s cn50xx; + struct cvmx_pci_win_wr_data_s cn58xx; + struct cvmx_pci_win_wr_data_s cn58xxp1; +}; +typedef union cvmx_pci_win_wr_data cvmx_pci_win_wr_data_t; + +/** + * cvmx_pci_win_wr_mask + * + * PCI_WIN_WR_MASK = PCI Window Write Mask Register + * + * Contains the mask for the data in the PCI_WIN_WR_DATA Register. + */ +union cvmx_pci_win_wr_mask +{ + uint64_t u64; + struct cvmx_pci_win_wr_mask_s + { +#if __BYTE_ORDER == __BIG_ENDIAN + uint64_t reserved_8_63 : 56; + uint64_t wr_mask : 8; /**< The data to be written. When a bit is set '1' + the corresponding byte will not be written. */ +#else + uint64_t wr_mask : 8; + uint64_t reserved_8_63 : 56; +#endif + } s; + struct cvmx_pci_win_wr_mask_s cn30xx; + struct cvmx_pci_win_wr_mask_s cn31xx; + struct cvmx_pci_win_wr_mask_s cn38xx; + struct cvmx_pci_win_wr_mask_s cn38xxp2; + struct cvmx_pci_win_wr_mask_s cn50xx; + struct cvmx_pci_win_wr_mask_s cn58xx; + struct cvmx_pci_win_wr_mask_s cn58xxp1; +}; +typedef union cvmx_pci_win_wr_mask cvmx_pci_win_wr_mask_t; + +#endif |