summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libs/Network/include/Network.h35
-rw-r--r--libs/Network/rx.c37
-rw-r--r--libs/Network/tx.c33
3 files changed, 46 insertions, 59 deletions
diff --git a/libs/Network/include/Network.h b/libs/Network/include/Network.h
index 70c1140..25dab4b 100644
--- a/libs/Network/include/Network.h
+++ b/libs/Network/include/Network.h
@@ -47,20 +47,21 @@
#include <APE_APE.h>
#include <APE_APE_PERI.h>
-#include <APE_TX_PORT0.h>
#include <APE_RX_PORT0.h>
-#include <APE_TX_PORT1.h>
#include <APE_RX_PORT1.h>
-#include <APE_TX_PORT2.h>
#include <APE_RX_PORT2.h>
-#include <APE_TX_PORT3.h>
#include <APE_RX_PORT3.h>
+#include <APE_TX_PORT0.h>
+#include <APE_TX_PORT1.h>
+#include <APE_TX_PORT2.h>
+#include <APE_TX_PORT3.h>
#include <types.h>
-typedef struct {
+typedef struct
+{
/* TX Registers */
volatile RegAPETxToNetPoolModeStatus_t *tx_mode;
- volatile TX_PORT_t * tx_port;
+ volatile TX_PORT_t *tx_port;
volatile RegAPETxToNetBufferAllocator_t *tx_allocator;
volatile RegAPETxToNetDoorbell_t *tx_doorbell;
@@ -71,6 +72,17 @@ typedef struct {
volatile RegAPERxPoolRetire_t *rx_retire;
} NetworkPort_t;
+typedef union {
+ uint32_t r32;
+ struct
+ {
+ uint32_t payload_length:7;
+ uint32_t next_block:23;
+ uint32_t first:1;
+ uint32_t not_last:1;
+ } bits;
+} network_control_t;
+
extern NetworkPort_t gPort0;
extern NetworkPort_t gPort1;
@@ -82,15 +94,18 @@ void Network_InitTxRx(void);
uint32_t Network_TX_numBlocksNeeded(uint32_t frame_size);
int32_t Network_TX_allocateBlock(NetworkPort_t *port);
-void Network_TX_transmitBePacket(uint8_t *packet, uint32_t length, NetworkPort_t *port);
-void Network_TX_transmitLePacket(uint8_t *packet, uint32_t length, NetworkPort_t *port);
+void Network_TX_transmitBePacket(uint8_t *packet, uint32_t length,
+ NetworkPort_t *port);
+void Network_TX_transmitLePacket(uint8_t *packet, uint32_t length,
+ NetworkPort_t *port);
-void Network_TX_transmitPassthroughPacket(uint32_t length, NetworkPort_t* port);
+void Network_TX_transmitPassthroughPacket(uint32_t length, NetworkPort_t *port);
// void Network_TX_transmitPassthroughPacket(RegAPE_PERIBmcToNcRxStatus_t
// rx_status);
-bool Network_RxLePatcket(uint32_t *buffer, uint32_t *length, NetworkPort_t *port);
+bool Network_RxLePatcket(uint32_t *buffer, uint32_t *length,
+ NetworkPort_t *port);
bool Network_PassthroughRxPatcket(NetworkPort_t *port);
void Network_SetMACAddr(uint16_t high, uint32_t low, uint32_t index,
diff --git a/libs/Network/rx.c b/libs/Network/rx.c
index 069eaef..ef9f698 100644
--- a/libs/Network/rx.c
+++ b/libs/Network/rx.c
@@ -56,20 +56,11 @@
bool Network_RxLePatcket(uint32_t *buffer, uint32_t *bytes, NetworkPort_t *port)
{
RegAPERxbufoffset_t rxbuf;
- rxbuf = *((RegAPERxbufoffset_t*)port->rx_offset);
+ rxbuf = *((RegAPERxbufoffset_t *)port->rx_offset);
if ((int)rxbuf.bits.Valid)
{
uint32_t rx_bytes = 0;
- union {
- uint32_t r32;
- struct
- {
- uint32_t payload_length:7;
- uint32_t next_block:23;
- uint32_t first:1;
- uint32_t not_last:1;
- } bits;
- } control;
+ network_control_t control;
int count = rxbuf.bits.Count;
// int tailid = rxbuf.bits.Tail;
int blockid = rxbuf.bits.Head;
@@ -119,10 +110,10 @@ bool Network_RxLePatcket(uint32_t *buffer, uint32_t *bytes, NetworkPort_t *port)
retire.bits.Tail = rxbuf.bits.Tail;
retire.bits.Count = rxbuf.bits.Count;
retire.bits.Retire = 1;
- *((RegAPERxPoolRetire_t*)port->rx_retire) = retire;
+ *((RegAPERxPoolRetire_t *)port->rx_retire) = retire;
rxbuf.bits.Finished = 1;
- *((RegAPERxbufoffset_t*)port->rx_offset) = rxbuf;
+ *((RegAPERxbufoffset_t *)port->rx_offset) = rxbuf;
*bytes = rx_bytes;
@@ -137,22 +128,13 @@ bool Network_RxLePatcket(uint32_t *buffer, uint32_t *bytes, NetworkPort_t *port)
bool Network_PassthroughRxPatcket(NetworkPort_t *port)
{
RegAPERxbufoffset_t rxbuf;
- rxbuf = *((RegAPERxbufoffset_t*)port->rx_offset);
+ rxbuf = *((RegAPERxbufoffset_t *)port->rx_offset);
if ((int)rxbuf.bits.Valid)
{
#if CXX_SIMULATOR
rxbuf.print();
#endif
- union {
- uint32_t r32;
- struct
- {
- uint32_t payload_length:7;
- uint32_t next_block:23;
- uint32_t first:1;
- uint32_t not_last:1;
- } bits;
- } control;
+ network_control_t control;
int count = rxbuf.bits.Count;
// int tailid = rxbuf.bits.Tail;
int blockid = rxbuf.bits.Head;
@@ -208,7 +190,8 @@ bool Network_PassthroughRxPatcket(NetworkPort_t *port)
{
// data = block[i + offset].r32;
// Last word to send.
- APE_PERI.BmcToNcTxControl.r32 = control.bits.payload_length % sizeof(uint32_t);
+ APE_PERI.BmcToNcTxControl.r32 =
+ control.bits.payload_length % sizeof(uint32_t);
APE_PERI.BmcToNcTxBufferLast.r32 = data;
// Ignore last word - drop the FCS.
@@ -222,14 +205,14 @@ bool Network_PassthroughRxPatcket(NetworkPort_t *port)
retire.bits.Head = blockid;
retire.bits.Tail = blockid;
retire.bits.Count = 1;
- *((RegAPERxPoolRetire_t*)port->rx_retire) = retire;
+ *((RegAPERxPoolRetire_t *)port->rx_retire) = retire;
blockid = control.bits.next_block;
}
// Mark the frame as read.
rxbuf.bits.Finished = 1;
- *((RegAPERxbufoffset_t*)port->rx_offset) = rxbuf;
+ *((RegAPERxbufoffset_t *)port->rx_offset) = rxbuf;
return true;
}
diff --git a/libs/Network/tx.c b/libs/Network/tx.c
index 0663b0d..f539773 100644
--- a/libs/Network/tx.c
+++ b/libs/Network/tx.c
@@ -67,17 +67,6 @@ static inline uint32_t be32toh(uint32_t be32)
#define FIRST_FRAME_MAX ((TX_PORT_OUT_ALL_BLOCK_WORDS - TX_PORT_OUT_ALL_FIRST_PAYLOAD_WORD) * sizeof(uint32_t))
#define ADDITIONAL_FRAME_MAX ((TX_PORT_OUT_ALL_BLOCK_WORDS - TX_PORT_OUT_ALL_ADDITIONAL_PAYLOAD_WORD) * sizeof(uint32_t))
-typedef union {
- uint32_t r32;
- struct
- {
- uint32_t payload_length:7;
- uint32_t next_block:23;
- uint32_t first:1;
- uint32_t not_last:1;
- } bits;
-} control_t;
-
uint32_t Network_TX_numBlocksNeeded(uint32_t frame_size)
{
uint32_t blocks = 1;
@@ -96,7 +85,7 @@ uint32_t Network_TX_numBlocksNeeded(uint32_t frame_size)
return blocks;
}
-int32_t __attribute__((noinline)) Network_TX_allocateBlock(NetworkPort_t* port)
+int32_t __attribute__((noinline)) Network_TX_allocateBlock(NetworkPort_t *port)
{
int32_t block;
@@ -104,13 +93,13 @@ int32_t __attribute__((noinline)) Network_TX_allocateBlock(NetworkPort_t* port)
RegAPETxToNetBufferAllocator_t alloc;
alloc.r32 = 0;
alloc.bits.RequestAllocation = 1;
- *((RegAPETxToNetBufferAllocator_t*)port->tx_allocator) = alloc;
+ *((RegAPETxToNetBufferAllocator_t *)port->tx_allocator) = alloc;
// Wait for state machine to finish
RegAPETxToNetBufferAllocator_t status;
do
{
- status = *((RegAPETxToNetBufferAllocator_t*)port->tx_allocator);
+ status = *((RegAPETxToNetBufferAllocator_t *)port->tx_allocator);
} while (APE_TX_TO_NET_BUFFER_ALLOCATOR_STATE_PROCESSING == status.bits.State);
if (APE_TX_TO_NET_BUFFER_ALLOCATOR_STATE_ALLOCATION_OK != status.bits.State)
@@ -138,7 +127,7 @@ static uint32_t inline Network_TX_initFirstBlock(RegTX_PORTOut_t *block,
uint32_t *packet,
bool big_endian)
{
- control_t control;
+ network_control_t control;
int copy_length;
int i;
@@ -220,7 +209,7 @@ static uint32_t inline Network_TX_initAdditionalBlock(RegTX_PORTOut_t *block,
bool big_endian)
{
int i;
- control_t control;
+ network_control_t control;
control.r32 = 0;
control.bits.first = 0;
@@ -323,15 +312,15 @@ static inline void Network_TX_transmitPacket_internal(uint8_t *packet,
doorbell.bits.Tail = tail;
doorbell.bits.Length = total_blocks;
- *((RegAPETxToNetDoorbell_t*)port->tx_doorbell) = doorbell;
+ *((RegAPETxToNetDoorbell_t *)port->tx_doorbell) = doorbell;
}
-void Network_TX_transmitBePacket(uint8_t *packet, uint32_t length, NetworkPort_t* port)
+void Network_TX_transmitBePacket(uint8_t *packet, uint32_t length, NetworkPort_t *port)
{
Network_TX_transmitPacket_internal(packet, length, true, port);
}
-void Network_TX_transmitLePacket(uint8_t *packet, uint32_t length, NetworkPort_t* port)
+void Network_TX_transmitLePacket(uint8_t *packet, uint32_t length, NetworkPort_t *port)
{
Network_TX_transmitPacket_internal(packet, length, false, port);
}
@@ -339,7 +328,7 @@ void Network_TX_transmitLePacket(uint8_t *packet, uint32_t length, NetworkPort_t
static uint32_t inline Network_TX_initFirstPassthroughBlock(
RegTX_PORTOut_t *block, uint32_t length, int32_t blocks, int32_t next_block)
{
- control_t control;
+ network_control_t control;
int copy_length;
int i;
@@ -405,7 +394,7 @@ static uint32_t inline Network_TX_initAdditionalPassthroughBlock(
RegTX_PORTOut_t *block, int32_t next_block, uint32_t length)
{
int i;
- control_t control;
+ network_control_t control;
control.r32 = 0;
control.bits.first = 0;
@@ -489,7 +478,7 @@ void Network_TX_transmitPassthroughPacket(uint32_t length, NetworkPort_t *port)
doorbell.bits.Tail = tail;
doorbell.bits.Length = total_blocks;
- *((RegAPETxToNetDoorbell_t*)port->tx_doorbell) = doorbell;
+ *((RegAPETxToNetDoorbell_t *)port->tx_doorbell) = doorbell;
// Read last RX word (FCS) to clear the buffer
uint32_t data = APE_PERI.BmcToNcReadBuffer.r32;
OpenPOWER on IntegriCloud