NOTICE OF RELOCATION
[keystone-rtos/pcie-lld.git] / pcie.h
1 /*\r
2  *\r
3  * Copyright (C) 2010-2018 Texas Instruments Incorporated - http://www.ti.com/\r
4  *\r
5  *\r
6  *  Redistribution and use in source and binary forms, with or without\r
7  *  modification, are permitted provided that the following conditions\r
8  *  are met:\r
9  *\r
10  *    Redistributions of source code must retain the above copyright\r
11  *    notice, this list of conditions and the following disclaimer.\r
12  *\r
13  *    Redistributions in binary form must reproduce the above copyright\r
14  *    notice, this list of conditions and the following disclaimer in the\r
15  *    documentation and/or other materials provided with the\r
16  *    distribution.\r
17  *\r
18  *    Neither the name of Texas Instruments Incorporated nor the names of\r
19  *    its contributors may be used to endorse or promote products derived\r
20  *    from this software without specific prior written permission.\r
21  *\r
22  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\r
23  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\r
24  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
25  *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\r
26  *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\r
27  *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\r
28  *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
29  *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
30  *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\r
31  *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\r
32  *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
33  *\r
34 */\r
35 \r
36 #ifndef PCIE__H\r
37 #define PCIE__H\r
38 \r
39 #ifdef __cplusplus\r
40 extern "C" {\r
41 #endif\r
42 \r
43 /* System level header files */\r
44 #include <stdint.h>\r
45 #include <stdlib.h>\r
46 #include "pciever.h"\r
47 \r
48 /* ============================================================== */\r
49 /**\r
50  *   @file  ti/drv/pcie/pcie.h\r
51  *\r
52  *   @brief PCIe sub-system API and Data Definitions\r
53  *\r
54  */\r
55 \r
56 /**  @mainpage PCIe Low Level Driver\r
57  *\r
58  *   @section intro  Introduction\r
59  *\r
60  *\r
61  *   This document describes the Low Level Driver (LLD) for the Peripheral Component Interconnect Express (PCIe).\r
62  *\r
63  *   The PCI Express module supports dual operation mode: End Point (EP or Type0) or Root Complex (RC or Type1).\r
64  *   This driver focuses on EP mode but it also provides access to some basic RC configuration/functionalities.\r
65  *\r
66  *   The PCIe userguide can be found at <http://www.ti.com/lit/sprugs6a>.\r
67  *\r
68  *   The PCIe subsystem has two address spaces. The first (Address Space 0)\r
69  *   is dedicated for local application registers, local configuration accesses and remote\r
70  *   configuration accesses. The second (Address Space 1) is dedicated for data transfer.\r
71  *\r
72  *   The PCIe driver focuses on the registers for Address Space 0.\r
73  *\r
74  *   Throughout the LLD, the registers/APIs are grouped into the following:\n\n\r
75  *   -# PCIe Application Registers/APIs\n\n\r
76  *   -# PCIe Configuration Registers/APIs (Local and Remote)\n\r
77  *   2.1  Type0 and Type1 Common Registers/APIs\n\r
78  *   2.2  Type0 Registers/APIs\n\r
79  *   2.3  Type1 Registers/APIs\n\r
80  *   2.4  MSI Registers/APIs\n\r
81  *   2.5  Capabylity Registers/APIs\n\r
82  *   2.6  Extended Capability Registers/APIs\n\r
83  *   2.7  Port Logic Registers/APIs\n\r
84  *\r
85  *   The normal sequence of events to enable the peripheral is listed below.\n\r
86  *   There is a C code example in ti/drv/pcie/example/sample.\n\n\r
87  *\r
88  *   -# Set up the SERDES PLL, reference clock\r
89  *   -# Set up the peripheral mode (EP/RC)\r
90  *   -# Power up the peripheral\r
91  *   -# Disable link training\r
92  *   -# Configure the peripheral, including BAR masks\r
93  *   -# Configure Inbound Address Translation\r
94  *   -# Configure Outbound Address Translation\r
95  *   -# Enable Link Training\r
96  *   -# Insure Link Training completion\n\r
97  *   PCIe link is up and ready to be used.\r
98  *\r
99  * In order to check that all values are within bounds, the LLD can be\r
100  * recompiled with the -Dpcie_DEBUG compiler flag.  This will ensure that\r
101  * all values passed to writes fit within their assigned bitfields.\r
102  */\r
103 \r
104 /* Define pcie LLD Module as a master group in Doxygen format and add all PCIE LLD API\r
105    definitions to this group. */\r
106 \r
107 /** @defgroup pcielld_module PCIE LLD Module API\r
108  *  @{\r
109  */\r
110 /** @} */\r
111 \r
112 /** @defgroup pcielld_api_functions PCIE LLD Functions\r
113  *  @ingroup pcielld_module\r
114  */\r
115 \r
116 /** @defgroup pcielld_api_macros PCIE LLD Macros\r
117  *  @ingroup pcielld_module\r
118  */\r
119 \r
120 /** @defgroup pcielld_api_structures PCIE LLD API Data Structures\r
121  *  @ingroup pcielld_module\r
122  */\r
123 \r
124 /** @defgroup pcielld_reg_structures PCIE LLD Register Definitions\r
125  *  @ingroup pcielld_module\r
126  */\r
127 \r
128 /** @defgroup pcielld_reg_app_structures PCIE LLD Application Register Definitions\r
129  *  @ingroup pcielld_reg_structures\r
130  */\r
131 \r
132 /** @defgroup pcielld_reg_cfg_structures PCIE LLD Configuration Register Definitions\r
133  *  @ingroup pcielld_reg_structures\r
134  */\r
135 \r
136 /** @defgroup pcielld_reg_cfg_com_structures PCIE LLD Common (Type0/Type1) Register Definitions\r
137  *  @ingroup pcielld_reg_cfg_structures\r
138  */\r
139 \r
140 /** @defgroup pcielld_reg_cfg_type0_structures PCIE LLD Type0 (endpoint) Register Definitions\r
141  *  @ingroup pcielld_reg_cfg_structures\r
142  */\r
143 \r
144 /** @defgroup pcielld_reg_cfg_type1_structures PCIE LLD Type1 (root) Register Definitions\r
145  *  @ingroup pcielld_reg_cfg_structures\r
146  */\r
147 \r
148 /** @defgroup pcielld_reg_cfg_pwr_structures PCIE LLD Power Management Register Definitions\r
149  *  @ingroup pcielld_reg_cfg_structures\r
150  */\r
151 \r
152 /** @defgroup pcielld_reg_cfg_msi_structures PCIE LLD Message Signaled Interrupt Capabilities Register Definitions\r
153  *  @ingroup pcielld_reg_cfg_structures\r
154  */\r
155 \r
156 /** @defgroup pcielld_reg_cfg_cap_structures PCIE LLD Capabilities Register Definitions\r
157  *  @ingroup pcielld_reg_cfg_structures\r
158  */\r
159 \r
160 /** @defgroup pcielld_reg_cfg_cap_ext_structures PCIE LLD Extended Capabilities Register Definitions\r
161  *  @ingroup pcielld_reg_cfg_structures\r
162  */\r
163 \r
164 /** @defgroup pcielld_reg_cfg_pl_structures PCIE LLD Port Logic Register Definitions\r
165  *  @ingroup pcielld_reg_cfg_structures\r
166  */\r
167 \r
168 /** @defgroup pcielld_api_constants PCIE LLD Constants (enum's and define's)\r
169  *  @ingroup pcielld_module\r
170  */\r
171 \r
172 /** These are the possible values for PCIe mode */\r
173 typedef enum\r
174 {\r
175   pcie_EP_MODE = 0,    /**< Required when setting the PCIe Mode to End Point using the @ref Pcie_setInterfaceMode function */\r
176   pcie_LEGACY_EP_MODE, /**< Required when setting the PCIe Mode to Legacy End Point using the @ref Pcie_setInterfaceMode function */\r
177   pcie_RC_MODE         /**< Required when setting the PCIe Mode to Root Complex using the @ref Pcie_setInterfaceMode function */\r
178 } pcieMode_e;\r
179 /* @} */\r
180 \r
181 \r
182 /**\r
183  *  @ingroup pcielld_api_constants\r
184  *\r
185  *  @{\r
186  */\r
187 /** These are the possible values for Prefetch BAR configuration */\r
188 typedef enum\r
189 {\r
190   pcie_BAR_NON_PREF = 0,    /**< Non Prefetchable Region*/\r
191   pcie_BAR_PREF             /**< Prefetchable Region*/\r
192 } pcieBarPref_e;\r
193 /* @} */\r
194 \r
195 /**\r
196  *  @ingroup pcielld_api_constants\r
197  *\r
198  *  @{\r
199  */\r
200 /** These are the possible values for Type BAR configuration */\r
201 typedef enum\r
202 {\r
203   pcie_BAR_TYPE32 = 0,    /**< 32 bits BAR */\r
204   pcie_BAR_RSVD,          /**< Reserved */\r
205   pcie_BAR_TYPE64         /**< 64 bits BAR */\r
206 } pcieBarType_e;\r
207 /* @} */\r
208 \r
209 /**\r
210  *  @ingroup pcielld_api_constants\r
211  *\r
212  *  @{\r
213  */\r
214 /** These are the possible values for Memory BAR configuration */\r
215 typedef enum\r
216 {\r
217   pcie_BAR_MEM_MEM = 0,    /**< Memory BAR */\r
218   pcie_BAR_MEM_IO          /**< IO BAR */\r
219 } pcieBarMem_e;\r
220 /* @} */\r
221 \r
222 /**\r
223  *  @ingroup pcielld_api_constants\r
224  *\r
225  *  @{\r
226  */\r
227 /** These are the possible return values from all PCIE LLD functions */\r
228 typedef enum\r
229 {\r
230 #ifdef pcie_DEBUG\r
231   /**\r
232    * The call succeeded, but the application could have leaked memory\r
233    * since a non-NULL pointer was overwritten.  This only\r
234    */\r
235   pcie_RET_DBG_WRITE_OVERFLOW = -100L, /**< write value too big for bitfield */\r
236 #endif\r
237   pcie_RET_OK = 0,        /**< Call succeeded */\r
238   pcie_RET_RO_CHANGED,    /**< API called with RO bits changed */\r
239   pcie_RET_INV_REG,       /**< readRegs/writeRegs unsupported register */\r
240   pcie_RET_INV_HANDLE,    /**< Invalid handle */\r
241   pcie_RET_INV_DEVICENUM, /**< @ref Pcie_open deviceNum invalid */\r
242   pcie_RET_INV_INITCFG,   /**< Invalid Pcie_InitCfg */\r
243   pcie_RET_INV_FXNPTR,    /**< Top level API doesn't have dev specific fxn */\r
244   pcie_RET_NO_INIT,       /**< Forgot to call Pcie_init() ? */\r
245   pcie_RET_UNSUPPORTED,   /**< Unsupported API */\r
246   pcie_RET_RANGECHK       /**< Rangecheck failed */\r
247 } pcieRet_e;\r
248 /* @} */\r
249 \r
250 \r
251 /**\r
252  *  @ingroup pcielld_api_constants\r
253  *\r
254  *  @{\r
255  */\r
256 /** These are the possible values for the Encoding of LTSSM State in\r
257  * @ref pcieDebug0Reg_t::ltssmState (for hw rev 0) or\r
258  * @ref pcieTiConfDeviceCmdReg_t::ltssmState (for hw rev 1)\r
259  */\r
260 typedef enum\r
261 {\r
262   pcie_LTSSM_DETECT_QUIET=0,      /* 0x00 */\r
263   pcie_LTSSM_DETECT_ACT,          /* 0x01 */\r
264   pcie_LTSSM_POLL_ACTIVE,         /* 0x02 */\r
265   pcie_LTSSM_POLL_COMPLIANCE,     /* 0x03 */\r
266   pcie_LTSSM_POLL_CONFIG,         /* 0x04 */\r
267   pcie_LTSSM_PRE_DETECT_QUIET,    /* 0x05 */\r
268   pcie_LTSSM_DETECT_WAIT,         /* 0x06 */\r
269   pcie_LTSSM_CFG_LINKWD_START,    /* 0x07 */\r
270   pcie_LTSSM_CFG_LINKWD_ACEPT,    /* 0x08 */\r
271   pcie_LTSSM_CFG_LANENUM_WAIT,    /* 0x09 */\r
272   pcie_LTSSM_CFG_LANENUM_ACEPT,   /* 0x0a */\r
273   pcie_LTSSM_CFG_COMPLETE,        /* 0x0b */\r
274   pcie_LTSSM_CFG_IDLE,            /* 0x0c */\r
275   pcie_LTSSM_RCVRY_LOCK,          /* 0x0d */\r
276   pcie_LTSSM_RCVRY_SPEED,         /* 0x0e */\r
277   pcie_LTSSM_RCVRY_RCVRCFG,       /* 0x0f */\r
278   pcie_LTSSM_RCVRY_IDLE,          /* 0x10 */\r
279   pcie_LTSSM_L0,                  /* 0x11 */\r
280   pcie_LTSSM_L0S,                 /* 0x12 */\r
281   pcie_LTSSM_L123_SEND_EIDLE,     /* 0x13 */\r
282   pcie_LTSSM_L1_IDLE,             /* 0x14 */\r
283   pcie_LTSSM_L2_IDLE,             /* 0x15 */\r
284   pcie_LTSSM_L2_WAKE,             /* 0x16 */\r
285   pcie_LTSSM_DISABLED_ENTRY,      /* 0x17 */\r
286   pcie_LTSSM_DISABLED_IDLE,       /* 0x18 */\r
287   pcie_LTSSM_DISABLED,            /* 0x19 */\r
288   pcie_LTSSM_LPBK_ENTRY,          /* 0x1a */\r
289   pcie_LTSSM_LPBK_ACTIVE,         /* 0x1b */\r
290   pcie_LTSSM_LPBK_EXIT,           /* 0x1c */\r
291   pcie_LTSSM_LPBK_EXIT_TIMEOUT,   /* 0x1d */\r
292   pcie_LTSSM_HOT_RESET_ENTRY,     /* 0x1e */\r
293   pcie_LTSSM_HOT_RESET,           /* 0x1f */\r
294   pcie_LTSSM_RCVRY_EQ0,           /* 0x20 - hw rev 1 only */\r
295   pcie_LTSSM_RCVRY_EQ1,           /* 0x21 - hw rev 1 only */\r
296   pcie_LTSSM_RCVRY_EQ2,           /* 0x22 - hw rev 1 only */\r
297   pcie_LTSSM_RCVRY_EQ3            /* 0x23 - hw rev 1 only */\r
298 } pcieLtssmState_e;\r
299 /* @} */\r
300 \r
301 \r
302 /**\r
303  *  @ingroup pcielld_api_constants\r
304  *\r
305  *  @{\r
306  */\r
307  /** Selects whether to query or modify the local or remote PCIe registers.\n\n\r
308   *  Important note: PCIe registers are grouped into Application and Configuration registers.\n\r
309   *  This definition of Local/Remote is only applicable to PCIe configuration registers.\n\r
310   *  It is NOT applicable to PCIe application registers. For application registers, the LLD *always* accesses\r
311   *  LOCAL PCIe application registers.\r
312   *\r
313   *  **IMPORTANT** : on Rev 1 hardware, only RC can see EP's registers through\r
314   *  pcie_LOCATION_REMOTE.  In order for this to work, both Pciev1_DeviceCfgBaseAddrs.remoteOffset,\r
315   *  and outbound region 0 in ATU need to be configured for the *same* offset.\r
316   */\r
317 typedef enum\r
318 {\r
319   pcie_LOCATION_LOCAL,     /**< Access the local PCIe peripheral */\r
320   pcie_LOCATION_REMOTE     /**< Access the remote PCIe peripheral */\r
321 } pcieLocation_e;\r
322 /* @} */\r
323 \r
324 /**\r
325  *  @ingroup pcielld_api_constants\r
326  *\r
327  *  @{\r
328  */\r
329 /** These are the possible sizes for the PCIe Outbound translation regions */\r
330 typedef enum\r
331 {\r
332   pcie_OB_SIZE_1MB = 0,        /**< Corresponds to a region size of 1MB */\r
333   pcie_OB_SIZE_2MB,            /**< Corresponds to a region size of 2MB */\r
334   pcie_OB_SIZE_4MB,            /**< Corresponds to a region size of 4MB */\r
335   pcie_OB_SIZE_8MB             /**< Corresponds to a region size of 8MB */\r
336 } pcieObSize_e;\r
337 /* @} */\r
338 \r
339 /**\r
340  *  @ingroup pcielld_api_constants\r
341  *\r
342  *  @{\r
343  */\r
344 /** These are the Enable/Disable values used by the PCIe Driver */\r
345 typedef enum\r
346 {\r
347   pcie_DISABLE = 0,        /**< Disable */\r
348   pcie_ENABLE              /**< Enable  */\r
349 } pcieState_e;\r
350 \r
351 /**\r
352  * @ingroup pcielld_api_constants\r
353  *\r
354  * @brief  Enum to select PCIe ATU(Address translation unit) region\r
355  *         direction(Inbound or Outbound).\r
356  *         This enum is used while configuring inbound or outbound region.\r
357  *\r
358  * @{\r
359  */\r
360 typedef enum pcieAtuRegionDir\r
361 {\r
362     PCIE_ATU_REGION_DIR_OUTBOUND, /**< Select PCIe outbound region. */\r
363     PCIE_ATU_REGION_DIR_INBOUND   /**< Select PCIe inbound region. */\r
364 } pcieAtuRegionDir_t;\r
365 /* @} */\r
366 \r
367 /**\r
368  * @ingroup pcielld_api_constants\r
369  *\r
370  * @brief  This enum is used to select PCIe TLP(Transaction layer packet) type\r
371  *         while configuring inbound or outbound region.\r
372  *\r
373  *  @{\r
374  */\r
375 typedef enum pcieTlpType\r
376 {\r
377     PCIE_TLP_TYPE_MEM, /**< MEM type is selected while doing memory transfer */\r
378     PCIE_TLP_TYPE_IO,  /**< IO type is selected while doing I/O transfer */\r
379     PCIE_TLP_TYPE_CFG  /**< CFG type is selected while doing configuration\r
380                          * access */\r
381 } pcieTlpType_t;\r
382 /* @} */\r
383 \r
384 /**\r
385  * @ingroup pcielld_api_constants\r
386  *\r
387  * @brief  Enum to select address or BAR match mode.\r
388  *\r
389  * @{\r
390  */\r
391 typedef enum pcieAtuRegionMatchMode\r
392 {\r
393     PCIE_ATU_REGION_MATCH_MODE_ADDR, /**< Inbound packets are filtered by address match mode */\r
394     PCIE_ATU_REGION_MATCH_MODE_BAR   /**< Inbound packets are filtered by BAR\r
395                                        * match mode */\r
396 } pcieAtuRegionMatchMode_t;\r
397 \r
398 /* @} */\r
399 \r
400 \r
401 /*****************************************************************************\r
402  **********  PCIe APPLICATION REGISTERS  *****************\r
403  ****************************************************************************/\r
404 \r
405 /**\r
406  * @ingroup pcielld_reg_app_structures\r
407  * @brief Specification of the PCIe Peripheral ID Register\r
408  *\r
409  * This Register contains the major and minor revisions\r
410  * for the PCIe module.\r
411  *\r
412  * This register is only used on rev 0/2 hw, but is very similar to rev 1's\r
413  * @ref pcieTiConfRevisionReg_t\r
414  *\r
415  * On rev 0 hw, this corresponds to PID\r
416  * On rev 1 hw, unsupported\r
417  * On rev 2 hw, this corresponds to PID\r
418  *\r
419  * @{\r
420  */\r
421 typedef struct pciePidReg_s {\r
422   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
423   /**\r
424    * @brief [ro] Scheme\r
425    *\r
426    * On rev 0 hw, this corresponds to SCHEME\r
427    * On rev 1 hw, unsupported\r
428    * On rev 2 hw, unsupported\r
429    *\r
430    * Field size: 2 bits\r
431    */\r
432   uint8_t scheme;\r
433   /**\r
434    * @brief [ro] Function code\r
435    *\r
436    * 0xe30 is PCIe\r
437    *\r
438    * On rev 0 hw, this corresponds to FUNC\r
439    * On rev 1 hw, unsupported\r
440    * On rev 2 hw, unsupported\r
441    *\r
442    * Field size: 12 bits\r
443    */\r
444   uint16_t func;\r
445   /**\r
446    * @brief [ro] Module ID of the Peripheral\r
447    *\r
448    * 0x6810 is PCIe\r
449    *\r
450    * On rev 0 hw, unsupported\r
451    * On rev 1 hw, unsupported\r
452    * On rev 2 hw, this corresponds to MODID\r
453    *\r
454    * Field size: 16 bits\r
455    */\r
456   uint16_t modId;\r
457   /**\r
458    * @brief [ro] RTL Version\r
459    *\r
460    * On rev 0 hw, this corresponds to RTL\r
461    * On rev 1 hw, unsupported\r
462    * On rev 2 hw, this corresponds to RTL\r
463    *\r
464    * Field size: 5 bits\r
465    */\r
466   uint8_t rtl;\r
467   /**\r
468    * @brief [ro] Major revision\r
469    *\r
470    * On rev 0 hw, this corresponds to MAJOR\r
471    * On rev 1 hw, unsupported\r
472    * On rev 2 hw, this corresponds to MAJOR\r
473    *\r
474    * Field size: 3 bits\r
475    */\r
476   uint8_t revMaj;\r
477   /**\r
478    * @brief [ro] Customer special version\r
479    *\r
480    * On rev 0 hw, this corresponds to CUSTOM\r
481    * On rev 1 hw, unsupported\r
482    * On rev 2 hw, this corresponds to CUSTOM\r
483    *\r
484    * Field size: 2 bits\r
485    */\r
486   uint8_t cust;\r
487   /**\r
488    * @brief [ro] Minor revision\r
489    *\r
490    * On rev 0 hw, this corresponds to MINOR\r
491    * On rev 1 hw, unsupported\r
492    * On rev 2 hw, this corresponds to MINOR\r
493    *\r
494    * Field size: 6 bits\r
495    */\r
496   uint8_t revMin;\r
497 } pciePidReg_t;\r
498 /* @} */\r
499 \r
500 /**\r
501  * @ingroup pcielld_reg_app_structures\r
502  * @brief Specification of the Command Status Register\r
503  *\r
504  * This Register is used to enable address translation, link training\r
505  * and writing to BAR mask registers.\r
506  *\r
507  * On rev 0 hw, this corresponds to CMD_STATUS\r
508  * On rev 1 hw, unsupported\r
509  * On rev 2 hw, this corresponds to CMD_STATUS\r
510  *\r
511  * @{\r
512  */\r
513 typedef struct pcieCmdStatusReg_s {\r
514   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
515   /**\r
516    * @brief [rw] Set to enable manual reversal for RX lanes.\r
517    *\r
518    * On rev 0 hw, unsupported\r
519    * On rev 1 hw, unsupported\r
520    * On rev 2 hw, this corresponds to RX_LANE_FLIP_EN\r
521    *\r
522    * Field size: 1 bit\r
523    */\r
524   uint8_t rxLaneFlipEn;\r
525   /**\r
526    * @brief [rw] Set to enable manual reversal for TX lanes.\r
527    *\r
528    * On rev 0 hw, unsupported\r
529    * On rev 1 hw, unsupported\r
530    * On rev 2 hw, this corresponds to TX_LANE_FLIP_EN\r
531    *\r
532    * Field size: 1 bit\r
533    */\r
534   uint8_t txLaneFlipEn;\r
535   /**\r
536    * @brief [rw] Set to enable writing to BAR mask registers that are overlaid on BAR registers.\r
537    *\r
538    * On rev 0 hw, this corresponds to DBI_CS2\r
539    * On rev 1 hw, unsupported (but see @ref pciePlconfDbiRoWrEnReg_t::cxDbiRoWrEn)\r
540    * On rev 2 hw, this corresponds to DBI_CS2\r
541    *\r
542    * Field size: 1 bit\r
543    */\r
544   uint8_t dbi;\r
545   /**\r
546    * @brief [rw] Application retry Enable\r
547    *\r
548    * This feature can be used if initialization can take longer than PCIe\r
549    * stipulated time frame.\r
550    *\r
551    * 1 = Enable all incoming PCIe transactions to be returned with a retry response.\r
552    *\r
553    * On rev 0 hw, this corresponds to APP_RETRY_EN\r
554    * On rev 1 hw, unsupported (but see @ref pcieTiConfDeviceCmdReg_t::appReqRetryEn)\r
555    * On rev 2 hw, this corresponds to APP_RETRY_EN\r
556    *\r
557    * Field size: 1 bit\r
558    */\r
559   uint8_t appRetryEn;\r
560   /**\r
561    * @brief [rw] Posted Write Enable\r
562    *\r
563    * Default is 0 with all internal bus master writes defaulting to non-posted.\r
564    *\r
565    * 1 = Enable the internal bus master to use posted write commands.\r
566    *\r
567    * On rev 0 hw, this corresponds to POSTED_WR_EN\r
568    * On rev 1 hw, unsupported\r
569    * On rev 2 hw, unsupported\r
570    *\r
571    * Field size: 1 bit\r
572    */\r
573   uint8_t postedWrEn;\r
574   /**\r
575    * @brief [rw] Inbound Translation Enable\r
576    *\r
577    * 1 = Enable translation of inbound memory/IO read/write requests\r
578    * into memory read/write requests.\r
579    *\r
580    * On rev 0 hw, this corresponds to IB_XLT_EN\r
581    * On rev 1 hw, unsupported (but see @ref pciePlconfIatuIndexReg_t)\r
582    * On rev 2 hw, unsupported (but see @ref pciePlconfIatuIndexReg_t)\r
583    *\r
584    * Field size: 1 bit\r
585    */\r
586   uint8_t ibXltEn;\r
587   /**\r
588    * @brief [rw] Outbound Translation Enable\r
589    *\r
590    * 1 = Enable translation of outbound memory read/write requests into\r
591    * memory/IO/configuration read/write requests.\r
592    *\r
593    * On rev 0 hw, this corresponds to OB_XLT_EN\r
594    * On rev 1 hw, unsupported (but see @ref pciePlconfIatuIndexReg_t)\r
595    * On rev 2 hw, unsupported (but see @ref pciePlconfIatuIndexReg_t)\r
596    *\r
597    * Field size: 1 bit\r
598    */\r
599   uint8_t obXltEn;\r
600   /**\r
601    * @brief [rw] Link Training Enable\r
602    *\r
603    * 1 = Enable LTSSM in PCI Express core and link negotiation with\r
604    * link partner will begin.\r
605    *\r
606    * On rev 0 hw, this corresponds to LTSSM_EN\r
607    * On rev 1 hw, unsupported (but see @ref pcieTiConfDeviceCmdReg_t::ltssmEn)\r
608    * On rev 2 hw, this corresponds to LTSSM_EN\r
609    *\r
610    * Field size: 1 bit\r
611    */\r
612   uint8_t ltssmEn;\r
613 } pcieCmdStatusReg_t;\r
614 /* @} */\r
615 \r
616 \r
617 /**\r
618  * @ingroup pcielld_reg_app_structures\r
619  * @brief Specification of the Configuration Transaction Setup Register\r
620  *\r
621  * On rev 0 hw, this corresponds to CFG_SETUP\r
622  * On rev 1 hw, unsupported\r
623  * On rev 2 hw, unsupported\r
624  *\r
625  * @{\r
626  */\r
627 typedef struct pcieCfgTransReg_s {\r
628   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
629   /**\r
630    * @brief [rw] Configuration type for outbound configuration accesses\r
631    *\r
632    * 0 = Type 0 access.\r
633    * 1 = Type 1 access.\r
634    *\r
635    * On rev 0 hw, this corresponds to CFG_TYPE\r
636    * On rev 1 hw, unsupported\r
637    * On rev 2 hw, unsupported\r
638    *\r
639    * Field size: 1 bit\r
640    */\r
641   uint8_t type;\r
642   /**\r
643    * @brief [rw] PCIe bus number for outbound configuration accesses\r
644    *\r
645    * On rev 0 hw, this corresponds to CFG_BUS\r
646    * On rev 1 hw, unsupported\r
647    * On rev 2 hw, unsupported\r
648    *\r
649    * Field size: 8 bits\r
650    */\r
651   uint8_t bus;\r
652   /**\r
653    * @brief [rw] PCIe device number for outbound configuration accesses\r
654    *\r
655    * On rev 0 hw, this corresponds to CFG_DEVICE\r
656    * On rev 1 hw, unsupported\r
657    * On rev 2 hw, unsupported\r
658    *\r
659    * Field size: 5 bit\r
660    */\r
661   uint8_t device;\r
662   /**\r
663    * @brief [rw] PCIe function number for outbound configuration accesses\r
664    *\r
665    * On rev 0 hw, this corresponds to CFG_FUNC\r
666    * On rev 1 hw, unsupported\r
667    * On rev 2 hw, unsupported\r
668    *\r
669    * Field size: 3 bits\r
670    */\r
671   uint8_t func;\r
672 } pcieCfgTransReg_t;\r
673 /* @} */\r
674 \r
675 \r
676 /**\r
677  * @ingroup pcielld_reg_app_structures\r
678  * @brief Specification of the IO TLP Base Register\r
679  *\r
680  * On rev 0 hw, this corresponds to IOBASE\r
681  * On rev 1 hw, unsupported\r
682  * On rev 2 hw, unsupported\r
683  *\r
684  * @{\r
685  */\r
686 typedef struct pcieIoBaseReg_s {\r
687   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
688   /**\r
689    * @brief [rw] outgoing IO TLP. RC mode only\r
690    *\r
691    * On rev 0 hw, this corresponds to IOBASE\r
692    * On rev 1 hw, unsupported\r
693    * On rev 2 hw, unsupported\r
694    *\r
695    * Field size: 20 bits\r
696    *\r
697    */\r
698   uint32_t ioBase;\r
699 } pcieIoBaseReg_t;\r
700 /* @} */\r
701 \r
702 /**\r
703  * @ingroup pcielld_reg_app_structures\r
704  * @brief Specification of the TLP configuration Register\r
705  *\r
706  * On rev 0 hw, this corresponds to TLPCFG\r
707  * On rev 1 hw, unsupported\r
708  * On rev 2 hw, unsupported\r
709  *\r
710  * @{\r
711  */\r
712 typedef struct pcieTlpCfgReg_s {\r
713   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
714   /**\r
715    * @brief [rw] Enable relaxed ordering for all outgoing TLPs\r
716    *\r
717    * On rev 0 hw, this corresponds to RELAXED\r
718    * On rev 1 hw, unsupported\r
719    * On rev 2 hw, unsupported\r
720    *\r
721    * Field size: 1 bit\r
722    */\r
723   uint8_t relaxed;\r
724   /**\r
725    * @brief [rw] Enable No Snoop attribute on all outgoing TLPs\r
726    *\r
727    * On rev 0 hw, this corresponds to NO_SNOOP\r
728    * On rev 1 hw, unsupported\r
729    * On rev 2 hw, unsupported\r
730    *\r
731    * Field size: 1 bit\r
732    */\r
733   uint8_t noSnoop;\r
734 } pcieTlpCfgReg_t;\r
735 /* @} */\r
736 \r
737 \r
738 /**\r
739  * @ingroup pcielld_reg_app_structures\r
740  * @brief Specification of the Reset Command Register\r
741  *\r
742  * On rev 0 hw, this corresponds to RSTCMD\r
743  * On rev 1 hw, unsupported\r
744  * On rev 2 hw, this corresponds to RSTCMD\r
745  *\r
746  * @{\r
747  */\r
748 typedef struct pcieRstCmdReg_s {\r
749   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
750   /**\r
751    * @brief [ro] Bridge flush status\r
752    *\r
753    * Used to ensure no pending transactions prior to issuing warm reset.\r
754    * 0 = No transaction is pending.\r
755    * 1 = There are transactions pending.\r
756    *\r
757    * On rev 0 hw, this corresponds to FLUSH_N\r
758    * On rev 1 hw, unsupported\r
759    * On rev 2 hw, unsupported\r
760    *\r
761    * Field size: 1 bit\r
762    */\r
763   uint8_t flush;\r
764   /**\r
765    * @brief [ro] Bridge flush status\r
766    *\r
767    * Used to ensure no pending transactions prior to issuing warm reset.\r
768    * 0 = No transaction is pending.\r
769    * 1 = There are transactions pending.\r
770    *\r
771    * On rev 0 hw, unsupported\r
772    * On rev 1 hw, unsupported\r
773    * On rev 2 hw, this corresponds to FLR_PF_ACTIVE\r
774    *\r
775    * Field size: 1 bit\r
776    */\r
777   uint8_t flrPfActive;\r
778   /**\r
779    * @brief [w1] Write 1 to initiate a downstream hot reset sequence on downstream.\r
780    *\r
781    * On rev 0 hw, this corresponds to INIT_RST\r
782    * On rev 1 hw, unsupported\r
783    * On rev 2 hw, this corresponds to INIT_RST\r
784    *\r
785    * Field size: 1 bit\r
786    */\r
787   uint8_t initRst;\r
788 } pcieRstCmdReg_t;\r
789 /* @} */\r
790 \r
791 /**\r
792  * @ingroup pcielld_reg_app_structures\r
793  * @brief Specification of the PTM Config register\r
794  *\r
795  * On rev 0 hw, unsupported\r
796  * On rev 1 hw, unsupported\r
797  * On rev 2 hw, this corresponds to PTMCFG\r
798  *\r
799  * @{\r
800  */\r
801 typedef struct pciePtmCfgReg_s {\r
802   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
803   /**\r
804    * @brief [rw] Select ptm_local_clk bit input to CPTS.\r
805    *\r
806    * 0 will select ptm_local_clk[0], \r
807    * 1 will select ptm_local_clk[1] ...\r
808    * 63 will select ptm_local_clk[63]\r
809    *\r
810    * On rev 0 hw, unsupported\r
811    * On rev 1 hw, unsupported\r
812    * On rev 2 hw, this corresponds to PTM_CLK_SEL\r
813    *\r
814    * Field size: 6 bit\r
815    */\r
816   uint8_t ptmClkSel;\r
817   /**\r
818    * @brief [ro] '1' indicates PTM context is valid-EP only\r
819    *\r
820    * On rev 0 hw, unsupported\r
821    * On rev 1 hw, unsupported\r
822    * On rev 2 hw, this corresponds to PTM_CONTEXT_VALID\r
823    *\r
824    * Field size: 1 bit\r
825    */\r
826   uint8_t ptmContextValid;\r
827   /**\r
828    * @brief [w1] Write '1' to enable PTM transaction.EP only.\r
829    *\r
830    * EP will initiate one PTM transaction when this field is updated.\r
831    * Always reads '0'\r
832    *\r
833    * On rev 0 hw, unsupported\r
834    * On rev 1 hw, unsupported\r
835    * On rev 2 hw, this corresponds to PTM_MANUAL_UPDATE\r
836    *\r
837    * Field size: 1 bit\r
838    */\r
839   uint8_t ptmManualUpdate;\r
840   /**\r
841    * @brief [rw] Write '1' to enable PTM auto-update-EP only\r
842    *\r
843    * EP will automatically initiate PTM transaction every 10ms\r
844    *\r
845    * On rev 0 hw, unsupported\r
846    * On rev 1 hw, unsupported\r
847    * On rev 2 hw, this corresponds to PTM_AUTO_UPDATE\r
848    *\r
849    * Field size: 1 bit\r
850    */\r
851   uint8_t ptmAutoUpdate;\r
852 } pciePtmCfgReg_t;\r
853 /* @} */\r
854 \r
855 /**\r
856  * @ingroup pcielld_reg_app_structures\r
857  * @brief Specification of the Power Management Command Register\r
858  *\r
859  * On rev 0 hw, this corresponds to PMCMD\r
860  * On rev 1 hw, unsupported\r
861  * On rev 2 hw, this corresponds to PMCMD\r
862  *\r
863  * @{\r
864  */\r
865 typedef struct pciePmCmdReg_s {\r
866   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
867   /**\r
868    * @brief [w1] PM Turn off\r
869    *\r
870    * Write 1 to transmit a PM_TURNOFF message. Reads 0. Applicable in RC mode only.\r
871    *\r
872    * 0 = No effect\n\r
873    * 1 = Transmit a PM_TURNOFF message\r
874    *\r
875    * On rev 0 hw, this corresponds to PM_XMT_TURNOFF\r
876    * On rev 1 hw, unsupported\r
877    * On rev 2 hw, this corresponds to PM_XMT_TURNOFF\r
878    *\r
879    * Field size: 1 bit\r
880    */\r
881   uint8_t turnOff;\r
882   /**\r
883    * @brief [w1] Transmit PM PME message\r
884    *\r
885    * Write 1 to transmit a PM_PME message. Reads 0. Applicable to EP mode only.\r
886    *\r
887    * 0 = No effect\n\r
888    * 1 = Transmit a PM_PME message\r
889    *\r
890    * On rev 0 hw, this corresponds to PM_XMT_PME\r
891    * On rev 1 hw, unsupported\r
892    * On rev 2 hw, this corresponds to PM_XMT_PME\r
893    *\r
894    * Field size: 1 bit\r
895    */\r
896   uint8_t pme;\r
897 } pciePmCmdReg_t;\r
898 /* @} */\r
899 \r
900 \r
901 /**\r
902  * @ingroup pcielld_reg_app_structures\r
903  * @brief Specification of the Power Management Configuration Register\r
904  *\r
905  * On rev 0 hw, this corresponds to PMCFG\r
906  * On rev 1 hw, unsupported\r
907  * On rev 2 hw, unsupported\r
908  *\r
909  * @{\r
910  */\r
911 typedef struct pciePmCfgReg_s {\r
912   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
913   /**\r
914    * @brief [rw] PM Turn off\r
915    *\r
916    * Write 1 to enable entry to L2/L3 ready state. Read to check L2/L3 entry readiness. Applicable to RC and EP.\r
917    *\r
918    * 0 = Disable entry to L2/L3 ready state.\n\r
919    * 1 = Enable entry to L2/L3 ready state.\r
920    *\r
921    * On rev 0 hw, this corresponds to ENTR_L23\r
922    * On rev 1 hw, unsupported\r
923    * On rev 2 hw, unsupported\r
924    *\r
925    * Field size: 1 bit\r
926    */\r
927   uint8_t entrL23;\r
928 } pciePmCfgReg_t;\r
929 /* @} */\r
930 \r
931 /**\r
932  * @ingroup pcielld_reg_app_structures\r
933  * @brief Specification of the Activity Status Register\r
934  *\r
935  * On rev 0 hw, this corresponds to ACT_STATUS\r
936  * On rev 1 hw, unsupported\r
937  * On rev 2 hw, unsupported\r
938  *\r
939  * @{\r
940  */\r
941 typedef struct pcieActStatusReg_s {\r
942   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
943   /**\r
944    * @brief [ro] Outbound Buffers Not Empty\r
945    *\r
946    * On rev 0 hw, this corresponds to OB_NOT_EMPTY\r
947    * On rev 1 hw, unsupported\r
948    * On rev 2 hw, unsupported\r
949    *\r
950    * Field size: 1 bit\r
951    */\r
952   uint8_t obNotEmpty;\r
953   /**\r
954    * @brief [ro] Inbound Buffers Not Empty\r
955    *\r
956    * On rev 0 hw, this corresponds to IB_NOT_EMPTY\r
957    * On rev 1 hw, unsupported\r
958    * On rev 2 hw, unsupported\r
959    *\r
960    * Field size: 1 bit\r
961    */\r
962   uint8_t ibNotEmpty;\r
963 } pcieActStatusReg_t;\r
964 /* @} */\r
965 \r
966 /**\r
967  * @ingroup pcielld_reg_app_structures\r
968  * @brief Specification of the Outbound Size Register\r
969  *\r
970  * On rev 0 hw, this corresponds to OB_SIZE\r
971  * On rev 1 hw, unsupported\r
972  * On rev 2 hw, unsupported\r
973  *\r
974  * @{\r
975  */\r
976 typedef struct pcieObSizeReg_s {\r
977   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
978   /**\r
979    * @brief [rw] Set each outbound translation window size\r
980    *\r
981    * <TABLE>\r
982    * <TR><TH>@ref size</TH><TH>Window Size</TH></TR>\r
983    * <TR><TD>0</TD>        <TD>1 MB</TD></TR>\r
984    * <TR><TD>1</TD>        <TD>2 MB</TD></TR>\r
985    * <TR><TD>2</TD>        <TD>4 MB</TD></TR>\r
986    * <TR><TD>3</TD>        <TD>8 MB</TD></TR>\r
987    * <TR><TD>others</TD>   <TD>reserved</TD></TR>\r
988    * </TABLE>\r
989    *\r
990    * On rev 0 hw, this corresponds to OB_SIZE\r
991    * On rev 1 hw, unsupported\r
992    * On rev 2 hw, unsupported\r
993    *\r
994    * Field size: 3 bits\r
995    */\r
996   uint8_t size;\r
997 } pcieObSizeReg_t;\r
998 /* @} */\r
999 \r
1000 /**\r
1001  * @ingroup pcielld_reg_app_structures\r
1002  * @brief Specification of the Diagnostic Control register\r
1003  *\r
1004  * On rev 0 hw, this corresponds to DIAG_CTRL\r
1005  * On rev 1 hw, unsupported (but see @ref pcieTiConfDiagCtrlReg_t)\r
1006  * On rev 2 hw\r
1007  *\r
1008  * @{\r
1009  */\r
1010 typedef struct pcieDiagCtrlReg_s {\r
1011   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1012   /**\r
1013    * @brief [rw] Force ECRC error\r
1014    *\r
1015    * Write 1 to force inversion of LSB of ECRC for the next one packet.\r
1016    * It is self cleared when the ECRC error has been injected on one TLP.\r
1017    *\r
1018    * On rev 0 hw, this corresponds to INV_ECRC\r
1019    * On rev 1 hw, unsupported (but see @ref pcieTiConfDiagCtrlReg_t::invEcrc)\r
1020    * On rev 2 hw, unsupported\r
1021    *\r
1022    * Field size: 1 bit\r
1023    */\r
1024   uint8_t invEcrc;\r
1025   /**\r
1026    * @brief [rw] Force LCRC error\r
1027    *\r
1028    * Write 1 to force inversion of LSB of LCRC for the next one packet.\r
1029    * It is self cleared when the LCRC error has been injected on one TLP.\r
1030    *\r
1031    * On rev 0 hw, this corresponds to INV_LCRC\r
1032    * On rev 1 hw, unsupported (but see @ref pcieTiConfDiagCtrlReg_t::invLcrc)\r
1033    * On rev 2 hw, unsupported\r
1034    *\r
1035    * Field size: 1 bit\r
1036    */\r
1037   uint8_t invLcrc;\r
1038 } pcieDiagCtrlReg_t;\r
1039 /* @} */\r
1040 \r
1041 /**\r
1042  * @ingroup pcielld_reg_app_structures\r
1043  * @brief Specification of the Endian Register\r
1044  *\r
1045  * On rev 0 hw, this corresponds to ENDIAN\r
1046  * On rev 1 hw, unsupported\r
1047  * On rev 2 hw, unsupported\r
1048  *\r
1049  * @{\r
1050  */\r
1051 typedef struct pcieEndianReg_s {\r
1052   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1053   /**\r
1054    * @brief [rw] Endian mode.\r
1055    *\r
1056    * <TABLE>\r
1057    * <TR><TH>@ref mode</TH><TH>Endian Swap Mode</TH></TR>\r
1058    * <TR><TD>0</TD>        <TD>Swap on 1 byte</TD></TR>\r
1059    * <TR><TD>1</TD>        <TD>Swap on 2 bytes</TD></TR>\r
1060    * <TR><TD>2</TD>        <TD>Swap on 4 bytes</TD></TR>\r
1061    * <TR><TD>3</TD>        <TD>Swap on 8 bytes</TD></TR>\r
1062    * </TABLE>\r
1063    *\r
1064    * On rev 0 hw, this corresponds to ENDIAN_MODE\r
1065    * On rev 1 hw, unsupported\r
1066    * On rev 2 hw, unsupported\r
1067    *\r
1068    * Field size: 2 bits\r
1069    */\r
1070   uint8_t mode;\r
1071 } pcieEndianReg_t;\r
1072 /* @} */\r
1073 \r
1074 /**\r
1075  * @ingroup pcielld_reg_app_structures\r
1076  * @brief Specification of the Transaction Priority Register\r
1077  *\r
1078  * On rev 0 hw, this corresponds to PRIORITY\r
1079  * On rev 1 hw, unsupported\r
1080  * On rev 2 hw, unsupported\r
1081  *\r
1082  * @{\r
1083  */\r
1084 typedef struct pciePriorityReg_s {\r
1085   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1086   /**\r
1087    * @brief [rw] Master PRIV value on master transactions\r
1088    *\r
1089    * On rev 0 hw, this corresponds to MST_PRIV\r
1090    * On rev 1 hw, unsupported\r
1091    * On rev 2 hw, unsupported\r
1092    *\r
1093    * Field size: 1 bit\r
1094    */\r
1095   uint8_t mstPriv;\r
1096   /**\r
1097    * @brief [rw] Master PRIVID value on master transactions\r
1098    *\r
1099    * On rev 0 hw, this corresponds to MST_PRIVID\r
1100    * On rev 1 hw, unsupported\r
1101    * On rev 2 hw, unsupported\r
1102    *\r
1103    * Field size: 4 bits\r
1104    */\r
1105   uint8_t mstPrivID;\r
1106   /**\r
1107    * @brief [rw] Priority level for each inbound transaction on the\r
1108    * internal master port\r
1109    *\r
1110    * On rev 0 hw, this corresponds to MST_PRIORITY\r
1111    * On rev 1 hw, unsupported\r
1112    * On rev 2 hw, unsupported\r
1113    *\r
1114    * Field size: 3 bits\r
1115    */\r
1116   uint8_t mstPriority;\r
1117 } pciePriorityReg_t;\r
1118 /* @} */\r
1119 \r
1120 /**\r
1121  * @ingroup pcielld_reg_app_structures\r
1122  * @brief Specification of the End of Interrupt Register\r
1123  *\r
1124  * On rev 0 hw, this corresponds to IRQ_EOI\r
1125  * On rev 1 hw, unsupported (but see @ref pcieTiConfIrqEoiReg_t)\r
1126  * On rev 2 hw, this corresponds to IRQ_EOI\r
1127  *\r
1128  * @{\r
1129  */\r
1130 typedef struct pcieIrqEOIReg_s {\r
1131   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1132   /**\r
1133    * @brief [wo] EOI for interrupts.\r
1134    *\r
1135    * Write to indicate end-of-interrupt for the interrupt events.\r
1136    * Write 0 to mark EOI for INTA, 1 for INTB and so on.\r
1137    *\r
1138    * On rev 0 hw, this corresponds to EOI\r
1139    * On rev 1 hw, unsupported (but see @ref pcieTiConfIrqEoiReg_t::lineNumber)\r
1140    * On rev 2 hw, this corresponds to EOI\r
1141    *\r
1142    * Field size: 4 bits\r
1143    */\r
1144   uint8_t EOI;\r
1145 } pcieIrqEOIReg_t;\r
1146 /* @} */\r
1147 \r
1148 /**\r
1149  * @ingroup pcielld_reg_app_structures\r
1150  * @brief Specification of the MSI Interrupt IRQ Register\r
1151  *\r
1152  * On rev 0 hw, this corresponds to MSI_IRQ\r
1153  * On rev 1 hw, unsupported\r
1154  * On rev 2 hw, this corresponds to MMR_IRQ\r
1155  *\r
1156  * @{\r
1157  */\r
1158 typedef struct pcieMsiIrqReg_s {\r
1159   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1160   /**\r
1161    * @brief [rw] To generate MSI Interrupt 0, the EP should write 0x0000_0000 to this register.\r
1162    *\r
1163    * On rev 0 hw, this corresponds to MSI_IRQ\r
1164    * On rev 1 hw, unsupported\r
1165    * On rev 2 hw, this corresponds to MMR_IRQ\r
1166    *\r
1167    * Field size: 32 bits (rev 0) or 31 bits (rev 2)\r
1168    */\r
1169   uint32_t msiIrq;\r
1170 } pcieMsiIrqReg_t;\r
1171 /* @} */\r
1172 \r
1173 /**\r
1174  * @ingroup pcielld_reg_app_structures\r
1175  * @brief Specification of the Endpoint Interrupt Request Set Register\r
1176  *\r
1177  * On rev 0 hw, this corresponds to EP_IRQ_SET\r
1178  * On rev 1 hw, unsupported\r
1179  * On rev 2 hw, this corresponds to LEGACY_IRQ_SET\r
1180  *\r
1181  * @{\r
1182  */\r
1183 typedef struct pcieEpIrqSetReg_s {\r
1184   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1185   /**\r
1186    * @brief [rw] Write 1 to generate assert interrupt message\r
1187    *\r
1188    * If MSI is disabled, legacy interrupt assert message will\r
1189    * be generated. On read, a 1 indicates currently asserted interrupt.\r
1190    *\r
1191    * On rev 0 hw, this corresponds to EP_IRQ_SET\r
1192    * On rev 1 hw, unsupported\r
1193    * On rev 2 hw, this corresponds to LEGACY_IRQ_SET_0\r
1194    *\r
1195    * Field size: 1 bit\r
1196    */\r
1197   uint8_t epIrqSet;\r
1198 } pcieEpIrqSetReg_t;\r
1199 /* @} */\r
1200 \r
1201 /**\r
1202  * @ingroup pcielld_reg_app_structures\r
1203  * @brief Specification of the Endpoint Interrupt Request Clear Register\r
1204  *\r
1205  * On rev 0 hw, this corresponds to EP_IRQ_CLR\r
1206  * On rev 1 hw, unsupported\r
1207  * On rev 2 hw, this corresponds to LEGACY_IRQ_CLR\r
1208  *\r
1209  * @{\r
1210  */\r
1211 typedef struct pcieEpIrqClrReg_s {\r
1212   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1213   /**\r
1214    * @brief [rw] Write 1 to generate deassert interrupt message.\r
1215    *\r
1216    * If MSI is disabled, legacy interrupt deassert message will be generated.\r
1217    * On read, a 1 indicates currently asserted interrupt.\r
1218    *\r
1219    * On rev 0 hw, this corresponds to EP_IRQ_CLR\r
1220    * On rev 1 hw, unsupported\r
1221    * On rev 2 hw, this corresponds to LEGACY_IRQ_CLR_0\r
1222    *\r
1223    * Field size: 1 bit\r
1224    */\r
1225   uint8_t epIrqClr;\r
1226 } pcieEpIrqClrReg_t;\r
1227 /* @} */\r
1228 \r
1229 /**\r
1230  * @ingroup pcielld_reg_app_structures\r
1231  * @brief Specification of the Endpoint Interrupt status Register\r
1232  *\r
1233  * On rev 0 hw, this corresponds to EP_IRQ_STATUS\r
1234  * On rev 1 hw, unsupported\r
1235  * On rev 2 hw, this corresponds to LEGACY_IRQ_STATUS\r
1236  *\r
1237  * @{\r
1238  */\r
1239 typedef struct pcieEpIrqStatusReg_s {\r
1240   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1241   /**\r
1242    * @brief [rw] Indicates whether interrupt for function 0 is asserted or not\r
1243    *\r
1244    * On rev 0 hw, this corresponds to EP_IRQ_STATUS\r
1245    * On rev 1 hw, unsupported\r
1246    * On rev 2 hw, this corresponds to LEGACY_IRQ_STATUS_0\r
1247    *\r
1248    * Field size: 1 bit\r
1249    */\r
1250   uint8_t epIrqStatus;\r
1251 } pcieEpIrqStatusReg_t;\r
1252 /* @} */\r
1253 \r
1254 /**\r
1255  * @ingroup pcielld_reg_app_structures\r
1256  * @brief Specification of a General Purpose register\r
1257  *\r
1258  * On rev 0 hw, this corresponds to GPR# where # = 0..3\r
1259  * On rev 1 hw, unsupported\r
1260  * On rev 2 hw, this corresponds to GPR# where # = 0..3\r
1261  *\r
1262  * @{\r
1263  */\r
1264 typedef struct pcieGenPurposeReg_s {\r
1265   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1266   /**\r
1267    * @brief [rw] Gen Purpose register value\r
1268    *\r
1269    * On rev 0 hw, this corresponds to GENERIC# where # = 0..3\r
1270    * On rev 1 hw, unsupported\r
1271    * On rev 2 hw, this corresponds to GENERIC# where # = 0..3\r
1272    *\r
1273    * Field size: 32 bit\r
1274    */\r
1275   uint8_t genPurpose;\r
1276 } pcieGenPurposeReg_t;\r
1277 /* @} */\r
1278 \r
1279 /**\r
1280  * @ingroup pcielld_reg_app_structures\r
1281  * @brief Specification of the MSI Raw Interrupt Status Register Register\r
1282  *\r
1283  * On rev 0 hw, this corresponds to MSI#_IRQ_STATUS_RAW where # = 0..7\r
1284  * On rev 1 hw, unsupported (but similar to @ref pciePlconfMsiCtrlIntStatusReg_t)\r
1285  * On rev 2 hw, this corresponds to MMR#_IRQ_STATUS_RAW where # = 0..7\r
1286  *\r
1287  * @{\r
1288  */\r
1289 typedef struct pcieMsiIrqStatusRawReg_s {\r
1290   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1291   /**\r
1292    * @brief [rw] Each bit indicates raw status of MSI vectors (24, 16, 8, 0) associated with the bit\r
1293    *\r
1294    * Typically, writes to this register are only done for debug purposes.\r
1295    *\r
1296    * On rev 0 hw, this corresponds to MSI#_IRQ_STATUS_RAW where # = 0..7\r
1297    * On rev 1 hw, unsupported\r
1298    * On rev 2 hw, this corresponds to MMR#_IRQ_STATUS_RAW where # = 0..7\r
1299    *\r
1300    * Field size: 4 bits\r
1301    */\r
1302   uint8_t msiRawStatus;\r
1303 } pcieMsiIrqStatusRawReg_t;\r
1304 /* @} */\r
1305 \r
1306 \r
1307 /**\r
1308  * @ingroup pcielld_reg_app_structures\r
1309  * @brief Specification of the MSI Interrupt Enabled Status Register Register\r
1310  *\r
1311  * On rev 0 hw, this corresponds to MSI#_IRQ_STATUS where # = 0..7\r
1312  * On rev 1 hw, unsupported (but similar to @ref pciePlconfMsiCtrlIntStatusReg_t)\r
1313  * On rev 2 hw, this corresponds to MMR#_IRQ_STATUS where # = 0..7\r
1314  *\r
1315  * @{\r
1316  */\r
1317 typedef struct pcieMsiIrqStatusReg_s {\r
1318   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1319   /**\r
1320    * @brief [rw] Each bit indicates status of MSI vector (24, 16, 8, 0) associated with the bit\r
1321    *\r
1322    * On rev 0 hw, this corresponds to MSI#_IRQ_STATUS where # = 0..7\r
1323    * On rev 1 hw, unsupported\r
1324    * On rev 2 hw, this corresponds to MMR#_IRQ_STATUS where # = 0..7\r
1325    *\r
1326    * Field size: 4 bits\r
1327    */\r
1328   uint8_t msiIrqStatus;\r
1329 } pcieMsiIrqStatusReg_t;\r
1330 /* @} */\r
1331 \r
1332 /**\r
1333  * @ingroup pcielld_reg_app_structures\r
1334  * @brief Specification of the MSI Interrupt Enable Set Register\r
1335  *\r
1336  * On rev 0 hw, this corresponds to MSI#_IRQ_ENABLE_SET where # = 0..7\r
1337  * On rev 1 hw, unsupported (but similar to @ref pcieTiConfIrqEnableSetMsiReg_t)\r
1338  * On rev 2 hw, this corresponds to MMR#_IRQ_ENABLE_SET where # = 0..7\r
1339  *\r
1340  * @{\r
1341  */\r
1342 typedef struct pcieMsiIrqEnableSetReg_s {\r
1343   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1344   /**\r
1345    * @brief [rw] Each bit, when written to, enables the MSI interrupt (24, 16, 8, 0) associated with the bit\r
1346    *\r
1347    * On rev 0 hw, this corresponds to MSI#_IRQ_ENABLE_SET where # = 0..7\r
1348    * On rev 1 hw, unsupported\r
1349    * On rev 2 hw, this corresponds to MMR#_IRQ_ENABLE_SET where # = 0..7\r
1350    *\r
1351    * Field size: 4 bits\r
1352    */\r
1353   uint8_t msiIrqEnSet;\r
1354 } pcieMsiIrqEnableSetReg_t;\r
1355 /* @} */\r
1356 \r
1357 /**\r
1358  * @ingroup pcielld_reg_app_structures\r
1359  * @brief Specification of the MSI Interrupt Enable Clear Register\r
1360  *\r
1361  * On rev 0 hw, this corresponds to MSI#_IRQ_ENABLE_CLR where # = 0..7\r
1362  * On rev 1 hw, unsupported (but similar to @ref pcieTiConfIrqEnableClrMsiReg_t)\r
1363  * On rev 2 hw, this corresponds to MMR#_IRQ_ENABLE_CLR where # = 0..7\r
1364  *\r
1365  * @{\r
1366  */\r
1367 typedef struct pcieMsiIrqEnableClrReg_s {\r
1368   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1369   /**\r
1370    * @brief [rw] Each bit, when written to, disables the MSI interrupt (24, 16, 8, 0) associated with the bit\r
1371    *\r
1372    * On rev 0 hw, this corresponds to MSI#_IRQ_ENABLE_CLR where # = 0..7\r
1373    * On rev 1 hw, unsupported\r
1374    * On rev 2 hw, this corresponds to MMR#_IRQ_ENABLE_CLR where # = 0..7\r
1375    *\r
1376    * Field size: 4 bits\r
1377    */\r
1378   uint8_t msiIrqEnClr;\r
1379 } pcieMsiIrqEnableClrReg_t;\r
1380 /* @} */\r
1381 \r
1382 /**\r
1383  * @ingroup pcielld_reg_app_structures\r
1384  * @brief Specification of the Legacy Raw Interrupt Status Register\r
1385  *\r
1386  * On rev 0 hw, this corresponds to LEGACY_#_IRQ_STATUS_RAW where # = A..D (0-3)\r
1387  * On rev 1 hw, unsupported\r
1388  * On rev 2 hw, this corresponds to LEGACY_#_IRQ_STATUS_RAW where # = A..D (0-3)\r
1389  *\r
1390  * @{\r
1391  */\r
1392 typedef struct pcieLegacyIrqStatusRawReg_s {\r
1393   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1394   /**\r
1395    * @brief [rw] Legacy Interrupt Raw Status, RC mode only\r
1396    *\r
1397    * On rev 0 hw, this corresponds to INT_# where # = A..D\r
1398    * On rev 1 hw, unsupported\r
1399    * On rev 2 hw, this corresponds to INT_# where # = A..D\r
1400    *\r
1401    * Field size: 1 bit\r
1402    */\r
1403   uint8_t legacyRawStatus;\r
1404 } pcieLegacyIrqStatusRawReg_t;\r
1405 /* @} */\r
1406 \r
1407 \r
1408 /**\r
1409  * @ingroup pcielld_reg_app_structures\r
1410  * @brief Specification of the Legacy Interrupt Enabled Status Register\r
1411  *\r
1412  * On rev 0 hw, this corresponds to LEGACY_#_IRQ_STATUS where # = A..D (0-3)\r
1413  * On rev 1 hw, unsupported\r
1414  * On rev 2 hw, this corresponds to LEGACY_#_IRQ_STATUS where # = A..D (0-3)\r
1415  *\r
1416  * @{\r
1417  */\r
1418 typedef struct pcieLegacyIrqStatusReg_s {\r
1419   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1420   /**\r
1421    * @brief [rw] Legacy Interrupt status\r
1422    *\r
1423    * Set when interrupt is active. Write one to clear the interrupt event.\r
1424    * RC mode only.\r
1425    *\r
1426    * On rev 0 hw, this corresponds to INT_# where # = A..D\r
1427    * On rev 1 hw, unsupported\r
1428    * On rev 2 hw, this corresponds to INT_# where # = A..D\r
1429    *\r
1430    * Field size: 1 bit\r
1431    */\r
1432   uint8_t legacyIrqStatus;\r
1433 } pcieLegacyIrqStatusReg_t;\r
1434 /* @} */\r
1435 \r
1436 /**\r
1437  * @ingroup pcielld_reg_app_structures\r
1438  * @brief Specification of the Legacy Interrupt Enable Set Register\r
1439  *\r
1440  * On rev 0 hw, this corresponds to LEGACY_#_IRQ_ENABLE_SET where # = A..D (0-3)\r
1441  * On rev 1 hw, unsupported\r
1442  * On rev 2 hw, this corresponds to LEGACY_#_IRQ_ENABLE_SET where # = A..D (0-3)\r
1443  *\r
1444  * @{\r
1445  */\r
1446 typedef struct pcieLegacyIrqEnableSetReg_s {\r
1447   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1448   /**\r
1449    * @brief [rw] 0: has no effect; 1: enables the interrupt\r
1450    *\r
1451    * On rev 0 hw, this corresponds to INT_# where # = A..D\r
1452    * On rev 1 hw, unsupported\r
1453    * On rev 2 hw, this corresponds to INT_# where # = A..D\r
1454    *\r
1455    * Field size: 1 bit\r
1456    */\r
1457   uint8_t legacyIrqEnSet;\r
1458 } pcieLegacyIrqEnableSetReg_t;\r
1459 /* @} */\r
1460 \r
1461 /**\r
1462  * @ingroup pcielld_reg_app_structures\r
1463  * @brief Specification of the Legacy Interrupt Enable Clear Register\r
1464  *\r
1465  * On rev 0 hw, this corresponds to LEGACY_#_IRQ_ENABLE_CLR where # = A..D (0-3)\r
1466  * On rev 1 hw, unsupported\r
1467  * On rev 2 hw, this corresponds to LEGACY_#_IRQ_ENABLE_CLR where # = A..D (0-3)\r
1468  *\r
1469  * @{\r
1470  */\r
1471 typedef struct pcieLegacyIrqEnableClrReg_s {\r
1472   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1473   /**\r
1474    * @brief [rw] 0 has no effect; 1 disables the interrupt\r
1475    *\r
1476    * On rev 0 hw, this corresponds to INT_# where # = A..D\r
1477    * On rev 1 hw, unsupported\r
1478    * On rev 2 hw, this corresponds to INT_# where # = A..D\r
1479    *\r
1480    * Field size: 1 bit\r
1481    */\r
1482   uint8_t legacyIrqEnClr;\r
1483 } pcieLegacyIrqEnableClrReg_t;\r
1484 /* @} */\r
1485 \r
1486 /**\r
1487  * @ingroup pcielld_reg_app_structures\r
1488  * @brief Specification of the Raw ERR Interrupt Status Register\r
1489  *\r
1490  * On rev 0 hw, this corresponds to ERR_IRQ_STATUS_RAW\r
1491  * On rev 1 hw, unsupported\r
1492  * On rev 2 hw, this corresponds to ERR_IRQ_STATUS_RAW\r
1493  *\r
1494  * @{\r
1495  */\r
1496 typedef struct pcieErrIrqStatusRawReg_s {\r
1497   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1498   /**\r
1499    * @brief [rw] ECRC error raw status\r
1500    *\r
1501    * On rev 0 hw, this corresponds to ERR_AER\r
1502    * On rev 1 hw, unsupported\r
1503    * On rev 2 hw, this corresponds to ERR_AER_RAW\r
1504    *\r
1505    * Field size: 1 bit\r
1506    */\r
1507   uint8_t errAer;\r
1508   /**\r
1509    * @brief [rw] AXI tag lookup fatal error raw status\r
1510    *\r
1511    * On rev 0 hw, this corresponds to ERR_AXI\r
1512    * On rev 1 hw, unsupported\r
1513    * On rev 2 hw, unsupported\r
1514    *\r
1515    * Field size: 1 bit\r
1516    */\r
1517   uint8_t errAxi;\r
1518   /**\r
1519    * @brief [rw] correctable error raw status\r
1520    *\r
1521    * On rev 0 hw, this corresponds to ERR_CORR\r
1522    * On rev 1 hw, unsupported\r
1523    * On rev 2 hw, this corresponds to ERR_CORR_RAW\r
1524    *\r
1525    * Field size: 1 bit\r
1526    */\r
1527   uint8_t errCorr;\r
1528   /**\r
1529    * @brief [rw] nonfatal error raw status\r
1530    *\r
1531    * On rev 0 hw, this corresponds to ERR_NONFATAL\r
1532    * On rev 1 hw, unsupported\r
1533    * On rev 2 hw, this corresponds to ERR_NONFATAL_RAW\r
1534    *\r
1535    * Field size: 1 bit\r
1536    */\r
1537   uint8_t errNonFatal;\r
1538   /**\r
1539    * @brief [rw] fatal error raw status\r
1540    *\r
1541    * On rev 0 hw, this corresponds to ERR_FATAL\r
1542    * On rev 1 hw, unsupported\r
1543    * On rev 2 hw, this corresponds to ERR_FATAL_RAW\r
1544    *\r
1545    * Field size: 1 bit\r
1546    */\r
1547   uint8_t errFatal;\r
1548   /**\r
1549    * @brief [rw] system error (fatal, nonfatal, correctable error) raw status\r
1550    *\r
1551    * On rev 0 hw, this corresponds to ERR_SYS\r
1552    * On rev 1 hw, unsupported\r
1553    * On rev 2 hw, this corresponds to ERR_SYS_RAW\r
1554    *\r
1555    * Field size: 1 bit\r
1556    */\r
1557   uint8_t errSys;\r
1558 } pcieErrIrqStatusRawReg_t;\r
1559 /* @} */\r
1560 \r
1561 /**\r
1562  * @ingroup pcielld_reg_app_structures\r
1563  * @brief Specification of the ERR Interrupt Enabled Status Register\r
1564  *\r
1565  * On rev 0 hw, this corresponds to ERR_IRQ_STATUS\r
1566  * On rev 1 hw, unsupported\r
1567  * On rev 2 hw, this corresponds to ERR_IRQ_STATUS\r
1568  *\r
1569  * @{\r
1570  */\r
1571 typedef struct pcieErrIrqStatusReg_s {\r
1572   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1573   /**\r
1574    * @brief [rw] ECRC error status\r
1575    *\r
1576    * On rev 0 hw, this corresponds to ERR_AER\r
1577    * On rev 1 hw, unsupported\r
1578    * On rev 2 hw, this corresponds to ERR_AER\r
1579    *\r
1580    * Field size: 1 bit\r
1581    */\r
1582   uint8_t errAer;\r
1583   /**\r
1584    * @brief [rw] AXI tag lookup fatal error status\r
1585    *\r
1586    * On rev 0 hw, this corresponds to ERR_AXI\r
1587    * On rev 1 hw, unsupported\r
1588    * On rev 2 hw, unsupported\r
1589    *\r
1590    * Field size: 1 bit\r
1591    */\r
1592   uint8_t errAxi;\r
1593   /**\r
1594    * @brief [rw] correctable error status\r
1595    *\r
1596    * On rev 0 hw, this corresponds to ERR_CORR\r
1597    * On rev 1 hw, unsupported\r
1598    * On rev 2 hw, this corresponds to ERR_CORR\r
1599    *\r
1600    * Field size: 1 bit\r
1601    */\r
1602   uint8_t errCorr;\r
1603   /**\r
1604    * @brief [rw] nonfatal error status\r
1605    *\r
1606    * On rev 0 hw, this corresponds to ERR_NONFATAL\r
1607    * On rev 1 hw, unsupported\r
1608    * On rev 2 hw, this corresponds to ERR_NONFATAL\r
1609    *\r
1610    * Field size: 1 bit\r
1611    */\r
1612   uint8_t errNonFatal;\r
1613   /**\r
1614    * @brief [rw] fatal error status\r
1615    *\r
1616    * On rev 0 hw, this corresponds to ERR_FATAL\r
1617    * On rev 1 hw, unsupported\r
1618    * On rev 2 hw, this corresponds to ERR_FATAL\r
1619    *\r
1620    * Field size: 1 bit\r
1621    */\r
1622   uint8_t errFatal;\r
1623   /**\r
1624    * @brief [rw] system error (fatal, nonfatal, correctable error) status\r
1625    *\r
1626    * On rev 0 hw, this corresponds to ERR_SYS\r
1627    * On rev 1 hw, unsupported\r
1628    * On rev 2 hw, this corresponds to ERR_SYS\r
1629    *\r
1630    * Field size: 1 bit\r
1631    */\r
1632   uint8_t errSys;\r
1633 } pcieErrIrqStatusReg_t;\r
1634 /* @} */\r
1635 \r
1636 /**\r
1637  * @ingroup pcielld_reg_app_structures\r
1638  * @brief Specification of the ERR Interrupt Enable Set Register\r
1639  *\r
1640  * On rev 0 hw, this corresponds to ERR_IRQ_ENABLE_SET\r
1641  * On rev 1 hw, unsupported\r
1642  * On rev 2 hw, this corresponds to ERR_IRQ_ENABLE_SET\r
1643  *\r
1644  * @{\r
1645  */\r
1646 typedef struct pcieErrIrqEnableSetReg_s {\r
1647   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1648   /**\r
1649    * @brief [rw] set to enable the ECRC error interrupt\r
1650    *\r
1651    * On rev 0 hw, this corresponds to ERR_AER\r
1652    * On rev 1 hw, unsupported\r
1653    * On rev 2 hw, this corresponds to ERR_AER\r
1654    *\r
1655    * Field size: 1 bit\r
1656    */\r
1657   uint8_t errAer;\r
1658   /**\r
1659    * @brief [rw] set to enable the AXI tag lookup fatal error interrupt\r
1660    *\r
1661    * On rev 0 hw, this corresponds to ERR_AXI\r
1662    * On rev 1 hw, unsupported\r
1663    * On rev 2 hw, unsupported\r
1664    *\r
1665    * Field size: 1 bit\r
1666    */\r
1667   uint8_t errAxi;\r
1668   /**\r
1669    * @brief [rw] set to enable the correctable error interrupt\r
1670    *\r
1671    * On rev 0 hw, this corresponds to ERR_CORR\r
1672    * On rev 1 hw, unsupported\r
1673    * On rev 2 hw, this corresponds to ERR_CORR_EN_SET\r
1674    *\r
1675    * Field size: 1 bit\r
1676    */\r
1677   uint8_t errCorr;\r
1678   /**\r
1679    * @brief [rw] set to enable the nonfatal error interrupt\r
1680    *\r
1681    * On rev 0 hw, this corresponds to ERR_NONFATAL\r
1682    * On rev 1 hw, unsupported\r
1683    * On rev 2 hw, this corresponds to ERR_NONFATAL_EN_SET\r
1684    *\r
1685    * Field size: 1 bit\r
1686    */\r
1687   uint8_t errNonFatal;\r
1688   /**\r
1689    * @brief [rw] set to enable the fatal error interrupt\r
1690    *\r
1691    * On rev 0 hw, this corresponds to ERR_FATAL\r
1692    * On rev 1 hw, unsupported\r
1693    * On rev 2 hw, this corresponds to ERR_FATAL_EN_SET\r
1694    *\r
1695    * Field size: 1 bit\r
1696    */\r
1697   uint8_t errFatal;\r
1698   /**\r
1699    * @brief [rw] set to enable the system error (fatal, nonfatal, correctable error) interrupt\r
1700    *\r
1701    * On rev 0 hw, this corresponds to ERR_SYS\r
1702    * On rev 1 hw, unsupported\r
1703    * On rev 2 hw, this corresponds to ERR_SYS_EN_SET\r
1704    *\r
1705    * Field size: 1 bit\r
1706    */\r
1707   uint8_t errSys;\r
1708 } pcieErrIrqEnableSetReg_t;\r
1709 /* @} */\r
1710 \r
1711 /**\r
1712  * @ingroup pcielld_reg_app_structures\r
1713  * @brief Specification of the ERR Interrupt Enable Clear Register\r
1714  *\r
1715  * On rev 0 hw, this corresponds to ERR_IRQ_ENABLE_CLR\r
1716  * On rev 1 hw, unsupported\r
1717  * On rev 2 hw, this corresponds to ERR_IRQ_ENABLE_CLR\r
1718  *\r
1719  * @{\r
1720  */\r
1721 typedef struct pcieErrIrqEnableClrReg_s {\r
1722   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1723   /**\r
1724    * @brief [rw] set to disable the ECRC error interrupt\r
1725    *\r
1726    * On rev 0 hw, this corresponds to ERR_AER\r
1727    * On rev 1 hw, unsupported\r
1728    * On rev 2 hw, this corresponds to ERR_AER_EN_CLR\r
1729    *\r
1730    * Field size: 1 bit\r
1731    */\r
1732   uint8_t errAer;\r
1733   /**\r
1734    * @brief [rw] set to disable the AXI tag lookup fatal error interrupt\r
1735    *\r
1736    * On rev 0 hw, this corresponds to ERR_AXI\r
1737    * On rev 1 hw, unsupported\r
1738    * On rev 2 hw, unsupported\r
1739    *\r
1740    * Field size: 1 bit\r
1741    */\r
1742   uint8_t errAxi;\r
1743   /**\r
1744    * @brief [rw] set to disable the correctable error interrupt\r
1745    *\r
1746    * On rev 0 hw, this corresponds to ERR_CORR\r
1747    * On rev 1 hw, unsupported\r
1748    * On rev 2 hw, this corresponds to ERR_CORR_EN_CLR\r
1749    *\r
1750    * Field size: 1 bit\r
1751    */\r
1752   uint8_t errCorr;\r
1753   /**\r
1754    * @brief [rw] set to disable the nonfatal error interrupt\r
1755    *\r
1756    * On rev 0 hw, this corresponds to ERR_NONFATAL\r
1757    * On rev 1 hw, unsupported\r
1758    * On rev 2 hw, this corresponds to ERR_NONFATAL_EN_CLR\r
1759    *\r
1760    * Field size: 1 bit\r
1761    */\r
1762   uint8_t errNonFatal;\r
1763   /**\r
1764    * @brief [rw] set to disable the fatal error interrupt\r
1765    *\r
1766    * On rev 0 hw, this corresponds to ERR_FATAL\r
1767    * On rev 1 hw, unsupported\r
1768    * On rev 2 hw, this corresponds to ERR_FATAL_EN_CLR\r
1769    *\r
1770    * Field size: 1 bit\r
1771    */\r
1772   uint8_t errFatal;\r
1773   /**\r
1774    * @brief [rw] set to disable the system error (fatal, nonfatal, correctable error) interrupt\r
1775    *\r
1776    * On rev 0 hw, this corresponds to ERR_SYS\r
1777    * On rev 1 hw, unsupported\r
1778    * On rev 2 hw, this corresponds to ERR_SYS_EN_CLR\r
1779    *\r
1780    * Field size: 1 bit\r
1781    */\r
1782   uint8_t errSys;\r
1783 } pcieErrIrqEnableClrReg_t;\r
1784 /* @} */\r
1785 \r
1786 /**\r
1787  * @ingroup pcielld_reg_app_structures\r
1788  * @brief Specification of the Raw Power Management and Reset Interrupt Status Register\r
1789  *\r
1790  * On rev 0 hw, this corresponds to PMRST_IRQ_STATUS_RAW\r
1791  * On rev 1 hw, unsupported\r
1792  * On rev 2 hw, this corresponds to PMRST_IRQ_STATUS_RAW\r
1793  *\r
1794  * @{\r
1795  */\r
1796 typedef struct pciePmRstIrqStatusRawReg_s {\r
1797   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1798   /**\r
1799    * @brief [rw] Link Request Reset interrupt raw status\r
1800    *\r
1801    * On rev 0 hw, this corresponds to LNK_RST_REQ\r
1802    * On rev 1 hw, unsupported\r
1803    * On rev 2 hw, this corresponds to LNK_RST_REQ_RAW\r
1804    *\r
1805    * Field size: 1 bit\r
1806    */\r
1807   uint8_t linkRstReq;\r
1808   /**\r
1809    * @brief [rw] Power management PME message received interrupt raw status\r
1810    *\r
1811    * On rev 0 hw, this corresponds to PM_PME\r
1812    * On rev 1 hw, unsupported\r
1813    * On rev 2 hw, this corresponds to PM_PME_RAW\r
1814    *\r
1815    * Field size: 1 bit\r
1816    */\r
1817   uint8_t pmPme;\r
1818   /**\r
1819    * @brief [rw] Power mangement ACK received interrupt raw status\r
1820    *\r
1821    * On rev 0 hw, this corresponds to PM_TO_ACK\r
1822    * On rev 1 hw, unsupported\r
1823    * On rev 2 hw, this corresponds to PM_TO_ACK_RAW\r
1824    *\r
1825    * Field size: 1 bit\r
1826    */\r
1827   uint8_t pmToAck;\r
1828   /**\r
1829    * @brief [rw] Power management turnoff messages received raw status\r
1830    *\r
1831    * On rev 0 hw, this corresponds to PM_TURNOFF\r
1832    * On rev 1 hw, unsupported\r
1833    * On rev 2 hw, this corresponds to PM_TURNOFF_RAW\r
1834    *\r
1835    * Field size: 1 bit\r
1836    */\r
1837   uint8_t pmTurnoff;\r
1838 } pciePmRstIrqStatusRawReg_t;\r
1839 /* @} */\r
1840 \r
1841 /**\r
1842  * @ingroup pcielld_reg_app_structures\r
1843  * @brief Specification of the Power Management and Reset Interrupt Enabled Status Register\r
1844  *\r
1845  * On rev 0 hw, this corresponds to PMRST_IRQ_STATUS\r
1846  * On rev 1 hw, unsupported\r
1847  * On rev 2 hw, this corresponds to PMRST_IRQ_STATUS\r
1848  *\r
1849  * @{\r
1850  */\r
1851 typedef struct pciePmRstIrqStatusReg_s {\r
1852   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1853   /**\r
1854    * @brief [rw] Link Request Reset interrupt status\r
1855    *\r
1856    * On rev 0 hw, this corresponds to LNK_RST_REQ\r
1857    * On rev 1 hw, unsupported\r
1858    * On rev 2 hw, this corresponds to LNK_RST_REQ\r
1859    *\r
1860    * Field size: 1 bit\r
1861    */\r
1862   uint8_t linkRstReq;\r
1863   /**\r
1864    * @brief [rw] Power management PME message received interrupt status\r
1865    *\r
1866    * On rev 0 hw, this corresponds to PM_PME\r
1867    * On rev 1 hw, unsupported\r
1868    * On rev 2 hw, this corresponds to PM_PME\r
1869    *\r
1870    * Field size: 1 bit\r
1871    */\r
1872   uint8_t pmPme;\r
1873   /**\r
1874    * @brief [rw] Power mangement ACK received interrupt status\r
1875    *\r
1876    * On rev 0 hw, this corresponds to PM_TO_ACK\r
1877    * On rev 1 hw, unsupported\r
1878    * On rev 2 hw, this corresponds to PM_TO_ACK\r
1879    *\r
1880    * Field size: 1 bit\r
1881    */\r
1882   uint8_t pmToAck;\r
1883   /**\r
1884    * @brief [rw] Power management turnoff messages received status\r
1885    *\r
1886    * On rev 0 hw, this corresponds to PM_TURNOFF\r
1887    * On rev 1 hw, unsupported\r
1888    * On rev 2 hw, this corresponds to PM_TURNOFF\r
1889    *\r
1890    * Field size: 1 bit\r
1891    */\r
1892   uint8_t pmTurnoff;\r
1893 } pciePmRstIrqStatusReg_t;\r
1894 /* @} */\r
1895 \r
1896 /**\r
1897  * @ingroup pcielld_reg_app_structures\r
1898  * @brief Specification of the Power Management and Reset Interrupt Enable Set Register\r
1899  *\r
1900  * On rev 0 hw, this corresponds to PMRST_ENABLE_SET\r
1901  * On rev 1 hw, unsupported\r
1902  * On rev 2 hw, this corresponds to PMRST_IRQ_ENABLE_SET\r
1903  *\r
1904  * @{\r
1905  */\r
1906 typedef struct pciePmRstIrqEnableSetReg_s {\r
1907   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1908   /**\r
1909    * @brief [rw] set to enable the Link Request Reset interrupt\r
1910    *\r
1911    * On rev 0 hw, this corresponds to LNK_RST_REQ\r
1912    * On rev 1 hw, unsupported\r
1913    * On rev 2 hw, this corresponds to LNK_RST_REQ_EN_SET\r
1914    *\r
1915    * Field size: 1 bit\r
1916    */\r
1917   uint8_t linkRstReq;\r
1918   /**\r
1919    * @brief [rw] set to enable the Power management PME message received interrupt\r
1920    *\r
1921    * On rev 0 hw, this corresponds to PM_PME\r
1922    * On rev 1 hw, unsupported\r
1923    * On rev 2 hw, this corresponds to PM_PME_EN_SET\r
1924    *\r
1925    * Field size: 1 bit\r
1926    */\r
1927   uint8_t pmPme;\r
1928   /**\r
1929    * @brief [rw] set to enable the Power mangement ACK received interrupt\r
1930    *\r
1931    * On rev 0 hw, this corresponds to PM_TO_ACK\r
1932    * On rev 1 hw, unsupported\r
1933    * On rev 2 hw, this corresponds to PM_TO_ACK_EN_SET\r
1934    *\r
1935    * Field size: 1 bit\r
1936    */\r
1937   uint8_t pmToAck;\r
1938   /**\r
1939    * @brief [rw] set to enable the Power management turnoff messages received interrupt\r
1940    *\r
1941    * On rev 0 hw, this corresponds to PM_TURNOFF\r
1942    * On rev 1 hw, unsupported\r
1943    * On rev 2 hw, this corresponds to PM_TURNOFF_EN_SET\r
1944    *\r
1945    * Field size: 1 bit\r
1946    */\r
1947   uint8_t pmTurnoff;\r
1948 } pciePmRstIrqEnableSetReg_t;\r
1949 /* @} */\r
1950 \r
1951 /**\r
1952  * @ingroup pcielld_reg_app_structures\r
1953  * @brief Specification of the Power Management and Reset Interrupt Enable Clear Register\r
1954  *\r
1955  * On rev 0 hw, this corresponds to PMRST_ENABLE_CLR\r
1956  * On rev 1 hw, unsupported\r
1957  * On rev 2 hw, this corresponds to PMRST_IRQ_ENABLE_CLR\r
1958  *\r
1959  * @{\r
1960  */\r
1961 typedef struct pciePmRstIrqEnableClrReg_s {\r
1962   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
1963   /**\r
1964    * @brief [rw] set to disable the Link Request Reset interrupt\r
1965    *\r
1966    * On rev 0 hw, this corresponds to LNK_RST_REQ\r
1967    * On rev 1 hw, unsupported\r
1968    * On rev 2 hw, this corresponds to LNK_RST_REQ_EN_CLR\r
1969    *\r
1970    * Field size: 1 bit\r
1971    */\r
1972   uint8_t linkRstReq;\r
1973   /**\r
1974    * @brief [rw] set to disable the Power management PME message received interrupt\r
1975    *\r
1976    * On rev 0 hw, this corresponds to PM_PME\r
1977    * On rev 1 hw, unsupported\r
1978    * On rev 2 hw, this corresponds to PM_PME_EN_CLR\r
1979    *\r
1980    * Field size: 1 bit\r
1981    */\r
1982   uint8_t pmPme;\r
1983   /**\r
1984    * @brief [rw] set to disable the Power mangement ACK received interrupt\r
1985    *\r
1986    * On rev 0 hw, this corresponds to PM_TO_ACK\r
1987    * On rev 1 hw, unsupported\r
1988    * On rev 2 hw, this corresponds to PM_TO_ACK_EN_CLR\r
1989    *\r
1990    * Field size: 1 bit\r
1991    */\r
1992   uint8_t pmToAck;\r
1993   /**\r
1994    * @brief [rw] set to disable the Power management turnoff messages received interrupt\r
1995    *\r
1996    * On rev 0 hw, this corresponds to PM_TURNOFF\r
1997    * On rev 1 hw, unsupported\r
1998    * On rev 2 hw, this corresponds to PM_TURNOFF_EN_CLR\r
1999    *\r
2000    * Field size: 1 bit\r
2001    */\r
2002   uint8_t pmTurnoff;\r
2003 } pciePmRstIrqEnableClrReg_t;\r
2004 /* @} */\r
2005 \r
2006 /**\r
2007  * @ingroup pcielld_reg_app_structures\r
2008  * @brief Specification of the Precision Time Measurement Raw Status Register\r
2009  *\r
2010  * On rev 0 hw, unsupported\r
2011  * On rev 1 hw, unsupported\r
2012  * On rev 2 hw, this corresponds to PTM_IRQ_STATUS_RAW\r
2013  *\r
2014  * @{\r
2015  */\r
2016 typedef struct pciePtmIrqStatusRawReg_s {\r
2017   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2018   /**\r
2019    * @brief [rw] Link Request Reset interrupt raw status\r
2020    *\r
2021    * On rev 0 hw, unsupported\r
2022    * On rev 1 hw, unsupported\r
2023    * On rev 2 hw, this corresponds to PTM_CLK_UPDATED_RAW\r
2024    *\r
2025    * Field size: 1 bit\r
2026    */\r
2027   uint8_t ptmClkUpdated;\r
2028 } pciePtmIrqStatusRawReg_t;\r
2029 /* @} */\r
2030 \r
2031 /**\r
2032  * @ingroup pcielld_reg_app_structures\r
2033  * @brief Specification of the Precision Time Measurement Status Register\r
2034  *\r
2035  * On rev 0 hw, unsupported\r
2036  * On rev 1 hw, unsupported\r
2037  * On rev 2 hw, this corresponds to PTM_IRQ_STATUS\r
2038  *\r
2039  * @{\r
2040  */\r
2041 typedef struct pciePtmIrqStatusReg_s {\r
2042   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2043   /**\r
2044    * @brief [rw] Link Request Reset interrupt raw status\r
2045    *\r
2046    * On rev 0 hw, unsupported\r
2047    * On rev 1 hw, unsupported\r
2048    * On rev 2 hw, this corresponds to PTM_CLK_UPDATED\r
2049    *\r
2050    * Field size: 1 bit\r
2051    */\r
2052   uint8_t ptmClkUpdated;\r
2053 } pciePtmIrqStatusReg_t;\r
2054 /* @} */\r
2055 \r
2056 /**\r
2057  * @ingroup pcielld_reg_app_structures\r
2058  * @brief Specification of the Precision Time Measurement Raw Status Register\r
2059  *\r
2060  * On rev 0 hw, unsupported\r
2061  * On rev 1 hw, unsupported\r
2062  * On rev 2 hw, this corresponds to PTM_IRQ_STATUS_ENABLE_SET\r
2063  *\r
2064  * @{\r
2065  */\r
2066 typedef struct pciePtmIrqEnableSetReg_s {\r
2067   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2068   /**\r
2069    * @brief [rw] Link Request Reset interrupt raw status\r
2070    *\r
2071    * On rev 0 hw, unsupported\r
2072    * On rev 1 hw, unsupported\r
2073    * On rev 2 hw, this corresponds to PTM_CLK_UPDATED_EN_SET\r
2074    *\r
2075    * Field size: 1 bit\r
2076    */\r
2077   uint8_t ptmClkUpdated;\r
2078 } pciePtmIrqEnableSetReg_t;\r
2079 /* @} */\r
2080 \r
2081 /**\r
2082  * @ingroup pcielld_reg_app_structures\r
2083  * @brief Specification of the Precision Time Measurement Raw Status Register\r
2084  *\r
2085  * On rev 0 hw, unsupported\r
2086  * On rev 1 hw, unsupported\r
2087  * On rev 2 hw, this corresponds to PTM_IRQ_STATUS_ENABLE_CLR\r
2088  *\r
2089  * @{\r
2090  */\r
2091 typedef struct pciePtmIrqEnableClrReg_s {\r
2092   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2093   /**\r
2094    * @brief [rw] Link Request Reset interrupt raw status\r
2095    *\r
2096    * On rev 0 hw, unsupported\r
2097    * On rev 1 hw, unsupported\r
2098    * On rev 2 hw, this corresponds to PTM_CLK_UPDATED_EN_CLR\r
2099    *\r
2100    * Field size: 1 bit\r
2101    */\r
2102   uint8_t ptmClkUpdated;\r
2103 } pciePtmIrqEnableClrReg_t;\r
2104 /* @} */\r
2105 \r
2106 /**\r
2107  * @ingroup pcielld_reg_app_structures\r
2108  * @brief Specification of the Outbound Translation Region Offset Low and Index Register\r
2109  *\r
2110  * On rev 0 hw, this corresponds to OB_OFFSET_INDEXn where n = 0..7\r
2111  * On rev 1 hw, unsupported (but similar to iATU\r
2112  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2113  * On rev 2 hw, unsupported (but similar to iATU\r
2114  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2115  *\r
2116  * @{\r
2117  */\r
2118 typedef struct pcieObOffsetLoReg_s {\r
2119   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2120   /**\r
2121    * @brief [rw] Offset bits for the translation region\r
2122    *\r
2123    * On rev 0 hw, this corresponds to OB_OFFSETn_LO (n = 0..7)\r
2124    * On rev 1 hw, unsupported\r
2125    * On rev 2 hw, unsupported\r
2126    *\r
2127    * Field size: 12 bits\r
2128    */\r
2129   uint16_t offsetLo;\r
2130   /**\r
2131    * @brief [rw] Enable translation region\r
2132    *\r
2133    * On rev 0 hw, this corresponds to OB_ENABLEn (n = 0..7)\r
2134    * On rev 1 hw, unsupported\r
2135    * On rev 2 hw, unsupported\r
2136    *\r
2137    * Field size: 1 bit\r
2138    */\r
2139   uint8_t enable;\r
2140 } pcieObOffsetLoReg_t;\r
2141 /* @} */\r
2142 \r
2143 /**\r
2144  * @ingroup pcielld_reg_app_structures\r
2145  * @brief Specification of the Outbound Translation Region Offset High Register\r
2146  *\r
2147  * On rev 0 hw, this corresponds to OB_OFFSETn_HI where n = 0..7\r
2148  * On rev 1 hw, unsupported (but similar to iATU\r
2149  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2150  * On rev 2 hw, unsupported (but similar to iATU\r
2151  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2152  *\r
2153  * @{\r
2154  */\r
2155 typedef struct pcieObOffsetHiReg_s {\r
2156   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2157   /**\r
2158    * @brief [rw] Offset high bits [63:32] for translation region\r
2159    *\r
2160    * On rev 0 hw, this corresponds to OB_OFFSETn_HI (n = 0..7)\r
2161    * On rev 1 hw, unsupported\r
2162    * On rev 2 hw, unsupported\r
2163    *\r
2164    * Field size: 32 bits\r
2165    */\r
2166   uint32_t offsetHi;\r
2167 } pcieObOffsetHiReg_t;\r
2168 /* @} */\r
2169 \r
2170 /**\r
2171  * @ingroup pcielld_reg_app_structures\r
2172  * @brief Specification of the Inbound Translation BAR Match Register\r
2173  *\r
2174  * On rev 0 hw, this corresponds to IB_BARn where n = 0..3\r
2175  * On rev 1 hw, unsupported (but similar to iATU\r
2176  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2177  * On rev 2 hw, unsupported (but similar to iATU\r
2178  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2179  *\r
2180  * @{\r
2181  */\r
2182 typedef struct pcieIbBarReg_s {\r
2183   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2184   /**\r
2185    * @brief [rw] BAR number to match for inbound translation region\r
2186    *\r
2187    * On rev 0 hw, this corresponds to IB_BARn (n = 0..3)\r
2188    * On rev 1 hw, unsupported\r
2189    * On rev 2 hw, unsupported\r
2190    *\r
2191    * Field size: 3 bits\r
2192    */\r
2193   uint8_t ibBar;\r
2194 } pcieIbBarReg_t;\r
2195 /* @} */\r
2196 \r
2197 \r
2198 /**\r
2199  * @ingroup pcielld_reg_app_structures\r
2200  * @brief Specification of the Inbound Translation Start Address Low Register\r
2201  *\r
2202  * On rev 0 hw, this corresponds to IB_STARTn_LO where n = 0..3\r
2203  * On rev 1 hw, unsupported (but similar to iATU\r
2204  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2205  * On rev 2 hw, unsupported (but similar to iATU\r
2206  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2207  *\r
2208  * @{\r
2209  */\r
2210 typedef struct pcieIbStartLoReg_s {\r
2211   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2212   /**\r
2213    * @brief [rw] Start address bits [31:8] for inbound translation region\r
2214    *\r
2215    * On rev 0 hw, this corresponds to IB_STARTn_LO (n = 0..3)\r
2216    * On rev 1 hw, unsupported\r
2217    * On rev 2 hw, unsupported\r
2218    *\r
2219    * Field size: 24 bits\r
2220    */\r
2221   uint32_t ibStartLo;\r
2222 } pcieIbStartLoReg_t;\r
2223 /* @} */\r
2224 \r
2225 /**\r
2226  * @ingroup pcielld_reg_app_structures\r
2227  * @brief Specification of the Inbound Translation Start Address High Register\r
2228  *\r
2229  * On rev 0 hw, this corresponds to IB_STARTn_LO where n = 0..3\r
2230  * On rev 1 hw, unsupported (but similar to iATU\r
2231  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2232  * On rev 2 hw, unsupported (but similar to iATU\r
2233  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2234  * @{\r
2235  */\r
2236 typedef struct pcieIbStartHiReg_s {\r
2237   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2238   /**\r
2239    * @brief [rw] Start address high bits [63:32] for inbound translation region\r
2240    *\r
2241    * On rev 0 hw, this corresponds to IB_STARTn_HI (n = 0..3)\r
2242    * On rev 1 hw, unsupported\r
2243    * On rev 2 hw, unsupported\r
2244    *\r
2245    * Field size: 32 bits\r
2246    */\r
2247   uint32_t ibStartHi;\r
2248 } pcieIbStartHiReg_t;\r
2249 /* @} */\r
2250 \r
2251 /**\r
2252  * @ingroup pcielld_reg_app_structures\r
2253  * @brief Specification of the Inbound Translation Address Offset Register\r
2254  *\r
2255  * On rev 0 hw, this corresponds to IB_OFFSETn where n = 0..3\r
2256  * On rev 1 hw, unsupported (but similar to iATU\r
2257  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2258  * On rev 2 hw, unsupported (but similar to iATU\r
2259  *              starting at @ref pciePlconfIatuIndexReg_t)\r
2260  *\r
2261  * @{\r
2262  */\r
2263 typedef struct pcieIbOffsetReg_s {\r
2264   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2265   /**\r
2266    * @brief [rw] Offset address bits [31:8] for inbound translation region\r
2267    *\r
2268    * On rev 0 hw, this corresponds to IB_OFFSETn (n = 0..3)\r
2269    * On rev 1 hw, unsupported\r
2270    * On rev 2 hw, unsupported\r
2271    *\r
2272    * Field size: 24 bits\r
2273    */\r
2274   uint32_t ibOffset;\r
2275 } pcieIbOffsetReg_t;\r
2276 /* @} */\r
2277 \r
2278 /**\r
2279  * @ingroup pcielld_reg_app_structures\r
2280  * @brief Specification of the PCS Configuration 0 Register\r
2281  *\r
2282  * On rev 0 hw, this corresponds to PCS_CFG0\r
2283  * On rev 1 hw, unsupported\r
2284  * On rev 2 hw, unsupported\r
2285  *\r
2286  * @{\r
2287  */\r
2288 typedef struct pciePcsCfg0Reg_s {\r
2289   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2290   /**\r
2291    * @brief [rw] Receiver lock/sync control.\r
2292    *\r
2293    * On rev 0 hw, this corresponds to PCS_SYNC\r
2294    * On rev 1 hw, unsupported\r
2295    * On rev 2 hw, unsupported\r
2296    *\r
2297    * Field size: 5 bits\r
2298    */\r
2299   uint8_t pcsSync;\r
2300   /**\r
2301    * @brief [rw] Receiver initialization holdoff control.\r
2302    *\r
2303    * On rev 0 hw, this corresponds to PCS_HOLDOFF\r
2304    * On rev 1 hw, unsupported\r
2305    * On rev 2 hw, unsupported\r
2306    *\r
2307    * Field size: 8 bits\r
2308    */\r
2309   uint8_t pcsHoldOff;\r
2310   /**\r
2311    * @brief [rw] Rate change delay.\r
2312    *\r
2313    * On rev 0 hw, this corresponds to PCS_RC_DELAY\r
2314    * On rev 1 hw, unsupported\r
2315    * On rev 2 hw, unsupported\r
2316    *\r
2317    * Field size: 2 bits\r
2318    */\r
2319   uint8_t pcsRCDelay;\r
2320   /**\r
2321    * @brief [rw] Detection delay.\r
2322    *\r
2323    * On rev 0 hw, this corresponds to PCS_DET_DELAY\r
2324    * On rev 1 hw, unsupported\r
2325    * On rev 2 hw, unsupported\r
2326    *\r
2327    * Field size: 4 bits\r
2328    */\r
2329   uint8_t pcsDetDelay;\r
2330   /**\r
2331    * @brief [rw] Enable short times for debug purposes.\r
2332    *\r
2333    * On rev 0 hw, this corresponds to PCS_SHRT_TM\r
2334    * On rev 1 hw, unsupported\r
2335    * On rev 2 hw, unsupported\r
2336    *\r
2337    * Field size: 1 bit\r
2338    */\r
2339   uint8_t pcsShrtTM;\r
2340   /**\r
2341    * @brief [rw] Enable PIPE Spec 1.86 for phystatus behavior.\r
2342    *\r
2343    * On rev 0 hw, this corresponds to PCS_STAT186\r
2344    * On rev 1 hw, unsupported\r
2345    * On rev 2 hw, unsupported\r
2346    *\r
2347    * Field size: 1 bit\r
2348    */\r
2349   uint8_t pcsStat186;\r
2350   /**\r
2351    * @brief [rw] Fed term output to 3'b100 during reset.\r
2352    *\r
2353    * On rev 0 hw, this corresponds to PCS_FIX_TERM\r
2354    * On rev 1 hw, unsupported\r
2355    * On rev 2 hw, unsupported\r
2356    *\r
2357    * Field size: 1 bit\r
2358    */\r
2359   uint8_t pcsFixTerm;\r
2360   /**\r
2361    * @brief [rw] Fix std output to 2'b10.\r
2362    *\r
2363    * On rev 0 hw, this corresponds to PCS_FIX_STD\r
2364    * On rev 1 hw, unsupported\r
2365    * On rev 2 hw, unsupported\r
2366    *\r
2367    * Field size: 1 bit\r
2368    */\r
2369   uint8_t pcsFixStd;\r
2370   /**\r
2371    * @brief [rw] Deassert enidl during L2 state.\r
2372    *\r
2373    * On rev 0 hw, this corresponds to PCS_L2_ENIDL_OFF\r
2374    * On rev 1 hw, unsupported\r
2375    * On rev 2 hw, unsupported\r
2376    *\r
2377    * Field size: 1 bit\r
2378    */\r
2379   uint8_t pcsL2EnidlOff;\r
2380   /**\r
2381    * @brief [rw] Deassert Rx enable in L0s state.\r
2382    *\r
2383    * On rev 0 hw, this corresponds to PCS_L0S_RX_OFF\r
2384    * On rev 1 hw, unsupported\r
2385    * On rev 2 hw, unsupported\r
2386    *\r
2387    * Field size: 1 bit\r
2388    */\r
2389   uint8_t pcsL2L0SRxOff;\r
2390   /**\r
2391    * @brief [rw] RX and TX on during reset and TX also on in P1 state.\r
2392    *\r
2393    * On rev 0 hw, this corresponds to PCS_RXTX_ON\r
2394    * On rev 1 hw, unsupported\r
2395    * On rev 2 hw, unsupported\r
2396    *\r
2397    * Field size: 1 bit\r
2398    */\r
2399   uint8_t pcsRxTxOn;\r
2400   /**\r
2401    * @brief [rw] RX and TX on during reset.\r
2402    *\r
2403    * On rev 0 hw, this corresponds to PCS_RXTX_RST\r
2404    * On rev 1 hw, unsupported\r
2405    * On rev 2 hw, unsupported\r
2406    *\r
2407    * Field size: 1 bit\r
2408    */\r
2409   uint8_t pcsRxTxRst;\r
2410 } pciePcsCfg0Reg_t;\r
2411 /* @} */\r
2412 \r
2413 /**\r
2414  * @ingroup pcielld_reg_app_structures\r
2415  * @brief Specification of the PCS Configuration 1 Register\r
2416  *\r
2417  * On rev 0 hw, this corresponds to PCS_CFG1\r
2418  * On rev 1 hw, unsupported\r
2419  * On rev 2 hw, unsupported\r
2420  *\r
2421  * @{\r
2422  */\r
2423 typedef struct pciePcsCfg1Reg_s {\r
2424   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2425   /**\r
2426    * @brief [rw] Error bit enable.\r
2427    *\r
2428    * On rev 0 hw, this corresponds to PCS_ERR_BIT\r
2429    * On rev 1 hw, unsupported\r
2430    * On rev 2 hw, unsupported\r
2431    *\r
2432    * Field size: 10 bits\r
2433    */\r
2434   uint16_t pcsErrBit;\r
2435   /**\r
2436    * @brief [rw] Error lane enable\r
2437    *\r
2438    * On rev 0 hw, this corresponds to PCS_ERR_LN\r
2439    * On rev 1 hw, unsupported\r
2440    * On rev 2 hw, unsupported\r
2441    *\r
2442    * Field size: 2 bits\r
2443    */\r
2444   uint8_t pcsErrLn;\r
2445   /**\r
2446    * @brief [rw] Error injection mode\r
2447    *\r
2448    * On rev 0 hw, this corresponds to PCS_ERR_MODE\r
2449    * On rev 1 hw, unsupported\r
2450    * On rev 2 hw, unsupported\r
2451    *\r
2452    * Field size: 2 bits\r
2453    */\r
2454   uint8_t pcsErrMode;\r
2455 } pciePcsCfg1Reg_t;\r
2456 /* @} */\r
2457 \r
2458 /**\r
2459  * @ingroup pcielld_reg_app_structures\r
2460  * @brief Specification of the PCS Status Register\r
2461  *\r
2462  * On rev 0 hw, this corresponds to PCS_STATUS\r
2463  * On rev 1 hw, unsupported\r
2464  * On rev 2 hw, unsupported\r
2465  *\r
2466  * @{\r
2467  */\r
2468 typedef struct pciePcsStatusReg_s {\r
2469   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2470   /**\r
2471    * @brief [ro] PCS RTL Revision.\r
2472    *\r
2473    * On rev 0 hw, this corresponds to PCS_REV\r
2474    * On rev 1 hw, unsupported\r
2475    * On rev 2 hw, unsupported\r
2476    *\r
2477    * Field size: 3 bits\r
2478    */\r
2479   uint8_t pcsRev;\r
2480   /**\r
2481    * @brief [ro] PCS lanes enabled status.\r
2482    *\r
2483    * On rev 0 hw, this corresponds to PCS_LN_EN\r
2484    * On rev 1 hw, unsupported\r
2485    * On rev 2 hw, unsupported\r
2486    *\r
2487    * Field size: 2 bits\r
2488    */\r
2489   uint8_t pcsLnEn;\r
2490   /**\r
2491    * @brief [ro] PCS transmitters enabled status.\r
2492    *\r
2493    * On rev 0 hw, this corresponds to PCS_TX_EN\r
2494    * On rev 1 hw, unsupported\r
2495    * On rev 2 hw, unsupported\r
2496    *\r
2497    * Field size: 2 bits\r
2498    */\r
2499   uint8_t pcsTxEn;\r
2500   /**\r
2501    * @brief [ro] PCS receivers enabled status.\r
2502    *\r
2503    * On rev 0 hw, this corresponds to PCS_RX_EN\r
2504    * On rev 1 hw, unsupported\r
2505    * On rev 2 hw, unsupported\r
2506    *\r
2507    * Field size: 2 bits\r
2508    */\r
2509   uint8_t pcsRxEn;\r
2510 } pciePcsStatusReg_t;\r
2511 /* @} */\r
2512 \r
2513 /**\r
2514  * @ingroup pcielld_reg_app_structures\r
2515  * @brief Specification of the SERDES config 0 Register\r
2516  *\r
2517  * On rev 0 hw, this corresponds to SERDES_CFG0\r
2518  * On rev 1 hw, unsupported\r
2519  * On rev 2 hw, unsupported\r
2520  *\r
2521  * @{\r
2522  */\r
2523 typedef struct pcieSerdesCfg0Reg_s {\r
2524   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2525   /**\r
2526    * @brief [rw] Enable Tx loopback. Set both bits high to enable.\r
2527    *\r
2528    * On rev 0 hw, this corresponds to TX_LOOPBACK\r
2529    * On rev 1 hw, unsupported\r
2530    * On rev 2 hw, unsupported\r
2531    *\r
2532    * Field size: 2 bits\r
2533    */\r
2534   uint8_t txLoopback;\r
2535   /**\r
2536    * @brief [rw] Master mode for synchronization.\r
2537    *\r
2538    * On rev 0 hw, this corresponds to TX_MSYNC\r
2539    * On rev 1 hw, unsupported\r
2540    * On rev 2 hw, unsupported\r
2541    *\r
2542    * Field size: 1 bit\r
2543    */\r
2544   uint8_t txMsync;\r
2545   /**\r
2546    * @brief [rw] Enable common mode adjustment.\r
2547    *\r
2548    * On rev 0 hw, this corresponds to TX_CM\r
2549    * On rev 1 hw, unsupported\r
2550    * On rev 2 hw, unsupported\r
2551    *\r
2552    * Field size: 1 bit\r
2553    */\r
2554   uint8_t txCm;\r
2555   /**\r
2556    * @brief [rw] Invert Tx pair polarity.\r
2557    *\r
2558    * On rev 0 hw, this corresponds to TX_INVPAIR\r
2559    * On rev 1 hw, unsupported\r
2560    * On rev 2 hw, unsupported\r
2561    *\r
2562    * Field size: 1 bit\r
2563    */\r
2564   uint8_t txInvpair;\r
2565   /**\r
2566    * @brief [rw] Enable Rx loopback. Set both bits to high to enable loopback.\r
2567    *\r
2568    * On rev 0 hw, this corresponds to RX_LOOPBACK\r
2569    * On rev 1 hw, unsupported\r
2570    * On rev 2 hw, unsupported\r
2571    *\r
2572    * Field size: 2 bits\r
2573    */\r
2574   uint8_t rxLoopback;\r
2575   /**\r
2576    * @brief [rw] Enable Rx offset compensation.\r
2577    *\r
2578    * On rev 0 hw, this corresponds to RX_ENOC\r
2579    * On rev 1 hw, unsupported\r
2580    * On rev 2 hw, unsupported\r
2581    *\r
2582    * Field size: 1 bit\r
2583    */\r
2584   uint8_t rxEnoc;\r
2585   /**\r
2586    * @brief [rw] Enable Rx adaptive equalization.\r
2587    *\r
2588    * On rev 0 hw, this corresponds to RX_EQ\r
2589    * On rev 1 hw, unsupported\r
2590    * On rev 2 hw, unsupported\r
2591    *\r
2592    * Field size: 4 bits\r
2593    */\r
2594   uint8_t rxEq;\r
2595   /**\r
2596    * @brief [rw] Enable Rx clock data recovery.\r
2597    *\r
2598    * On rev 0 hw, this corresponds to RX_CDR\r
2599    * On rev 1 hw, unsupported\r
2600    * On rev 2 hw, unsupported\r
2601    *\r
2602    * Field size: 3 bits\r
2603    */\r
2604   uint8_t rxCdr;\r
2605   /**\r
2606    * @brief [rw] Enable Rx loss of signal detection.\r
2607    *\r
2608    * On rev 0 hw, this corresponds to RX_LOS\r
2609    * On rev 1 hw, unsupported\r
2610    * On rev 2 hw, unsupported\r
2611    *\r
2612    * Field size: 3 bits\r
2613    */\r
2614   uint8_t rxLos;\r
2615   /**\r
2616    * @brief [rw] Enable Rx symbol alignment.\r
2617    *\r
2618    * On rev 0 hw, this corresponds to RX_ALIGN\r
2619    * On rev 1 hw, unsupported\r
2620    * On rev 2 hw, unsupported\r
2621    *\r
2622    * Field size: 2 bits\r
2623    */\r
2624   uint8_t rxAlign;\r
2625   /**\r
2626    * @brief [rw] Invert Rx pair polarity.\r
2627    *\r
2628    * On rev 0 hw, this corresponds to RX_INVPAIR\r
2629    * On rev 1 hw, unsupported\r
2630    * On rev 2 hw, unsupported\r
2631    *\r
2632    * Field size: 1 bit\r
2633    */\r
2634   uint8_t rxInvpair;\r
2635 } pcieSerdesCfg0Reg_t;\r
2636 /* @} */\r
2637 \r
2638 /**\r
2639  * @ingroup pcielld_reg_app_structures\r
2640  * @brief Specification of the SERDES config 1 Register\r
2641  *\r
2642  * On rev 0 hw, this corresponds to SERDES_CFG1\r
2643  * On rev 1 hw, unsupported\r
2644  * On rev 2 hw, unsupported\r
2645  *\r
2646  * @{\r
2647  */\r
2648 typedef struct pcieSerdesCfg1Reg_s {\r
2649   uint32_t raw; /**<  [ro] Raw image of register on read; actual value on write */\r
2650   /**\r
2651    * @brief [rw] Enable Tx loopback. Set both bits high to enable.\r
2652    *\r
2653    * On rev 0 hw, this corresponds to TX_LOOPBACK\r
2654    * On rev 1 hw, unsupported\r
2655    * On rev 2 hw, unsupported\r
2656    *\r
2657    * Field size: 2 bits\r
2658    */\r
2659   uint8_t txLoopback;\r
2660   /**\r
2661    * @brief [rw] Master mode for synchronization.\r
2662    *\r
2663    * On rev 0 hw, this corresponds to TX_MSYNC\r
2664    * On rev 1 hw, unsupported\r
2665    * On rev 2 hw, unsupported\r
2666    *\r
2667    * Field size: 1 bit\r
2668    */\r
2669   uint8_t txMsync;\r
2670   /**\r
2671    * @brief [rw] Enable common mode adjustment.\r
2672    *\r
2673    * On rev 0 hw, this corresponds to TX_CM\r
2674    * On rev 1 hw, unsupported\r
2675    * On rev 2 hw, unsupported\r
2676    *\r
2677    * Field size: 1 bit\r
2678    */\r
2679   uint8_t txCm;\r
2680   /**\r
2681    * @brief [rw] Invert Tx pair polarity.\r
2682    *\r
2683    * On rev 0 hw, this corresponds to TX_INVPAIR\r
2684    * On rev 1 hw, unsupported\r
2685    * On rev 2 hw, unsupported\r
2686    *\r
2687    * Field size: 1 bit\r
2688    */\r
2689   uint8_t txInvpair;\r
2690   /**\r
2691    * @brief [rw] Enable Rx loopback. Set both bits to high to enable loopback.\r
2692    *\r
2693    * On rev 0 hw, this corresponds to RX_LOOPBACK\r
2694    * On rev 1 hw, unsupported\r
2695    * On rev 2 hw, unsupported\r
2696    *\r
2697    * Field size: 2 bits\r
2698    */\r
2699   uint8_t rxLoopback;\r
2700   /**\r
2701    * @brief [rw] Enable Rx offset compensation.\r
2702    *\r
2703    * On rev 0 hw, this corresponds to RX_ENOC\r
2704    * On rev 1 hw, unsupported\r
2705    * On rev 2 hw, unsupported\r
2706    *\r
2707    * Field size: 1 bit\r
2708    */\r
2709   uint8_t rxEnoc;\r
2710   /**\r
2711    * @brief [rw] Enable Rx adaptive equalization.\r
2712    *\r
2713    * On rev 0 hw, this corresponds to RX_EQ\r
2714    * On rev 1 hw, unsupported\r
2715    * On rev 2 hw, unsupported\r
2716    *\r
2717    * Field size: 4 bits\r
2718    */\r
2719   uint8_t rxEq;\r
2720   /**\r
2721    * @brief [rw] Enable Rx clock data recovery.\r
2722    *\r
2723    * On rev 0 hw, this corresponds to RX_CDR\r
2724    * On rev 1 hw, unsupported\r
2725    * On rev 2 hw, unsupported\r
2726    *\r
2727    * Field size: 3 bits\r
2728    */\r
2729   uint8_t rxCdr;\r
2730   /**\r
2731    * @brief [rw] Enable Rx loss of signal detection.\r
2732    *\r
2733    * On rev 0 hw, this corresponds to RX_LOS\r
2734    * On rev 1 hw, unsupported\r
2735    * On rev 2 hw, unsupported\r
2736    *\r
2737    * Field size: 3 bits\r
2738    */\r
2739   uint8_t rxLos;\r
2740   /**\r
2741    * @brief [rw] Enable Rx symbol alignment.\r
2742    *\r
2743    * On rev 0 hw, this corresponds to RX_ALIGN\r
2744    * On rev 1 hw, unsupported\r
2745    * On rev 2 hw, unsupported\r
2746    *\r
2747    * Field size: 2 bits\r
2748    */\r
2749   uint8_t rxAlign;\r
2750   /**\r
2751    * @brief [rw] Invert Rx pair polarity.\r
2752    *\r
2753    * On rev 0 hw, this corresponds to RX_INVPAIR\r
2754    * On rev 1 hw, unsupported\r
2755    * On rev 2 hw, unsupported\r
2756    *\r
2757    * Field size: 1 bit\r
2758    */\r
2759   uint8_t rxInvpair;\r
2760 } pcieSerdesCfg1Reg_t;\r
2761 /* @} */\r
2762 \r
2763 \r
2764 \r
2765 /*****************************************************************************\r
2766  **********  PCIe LOCAL/REMOTE CONFIG TYPE 0 and TYPE 1 REGISTERS ************\r
2767  **********        Registers that are common to both Types        ************\r
2768  ****************************************************************************/\r
2769 \r
2770 /**\r
2771  * @ingroup pcielld_reg_cfg_com_structures\r
2772  * @brief Specification of the Vendor Device ID Register\r
2773  *\r
2774  * On rev 0 hw, this corresponds to VENDOR_DEVICE_ID\r
2775  * On rev 1 hw, this corresponds to DEVICE_VENDORID\r
2776  * On rev 2 hw, this corresponds to DEVICE_ID_VENDOR_ID_REG and TYPE1_DEV_ID_VEND_ID_REG\r
2777  *\r
2778  * @{\r
2779  */\r
2780 typedef struct pcieVndDevIdReg_s {\r
2781   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2782   /**\r
2783    * @brief [rw] Device ID\r
2784    *\r
2785    * On rev 0 hw, this corresponds to DEVICE_ID\r
2786    * On rev 1 hw, this corresponds to DEVICEID\r
2787    * On rev 2 hw, this corresponds to PCI_TYPE0_DEVICE_ID or DEVICE_ID_VENDOR_ID_REG\r
2788    *\r
2789    * Field size: 16 bits\r
2790    */\r
2791   uint16_t devId;\r
2792   /**\r
2793    * @brief [rw] Vendor ID\r
2794    *\r
2795    * On rev 0 hw, this corresponds to VENDOR_ID\r
2796    * On rev 1 hw, this corresponds to VENDORID\r
2797    * On rev 2 hw, this corresponds to PCI_TYPE0_VENDOR_ID and VENDOR_ID\r
2798    *\r
2799    * Field size: 16 bits\r
2800    */\r
2801   uint16_t vndId;\r
2802 } pcieVndDevIdReg_t;\r
2803 /* @} */\r
2804 \r
2805 \r
2806 /**\r
2807  * @ingroup pcielld_reg_cfg_com_structures\r
2808  * @brief Specification of the Status Command Register\r
2809  *\r
2810  * On rev 0 hw, this corresponds to STATUS_COMMAND\r
2811  * On rev 1 hw, this corresponds to STATUS_COMMAND_REGISTER\r
2812  * On rev 2 hw, this corresponds to STATUS_COMMAND_REG and TYPE1_STATUS_COMMAND_REG\r
2813  *\r
2814  * @{\r
2815  */\r
2816 typedef struct pcieStatusCmdReg_s {\r
2817   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
2818   /**\r
2819    * @brief [rw] parity\r
2820    *\r
2821    * Set if received a poisoned TLP\r
2822    *\r
2823    * On rev 0 hw, this corresponds to PARITY_ERROR\r
2824    * On rev 1 hw, this corresponds to DETECT_PARERR\r
2825    * On rev 2 hw, this corresponds to DETECTED_PARITY_ERR\r
2826    *\r
2827    * Field size: 1 bit\r
2828    */\r
2829   uint8_t parity;\r
2830   /**\r
2831    * @brief [rw] sys error\r
2832    *\r
2833    * Set if function sends an ERR_FATAL or ERR_NONFATAL message and\r
2834    * @ref serrEn bit is set\r
2835    *\r
2836    * On rev 0 hw, this corresponds to SIG_SYS_ERROR\r
2837    * On rev 1 hw, this corresponds to SIGNAL_SYSERR\r
2838    * On rev 2 hw, this corresponds to SIGNALED_SYS_ERR\r
2839    *\r
2840    * Field size: 1 bit\r
2841    */\r
2842   uint8_t sysError;\r
2843   /**\r
2844    * @brief [rw] mst abort\r
2845    *\r
2846    * Set when a requester receives a completion with unsupported request\r
2847    * completion status\r
2848    *\r
2849    * On rev 0 hw, this corresponds to RX_MST_ABORT\r
2850    * On rev 1 hw, this corresponds to RCVD_MASTERABORT\r
2851    * On rev 2 hw, this corresponds to RCVD_MASTER_ABORT\r
2852    *\r
2853    * Field size: 1 bit\r
2854    */\r
2855   uint8_t mstAbort;\r
2856   /**\r
2857    * @brief [rw] tgt abort\r
2858    *\r
2859    * Set when a requester receives a completion with completer abort status.\r
2860    *\r
2861    * On rev 0 hw, this corresponds to RX_TGT_ABORT\r
2862    * On rev 1 hw, this corresponds to RCVD_TRGTABORT\r
2863    * On rev 2 hw, this corresponds to RCVD_TARGET_ABORT\r
2864    *\r
2865    * Field size: 1 bit\r
2866    */\r
2867   uint8_t tgtAbort;\r
2868   /**\r
2869    * @brief [rw] sig tgt abort\r
2870    *\r
2871    * Set when a function acting as a completer terminates a request by issuing\r
2872    * completer abort completion status to the requester.\r
2873    *\r
2874    * On rev 0 hw, this corresponds to SIG_TGT_ABORT\r
2875    * On rev 1 hw, this corresponds to SIGNAL_TRGTABORT\r
2876    * On rev 2 hw, this corresponds to SIGNALED_TARGET_ABORT\r
2877    *\r
2878    * Field size: 1 bit\r
2879    */\r
2880   uint8_t sigTgtAbort;\r
2881   /**\r
2882    * @brief [ro] DevSel Timing\r
2883    *\r
2884    * Hardwired to 0 for PCIExpress.  Only defined on rev 1 hw version.\r
2885    *\r
2886    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
2887    *\r
2888    * On rev 0 hw, unsupported\r
2889    * On rev 1 hw, this corresponds to DEVSEL_TIME\r
2890    * On rev 2 hw, this corresponds to DEV_SEL_TIMING\r
2891    *\r
2892    * Field size: 2 bits\r
2893    */\r
2894   uint8_t devSelTime;\r
2895   /**\r
2896    * @brief [rw] par error\r
2897    *\r
2898    * This bit is set by a requester if the @ref parError bit is set\r
2899    * in its Command register and either the condition that the requester\r
2900    * receives a poisoned completion or the condition that the\r
2901    * requester poisons a write request is true.\r
2902    *\r
2903    * On rev 0 hw, this corresponds to DAT_PAR_ERRROR\r
2904    * On rev 1 hw, this corresponds to MASTERDATA_PARERR\r
2905    * On rev 2 hw, this corresponds to MASTER_DPE\r
2906    *\r
2907    * Field size: 1 bit\r
2908    */\r
2909   uint8_t parError;\r
2910   /**\r
2911    * @brief [ro] Back to Back Capable\r
2912    *\r
2913    * Hardwired to 0 for PCIExpress.  Only defined on rev 1 hw version.\r
2914    *\r
2915    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
2916    *\r
2917    * On rev 0 hw, unsupported\r
2918    * On rev 1 hw, this corresponds to FAST_B2B\r
2919    * On rev 2 hw, this corresponds to FAST_B2B_CAP\r
2920    *\r
2921    * Field size: 1 bit\r
2922    */\r
2923   uint8_t fastB2B;\r
2924   /**\r
2925    * @brief [ro] 66MHz Capable\r
2926    *\r
2927    * Hardwired to 0 for PCIExpress.  Only defined on rev 1 hw version.\r
2928    *\r
2929    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
2930    *\r
2931    * On rev 0 hw, unsupported\r
2932    * On rev 1 hw, this corresponds to C66MHZ_CAP\r
2933    * On rev 2 hw, this corresponds to FAST_66MHZ_CAP\r
2934    *\r
2935    * Field size: 1 bit\r
2936    */\r
2937   uint8_t c66MhzCap;\r
2938   /**\r
2939    * @brief [ro] cap list\r
2940    *\r
2941    * For PCIe, this field must be set to 1.\r
2942    *\r
2943    * On rev 0 hw, this corresponds to CAP_LIST\r
2944    * On rev 1 hw, this corresponds to CAP_LIST\r
2945    * On rev 2 hw, this corresponds to CAP_LIST\r
2946    *\r
2947    * Field size: 1 bit\r
2948    */\r
2949   uint8_t capList;\r
2950   /**\r
2951    * @brief [rw] stat\r
2952    *\r
2953    * Indicates that the function has received an interrupt.\r
2954    *\r
2955    * On rev 0 hw, this corresponds to INT_STAT\r
2956    * On rev 1 hw, this corresponds to INTX_STATUS\r
2957    * On rev 2 hw, this corresponds to INT_STATUS\r
2958    *\r
2959    * Field size: 1 bit\r
2960    */\r
2961   uint8_t stat;\r
2962   /**\r
2963    * @brief [ro] dis\r
2964    *\r
2965    * Setting this bit disables generation of INTx messages.\r
2966    *\r
2967    * On rev 0 hw, this corresponds to INTX_DIS\r
2968    * On rev 1 hw, this corresponds to INTX_ASSER_DIS\r
2969    * On rev 2 hw, this corresponds to PCI_TYPE0_INT_EN and INT_EN\r
2970    *\r
2971    * Field size: 1 bit\r
2972    */\r
2973   uint8_t dis;\r
2974   /**\r
2975    * @brief [rw] serr en\r
2976    *\r
2977    * When set, it enables generation of the appropriate PCI Express error\r
2978    * messages to the Root Complex.\r
2979    *\r
2980    * On rev 0 hw, this corresponds to SERR_EN\r
2981    * On rev 1 hw, this corresponds to SERR_EN\r
2982    * On rev 2 hw, this corresponds to PCI_TYPE0_SERREN and SERREN\r
2983    *\r
2984    * Field size: 1 bit\r
2985    */\r
2986   uint8_t serrEn;\r
2987   /**\r
2988    * @brief [ro] Bit hardwired to 0 for PCIExpress\r
2989    *\r
2990    * Hardwired to 0 for PCIExpress.  Only defined on rev 1/2 hw version.\r
2991    *\r
2992    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
2993    *\r
2994    * On rev 0 hw, unsupported\r
2995    * On rev 1 hw, this corresponds to IDSEL_CTRL\r
2996    * On rev 2 hw, this corresponds to PCI_TYPE_IDSEL_STEPPING and IDSEL\r
2997    *\r
2998    * Field size: 1 bit\r
2999    */\r
3000   uint8_t idselCtrl;\r
3001   /**\r
3002    * @brief [rw] resp\r
3003    *\r
3004    * This bit controls whether or not the device responds to detected\r
3005    * parity errors (poisoned TLP). This error is typically reported as an\r
3006    * unsupported request and may also result in a non-fatal error\r
3007    * message if @ref serrEn = 1. If this bit is set, the PCIESS will respond\r
3008    * normally to parity errors. If this bit is cleared, the PCIESS\r
3009    * will ignore detected parity errors.\r
3010    *\r
3011    * On rev 0 hw, this corresponds to PAR_ERR_RESP\r
3012    * On rev 1 hw, this corresponds to PARITYERRRESP\r
3013    * On rev 2 hw, this corresponds to PCI_TYPE0_PARITY_ERR_EN and PERREN\r
3014    *\r
3015    * Field size: 1 bit\r
3016    */\r
3017   uint8_t resp;\r
3018   /**\r
3019    * @brief [ro] Bit hardwired to 0 for PCIExpress\r
3020    *\r
3021    * Hardwired to 0 for PCIExpress.  Only defined on rev 1/2 hw version.\r
3022    *\r
3023    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
3024    *\r
3025    * On rev 0 hw, unsupported\r
3026    * On rev 1 hw, this corresponds to VGA_SNOOP\r
3027    * On rev 2 hw, this corresponds to PCI_TYPE_VGA_PALETTE_SNOOP and VGAPS\r
3028    *\r
3029    * Field size: 1 bit\r
3030    */\r
3031   uint8_t vgaSnoop;\r
3032   /**\r
3033    * @brief [ro] Bit hardwired to 0 for PCIExpress\r
3034    *\r
3035    * Hardwired to 0 for PCIExpress.  Only defined on rev 1/2 hw version.\r
3036    *\r
3037    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
3038    *\r
3039    * On rev 0 hw, unsupported\r
3040    * On rev 1 hw, this corresponds to MEMWR_INVA\r
3041    * On rev 2 hw, this corresponds to PCI_TYPE_MWI_ENABLE / MWI_EN\r
3042    *\r
3043    * Field size: 1 bit\r
3044    */\r
3045   uint8_t memWrInva;\r
3046   /**\r
3047    * @brief [ro] Bit hardwired to 0 for PCIExpress\r
3048    *\r
3049    * Hardwired to 0 for PCIExpress.  Only defined on rev 1/2 hw version.\r
3050    *\r
3051    * Forced to 0 on rev 0 hw read; ignored on rev 0 hw write.\r
3052    *\r
3053    * On rev 0 hw, unsupported\r
3054    * On rev 1 hw, this corresponds to SPEC_CYCLE_EN\r
3055    * On rev 2 hw, this corresponds to PCI_TYPE0_SPECIAL_CYCLE_OPERATION and SCO\r
3056    *\r
3057    * Field size: 1 bit\r
3058    */\r
3059   uint8_t specCycleEn;\r
3060   /**\r
3061    * @brief [rw] enables mastership of the bus\r
3062    *\r
3063    * On rev 0 hw, this corresponds to BUS_MS\r
3064    * On rev 1 hw, this corresponds to BUSMASTER_EN\r
3065    * On rev 2 hw, this corresponds to PCI_TYPE0_BUS_MASTER_EN and BME\r
3066    *\r
3067    * Field size: 1 bit\r
3068    */\r
3069   uint8_t busMs;\r
3070   /**\r
3071    * @brief [rw] enables device to respond to memory access\r
3072    *\r
3073    * On rev 0 hw, this corresponds to MEM_SP\r
3074    * On rev 1 hw, this corresponds to MEM_SPACE_EN\r
3075    * On rev 2 hw, this corresponds to PCI_TYPE0_MEM_SPACE_EN and MSE\r
3076    *\r
3077    * Field size: 1 bit\r
3078    */\r
3079   uint8_t memSp;\r
3080   /**\r
3081    * @brief [rw] enables device to respond to IO access\r
3082    *\r
3083    * This functionality is not supported in PCIESS and therefore\r
3084    * this bit is set to 0.\r
3085    *\r
3086    * On rev 0 hw, this corresponds to IO_SP\r
3087    * On rev 1 hw, this corresponds to IO_SPACE_EN\r
3088    * On rev 2 hw, this corresponds to PCI_TYPE0_IO_EN / IO_EN\r
3089    *\r
3090    * Field size: 1 bit\r
3091    */\r
3092   uint8_t ioSp;\r
3093 } pcieStatusCmdReg_t;\r
3094 /* @} */\r
3095 \r
3096 \r
3097 /**\r
3098  * @ingroup pcielld_reg_cfg_com_structures\r
3099  * @brief Specification of the Class code and revision ID Register\r
3100  *\r
3101  * On rev 0 hw, this corresponds to CLASSCODE_REVID\r
3102  * On rev 1 hw, this corresponds to CLASSCODE_REVISIONID\r
3103  * On rev 2 hw, this corresponds to CLASS_CODE_REVISION_ID\r
3104  *\r
3105  * @{\r
3106  */\r
3107 typedef struct pcieRevIdReg_s {\r
3108   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3109   /**\r
3110    * @brief [ro] Class Code\r
3111    *\r
3112    * On rev 0 hw, the register presents this as 24 bits.\r
3113    * On rev 1/2 hw, the register presents as 3 8bit fields, but they will all be\r
3114    * packed/unpacked from classCode for backward/forward compatibility.\r
3115    *\r
3116    * On rev 0 hw, this corresponds to CLASSCODE\r
3117    * On rev 1 hw, this corresponds to BASE_CLS_CD, SUBCLS_CD and PROG_IF_CODE\r
3118    * On rev 2 hw, this corresponds to BASE_CLASS_CODE, SUBCLASS_CODE and PROGRAM_INTERFACE\r
3119    *\r
3120    * Field size: 24 bits\r
3121    */\r
3122   uint32_t classCode;\r
3123   /**\r
3124    * @brief [ro] Revision ID\r
3125    *\r
3126    * On rev 0 hw, this corresponds to REVID\r
3127    * On rev 1 hw, this corresponds to REVID\r
3128    * On rev 2 hw, this corresponds to REVID\r
3129    *\r
3130    * Field size: 8 bits\r
3131    */\r
3132   uint8_t revId;\r
3133 } pcieRevIdReg_t;\r
3134 /* @} */\r
3135 \r
3136 \r
3137 /**\r
3138  * @ingroup pcielld_reg_cfg_type0_structures\r
3139  * @brief Specification of the Base Address Register (BAR)\r
3140  *\r
3141  * This should be used to access a BAR register.\r
3142  *\r
3143  * There are two situations when this structure should be used:\n\r
3144  * 1. When setting up a 32 bit BAR\n\r
3145  * 2. When setting up the lower 32bits of a 64bits BAR\r
3146  *\r
3147  * Refer to @ref pcieBar32bitReg_t for the other possible BAR configurations\r
3148  *\r
3149  * On rev 0 hw, this corresponds to BARn\r
3150  * On rev 1 hw, this corresponds to BARn\r
3151  * On rev 2 hw, this corresponds to BAR_REGn\r
3152  *\r
3153  * @{\r
3154  */\r
3155 typedef struct pcieBarReg_s {\r
3156   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3157   /**\r
3158    * @brief [rw] Base Address\r
3159    *\r
3160    * Rev 0 hw: 28 bits are modifiable\r
3161    * Rev 1 hw: only upper 12 bits are modifyable (eg 16-27).  Rest are read-only.  If users tries\r
3162    * to modify r/o bits will return @ref pcie_RET_RO_CHANGED.\r
3163    * Rev 2 hw: 28 bits are modifiable\r
3164    *\r
3165    * Field size: 28 bits\r
3166    */\r
3167   uint32_t base;\r
3168   /**\r
3169    * @brief [rw] Prefetchable region?\r
3170    *\r
3171    * For memory BARs, it indicates whether the region is prefetchable.\n\r
3172    * 0 = Non-prefetchable.\n\r
3173    * 1 = Prefetchable.\r
3174    *\r
3175    * For I/O Bars, it is used as second least significant bit (LSB)\r
3176    * of the base address.\r
3177    *\r
3178    * Field size: 1 bit\r
3179    */\r
3180   uint8_t prefetch;\r
3181   /**\r
3182    * @brief [rw] Bar Type\r
3183    *\r
3184    * For memory BARs, they determine the BAR type.\n\r
3185    * 0h = 32-bit BAR.\n\r
3186    * 2h = 64-bit BAR.\n\r
3187    * Others = Reserved.\r
3188    *\r
3189    * For I/O BARs, bit 2 is the least significant bit (LSB) of the\r
3190    * base address and bit 1 is 0.\r
3191    *\r
3192    * Field size: 2 bits\r
3193    */\r
3194   uint8_t type;\r
3195   /**\r
3196    * @brief [rw] Memory or IO BAR\r
3197    *\r
3198    * 0 = Memory BAR.\n\r
3199    * 1 = I/O BAR.\r
3200    *\r
3201    * Field size: 1 bit\r
3202    */\r
3203   uint8_t memSpace;\r
3204 } pcieBarReg_t;\r
3205 /* @} */\r
3206 \r
3207 /**\r
3208  * @ingroup pcielld_reg_cfg_type0_structures\r
3209  * @brief Specification of the Base Address Register (BAR).\r
3210  *\r
3211  * This should be used to read/write a 32bit word to the BAR register.\r
3212  *\r
3213  * There are two situations when this structure should be used:\n\r
3214  * 1. When setting up BAR masks\n\r
3215  * 2. When setting up the upper 32bits of a 64bits BAR\r
3216  *\r
3217  * Refer to @ref pcieBarReg_t for the other possible BAR configurations\r
3218  *\r
3219  * @{\r
3220  */\r
3221 typedef struct pcieBar32bitReg_s {\r
3222   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3223   /**\r
3224    * @brief [rw] 32bits word (BAR mask or BAR address)\r
3225    *\r
3226    * On rev 0 hardware, may set bar masks through either \r
3227    * @ref pcieRegisters_t::type0BarMask32bitIdx or\r
3228    * @ref pcieRegisters_t::type0Bar32bitIdx.  The determination on \r
3229    * whether its a bar mask or bar is made by current value of \r
3230    * @ref pcieCmdStatusReg_s::dbi.\r
3231    *\r
3232    * On rev 1 hardware, MUST set bar masks only through \r
3233    * @ref pcieRegisters_t::type0BarMask32bitIdx as this routes through\r
3234    * DBICS2.  Also, MUST set upper 32 bits using only \r
3235    * @ref pcieRegisters_t::type0Bar32bitIdx to route through DBICS.\r
3236    *\r
3237    * Field size: 32 bits\r
3238    */\r
3239   uint32_t reg32;\r
3240 } pcieBar32bitReg_t;\r
3241 /* @} */\r
3242 \r
3243 /*****************************************************************************\r
3244  **********  PCIe LOCAL/REMOTE CONFIG TYPE 0 REGISTERS  **********************\r
3245  ****************************************************************************/\r
3246 \r
3247 /**\r
3248  * @ingroup pcielld_reg_cfg_type0_structures\r
3249  * @brief Specification of the BIST Header Register\r
3250  *\r
3251  * On rev 0 hw, this corresponds to BIST_HEADER\r
3252  * On rev 1 hw, this corresponds to BIST_HEAD_LAT_CACH\r
3253  * On rev 2 hw, this corresponds to BIST_HEADER_TYPE_LATENCY_CACHE_LINE_SIZE_REG\r
3254  *\r
3255  * @{\r
3256  */\r
3257 typedef struct pcieBistReg_s {\r
3258   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3259   /**\r
3260    * @brief [ro] Bist capability\r
3261    *\r
3262    * Returns a one for BIST capability and zero otherwise. Not supported by PCIESS.\r
3263    *\r
3264    * This field is only used on rev 0 hw.  A value of 0 is returned on rev 1 hw.\r
3265    *\r
3266    * On rev 0 hw, this corresponds to BIST_CAP\r
3267    * On rev 1 hw, unsupported\r
3268    * On rev 2 hw, unsupported\r
3269    *\r
3270    * Field size: 1 bit\r
3271    */\r
3272   uint8_t bistCap;\r
3273   /**\r
3274    * @brief [ro] Start Bist\r
3275    *\r
3276    * Write a one to start BIST. Not supported by PCIESS.\r
3277    *\r
3278    * This field is only used on rev 0 hw.  A value of 0 is returned on rev 1 hw.\r
3279    *\r
3280    * On rev 0 hw, this corresponds to START_BIST\r
3281    * On rev 1 hw, unsupported\r
3282    * On rev 2 hw, unsupported\r
3283    *\r
3284    * Field size: 1 bit\r
3285    */\r
3286   uint8_t startBist;\r
3287   /**\r
3288    * @brief [ro]  Completion code\r
3289    *\r
3290    * Not supported by PCIESS.\r
3291    *\r
3292    * This field is only used on rev 0 hw.  A value of 0 is returned on rev 1 hw.\r
3293    *\r
3294    * On rev 0 hw, this corresponds to COMP_CODE\r
3295    * On rev 1 hw, unsupported\r
3296    * On rev 2 hw, unsupported\r
3297    *\r
3298    * Field size: 4 bits\r
3299    */\r
3300   uint8_t compCode;\r
3301   /**\r
3302    * @brief [ro]  hw rev 1 bist field\r
3303    *\r
3304    * This field is only used on rev 1 hw.  A value of 0 is returned on rev 0 hw.\r
3305    *\r
3306    * On rev 0 hw, unsupported\r
3307    * On rev 1 hw, this corresponds to BIST\r
3308    * On rev 2 hw, this corresponds to BIST\r
3309    *\r
3310    * Field size: 8 bits\r
3311    */\r
3312   uint8_t bist;\r
3313   /**\r
3314    * @brief [ro]  Multifunction device\r
3315    *\r
3316    * On rev 0 hw, this corresponds to MULFUN_DEV\r
3317    * On rev 1 hw, this corresponds to MFD\r
3318    * On rev 2 hw, this corresponds to MULTI_FUNC\r
3319    *\r
3320    * Field size:  1 bit\r
3321    */\r
3322   uint8_t mulfunDev;\r
3323   /**\r
3324    * @brief [ro]  Header type\r
3325    *\r
3326    * Configuration header format.\r
3327    *\r
3328    * 0 = EP mode\n\r
3329    * 1 = RC mode\r
3330    *\r
3331    * On rev 0 hw, this corresponds to HDR_TYPE\r
3332    * On rev 1 hw, this corresponds to HEAD_TYP\r
3333    * On rev 1 hw, this corresponds to HEADER_TYPE\r
3334    *\r
3335    * Field size: 7 bits\r
3336    */\r
3337   uint8_t hdrType;\r
3338   /**\r
3339    * @brief [ro] Not applicable in PCIe\r
3340    *\r
3341    * On rev 0 hw, this corresponds to LAT_TMR\r
3342    * On rev 1 hw, this corresponds to MSTR_LAT_TIM\r
3343    * On rev 2 hw, this corresponds to LATENCY_MASTER_TIMER\r
3344    *\r
3345    * Field size:  8 bits\r
3346    */\r
3347   uint8_t latTmr;\r
3348   /**\r
3349    * @brief [ro] Not applicable in PCIe\r
3350    *\r
3351    * On rev 0 hw, this corresponds to CACHELN_SIZ\r
3352    * On rev 1 hw, this corresponds to CACH_LN_SZE\r
3353    * On rev 2 hw, this corresponds to CACHE_LINE_SIZE\r
3354    *\r
3355    * Field size:  8 bits\r
3356    */\r
3357   uint8_t cacheLnSize;\r
3358 } pcieBistReg_t;\r
3359 /* @} */\r
3360 \r
3361 \r
3362 /**\r
3363  * @ingroup pcielld_reg_cfg_type0_structures\r
3364  * @brief @ref pcieBarReg_s register plus an index (End Point BAR)\r
3365  *\r
3366  * There are multiple instances of this register. The index is used to select which\r
3367  * instance of the register will be accessed.\r
3368  *\r
3369  * This structure is used to access an End Point BAR. For more details, please refer to @ref pcieBarReg_t\r
3370  *\r
3371  * @{\r
3372  */\r
3373 typedef struct pcieType0BarIdx_s {\r
3374   pcieBarReg_t reg;  /**< @brief Register Structure */\r
3375   uint8_t      idx;  /**< @brief Index in the array of registers of this type */\r
3376 } pcieType0BarIdx_t;\r
3377 /* @} */\r
3378 \r
3379 /**\r
3380  * @ingroup pcielld_reg_cfg_type0_structures\r
3381  * @brief @ref pcieBar32bitReg_s register plus an index (End Point BAR)\r
3382  *\r
3383  * There are multiple instances of this register. The index is used to select which\r
3384  * instance of the register will be accessed.\r
3385  *\r
3386  * This structure is used to access an End Point BAR. For more details, please refer to @ref pcieBar32bitReg_t\r
3387  *\r
3388  * @{\r
3389  */\r
3390 typedef struct pcieType0Bar32bitIdx_s {\r
3391   pcieBar32bitReg_t reg;  /**< @brief Register Structure */\r
3392   uint8_t           idx;  /**< @brief Index in the array of registers of this type */\r
3393 } pcieType0Bar32bitIdx_t;\r
3394 /* @} */\r
3395 \r
3396 /**\r
3397  * @ingroup pcielld_reg_cfg_type0_structures\r
3398  * @brief Specification of the Cardbus CIS pointer register\r
3399  *\r
3400  * On rev 0 hw, unsupported\r
3401  * On rev 1 hw, this corresponds to CARDBUS_CIS_POINTER\r
3402  * On rev 2 hw, this corresponds to CARDBUS_CIS_PTR_REG\r
3403  *\r
3404  * @{\r
3405  */\r
3406 typedef struct pcieCardbusCisPointerReg_s {\r
3407   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3408   /**\r
3409    * @brief [rw] Cardbus CIS pointer (CS)\r
3410    *\r
3411    * This register is only used in rev 1/2 hw.  It is physically present but marked reserved\r
3412    * in rev 0 hardware, so this structure/API isn't used.\r
3413    *\r
3414    * Field size: 32 bits\r
3415    */\r
3416   uint32_t cisPointer;\r
3417 } pcieCardbusCisPointerReg_t;\r
3418 /* @} */\r
3419 \r
3420 /**\r
3421  * @ingroup pcielld_reg_cfg_type0_structures\r
3422  * @brief Specification of the Subsystem Vendor ID Register\r
3423  *\r
3424  * On rev 0 hw, this corresponds to SUBSYS_VNDR_ID\r
3425  * On rev 1 hw, this corresponds to SUBID_SUBVENDORID\r
3426  * On rev 2 hw, this corresponds to SUBSYSTEM_ID_SUBSYSTEM_VENDOR_ID_REG\r
3427  *\r
3428  * @{\r
3429  */\r
3430 typedef struct pcieSubIdReg_s {\r
3431   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3432   /**\r
3433    * @brief [ro] Subsystem ID\r
3434    *\r
3435    * On rev 0 hw, this corresponds to SUBSYS_ID\r
3436    * On rev 1 hw, this corresponds to SUBSYS_DEV_ID_N\r
3437    * On rev 2 hw, this corresponds to SUBSYS_DEV_ID\r
3438    *\r
3439    * Field size: 16 bits\r
3440    */\r
3441   uint16_t subId;\r
3442   /**\r
3443    * @brief [ro] Subsystem Vendor ID\r
3444    *\r
3445    * On rev 0 hw, this corresponds to SUBSYS_VEN_ID\r
3446    * On rev 1 hw, this corresponds to SUBSYS_VENDOR_ID_N\r
3447    * On rev 2 hw, this corresponds to SUBSYS_VENDOR_ID\r
3448    *\r
3449    * Field size: 16 bits\r
3450    */\r
3451   uint16_t subVndId;\r
3452 } pcieSubIdReg_t;\r
3453 /* @} */\r
3454 \r
3455 /**\r
3456  * @ingroup pcielld_reg_cfg_type0_structures\r
3457  * @brief Specification of the Expansion ROM Register\r
3458  *\r
3459  * On rev 0 hw, this corresponds to EXPNSN_ROM\r
3460  * On rev 1 hw, this corresponds to EXPANSION_ROM_BAR\r
3461  * On rev 2 hw, this corresponds to EXP_ROM_BASE_ADDR_REG\r
3462  *\r
3463  * @{\r
3464  */\r
3465 typedef struct pcieExpRomReg_s {\r
3466   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3467   /**\r
3468    * @brief [ro] rev 0; [rw] rev 1 Address of Expansion ROM\r
3469    *\r
3470    * Rev 0 hw: entire 21 bits are r/o and are always 0.\r
3471    *\r
3472    * Rev 1 hw: only upper 16 bits are modifyable (eg 16-31).  Lower 5 bits are\r
3473    * r/o.  Attempt to modify r/o bits will return @ref pcie_RET_RO_CHANGED.\r
3474    *\r
3475    * Rev 2 hw: entire 21 bits are r/w\r
3476    *\r
3477    * On rev 0 hw, this corresponds to EXP_ROM_BASE_ADDR and EXROM_ADDRESS_RO\r
3478    * On rev 1 hw, this corresponds to EXROM_ADDRESS\r
3479    * On rev 2 hw, this corresponds to EXP_ROM_BASE_ADDRES\r
3480    *\r
3481    * Field size: 21 bits\r
3482    */\r
3483   uint32_t expRomAddr;\r
3484   /**\r
3485    * @brief [ro] rev 0; [rw] rev 1: Expansion ROM Enable\r
3486    *\r
3487    * On rev 0 hw, this corresponds to EXP_ROM_EN\r
3488    * On rev 1 hw, this corresponds to EXROM_EN\r
3489    * On rev 2 hw, this corresponds to ROM_BAR_ENABLE\r
3490    *\r
3491    * Field size: 1 bit\r
3492    */\r
3493   uint8_t enable;\r
3494 } pcieExpRomReg_t;\r
3495 /* @} */\r
3496 \r
3497 \r
3498 /**\r
3499  * @ingroup pcielld_reg_cfg_type0_structures\r
3500  * @brief Specification of the Capability Pointer Register\r
3501  *\r
3502  * On rev 0 hw, this corresponds to CAP_PTR\r
3503  * On rev 1 hw, this corresponds to CAPPTR\r
3504  * On rev 2 hw, this corresponds to PCI_CAP_PTR_REG\r
3505  *\r
3506  * @{\r
3507  */\r
3508 typedef struct pcieCapPtrReg_s {\r
3509   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3510   /**\r
3511    * @brief [rw] First Capability Pointer\r
3512    *\r
3513    * By default, it points to Power Management Capability structure.\r
3514    *\r
3515    * On rev 0 hw, this corresponds to CAP_PTR\r
3516    * On rev 1 hw, this corresponds to CAPPTR\r
3517    * On rev 2 hw, this corresponds to CAP_POINTER\r
3518    *\r
3519    * Field size: 8 bits\r
3520    */\r
3521   uint8_t ptr;\r
3522 } pcieCapPtrReg_t;\r
3523 /* @} */\r
3524 \r
3525 /**\r
3526  * @ingroup pcielld_reg_cfg_type0_structures\r
3527  * @brief Specification of the Interrupt Pin Register\r
3528  *\r
3529  * On rev 0 hw, this corresponds to INT_PIN\r
3530  * On rev 1 hw, this corresponds to INTERRUPT\r
3531  * On rev 2 hw, this corresponds to MAX_LATENCY_MIN_GRANT_INTERRUPT_PIN_INTERRUPT_LINE_REG\r
3532  *\r
3533  * @{\r
3534  */\r
3535 typedef struct pcieIntPinReg_s {\r
3536   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3537   /**\r
3538    * @brief [ro] interrupt Pin\r
3539    *\r
3540    * It identifies the legacy interrupt message that the device uses.\r
3541    * For single function configuration, the core only uses INTA.\r
3542    *\r
3543    * <TABLE>\r
3544    * <TR><TH>@ref intPin</TH><TH>Legacy Interrupt</TH></TR>\r
3545    * <TR><TD>0</TD>          <TD>none</TD></TR>\r
3546    * <TR><TD>1</TD>          <TD>INTA</TD></TR>\r
3547    * <TR><TD>2</TD>          <TD>INTB</TD></TR>\r
3548    * <TR><TD>3</TD>          <TD>INTC</TD></TR>\r
3549    * <TR><TD>4</TD>          <TD>INTD</TD></TR>\r
3550    * <TR><TD>others</TD>     <TD>reserved</TD></TR>\r
3551    * </TABLE>\r
3552    *\r
3553    * On rev 0 hw, this corresponds to INT_PIN\r
3554    * On rev 1 hw, this corresponds to INT_PIN\r
3555    * On rev 2 hw, this corresponds to INT_PIN\r
3556    *\r
3557    * Field size: 8 bits\r
3558    */\r
3559   uint8_t intPin;\r
3560   /**\r
3561    * @brief [rw] interrupt line\r
3562    *\r
3563    * On rev 0 hw, this corresponds to INT_LINE\r
3564    * On rev 1 hw, this corresponds to INT_LIN\r
3565    * On rev 2 hw, this corresponds to INT_LIN\r
3566    *\r
3567    * Field size: 8 bits\r
3568    */\r
3569   uint8_t intLine;\r
3570 } pcieIntPinReg_t;\r
3571 /* @} */\r
3572 \r
3573 \r
3574 /*****************************************************************************\r
3575  **********  PCIe LOCAL/REMOTE CONFIG TYPE 1 REGISTERS  **********************\r
3576  ****************************************************************************/\r
3577 \r
3578 /**\r
3579  * @ingroup pcielld_reg_cfg_type1_structures\r
3580  * @brief @ref pcieBarReg_s register plus an index (Root Complex BAR)\r
3581  *\r
3582  * There are multiple instances of this register. The index is used to select which\r
3583  * instance of the register will be accessed.\r
3584  *\r
3585  * This structure is used to access a Root Complex BAR. For more details, please refer to @ref pcieBarReg_t.\r
3586  *\r
3587  * On rev 2 hw, not supported (use IATU instead)\r
3588  *\r
3589  * @{\r
3590  */\r
3591 typedef struct pcieType1BarIdx_s {\r
3592   pcieBarReg_t reg;  /**< @brief Register Structure */\r
3593   uint8_t      idx;  /**< @brief Index in the array of registers of this type */\r
3594 } pcieType1BarIdx_t;\r
3595 /* @} */\r
3596 \r
3597 /**\r
3598  * @ingroup pcielld_reg_cfg_type1_structures\r
3599  * @brief @ref pcieBar32bitReg_s register plus an index (Root Complex BAR)\r
3600  *\r
3601  * There are multiple instances of this register. The index is used to select which\r
3602  * instance of the register will be accessed.\r
3603  *\r
3604  * This structure is used to access a Root Complex BAR. For more details, please refer to @ref pcieBar32bitReg_t.\r
3605  *\r
3606  * On rev 2 hw, not supported (use IATU instead)\r
3607  *\r
3608  * @{\r
3609  */\r
3610 typedef struct pcieType1Bar32bitIdx_s {\r
3611   pcieBar32bitReg_t reg;  /**< @brief Register Structure */\r
3612   uint8_t           idx;  /**< @brief Index in the array of registers of this type */\r
3613 } pcieType1Bar32bitIdx_t;\r
3614 /* @} */\r
3615 \r
3616 /**\r
3617  * @ingroup pcielld_reg_cfg_type1_structures\r
3618  * @brief Specification of the BIST, Header Type, Latency Time and Cache Line Size Regiser\r
3619  *\r
3620  * On rev 0 hw, this corresponds to BIST_HEADER\r
3621  * On rev 1 hw, this corresponds to BIST_HEAD_LAT_CACH\r
3622  * On rev 2 hw, this corresponds to TYPE1_BIST_HDR_TYPE_LAT_CACHE_LINE_SIZE_REG\r
3623  *\r
3624  * @{\r
3625  */\r
3626 typedef struct pcieType1BistHeaderReg_s {\r
3627   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3628   /**\r
3629    * @brief [ro] Returns a 1 for BIST capability and 0 otherwise.\r
3630    *\r
3631    * Not supported by PCIESS.\r
3632    *\r
3633    * On rev 0 hw, this corresponds to BIST_CAP\r
3634    * On rev 1 hw, unsupported\r
3635    * On rev 2 hw, unsupported\r
3636    *\r
3637    * Field size: 1 bit\r
3638    */\r
3639   uint8_t bistCap;\r
3640   /**\r
3641    * @brief [ro] Write a one to start BIST.\r
3642    *\r
3643    * Not supported by PCIESS.\r
3644    *\r
3645    * On rev 0 hw, this corresponds to START_BIST\r
3646    * On rev 1 hw, unsupported\r
3647    * On rev 2 hw, unsupported\r
3648    *\r
3649    * Field size: 1 bit\r
3650    */\r
3651   uint8_t startBist;\r
3652   /**\r
3653    * @brief [rw] Completion Code.\r
3654    *\r
3655    * Not supported by PCIESS.\r
3656    *\r
3657    * On rev 0 hw, this corresponds to COMP_CODE\r
3658    * On rev 1 hw, unsupported\r
3659    * On rev 2 hw, unsupported\r
3660    *\r
3661    * Field size: 4 bits\r
3662    */\r
3663   uint8_t compCode;\r
3664   /**\r
3665    * @brief [ro]  hw rev 1 bist field\r
3666    *\r
3667    * On rev 0 hw, unsupported\r
3668    * On rev 1 hw, this corresponds to BIST\r
3669    * On rev 2 hw, this corresponds to BIST\r
3670    *\r
3671    * Field size: 8 bits\r
3672    */\r
3673   uint8_t bist;\r
3674   /**\r
3675    * @brief [rw] Returns 1 if it is a multi-function device.\r
3676    *\r
3677    * On rev 0 hw, this corresponds to MULFUN_DEV\r
3678    * On rev 1 hw, this corresponds to MFD\r
3679    * On rev 2 hw, this corresponds to MULTI_FUNC\r
3680    *\r
3681    * Field size: 1 bit\r
3682    */\r
3683   uint8_t mulFunDev;\r
3684   /**\r
3685    * @brief [rw] Configuration Header Format.\r
3686    *\r
3687    * 0 = EP mode\n\r
3688    * 1 = RC mode\r
3689    *\r
3690    * On rev 0 hw, this corresponds to HDR_TYPE\r
3691    * On rev 1 hw, this corresponds to HEAD_TYP\r
3692    * On rev 2 hw, this corresponds to HEADER_TYPE\r
3693    *\r
3694    * Field size: 7 bits\r
3695    */\r
3696   uint8_t hdrType;\r
3697   /**\r
3698    * @brief [ro] Not applicable in PCIe\r
3699    *\r
3700    * On rev 0 hw, this corresponds to LAT_TMR\r
3701    * On rev 1 hw, this corresponds to MSTR_LAT_TIM\r
3702    * On rev 2 hw, this corresponds to LATENCY_MASTER_TIMER\r
3703    *\r
3704    * Field size: 8 bits\r
3705    */\r
3706   uint8_t latTmr;\r
3707   /**\r
3708    * @brief [ro] Not applicable in PCIe\r
3709    *\r
3710    * On rev 0 hw, this corresponds to CACHELN_SIZE\r
3711    * On rev 1 hw, this corresponds to CACH_LN_SIZE\r
3712    * On rev 2 hw, this corresponds to CACHE_LINE_SIZE\r
3713    *\r
3714    * Field size: 8 bits\r
3715    */\r
3716   uint8_t cacheLnSize;\r
3717 } pcieType1BistHeaderReg_t;\r
3718 /* @} */\r
3719 \r
3720 /**\r
3721  * @ingroup pcielld_reg_cfg_type1_structures\r
3722  * @brief Specification of the Latency Timer and Bus Number Register\r
3723  *\r
3724  * On rev 0 hw, this corresponds to BUSNUM\r
3725  * On rev 1 hw, this corresponds to BUS_NUM_REG\r
3726  * On rev 2 hw, this corresponds to SEC_LAT_TIMER_SUB_BUS_SEC_BUS_PRI_BUS_REG\r
3727  *\r
3728  * @{\r
3729  */\r
3730 typedef struct pcieType1BusNumReg_s {\r
3731   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3732   /**\r
3733    * @brief [ro] Secondary Latency Timer (N/A for PCIe)\r
3734    *\r
3735    * On rev 0 hw, this corresponds to SEC_LAT_TMR\r
3736    * On rev 1 hw, this corresponds to SEC_LAT_TIMER\r
3737    * On rev 2 hw, this corresponds to SEC_LAT_TIMER\r
3738    *\r
3739    * Field size: 8 bits\r
3740    */\r
3741   uint8_t secLatTmr;\r
3742   /**\r
3743    * @brief [rw] Subordinate Bus Number. This is highest bus\r
3744    *             number on downstream interface.\r
3745    *\r
3746    * On rev 0 hw, this corresponds to SUB_BUS_NUM\r
3747    * On rev 1 hw, this corresponds to SUBORD_BUS_NUM\r
3748    * On rev 2 hw, this corresponds to SUB_BUS\r
3749    *\r
3750    * Field size: 8 bits\r
3751    */\r
3752   uint8_t subBusNum;\r
3753   /**\r
3754    * @brief [rw] Secondary Bus Number. It is typically 1h for RC.\r
3755    *\r
3756    * On rev 0 hw, this corresponds to SEC_BUS_NUM\r
3757    * On rev 1 hw, this corresponds to SEC_BUS_NUM\r
3758    * On rev 2 hw, this corresponds to SEC_BUS\r
3759    *\r
3760    * Field size: 8 bits\r
3761    */\r
3762   uint8_t secBusNum;\r
3763   /**\r
3764    * @brief [rw] Primary Bus Number. It is 0 for RC and nonzero for\r
3765    *             switch devices only.\r
3766    *\r
3767    * On rev 0 hw, this corresponds to PRI_BUS_NUM\r
3768    * On rev 1 hw, this corresponds to PRIM_BUS_NUM\r
3769    * On rev 2 hw, this corresponds to PRIM_BUS\r
3770    *\r
3771    * Field size: 8 bits\r
3772    */\r
3773   uint8_t priBusNum;\r
3774 } pcieType1BusNumReg_t;\r
3775 /* @} */\r
3776 \r
3777 /**\r
3778  * @ingroup pcielld_reg_cfg_type1_structures\r
3779  * @brief Specification of the Secondary Status and IO Base/Limit Register\r
3780  *\r
3781  * On rev 0 hw, this corresponds to SECSTAT\r
3782  * On rev 1 hw, this corresponds to IOBASE_LIMIT_SEC_STATUS\r
3783  * On rev 2 hw, this corresponds to SEC_STAT_IO_LIMIT_IO_BASE_REG\r
3784  *\r
3785  * @{\r
3786  */\r
3787 typedef struct pcieType1SecStatReg_s {\r
3788   uint32_t raw; /**< @brief [ro] Raw image of register on read; actual value on write */\r
3789   /**\r
3790    * @brief [rw] Detected Parity Error.\r
3791    *\r
3792    * Read 1 if received a poisoned TLP.\r
3793    * Write 1 to clear; write 0 has no effect.\r
3794    *\r
3795    * On rev 0 hw, this corresponds to DTCT_PERROR\r
3796    * On rev 1 hw, this corresponds to DET_PAR_ERR\r
3797    * On rev 2 hw, this corresponds to SEC_STAT_DPE\r
3798    *\r
3799    * Field size: 1 bit\r
3800    */\r
3801   uint8_t dtctPError;\r
3802   /**\r
3803    * @brief [rw] Received System Error.\r
3804    *\r
3805    * Read 1 if received an ERR_FATAL or ERR_NONFATAL message.\r
3806    * Write 1 to clear; write 0 has no effect.\r
3807    *\r
3808    * On rev 0 hw, this corresponds to RX_SYS_ERROR\r
3809    * On rev 1 hw, this corresponds to RCVD_SYS_ERR\r
3810    * On rev 2 hw, this corresponds to SEC_STAT_RCVD_SYS_ERR\r
3811    *\r
3812    * Field size: 1 bit\r
3813    */\r
3814   uint8_t rxSysError;\r
3815   /**\r
3816    * @brief [rw] Received Master Abort.\r
3817    *\r
3818    * Read 1 if received a completion with unsupported request completion status.\r
3819    * Write 1 to clear; write 0 has no effect.\r
3820    *\r
3821    * On rev 0 hw, this corresponds to RX_MST_ABORT\r
3822    * On rev 1 hw, this corresponds to RCVD_MSTR_ABORT\r
3823    * On rev 2 hw, this corresponds to SEC_STAT_RCVD_MSTR_ABRT\r
3824    *\r
3825    * Field size: 1 bit\r
3826    */\r
3827   uint8_t rxMstAbort;\r
3828   /**\r
3829    * @brief [rw] Received Target Abort.\r
3830    *\r
3831    * Read 1 if received a completion with completer abort completion status.\r
3832    * Write 1 to clear; write 0 has no effect.\r
3833    *\r
3834    * On rev 0 hw, this corresponds to RX_TGT_ABORT\r
3835    * On rev 1 hw, this corresponds to RCVD_TRGT_ABORT\r
3836    * On rev 2 hw, this corresponds to SEC_STAT_RCVD_TRGT_ABRT\r
3837    *\r
3838    * Field size: 1 bit\r
3839    */\r
3840   uint8_t rxTgtAbort;\r
3841   /**\r
3842    * @brief [rw] Signaled Target Abort.\r
3843    *\r
3844    * Read 1 if sent a posted or non-posted request as a completer abort error.\r
3845    * Write 1 to clear; write 0 has no effect.\r
3846    *\r
3847    * On rev 0 hw, this corresponds to TX_TGT_ABORT\r
3848    * On rev 1 hw, this corresponds to SGNLD_TRGT_ABORT\r
3849    * On rev 2 hw, this corresponds to SEC_STAT_SIG_TRGT_ABRT\r
3850    *\r
3851    * Field size: 1 bit\r
3852    */\r
3853   uint8_t txTgtAbort;\r
3854   /**\r
3855    * @brief [ro] DEVSEL Timing\r
3856    *\r
3857    * On rev 0 hw, unsupported\r
3858    * On rev 1 hw, this corresponds to DEVSEL_TIMING\r
3859    * On rev 2 hw, unsupported\r
3860    *\r
3861    * Field size: 2 bits\r
3862    */\r
3863   uint8_t devselTiming;\r
3864   /**\r
3865    * @brief [rw] Master Data Parity Error.\r
3866    *\r
3867    * Read 1 if the parity error enable bit\r
3868    * @ref pcieType1BridgeIntReg_s::pErrRespEn is set and either the condition\r
3869    * that the requester receives a poisoned completion or the condition\r
3870    * that the requester poisons a write request is true.\r
3871    * Write 1 to clear; write 0 has no effect.\r
3872    *\r
3873    * On rev 0 hw, this corresponds to MST_DPERR\r
3874    * On rev 1 hw, this corresponds to MSTR_DATA_PRTY_ERR\r
3875    * On rev 2 hw, this corresponds to SEC_STAT_MDPE\r
3876    *\r
3877    * Field size: 1 bit\r
3878    */\r
3879   uint8_t mstDPErr;\r
3880   /**\r
3881    * @brief [ro] Fast Back to Back Capable.\r
3882    *\r
3883    * On rev 0 hw, unsupported\r
3884    * On rev 1 hw, this corresponds to FAST_B2B_CAP\r
3885    * On rev 2 hw, unsupported\r
3886    *\r
3887    * Field size: 1 bit\r
3888    */\r
3889   uint8_t fastB2bCap;\r
3890   /**\r
3891    * @brief [ro] 66Mhz Capable.\r
3892    *\r
3893    * On rev 0 hw, unsupported\r
3894    * On rev 1 hw, this corresponds to C66MHZ_CAPA\r
3895    * On rev 2 hw, unsupported\r
3896    *\r
3897    * Field size: 1 bit\r
3898    */\r
3899   uint8_t c66mhzCapa;\r
3900   /**\r
3901    * @brief [rw] Upper 4 bits of 16bit IO Space Limit Address.\r
3902    *\r
3903    * On rev 0 hw, this corresponds to IO_LIMIT\r
3904    * On rev 1 hw, this corresponds to IO_SPACE_LIMIT\r
3905    * On rev 2 hw, this corresponds to IO_LIMIT\r
3906    *\r
3907    * Field size: 4 bits\r
3908    */\r
3909   uint8_t IOLimit;\r
3910   /**\r
3911    * @brief [rw] Indicates addressing for IO Limit Address.\r
3912    *\r
3913    * Writable from internal bus interface.\r
3914    * 0 = 16-bit IO addressing.\r
3915    * 1 = 32-bit IO addressing.\r
3916    *\r
3917    * On rev 0 hw, this corresponds to IO_LIMIT_ADDR\r
3918    * On rev 1 hw, this corresponds to IODECODE_32\r
3919    * On rev 2 hw, this corresponds to IO_DECODE_BITS\r
3920    *\r
3921    * Field size: 1 bit\r
3922    */\r
3923   uint8_t IOLimitAddr;\r
3924   /**\r
3925    * @brief [rw] Upper 4 bits of 16bit IO Space Base Address.\r
3926    *\r
3927    * On rev 0 hw, this corresponds to IO_BASE\r
3928    * On rev 1 hw, this corresponds to IO_SPACE_BASE\r
3929    * On rev 2 hw, this corresponds to IO_BASE\r
3930    *\r
3931    * Field size: 4 bits\r
3932    */\r
3933   uint8_t IOBase;\r
3934   /**\r
3935    * @brief [rw] Indicates addressing for the IO Base Address.\r
3936    *\r
3937    * Writable from internal bus interface.\r
3938    * 0 = 16-bit IO addressing.\r
3939    * 1 = 32-bit IO addressing.\r
3940    *\r
3941    * On rev 0 hw, this corresponds to IO_BASE_ADDR\r
3942    * On rev 1 hw, this corresponds to IODECODE_32_0\r
3943    * On rev 2 hw, this corresponds to IO_DECODE\r
3944    *\r
3945    * Field size: 1 bit\r
3946    */\r
3947   uint8_t IOBaseAddr;\r
3948 } pcieType1SecStatReg_t;\r
3949 /* @} */\r
3950 \r
3951 /**\r