diff options
-rw-r--r-- | include/APE_APE.h | 84 | ||||
-rw-r--r-- | include/APE_APE_PERI.h | 29 | ||||
-rw-r--r-- | include/APE_TX_PORT.h | 5 | ||||
-rw-r--r-- | include/APE_TX_PORT1.h | 5 | ||||
-rw-r--r-- | include/APE_TX_PORT2.h | 5 | ||||
-rw-r--r-- | include/APE_TX_PORT3.h | 5 | ||||
-rw-r--r-- | include/bcm5719_APE.h | 84 | ||||
-rw-r--r-- | include/bcm5719_APE_PERI.h | 29 | ||||
-rw-r--r-- | ipxact/APE.xml | 21 | ||||
-rw-r--r-- | ipxact/APE_component.xml | 46 | ||||
-rw-r--r-- | simulator/bcm5719_APE.cpp | 2 | ||||
-rw-r--r-- | simulator/bcm5719_APE_sim.cpp | 4 |
12 files changed, 290 insertions, 29 deletions
diff --git a/include/APE_APE.h b/include/APE_APE.h index 65f9ef3..94cc124 100644 --- a/include/APE_APE.h +++ b/include/APE_APE.h @@ -724,6 +724,84 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { #endif /* CXX_SIMULATOR */ } RegAPETxToNetDoorbellFunc0_t; +#define REG_APE_TX_STATE0 ((volatile APE_APE_H_uint32_t*)0x60200020) /* APE TX Status. */ +#define APE_TX_STATE0_TAIL_SHIFT 0u +#define APE_TX_STATE0_TAIL_MASK 0xfffu +#define GET_APE_TX_STATE0_TAIL(__reg__) (((__reg__) & 0xfff) >> 0u) +#define SET_APE_TX_STATE0_TAIL(__val__) (((__val__) << 0u) & 0xfffu) +#define APE_TX_STATE0_HEAD_SHIFT 12u +#define APE_TX_STATE0_HEAD_MASK 0xfff000u +#define GET_APE_TX_STATE0_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) +#define SET_APE_TX_STATE0_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) +#define APE_TX_STATE0_TXERROR_SHIFT 24u +#define APE_TX_STATE0_TXERROR_MASK 0x1000000u +#define GET_APE_TX_STATE0_TXERROR(__reg__) (((__reg__) & 0x1000000) >> 24u) +#define SET_APE_TX_STATE0_TXERROR(__val__) (((__val__) << 24u) & 0x1000000u) +#define APE_TX_STATE0_ERROR_CODE_SHIFT 25u +#define APE_TX_STATE0_ERROR_CODE_MASK 0xe000000u +#define GET_APE_TX_STATE0_ERROR_CODE(__reg__) (((__reg__) & 0xe000000) >> 25u) +#define SET_APE_TX_STATE0_ERROR_CODE(__val__) (((__val__) << 25u) & 0xe000000u) + +/** @brief Register definition for @ref APE_t.TxState0. */ +typedef register_container RegAPETxState0_t { + /** @brief 32bit direct register access. */ + APE_APE_H_uint32_t r32; + + BITFIELD_BEGIN(APE_APE_H_uint32_t, bits) +#if defined(__LITTLE_ENDIAN__) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Tail, 0, 12) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXError, 24, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, ErrorCode, 25, 3) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_28, 28, 4) +#elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_28, 28, 4) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, ErrorCode, 25, 3) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXError, 24, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Tail, 0, 12) +#else +#error Unknown Endian +#endif + BITFIELD_END(APE_APE_H_uint32_t, bits) +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxState0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxState0_t() + { + /** @brief constructor for @ref APE_t.TxState0. */ + r32.setName("TxState0"); + bits.Tail.setBaseRegister(&r32); + bits.Tail.setName("Tail"); + bits.Head.setBaseRegister(&r32); + bits.Head.setName("Head"); + bits.TXError.setBaseRegister(&r32); + bits.TXError.setName("TXError"); + bits.ErrorCode.setBaseRegister(&r32); + bits.ErrorCode.setName("ErrorCode"); + } + RegAPETxState0_t& operator=(const RegAPETxState0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxState0_t; + #define REG_APE_MODE_2 ((volatile APE_APE_H_uint32_t*)0x6020002c) /* Expansion for MODE */ /** @brief Register definition for @ref APE_t.Mode2. */ typedef register_container RegAPEMode2_t { @@ -3312,8 +3390,11 @@ typedef struct APE_t { /** @brief Written on APE TX to network after filling 0xA002 buffer with packet. */ RegAPETxToNetDoorbellFunc0_t TxToNetDoorbellFunc0; + /** @brief APE TX Status. */ + RegAPETxState0_t TxState0; + /** @brief Reserved bytes to pad out data structure. */ - APE_APE_H_uint32_t reserved_32[3]; + APE_APE_H_uint32_t reserved_36[2]; /** @brief Expansion for MODE */ RegAPEMode2_t Mode2; @@ -3475,6 +3556,7 @@ typedef struct APE_t { RxbufoffsetFunc0.r32.setComponentOffset(0x14); RxbufoffsetFunc1.r32.setComponentOffset(0x18); TxToNetDoorbellFunc0.r32.setComponentOffset(0x1c); + TxState0.r32.setComponentOffset(0x20); Mode2.r32.setComponentOffset(0x2c); Status2.r32.setComponentOffset(0x30); LockGrantObsolete.r32.setComponentOffset(0x4c); diff --git a/include/APE_APE_PERI.h b/include/APE_APE_PERI.h index bd90ffb..0330dc4 100644 --- a/include/APE_APE_PERI.h +++ b/include/APE_APE_PERI.h @@ -980,10 +980,27 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch6Low_t { } RegAPE_PERIBmcToNcSourceMacMatch6Low_t; #define REG_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH ((volatile APE_APE_PERI_H_uint32_t*)0x60240344) /* Upper four bytes of the MAC */ +#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH_SHIFT 0u +#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH_MASK 0xffffffffu +#define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH(__reg__) (((__reg__) & 0xffffffff) >> 0u) +#define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH(__val__) (((__val__) << 0u) & 0xffffffffu) + /** @brief Register definition for @ref APE_PERI_t.BmcToNcSourceMacMatch7High. */ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { /** @brief 32bit direct register access. */ APE_APE_PERI_H_uint32_t r32; + + BITFIELD_BEGIN(APE_APE_PERI_H_uint32_t, bits) +#if defined(__LITTLE_ENDIAN__) + /** @brief Upper four bytes of the MAC */ + BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, High, 0, 32) +#elif defined(__BIG_ENDIAN__) + /** @brief Upper four bytes of the MAC */ + BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, High, 0, 32) +#else +#error Unknown Endian +#endif + BITFIELD_END(APE_APE_PERI_H_uint32_t, bits) #ifdef CXX_SIMULATOR /** @brief Register name for use with the simulator. */ const char* getName(void) { return "BmcToNcSourceMacMatch7High"; } @@ -995,6 +1012,8 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { { /** @brief constructor for @ref APE_PERI_t.BmcToNcSourceMacMatch7High. */ r32.setName("BmcToNcSourceMacMatch7High"); + bits.High.setBaseRegister(&r32); + bits.High.setName("High"); } RegAPE_PERIBmcToNcSourceMacMatch7High_t& operator=(const RegAPE_PERIBmcToNcSourceMacMatch7High_t& other) { @@ -1009,10 +1028,6 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { #define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW_MASK 0xffff0000u #define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW(__reg__) (((__reg__) & 0xffff0000) >> 16u) #define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW(__val__) (((__val__) << 16u) & 0xffff0000u) -#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH_SHIFT 0u -#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH_MASK 0xffffffffu -#define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH(__reg__) (((__reg__) & 0xffffffff) >> 0u) -#define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH(__val__) (((__val__) << 0u) & 0xffffffffu) /** @brief Register definition for @ref APE_PERI_t.BmcToNcSourceMacMatch7Low. */ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { @@ -1025,11 +1040,7 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, reserved_15_0, 0, 16) /** @brief Lower two bytes of the MAC */ BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, Low, 16, 16) - /** @brief Upper four bytes of the MAC */ - BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, High, 0, 32) #elif defined(__BIG_ENDIAN__) - /** @brief Upper four bytes of the MAC */ - BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, High, 0, 32) /** @brief Lower two bytes of the MAC */ BITFIELD_MEMBER(APE_APE_PERI_H_uint32_t, Low, 16, 16) /** @brief Padding */ @@ -1051,8 +1062,6 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { r32.setName("BmcToNcSourceMacMatch7Low"); bits.Low.setBaseRegister(&r32); bits.Low.setName("Low"); - bits.High.setBaseRegister(&r32); - bits.High.setName("High"); } RegAPE_PERIBmcToNcSourceMacMatch7Low_t& operator=(const RegAPE_PERIBmcToNcSourceMacMatch7Low_t& other) { diff --git a/include/APE_TX_PORT.h b/include/APE_TX_PORT.h index 91520de..fc1726c 100644 --- a/include/APE_TX_PORT.h +++ b/include/APE_TX_PORT.h @@ -86,6 +86,11 @@ typedef uint32_t APE_TX_PORT_H_uint32_t; #define TX_PORT_OUT_ALL_MASK 0xffffffffu #define GET_TX_PORT_OUT_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) #define SET_TX_PORT_OUT_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define TX_PORT_OUT_ALL_CONTROL_WORD 0x0u +#define TX_PORT_OUT_ALL_ADDITIONAL_PAYLOAD_WORD 0x2u +#define TX_PORT_OUT_ALL_FRAME_LEN_WORD 0x3u +#define TX_PORT_OUT_ALL_NUM_BLOCKS_WORD 0x9u +#define TX_PORT_OUT_ALL_FIRST_PAYLOAD_WORD 0xcu #define TX_PORT_OUT_ALL_BLOCK_WORDS 0x20u #define TX_PORT_OUT_ALL_BLOCK_BYTES 0x80u diff --git a/include/APE_TX_PORT1.h b/include/APE_TX_PORT1.h index 00550a4..9ef3c51 100644 --- a/include/APE_TX_PORT1.h +++ b/include/APE_TX_PORT1.h @@ -87,6 +87,11 @@ typedef uint32_t APE_TX_PORT1_H_uint32_t; #define TX_PORT1_OUT_ALL_MASK 0xffffffffu #define GET_TX_PORT1_OUT_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) #define SET_TX_PORT1_OUT_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define TX_PORT1_OUT_ALL_CONTROL_WORD 0x0u +#define TX_PORT1_OUT_ALL_ADDITIONAL_PAYLOAD_WORD 0x2u +#define TX_PORT1_OUT_ALL_FRAME_LEN_WORD 0x3u +#define TX_PORT1_OUT_ALL_NUM_BLOCKS_WORD 0x9u +#define TX_PORT1_OUT_ALL_FIRST_PAYLOAD_WORD 0xcu #define TX_PORT1_OUT_ALL_BLOCK_WORDS 0x20u #define TX_PORT1_OUT_ALL_BLOCK_BYTES 0x80u diff --git a/include/APE_TX_PORT2.h b/include/APE_TX_PORT2.h index 28c2333..1f230d8 100644 --- a/include/APE_TX_PORT2.h +++ b/include/APE_TX_PORT2.h @@ -87,6 +87,11 @@ typedef uint32_t APE_TX_PORT2_H_uint32_t; #define TX_PORT2_OUT_ALL_MASK 0xffffffffu #define GET_TX_PORT2_OUT_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) #define SET_TX_PORT2_OUT_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define TX_PORT2_OUT_ALL_CONTROL_WORD 0x0u +#define TX_PORT2_OUT_ALL_ADDITIONAL_PAYLOAD_WORD 0x2u +#define TX_PORT2_OUT_ALL_FRAME_LEN_WORD 0x3u +#define TX_PORT2_OUT_ALL_NUM_BLOCKS_WORD 0x9u +#define TX_PORT2_OUT_ALL_FIRST_PAYLOAD_WORD 0xcu #define TX_PORT2_OUT_ALL_BLOCK_WORDS 0x20u #define TX_PORT2_OUT_ALL_BLOCK_BYTES 0x80u diff --git a/include/APE_TX_PORT3.h b/include/APE_TX_PORT3.h index 55c3472..a61c422 100644 --- a/include/APE_TX_PORT3.h +++ b/include/APE_TX_PORT3.h @@ -87,6 +87,11 @@ typedef uint32_t APE_TX_PORT3_H_uint32_t; #define TX_PORT3_OUT_ALL_MASK 0xffffffffu #define GET_TX_PORT3_OUT_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) #define SET_TX_PORT3_OUT_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define TX_PORT3_OUT_ALL_CONTROL_WORD 0x0u +#define TX_PORT3_OUT_ALL_ADDITIONAL_PAYLOAD_WORD 0x2u +#define TX_PORT3_OUT_ALL_FRAME_LEN_WORD 0x3u +#define TX_PORT3_OUT_ALL_NUM_BLOCKS_WORD 0x9u +#define TX_PORT3_OUT_ALL_FIRST_PAYLOAD_WORD 0xcu #define TX_PORT3_OUT_ALL_BLOCK_WORDS 0x20u #define TX_PORT3_OUT_ALL_BLOCK_BYTES 0x80u diff --git a/include/bcm5719_APE.h b/include/bcm5719_APE.h index 97ed431..66f08d9 100644 --- a/include/bcm5719_APE.h +++ b/include/bcm5719_APE.h @@ -724,6 +724,84 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { #endif /* CXX_SIMULATOR */ } RegAPETxToNetDoorbellFunc0_t; +#define REG_APE_TX_STATE0 ((volatile BCM5719_APE_H_uint32_t*)0xc0010020) /* APE TX Status. */ +#define APE_TX_STATE0_TAIL_SHIFT 0u +#define APE_TX_STATE0_TAIL_MASK 0xfffu +#define GET_APE_TX_STATE0_TAIL(__reg__) (((__reg__) & 0xfff) >> 0u) +#define SET_APE_TX_STATE0_TAIL(__val__) (((__val__) << 0u) & 0xfffu) +#define APE_TX_STATE0_HEAD_SHIFT 12u +#define APE_TX_STATE0_HEAD_MASK 0xfff000u +#define GET_APE_TX_STATE0_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) +#define SET_APE_TX_STATE0_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) +#define APE_TX_STATE0_TXERROR_SHIFT 24u +#define APE_TX_STATE0_TXERROR_MASK 0x1000000u +#define GET_APE_TX_STATE0_TXERROR(__reg__) (((__reg__) & 0x1000000) >> 24u) +#define SET_APE_TX_STATE0_TXERROR(__val__) (((__val__) << 24u) & 0x1000000u) +#define APE_TX_STATE0_ERROR_CODE_SHIFT 25u +#define APE_TX_STATE0_ERROR_CODE_MASK 0xe000000u +#define GET_APE_TX_STATE0_ERROR_CODE(__reg__) (((__reg__) & 0xe000000) >> 25u) +#define SET_APE_TX_STATE0_ERROR_CODE(__val__) (((__val__) << 25u) & 0xe000000u) + +/** @brief Register definition for @ref APE_t.TxState0. */ +typedef register_container RegAPETxState0_t { + /** @brief 32bit direct register access. */ + BCM5719_APE_H_uint32_t r32; + + BITFIELD_BEGIN(BCM5719_APE_H_uint32_t, bits) +#if defined(__LITTLE_ENDIAN__) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Tail, 0, 12) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXError, 24, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, ErrorCode, 25, 3) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_28, 28, 4) +#elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_28, 28, 4) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, ErrorCode, 25, 3) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXError, 24, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Tail, 0, 12) +#else +#error Unknown Endian +#endif + BITFIELD_END(BCM5719_APE_H_uint32_t, bits) +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxState0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxState0_t() + { + /** @brief constructor for @ref APE_t.TxState0. */ + r32.setName("TxState0"); + bits.Tail.setBaseRegister(&r32); + bits.Tail.setName("Tail"); + bits.Head.setBaseRegister(&r32); + bits.Head.setName("Head"); + bits.TXError.setBaseRegister(&r32); + bits.TXError.setName("TXError"); + bits.ErrorCode.setBaseRegister(&r32); + bits.ErrorCode.setName("ErrorCode"); + } + RegAPETxState0_t& operator=(const RegAPETxState0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxState0_t; + #define REG_APE_MODE_2 ((volatile BCM5719_APE_H_uint32_t*)0xc001002c) /* Expansion for MODE */ /** @brief Register definition for @ref APE_t.Mode2. */ typedef register_container RegAPEMode2_t { @@ -3312,8 +3390,11 @@ typedef struct APE_t { /** @brief Written on APE TX to network after filling 0xA002 buffer with packet. */ RegAPETxToNetDoorbellFunc0_t TxToNetDoorbellFunc0; + /** @brief APE TX Status. */ + RegAPETxState0_t TxState0; + /** @brief Reserved bytes to pad out data structure. */ - BCM5719_APE_H_uint32_t reserved_32[3]; + BCM5719_APE_H_uint32_t reserved_36[2]; /** @brief Expansion for MODE */ RegAPEMode2_t Mode2; @@ -3475,6 +3556,7 @@ typedef struct APE_t { RxbufoffsetFunc0.r32.setComponentOffset(0x14); RxbufoffsetFunc1.r32.setComponentOffset(0x18); TxToNetDoorbellFunc0.r32.setComponentOffset(0x1c); + TxState0.r32.setComponentOffset(0x20); Mode2.r32.setComponentOffset(0x2c); Status2.r32.setComponentOffset(0x30); LockGrantObsolete.r32.setComponentOffset(0x4c); diff --git a/include/bcm5719_APE_PERI.h b/include/bcm5719_APE_PERI.h index 6024989..734339b 100644 --- a/include/bcm5719_APE_PERI.h +++ b/include/bcm5719_APE_PERI.h @@ -980,10 +980,27 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch6Low_t { } RegAPE_PERIBmcToNcSourceMacMatch6Low_t; #define REG_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH ((volatile BCM5719_APE_PERI_H_uint32_t*)0xc0018344) /* Upper four bytes of the MAC */ +#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH_SHIFT 0u +#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH_MASK 0xffffffffu +#define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH(__reg__) (((__reg__) & 0xffffffff) >> 0u) +#define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_HIGH_HIGH(__val__) (((__val__) << 0u) & 0xffffffffu) + /** @brief Register definition for @ref APE_PERI_t.BmcToNcSourceMacMatch7High. */ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { /** @brief 32bit direct register access. */ BCM5719_APE_PERI_H_uint32_t r32; + + BITFIELD_BEGIN(BCM5719_APE_PERI_H_uint32_t, bits) +#if defined(__LITTLE_ENDIAN__) + /** @brief Upper four bytes of the MAC */ + BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, High, 0, 32) +#elif defined(__BIG_ENDIAN__) + /** @brief Upper four bytes of the MAC */ + BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, High, 0, 32) +#else +#error Unknown Endian +#endif + BITFIELD_END(BCM5719_APE_PERI_H_uint32_t, bits) #ifdef CXX_SIMULATOR /** @brief Register name for use with the simulator. */ const char* getName(void) { return "BmcToNcSourceMacMatch7High"; } @@ -995,6 +1012,8 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { { /** @brief constructor for @ref APE_PERI_t.BmcToNcSourceMacMatch7High. */ r32.setName("BmcToNcSourceMacMatch7High"); + bits.High.setBaseRegister(&r32); + bits.High.setName("High"); } RegAPE_PERIBmcToNcSourceMacMatch7High_t& operator=(const RegAPE_PERIBmcToNcSourceMacMatch7High_t& other) { @@ -1009,10 +1028,6 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7High_t { #define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW_MASK 0xffff0000u #define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW(__reg__) (((__reg__) & 0xffff0000) >> 16u) #define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_LOW(__val__) (((__val__) << 16u) & 0xffff0000u) -#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH_SHIFT 0u -#define APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH_MASK 0xffffffffu -#define GET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH(__reg__) (((__reg__) & 0xffffffff) >> 0u) -#define SET_APE_PERI_BMC_TO_NC_SOURCE_MAC_MATCH_7_LOW_HIGH(__val__) (((__val__) << 0u) & 0xffffffffu) /** @brief Register definition for @ref APE_PERI_t.BmcToNcSourceMacMatch7Low. */ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { @@ -1025,11 +1040,7 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, reserved_15_0, 0, 16) /** @brief Lower two bytes of the MAC */ BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, Low, 16, 16) - /** @brief Upper four bytes of the MAC */ - BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, High, 0, 32) #elif defined(__BIG_ENDIAN__) - /** @brief Upper four bytes of the MAC */ - BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, High, 0, 32) /** @brief Lower two bytes of the MAC */ BITFIELD_MEMBER(BCM5719_APE_PERI_H_uint32_t, Low, 16, 16) /** @brief Padding */ @@ -1051,8 +1062,6 @@ typedef register_container RegAPE_PERIBmcToNcSourceMacMatch7Low_t { r32.setName("BmcToNcSourceMacMatch7Low"); bits.Low.setBaseRegister(&r32); bits.Low.setName("Low"); - bits.High.setBaseRegister(&r32); - bits.High.setName("High"); } RegAPE_PERIBmcToNcSourceMacMatch7Low_t& operator=(const RegAPE_PERIBmcToNcSourceMacMatch7Low_t& other) { diff --git a/ipxact/APE.xml b/ipxact/APE.xml index b368f69..a3f1d90 100644 --- a/ipxact/APE.xml +++ b/ipxact/APE.xml @@ -167,6 +167,27 @@ <ipxact:name>BLOCK_BYTES</ipxact:name> <ipxact:value>128</ipxact:value> </ipxact:enumeratedValue> + + <ipxact:enumeratedValue> + <ipxact:name>Control Word</ipxact:name> + <ipxact:value>0</ipxact:value> + </ipxact:enumeratedValue> + <ipxact:enumeratedValue> + <ipxact:name>Frame Len Word</ipxact:name> + <ipxact:value>3</ipxact:value> + </ipxact:enumeratedValue> + <ipxact:enumeratedValue> + <ipxact:name>Num Blocks Word</ipxact:name> + <ipxact:value>9</ipxact:value> + </ipxact:enumeratedValue> + <ipxact:enumeratedValue> + <ipxact:name>First Payload Word</ipxact:name> + <ipxact:value>12</ipxact:value> + </ipxact:enumeratedValue> + <ipxact:enumeratedValue> + <ipxact:name>Additional Payload Word</ipxact:name> + <ipxact:value>2</ipxact:value> + </ipxact:enumeratedValue> </ipxact:enumeratedValues> </ipxact:field> </ipxact:register> diff --git a/ipxact/APE_component.xml b/ipxact/APE_component.xml index bf5ff9e..38b8ddd 100644 --- a/ipxact/APE_component.xml +++ b/ipxact/APE_component.xml @@ -414,6 +414,38 @@ </ipxact:field> </ipxact:register> <ipxact:register> + <ipxact:name>TX State0</ipxact:name> + <ipxact:description>APE TX Status.</ipxact:description> + <ipxact:addressOffset>0x20</ipxact:addressOffset> + <!-- LINK: registerDefinitionGroup: see 6.11.3, Register definition group --> + <ipxact:size>32</ipxact:size> + <ipxact:volatile>true</ipxact:volatile> + <ipxact:field> + <ipxact:name>Tail</ipxact:name> + <ipxact:bitOffset>0</ipxact:bitOffset> + <ipxact:bitWidth>12</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>Head</ipxact:name> + <ipxact:bitOffset>12</ipxact:bitOffset> + <ipxact:bitWidth>12</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>TXError</ipxact:name> + <ipxact:bitOffset>24</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>Error Code</ipxact:name> + <ipxact:bitOffset>25</ipxact:bitOffset> + <ipxact:bitWidth>3</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + </ipxact:register> + <ipxact:register> <ipxact:name>MODE_2</ipxact:name> <ipxact:description>Expansion for MODE</ipxact:description> <ipxact:addressOffset>0x2c</ipxact:addressOffset> @@ -2101,6 +2133,13 @@ <!-- LINK: registerDefinitionGroup: see 6.11.3, Register definition group --> <ipxact:size>32</ipxact:size> <ipxact:volatile>true</ipxact:volatile> + <ipxact:field> + <ipxact:name>High</ipxact:name> + <ipxact:description>Upper four bytes of the MAC</ipxact:description> + <ipxact:bitOffset>0</ipxact:bitOffset> + <ipxact:bitWidth>32</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> </ipxact:register> <ipxact:register> <ipxact:name>BMC to NC Source MAC Match 7 Low</ipxact:name> @@ -2116,13 +2155,6 @@ <ipxact:bitWidth>16</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> - <ipxact:field> - <ipxact:name>High</ipxact:name> - <ipxact:description>Upper four bytes of the MAC</ipxact:description> - <ipxact:bitOffset>0</ipxact:bitOffset> - <ipxact:bitWidth>32</ipxact:bitWidth> - <ipxact:access>read-write</ipxact:access> - </ipxact:field> </ipxact:register> <ipxact:register> <ipxact:name>BMC to NC RX VLAN</ipxact:name> diff --git a/simulator/bcm5719_APE.cpp b/simulator/bcm5719_APE.cpp index eb62742..1fe003a 100644 --- a/simulator/bcm5719_APE.cpp +++ b/simulator/bcm5719_APE.cpp @@ -63,6 +63,8 @@ void init_bcm5719_APE(void) /** @brief Bitmap for @ref APE_t.TxToNetDoorbellFunc0. */ + /** @brief Bitmap for @ref APE_t.TxState0. */ + /** @brief Bitmap for @ref APE_t.Mode2. */ /** @brief Bitmap for @ref APE_t.Status2. */ diff --git a/simulator/bcm5719_APE_sim.cpp b/simulator/bcm5719_APE_sim.cpp index 4d21c3f..21bee80 100644 --- a/simulator/bcm5719_APE_sim.cpp +++ b/simulator/bcm5719_APE_sim.cpp @@ -109,6 +109,10 @@ void init_bcm5719_APE_sim(void *base) APE.TxToNetDoorbellFunc0.r32.installReadCallback(read_from_ram, (uint8_t *)base); APE.TxToNetDoorbellFunc0.r32.installWriteCallback(write_to_ram, (uint8_t *)base); + /** @brief Bitmap for @ref APE_t.TxState0. */ + APE.TxState0.r32.installReadCallback(read_from_ram, (uint8_t *)base); + APE.TxState0.r32.installWriteCallback(write_to_ram, (uint8_t *)base); + /** @brief Bitmap for @ref APE_t.Mode2. */ APE.Mode2.r32.installReadCallback(read_from_ram, (uint8_t *)base); APE.Mode2.r32.installWriteCallback(write_to_ram, (uint8_t *)base); |