diff options
author | Evan Lojewski <github@meklort.com> | 2019-05-01 20:56:58 -0600 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2019-05-01 20:56:58 -0600 |
commit | 17dbcda3b0d0d438b9bb2edc56b8e6000c79b342 (patch) | |
tree | cfa915c137853b33caebabdc797d1a03739cd26f | |
parent | 2122fe004c9f32c1df39ce0162966023ac9eccc4 (diff) | |
download | bcm5719-ortega-17dbcda3b0d0d438b9bb2edc56b8e6000c79b342.tar.gz bcm5719-ortega-17dbcda3b0d0d438b9bb2edc56b8e6000c79b342.zip |
Additioanl tx trials
-rw-r--r-- | include/APE_APE.h | 208 | ||||
-rw-r--r-- | include/APE_DEVICE.h | 26 | ||||
-rw-r--r-- | include/bcm5719_APE.h | 208 | ||||
-rw-r--r-- | include/bcm5719_DEVICE.h | 26 | ||||
-rw-r--r-- | ipxact/APE_component.xml | 79 | ||||
-rw-r--r-- | ipxact/DEVICE.xml | 11 | ||||
-rw-r--r-- | simulator/bcm5719_APE.cpp | 4 | ||||
-rw-r--r-- | simulator/bcm5719_APE_sim.cpp | 8 | ||||
-rw-r--r-- | utils/bcmregtool/main.cpp | 62 |
9 files changed, 549 insertions, 83 deletions
diff --git a/include/APE_APE.h b/include/APE_APE.h index 94cc124..25a853e 100644 --- a/include/APE_APE.h +++ b/include/APE_APE.h @@ -118,6 +118,14 @@ typedef uint32_t APE_APE_H_uint32_t; #define APE_MODE_SWAP_ARB_DWORD_MASK 0x800u #define GET_APE_MODE_SWAP_ARB_DWORD(__reg__) (((__reg__) & 0x800) >> 11u) #define SET_APE_MODE_SWAP_ARB_DWORD(__val__) (((__val__) << 11u) & 0x800u) +#define APE_MODE_CHANNEL_0_STATUS_SHIFT 14u +#define APE_MODE_CHANNEL_0_STATUS_MASK 0x4000u +#define GET_APE_MODE_CHANNEL_0_STATUS(__reg__) (((__reg__) & 0x4000) >> 14u) +#define SET_APE_MODE_CHANNEL_0_STATUS(__val__) (((__val__) << 14u) & 0x4000u) +#define APE_MODE_CHANNEL_2_STATUS_SHIFT 15u +#define APE_MODE_CHANNEL_2_STATUS_MASK 0x8000u +#define GET_APE_MODE_CHANNEL_2_STATUS(__reg__) (((__reg__) & 0x8000) >> 15u) +#define SET_APE_MODE_CHANNEL_2_STATUS(__val__) (((__val__) << 15u) & 0x8000u) #define APE_MODE_MEMORY_ECC_SHIFT 18u #define APE_MODE_MEMORY_ECC_MASK 0x40000u #define GET_APE_MODE_MEMORY_ECC(__reg__) (((__reg__) & 0x40000) >> 18u) @@ -126,6 +134,14 @@ typedef uint32_t APE_APE_H_uint32_t; #define APE_MODE_ICODE_PIP_RD_DISABLE_MASK 0x80000u #define GET_APE_MODE_ICODE_PIP_RD_DISABLE(__reg__) (((__reg__) & 0x80000) >> 19u) #define SET_APE_MODE_ICODE_PIP_RD_DISABLE(__val__) (((__val__) << 19u) & 0x80000u) +#define APE_MODE_CHANNEL_1_STATUS_SHIFT 30u +#define APE_MODE_CHANNEL_1_STATUS_MASK 0x40000000u +#define GET_APE_MODE_CHANNEL_1_STATUS(__reg__) (((__reg__) & 0x40000000) >> 30u) +#define SET_APE_MODE_CHANNEL_1_STATUS(__val__) (((__val__) << 30u) & 0x40000000u) +#define APE_MODE_CHANNEL_3_STATUS_SHIFT 31u +#define APE_MODE_CHANNEL_3_STATUS_MASK 0x80000000u +#define GET_APE_MODE_CHANNEL_3_STATUS(__reg__) (((__reg__) & 0x80000000) >> 31u) +#define SET_APE_MODE_CHANNEL_3_STATUS(__val__) (((__val__) << 31u) & 0x80000000u) /** @brief Register definition for @ref APE_t.Mode. */ typedef register_container RegAPEMode_t { @@ -159,22 +175,42 @@ typedef register_container RegAPEMode_t { /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, SwapARBdword, 11, 1) /** @brief Padding */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_17_12, 12, 6) + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_13_12, 12, 2) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel0Status, 14, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel2Status, 15, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_17_16, 16, 2) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, MemoryECC, 18, 1) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, ICodePIPRdDisable, 19, 1) /** @brief Padding */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_20, 20, 12) + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_29_20, 20, 10) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel1Status, 30, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel3Status, 31, 1) #elif defined(__BIG_ENDIAN__) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel3Status, 31, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel1Status, 30, 1) /** @brief Padding */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_20, 20, 12) + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_29_20, 20, 10) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, ICodePIPRdDisable, 19, 1) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, MemoryECC, 18, 1) /** @brief Padding */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_17_12, 12, 6) + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_17_16, 16, 2) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel2Status, 15, 1) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, Channel0Status, 14, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_13_12, 12, 2) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, SwapARBdword, 11, 1) /** @brief Padding */ @@ -232,10 +268,18 @@ typedef register_container RegAPEMode_t { bits.SwapATBdword.setName("SwapATBdword"); bits.SwapARBdword.setBaseRegister(&r32); bits.SwapARBdword.setName("SwapARBdword"); + bits.Channel0Status.setBaseRegister(&r32); + bits.Channel0Status.setName("Channel0Status"); + bits.Channel2Status.setBaseRegister(&r32); + bits.Channel2Status.setName("Channel2Status"); bits.MemoryECC.setBaseRegister(&r32); bits.MemoryECC.setName("MemoryECC"); bits.ICodePIPRdDisable.setBaseRegister(&r32); bits.ICodePIPRdDisable.setName("ICodePIPRdDisable"); + bits.Channel1Status.setBaseRegister(&r32); + bits.Channel1Status.setName("Channel1Status"); + bits.Channel3Status.setBaseRegister(&r32); + bits.Channel3Status.setName("Channel3Status"); } RegAPEMode_t& operator=(const RegAPEMode_t& other) { @@ -670,9 +714,13 @@ typedef register_container RegAPERxbufoffsetFunc1_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC0_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC0_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc0. */ typedef register_container RegAPETxToNetDoorbellFunc0_t { @@ -686,10 +734,18 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -715,6 +771,8 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc0_t& operator=(const RegAPETxToNetDoorbellFunc0_t& other) { @@ -1474,6 +1532,56 @@ typedef register_container RegAPETxToNetBufferAllocator0_t { #endif /* CXX_SIMULATOR */ } RegAPETxToNetBufferAllocator0_t; +#define REG_APE_TX_TO_NET_BUFFER_RETURN_0 ((volatile APE_APE_H_uint32_t*)0x60200094) /* */ +/** @brief Register definition for @ref APE_t.TxToNetBufferReturn0. */ +typedef register_container RegAPETxToNetBufferReturn0_t { + /** @brief 32bit direct register access. */ + APE_APE_H_uint32_t r32; +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxToNetBufferReturn0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxToNetBufferReturn0_t() + { + /** @brief constructor for @ref APE_t.TxToNetBufferReturn0. */ + r32.setName("TxToNetBufferReturn0"); + } + RegAPETxToNetBufferReturn0_t& operator=(const RegAPETxToNetBufferReturn0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxToNetBufferReturn0_t; + +#define REG_APE_TX_TO_NET_BUFFER_RING_0 ((volatile APE_APE_H_uint32_t*)0x60200098) /* */ +/** @brief Register definition for @ref APE_t.TxToNetBufferRing0. */ +typedef register_container RegAPETxToNetBufferRing0_t { + /** @brief 32bit direct register access. */ + APE_APE_H_uint32_t r32; +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxToNetBufferRing0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxToNetBufferRing0_t() + { + /** @brief constructor for @ref APE_t.TxToNetBufferRing0. */ + r32.setName("TxToNetBufferRing0"); + } + RegAPETxToNetBufferRing0_t& operator=(const RegAPETxToNetBufferRing0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxToNetBufferRing0_t; + #define REG_APE_TICK_1MHZ ((volatile APE_APE_H_uint32_t*)0x602000a8) /* Unknown, monotonically increasing value. Increases at a rate of 1MHz. */ /** @brief Register definition for @ref APE_t.Tick1mhz. */ typedef register_container RegAPETick1mhz_t { @@ -2198,9 +2306,13 @@ typedef register_container RegAPETxToNetBufferAllocator1_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC1_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC1_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc1. */ typedef register_container RegAPETxToNetDoorbellFunc1_t { @@ -2214,10 +2326,18 @@ typedef register_container RegAPETxToNetDoorbellFunc1_t { /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2243,6 +2363,8 @@ typedef register_container RegAPETxToNetDoorbellFunc1_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc1_t& operator=(const RegAPETxToNetDoorbellFunc1_t& other) { @@ -2360,9 +2482,13 @@ typedef register_container RegAPERxbufoffsetFunc2_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC2_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC2_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc2. */ typedef register_container RegAPETxToNetDoorbellFunc2_t { @@ -2376,10 +2502,18 @@ typedef register_container RegAPETxToNetDoorbellFunc2_t { /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2405,6 +2539,8 @@ typedef register_container RegAPETxToNetDoorbellFunc2_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc2_t& operator=(const RegAPETxToNetDoorbellFunc2_t& other) { @@ -2916,9 +3052,13 @@ typedef register_container RegAPERxbufoffsetFunc3_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC3_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC3_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc3. */ typedef register_container RegAPETxToNetDoorbellFunc3_t { @@ -2932,10 +3072,18 @@ typedef register_container RegAPETxToNetDoorbellFunc3_t { /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(APE_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(APE_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(APE_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2961,6 +3109,8 @@ typedef register_container RegAPETxToNetDoorbellFunc3_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc3_t& operator=(const RegAPETxToNetDoorbellFunc3_t& other) { @@ -3432,8 +3582,14 @@ typedef struct APE_t { /** @brief */ RegAPETxToNetBufferAllocator0_t TxToNetBufferAllocator0; + /** @brief */ + RegAPETxToNetBufferReturn0_t TxToNetBufferReturn0; + + /** @brief */ + RegAPETxToNetBufferRing0_t TxToNetBufferRing0; + /** @brief Reserved bytes to pad out data structure. */ - APE_APE_H_uint32_t reserved_148[5]; + APE_APE_H_uint32_t reserved_156[3]; /** @brief Unknown, monotonically increasing value. Increases at a rate of 1MHz. */ RegAPETick1mhz_t Tick1mhz; @@ -3566,6 +3722,8 @@ typedef struct APE_t { RxPoolRetire1.r32.setComponentOffset(0x88); TxToNetPoolModeStatus0.r32.setComponentOffset(0x8c); TxToNetBufferAllocator0.r32.setComponentOffset(0x90); + TxToNetBufferReturn0.r32.setComponentOffset(0x94); + TxToNetBufferRing0.r32.setComponentOffset(0x98); Tick1mhz.r32.setComponentOffset(0xa8); Tick1khz.r32.setComponentOffset(0xac); Tick10hz.r32.setComponentOffset(0xb0); diff --git a/include/APE_DEVICE.h b/include/APE_DEVICE.h index 1f4c82b..28835d0 100644 --- a/include/APE_DEVICE.h +++ b/include/APE_DEVICE.h @@ -6636,10 +6636,14 @@ typedef register_container RegDEVICEGrcModeControl_t { } RegDEVICEGrcModeControl_t; #define REG_DEVICE_MISCELLANEOUS_CONFIG ((volatile APE_DEVICE_H_uint32_t*)0xa0046804) /* */ -#define DEVICE_MISCELLANEOUS_CONFIG_ALL_SHIFT 0u -#define DEVICE_MISCELLANEOUS_CONFIG_ALL_MASK 0xffffffffu -#define GET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) -#define SET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET_SHIFT 1u +#define DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET_MASK 0x2u +#define GET_DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET(__reg__) (((__reg__) & 0x2) >> 1u) +#define SET_DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET(__val__) (((__val__) << 1u) & 0x2u) +#define DEVICE_MISCELLANEOUS_CONFIG_ALL_SHIFT 1u +#define DEVICE_MISCELLANEOUS_CONFIG_ALL_MASK 0xfffffffeu +#define GET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__reg__) (((__reg__) & 0xfffffffe) >> 1u) +#define SET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__val__) (((__val__) << 1u) & 0xfffffffeu) /** @brief Register definition for @ref DEVICE_t.MiscellaneousConfig. */ typedef register_container RegDEVICEMiscellaneousConfig_t { @@ -6648,11 +6652,19 @@ typedef register_container RegDEVICEMiscellaneousConfig_t { BITFIELD_BEGIN(APE_DEVICE_H_uint32_t, bits) #if defined(__LITTLE_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, reserved_0_0, 0, 1) + /** @brief */ + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, GRCReset, 1, 1) /** @brief */ - BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, all, 0, 32) + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, all, 1, 31) #elif defined(__BIG_ENDIAN__) /** @brief */ - BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, all, 0, 32) + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, all, 1, 31) + /** @brief */ + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, GRCReset, 1, 1) + /** @brief Padding */ + BITFIELD_MEMBER(APE_DEVICE_H_uint32_t, reserved_0_0, 0, 1) #else #error Unknown Endian #endif @@ -6668,6 +6680,8 @@ typedef register_container RegDEVICEMiscellaneousConfig_t { { /** @brief constructor for @ref DEVICE_t.MiscellaneousConfig. */ r32.setName("MiscellaneousConfig"); + bits.GRCReset.setBaseRegister(&r32); + bits.GRCReset.setName("GRCReset"); bits.all.setBaseRegister(&r32); bits.all.setName("all"); } diff --git a/include/bcm5719_APE.h b/include/bcm5719_APE.h index 66f08d9..1c0144b 100644 --- a/include/bcm5719_APE.h +++ b/include/bcm5719_APE.h @@ -118,6 +118,14 @@ typedef uint32_t BCM5719_APE_H_uint32_t; #define APE_MODE_SWAP_ARB_DWORD_MASK 0x800u #define GET_APE_MODE_SWAP_ARB_DWORD(__reg__) (((__reg__) & 0x800) >> 11u) #define SET_APE_MODE_SWAP_ARB_DWORD(__val__) (((__val__) << 11u) & 0x800u) +#define APE_MODE_CHANNEL_0_STATUS_SHIFT 14u +#define APE_MODE_CHANNEL_0_STATUS_MASK 0x4000u +#define GET_APE_MODE_CHANNEL_0_STATUS(__reg__) (((__reg__) & 0x4000) >> 14u) +#define SET_APE_MODE_CHANNEL_0_STATUS(__val__) (((__val__) << 14u) & 0x4000u) +#define APE_MODE_CHANNEL_2_STATUS_SHIFT 15u +#define APE_MODE_CHANNEL_2_STATUS_MASK 0x8000u +#define GET_APE_MODE_CHANNEL_2_STATUS(__reg__) (((__reg__) & 0x8000) >> 15u) +#define SET_APE_MODE_CHANNEL_2_STATUS(__val__) (((__val__) << 15u) & 0x8000u) #define APE_MODE_MEMORY_ECC_SHIFT 18u #define APE_MODE_MEMORY_ECC_MASK 0x40000u #define GET_APE_MODE_MEMORY_ECC(__reg__) (((__reg__) & 0x40000) >> 18u) @@ -126,6 +134,14 @@ typedef uint32_t BCM5719_APE_H_uint32_t; #define APE_MODE_ICODE_PIP_RD_DISABLE_MASK 0x80000u #define GET_APE_MODE_ICODE_PIP_RD_DISABLE(__reg__) (((__reg__) & 0x80000) >> 19u) #define SET_APE_MODE_ICODE_PIP_RD_DISABLE(__val__) (((__val__) << 19u) & 0x80000u) +#define APE_MODE_CHANNEL_1_STATUS_SHIFT 30u +#define APE_MODE_CHANNEL_1_STATUS_MASK 0x40000000u +#define GET_APE_MODE_CHANNEL_1_STATUS(__reg__) (((__reg__) & 0x40000000) >> 30u) +#define SET_APE_MODE_CHANNEL_1_STATUS(__val__) (((__val__) << 30u) & 0x40000000u) +#define APE_MODE_CHANNEL_3_STATUS_SHIFT 31u +#define APE_MODE_CHANNEL_3_STATUS_MASK 0x80000000u +#define GET_APE_MODE_CHANNEL_3_STATUS(__reg__) (((__reg__) & 0x80000000) >> 31u) +#define SET_APE_MODE_CHANNEL_3_STATUS(__val__) (((__val__) << 31u) & 0x80000000u) /** @brief Register definition for @ref APE_t.Mode. */ typedef register_container RegAPEMode_t { @@ -159,22 +175,42 @@ typedef register_container RegAPEMode_t { /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, SwapARBdword, 11, 1) /** @brief Padding */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_17_12, 12, 6) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_13_12, 12, 2) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel0Status, 14, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel2Status, 15, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_17_16, 16, 2) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, MemoryECC, 18, 1) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, ICodePIPRdDisable, 19, 1) /** @brief Padding */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_20, 20, 12) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_29_20, 20, 10) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel1Status, 30, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel3Status, 31, 1) #elif defined(__BIG_ENDIAN__) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel3Status, 31, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel1Status, 30, 1) /** @brief Padding */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_20, 20, 12) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_29_20, 20, 10) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, ICodePIPRdDisable, 19, 1) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, MemoryECC, 18, 1) /** @brief Padding */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_17_12, 12, 6) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_17_16, 16, 2) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel2Status, 15, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Channel0Status, 14, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_13_12, 12, 2) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, SwapARBdword, 11, 1) /** @brief Padding */ @@ -232,10 +268,18 @@ typedef register_container RegAPEMode_t { bits.SwapATBdword.setName("SwapATBdword"); bits.SwapARBdword.setBaseRegister(&r32); bits.SwapARBdword.setName("SwapARBdword"); + bits.Channel0Status.setBaseRegister(&r32); + bits.Channel0Status.setName("Channel0Status"); + bits.Channel2Status.setBaseRegister(&r32); + bits.Channel2Status.setName("Channel2Status"); bits.MemoryECC.setBaseRegister(&r32); bits.MemoryECC.setName("MemoryECC"); bits.ICodePIPRdDisable.setBaseRegister(&r32); bits.ICodePIPRdDisable.setName("ICodePIPRdDisable"); + bits.Channel1Status.setBaseRegister(&r32); + bits.Channel1Status.setName("Channel1Status"); + bits.Channel3Status.setBaseRegister(&r32); + bits.Channel3Status.setName("Channel3Status"); } RegAPEMode_t& operator=(const RegAPEMode_t& other) { @@ -670,9 +714,13 @@ typedef register_container RegAPERxbufoffsetFunc1_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC0_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC0_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC0_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc0. */ typedef register_container RegAPETxToNetDoorbellFunc0_t { @@ -686,10 +734,18 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -715,6 +771,8 @@ typedef register_container RegAPETxToNetDoorbellFunc0_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc0_t& operator=(const RegAPETxToNetDoorbellFunc0_t& other) { @@ -1474,6 +1532,56 @@ typedef register_container RegAPETxToNetBufferAllocator0_t { #endif /* CXX_SIMULATOR */ } RegAPETxToNetBufferAllocator0_t; +#define REG_APE_TX_TO_NET_BUFFER_RETURN_0 ((volatile BCM5719_APE_H_uint32_t*)0xc0010094) /* */ +/** @brief Register definition for @ref APE_t.TxToNetBufferReturn0. */ +typedef register_container RegAPETxToNetBufferReturn0_t { + /** @brief 32bit direct register access. */ + BCM5719_APE_H_uint32_t r32; +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxToNetBufferReturn0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxToNetBufferReturn0_t() + { + /** @brief constructor for @ref APE_t.TxToNetBufferReturn0. */ + r32.setName("TxToNetBufferReturn0"); + } + RegAPETxToNetBufferReturn0_t& operator=(const RegAPETxToNetBufferReturn0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxToNetBufferReturn0_t; + +#define REG_APE_TX_TO_NET_BUFFER_RING_0 ((volatile BCM5719_APE_H_uint32_t*)0xc0010098) /* */ +/** @brief Register definition for @ref APE_t.TxToNetBufferRing0. */ +typedef register_container RegAPETxToNetBufferRing0_t { + /** @brief 32bit direct register access. */ + BCM5719_APE_H_uint32_t r32; +#ifdef CXX_SIMULATOR + /** @brief Register name for use with the simulator. */ + const char* getName(void) { return "TxToNetBufferRing0"; } + + /** @brief Print register value. */ + void print(void) { r32.print(); } + + RegAPETxToNetBufferRing0_t() + { + /** @brief constructor for @ref APE_t.TxToNetBufferRing0. */ + r32.setName("TxToNetBufferRing0"); + } + RegAPETxToNetBufferRing0_t& operator=(const RegAPETxToNetBufferRing0_t& other) + { + r32 = other.r32; + return *this; + } +#endif /* CXX_SIMULATOR */ +} RegAPETxToNetBufferRing0_t; + #define REG_APE_TICK_1MHZ ((volatile BCM5719_APE_H_uint32_t*)0xc00100a8) /* Unknown, monotonically increasing value. Increases at a rate of 1MHz. */ /** @brief Register definition for @ref APE_t.Tick1mhz. */ typedef register_container RegAPETick1mhz_t { @@ -2198,9 +2306,13 @@ typedef register_container RegAPETxToNetBufferAllocator1_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC1_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC1_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC1_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc1. */ typedef register_container RegAPETxToNetDoorbellFunc1_t { @@ -2214,10 +2326,18 @@ typedef register_container RegAPETxToNetDoorbellFunc1_t { /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2243,6 +2363,8 @@ typedef register_container RegAPETxToNetDoorbellFunc1_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc1_t& operator=(const RegAPETxToNetDoorbellFunc1_t& other) { @@ -2360,9 +2482,13 @@ typedef register_container RegAPERxbufoffsetFunc2_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC2_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC2_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC2_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc2. */ typedef register_container RegAPETxToNetDoorbellFunc2_t { @@ -2376,10 +2502,18 @@ typedef register_container RegAPETxToNetDoorbellFunc2_t { /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2405,6 +2539,8 @@ typedef register_container RegAPETxToNetDoorbellFunc2_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc2_t& operator=(const RegAPETxToNetDoorbellFunc2_t& other) { @@ -2916,9 +3052,13 @@ typedef register_container RegAPERxbufoffsetFunc3_t { #define GET_APE_TX_TO_NET_DOORBELL_FUNC3_HEAD(__reg__) (((__reg__) & 0xfff000) >> 12u) #define SET_APE_TX_TO_NET_DOORBELL_FUNC3_HEAD(__val__) (((__val__) << 12u) & 0xfff000u) #define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_SHIFT 24u -#define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_MASK 0xff000000u -#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__reg__) (((__reg__) & 0xff000000) >> 24u) -#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__val__) (((__val__) << 24u) & 0xff000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH_MASK 0xf000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__reg__) (((__reg__) & 0xf000000) >> 24u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_LENGTH(__val__) (((__val__) << 24u) & 0xf000000u) +#define APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL_SHIFT 28u +#define APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL_MASK 0x10000000u +#define GET_APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL(__reg__) (((__reg__) & 0x10000000) >> 28u) +#define SET_APE_TX_TO_NET_DOORBELL_FUNC3_TX_QUEUE_FULL(__val__) (((__val__) << 28u) & 0x10000000u) /** @brief Register definition for @ref APE_t.TxToNetDoorbellFunc3. */ typedef register_container RegAPETxToNetDoorbellFunc3_t { @@ -2932,10 +3072,18 @@ typedef register_container RegAPETxToNetDoorbellFunc3_t { /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) #elif defined(__BIG_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, reserved_31_29, 29, 3) + /** @brief */ + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, TXQueueFull, 28, 1) /** @brief */ - BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 8) + BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Length, 24, 4) /** @brief */ BITFIELD_MEMBER(BCM5719_APE_H_uint32_t, Head, 12, 12) /** @brief */ @@ -2961,6 +3109,8 @@ typedef register_container RegAPETxToNetDoorbellFunc3_t { bits.Head.setName("Head"); bits.Length.setBaseRegister(&r32); bits.Length.setName("Length"); + bits.TXQueueFull.setBaseRegister(&r32); + bits.TXQueueFull.setName("TXQueueFull"); } RegAPETxToNetDoorbellFunc3_t& operator=(const RegAPETxToNetDoorbellFunc3_t& other) { @@ -3432,8 +3582,14 @@ typedef struct APE_t { /** @brief */ RegAPETxToNetBufferAllocator0_t TxToNetBufferAllocator0; + /** @brief */ + RegAPETxToNetBufferReturn0_t TxToNetBufferReturn0; + + /** @brief */ + RegAPETxToNetBufferRing0_t TxToNetBufferRing0; + /** @brief Reserved bytes to pad out data structure. */ - BCM5719_APE_H_uint32_t reserved_148[5]; + BCM5719_APE_H_uint32_t reserved_156[3]; /** @brief Unknown, monotonically increasing value. Increases at a rate of 1MHz. */ RegAPETick1mhz_t Tick1mhz; @@ -3566,6 +3722,8 @@ typedef struct APE_t { RxPoolRetire1.r32.setComponentOffset(0x88); TxToNetPoolModeStatus0.r32.setComponentOffset(0x8c); TxToNetBufferAllocator0.r32.setComponentOffset(0x90); + TxToNetBufferReturn0.r32.setComponentOffset(0x94); + TxToNetBufferRing0.r32.setComponentOffset(0x98); Tick1mhz.r32.setComponentOffset(0xa8); Tick1khz.r32.setComponentOffset(0xac); Tick10hz.r32.setComponentOffset(0xb0); diff --git a/include/bcm5719_DEVICE.h b/include/bcm5719_DEVICE.h index 5513ab6..d25c2f2 100644 --- a/include/bcm5719_DEVICE.h +++ b/include/bcm5719_DEVICE.h @@ -6636,10 +6636,14 @@ typedef register_container RegDEVICEGrcModeControl_t { } RegDEVICEGrcModeControl_t; #define REG_DEVICE_MISCELLANEOUS_CONFIG ((volatile BCM5719_DEVICE_H_uint32_t*)0xc0006804) /* */ -#define DEVICE_MISCELLANEOUS_CONFIG_ALL_SHIFT 0u -#define DEVICE_MISCELLANEOUS_CONFIG_ALL_MASK 0xffffffffu -#define GET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__reg__) (((__reg__) & 0xffffffff) >> 0u) -#define SET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__val__) (((__val__) << 0u) & 0xffffffffu) +#define DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET_SHIFT 1u +#define DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET_MASK 0x2u +#define GET_DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET(__reg__) (((__reg__) & 0x2) >> 1u) +#define SET_DEVICE_MISCELLANEOUS_CONFIG_GRC_RESET(__val__) (((__val__) << 1u) & 0x2u) +#define DEVICE_MISCELLANEOUS_CONFIG_ALL_SHIFT 1u +#define DEVICE_MISCELLANEOUS_CONFIG_ALL_MASK 0xfffffffeu +#define GET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__reg__) (((__reg__) & 0xfffffffe) >> 1u) +#define SET_DEVICE_MISCELLANEOUS_CONFIG_ALL(__val__) (((__val__) << 1u) & 0xfffffffeu) /** @brief Register definition for @ref DEVICE_t.MiscellaneousConfig. */ typedef register_container RegDEVICEMiscellaneousConfig_t { @@ -6648,11 +6652,19 @@ typedef register_container RegDEVICEMiscellaneousConfig_t { BITFIELD_BEGIN(BCM5719_DEVICE_H_uint32_t, bits) #if defined(__LITTLE_ENDIAN__) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, reserved_0_0, 0, 1) + /** @brief */ + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, GRCReset, 1, 1) /** @brief */ - BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, all, 0, 32) + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, all, 1, 31) #elif defined(__BIG_ENDIAN__) /** @brief */ - BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, all, 0, 32) + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, all, 1, 31) + /** @brief */ + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, GRCReset, 1, 1) + /** @brief Padding */ + BITFIELD_MEMBER(BCM5719_DEVICE_H_uint32_t, reserved_0_0, 0, 1) #else #error Unknown Endian #endif @@ -6668,6 +6680,8 @@ typedef register_container RegDEVICEMiscellaneousConfig_t { { /** @brief constructor for @ref DEVICE_t.MiscellaneousConfig. */ r32.setName("MiscellaneousConfig"); + bits.GRCReset.setBaseRegister(&r32); + bits.GRCReset.setName("GRCReset"); bits.all.setBaseRegister(&r32); bits.all.setName("all"); } diff --git a/ipxact/APE_component.xml b/ipxact/APE_component.xml index 38b8ddd..3200034 100644 --- a/ipxact/APE_component.xml +++ b/ipxact/APE_component.xml @@ -89,6 +89,20 @@ <ipxact:access>read-write</ipxact:access> </ipxact:field> <ipxact:field> + <ipxact:name>Channel 0 Status</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>14</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>Channel 2 Status</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>15</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> <ipxact:name>Memory ECC</ipxact:name> <ipxact:description></ipxact:description> <ipxact:bitOffset>18</ipxact:bitOffset> @@ -101,7 +115,22 @@ <ipxact:bitOffset>19</ipxact:bitOffset> <ipxact:bitWidth>1</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> - </ipxact:field> </ipxact:register> + </ipxact:field> + <ipxact:field> + <ipxact:name>Channel 1 Status</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>30</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>Channel 3 Status</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>31</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + </ipxact:register> <ipxact:register> <ipxact:name>STATUS</ipxact:name> <ipxact:description></ipxact:description> @@ -409,7 +438,13 @@ <ipxact:field> <ipxact:name>Length</ipxact:name> <ipxact:bitOffset>24</ipxact:bitOffset> - <ipxact:bitWidth>8</ipxact:bitWidth> + <ipxact:bitWidth>4</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>TX Queue Full</ipxact:name> + <ipxact:bitOffset>28</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> </ipxact:register> @@ -806,6 +841,22 @@ </ipxact:field> </ipxact:register> <ipxact:register> + <ipxact:name>TX To Net Buffer Return 0</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:addressOffset>0x94</ipxact:addressOffset> + <!-- LINK: registerDefinitionGroup: see 6.11.3, Register definition group --> + <ipxact:size>32</ipxact:size> + <ipxact:volatile>true</ipxact:volatile> + </ipxact:register> + <ipxact:register> + <ipxact:name>TX To Net Buffer Ring 0</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:addressOffset>0x98</ipxact:addressOffset> + <!-- LINK: registerDefinitionGroup: see 6.11.3, Register definition group --> + <ipxact:size>32</ipxact:size> + <ipxact:volatile>true</ipxact:volatile> + </ipxact:register> + <ipxact:register> <ipxact:name>Tick 1MHz</ipxact:name> <ipxact:description>Unknown, monotonically increasing value. Increases at a rate of 1MHz.</ipxact:description> <ipxact:addressOffset>0xa8</ipxact:addressOffset> @@ -1191,7 +1242,13 @@ <ipxact:field> <ipxact:name>Length</ipxact:name> <ipxact:bitOffset>24</ipxact:bitOffset> - <ipxact:bitWidth>8</ipxact:bitWidth> + <ipxact:bitWidth>4</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>TX Queue Full</ipxact:name> + <ipxact:bitOffset>28</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> </ipxact:register> @@ -1261,7 +1318,13 @@ <ipxact:field> <ipxact:name>Length</ipxact:name> <ipxact:bitOffset>24</ipxact:bitOffset> - <ipxact:bitWidth>8</ipxact:bitWidth> + <ipxact:bitWidth>4</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>TX Queue Full</ipxact:name> + <ipxact:bitOffset>28</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> </ipxact:register> @@ -1555,7 +1618,13 @@ <ipxact:field> <ipxact:name>Length</ipxact:name> <ipxact:bitOffset>24</ipxact:bitOffset> - <ipxact:bitWidth>8</ipxact:bitWidth> + <ipxact:bitWidth>4</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> + <ipxact:name>TX Queue Full</ipxact:name> + <ipxact:bitOffset>28</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> </ipxact:register> diff --git a/ipxact/DEVICE.xml b/ipxact/DEVICE.xml index d8b710c..4506d88 100644 --- a/ipxact/DEVICE.xml +++ b/ipxact/DEVICE.xml @@ -3728,10 +3728,17 @@ <ipxact:size>32</ipxact:size> <ipxact:volatile>true</ipxact:volatile> <ipxact:field> + <ipxact:name>GRC Reset</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>1</ipxact:bitOffset> + <ipxact:bitWidth>1</ipxact:bitWidth> + <ipxact:access>read-write</ipxact:access> + </ipxact:field> + <ipxact:field> <ipxact:name>all</ipxact:name> <ipxact:description></ipxact:description> - <ipxact:bitOffset>0</ipxact:bitOffset> - <ipxact:bitWidth>32</ipxact:bitWidth> + <ipxact:bitOffset>1</ipxact:bitOffset> + <ipxact:bitWidth>31</ipxact:bitWidth> <ipxact:access>read-write</ipxact:access> </ipxact:field> </ipxact:register> diff --git a/simulator/bcm5719_APE.cpp b/simulator/bcm5719_APE.cpp index 1fe003a..cd91752 100644 --- a/simulator/bcm5719_APE.cpp +++ b/simulator/bcm5719_APE.cpp @@ -83,6 +83,10 @@ void init_bcm5719_APE(void) /** @brief Bitmap for @ref APE_t.TxToNetBufferAllocator0. */ + /** @brief Bitmap for @ref APE_t.TxToNetBufferReturn0. */ + + /** @brief Bitmap for @ref APE_t.TxToNetBufferRing0. */ + /** @brief Bitmap for @ref APE_t.Tick1mhz. */ /** @brief Bitmap for @ref APE_t.Tick1khz. */ diff --git a/simulator/bcm5719_APE_sim.cpp b/simulator/bcm5719_APE_sim.cpp index 21bee80..113ecf0 100644 --- a/simulator/bcm5719_APE_sim.cpp +++ b/simulator/bcm5719_APE_sim.cpp @@ -149,6 +149,14 @@ void init_bcm5719_APE_sim(void *base) APE.TxToNetBufferAllocator0.r32.installReadCallback(read_from_ram, (uint8_t *)base); APE.TxToNetBufferAllocator0.r32.installWriteCallback(write_to_ram, (uint8_t *)base); + /** @brief Bitmap for @ref APE_t.TxToNetBufferReturn0. */ + APE.TxToNetBufferReturn0.r32.installReadCallback(read_from_ram, (uint8_t *)base); + APE.TxToNetBufferReturn0.r32.installWriteCallback(write_to_ram, (uint8_t *)base); + + /** @brief Bitmap for @ref APE_t.TxToNetBufferRing0. */ + APE.TxToNetBufferRing0.r32.installReadCallback(read_from_ram, (uint8_t *)base); + APE.TxToNetBufferRing0.r32.installWriteCallback(write_to_ram, (uint8_t *)base); + /** @brief Bitmap for @ref APE_t.Tick1mhz. */ APE.Tick1mhz.r32.installReadCallback(read_from_ram, (uint8_t *)base); APE.Tick1mhz.r32.installWriteCallback(write_to_ram, (uint8_t *)base); diff --git a/utils/bcmregtool/main.cpp b/utils/bcmregtool/main.cpp index e98b2ab..bfb77d0 100644 --- a/utils/bcmregtool/main.cpp +++ b/utils/bcmregtool/main.cpp @@ -425,11 +425,6 @@ uint32_t initFirstBlock(RegTX_PORTOut_t* block, uint32_t length, int32_t blocks, block[TX_PORT_OUT_ALL_FIRST_PAYLOAD_WORD + i].r32 = 0; printf("Block[%d]: pad(0)\n", i+TX_PORT_OUT_ALL_FIRST_PAYLOAD_WORD); } - - control.bits.payload_length = copy_length; - - printf("Control: %x\n", control.r32); - block[TX_PORT_OUT_ALL_CONTROL_WORD].r32 = control.r32; // block[1] = uninitialized; block[2].r32 = 0; block[TX_PORT_OUT_ALL_FRAME_LEN_WORD].r32 = length; @@ -447,6 +442,10 @@ uint32_t initFirstBlock(RegTX_PORTOut_t* block, uint32_t length, int32_t blocks, // printf("Block[%d]: 0x%08X\n", i, (uint32_t)block[i].r32); } + control.bits.payload_length = copy_length; + + printf("Control0: %x\n", control.r32); + block[TX_PORT_OUT_ALL_CONTROL_WORD].r32 = control.r32; length -= control.bits.payload_length; @@ -482,8 +481,6 @@ uint32_t initAdditionalBlock(RegTX_PORTOut_t* block, int32_t next_block, uint32_ control.bits.not_last = 0; } - printf("Control: %x\n", control.r32); - block[TX_PORT_OUT_ALL_CONTROL_WORD].r32 = control.r32; // block[1] = uninitialized; for(i = 0; i < 2; i++) @@ -500,6 +497,9 @@ uint32_t initAdditionalBlock(RegTX_PORTOut_t* block, int32_t next_block, uint32_ } + printf("Control: %x\n", control.r32); + block[TX_PORT_OUT_ALL_CONTROL_WORD].r32 = control.r32; + length -= control.bits.payload_length; return length; @@ -541,6 +541,10 @@ void transmitPacket(uint8_t* packet, uint32_t length) } int tail = next_block; + if(next_block == -1) + { + tail = first; + } printf("Head: %d, Tail: %d\n", first, tail); @@ -552,7 +556,8 @@ void transmitPacket(uint8_t* packet, uint32_t length) doorbell.print(); APE.TxToNetDoorbellFunc0 = doorbell; - + APE.TxToNetDoorbellFunc0.print(); + APE.TxToNetBufferReturn0.print(); } void step(void) @@ -660,6 +665,12 @@ int main(int argc, char const *argv[]) .action("store_true") .help("File to boot on the APE."); + parser.add_option("-reset", "--reset") + .dest("reset") + .set_default("0") + .action("store_true") + .help("File to boot on the APE."); + parser.add_option("-m", "--mii") .dest("mii") .set_default("0") @@ -877,9 +888,19 @@ int main(int argc, char const *argv[]) exit(0); } + if(options.get("reset")) + { + + DEVICE.MiscellaneousConfig.bits.GRCReset = 1; + exit(0); + } + + + if(options.get("rx")) { DEVICE.ReceiveMacMode.print(); + DEVICE.EmacMode.print(); APE.RxPoolModeStatus0.print(); APE.RxbufoffsetFunc0.print(); exit(0); @@ -887,18 +908,31 @@ int main(int argc, char const *argv[]) if(options.get("tx")) { + // allocateTXBlock(); + DEVICE.EmacMode.print(); + APE.Mode.print(); + APE.Status.print(); APE.TxState0.print(); APE.TxToNetPoolModeStatus0.print(); APE.TxToNetBufferAllocator0.print(); + APE.TxToNetBufferRing0.print(); + APE.TxToNetBufferReturn0.print(); APE.TxToNetDoorbellFunc0.print(); - exit(0); - // APE.RxbufoffsetFunc0.print(); - transmitPacket(ping_packet, ping_packet_len); - - APE.TxToNetPoolModeStatus0.print(); + if(APE.TxToNetDoorbellFunc0.bits.TXQueueFull) + { + fprintf(stderr, "TX Queue Full\n"); + abort(); + } + transmitPacket(ping_packet, 68); APE.TxState0.print(); + APE.TxToNetPoolModeStatus0.print(); + APE.TxToNetBufferAllocator0.print(); + APE.TxToNetBufferRing0.print(); + APE.TxToNetBufferReturn0.print(); + APE.TxToNetDoorbellFunc0.print(); exit(0); + } if(options.get("ape")) @@ -958,7 +992,7 @@ int main(int argc, char const *argv[]) // NVIC.SystickCurrentValue.print(); // NVIC.SystickCurrentValue.print(); // NVIC.SystickCalibrationValue.print(); - APE_PERI.RmuControl.bits.AutoDrv =1; + // APE_PERI.RmuControl.bits.AutoDrv =1; APE_PERI.RmuControl.print(); #if 0 uint32_t buffer[1024]; |