summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2019-04-14 16:37:22 -0600
committerEvan Lojewski <github@meklort.com>2019-04-14 16:37:22 -0600
commit0cf10183e0f05c643b8c9112ef74efa2a8396eab (patch)
tree556592a81bbbc8f4c9dc84d0f6adae2aeded8232 /libs
parentaef26ac93ecc586ca49d3352835afb37901c54e0 (diff)
downloadbcm5719-ortega-0cf10183e0f05c643b8c9112ef74efa2a8396eab.tar.gz
bcm5719-ortega-0cf10183e0f05c643b8c9112ef74efa2a8396eab.zip
Begin adding support for setting ape statistics in the SHM region.
Diffstat (limited to 'libs')
-rw-r--r--libs/NCSI/ncsi.c55
-rw-r--r--libs/bcm5719/APE_sym.s98
-rw-r--r--libs/bcm5719/bcm5719_sym.s46
3 files changed, 138 insertions, 61 deletions
diff --git a/libs/NCSI/ncsi.c b/libs/NCSI/ncsi.c
index 456567f..b19660c 100644
--- a/libs/NCSI/ncsi.c
+++ b/libs/NCSI/ncsi.c
@@ -44,7 +44,11 @@
#include <NCSI.h>
#include <APE_APE_PERI.h>
-
+#include <APE_SHM.h>
+#include <APE_SHM_CHANNEL0.h>
+#include <APE_SHM_CHANNEL1.h>
+#include <APE_SHM_CHANNEL2.h>
+#include <APE_SHM_CHANNEL3.h>
#include <stdbool.h>
#define MAX_CHANNELS 4
@@ -62,7 +66,11 @@ typedef struct {
uint32_t AENEnables; /* Corresponds to an enable bit for each AEN packet */
bool AsyncronousTrafficEn; /* When set, AEN and passthrough traffic can be sent from the NC to the MC */
bool PassthroughTXTrafficEn; /* When set, the NC is allowed to transmit passthrough traffic from the MC to the NC. */
-
+#ifdef CXX_SIMULATOR
+ SHM_CHANNEL_t* shm;
+#else
+ volatile SHM_CHANNEL_t* shm;
+#endif
} channel_state_t;
// Response frame - global and usable by one thread at a time only.
@@ -100,7 +108,36 @@ typedef struct {
package_state_t gPackageState = {
.numChannels = MAX_CHANNELS,
.selected = false,
- .channel = {{0}},
+ .channel = {
+ [0] = {
+ .initialized = false,
+ .AENEnables = false,
+ .AsyncronousTrafficEn = false,
+ .PassthroughTXTrafficEn = false,
+ .shm = &SHM_CHANNEL0,
+ },
+ [1] = {
+ .initialized = false,
+ .AENEnables = false,
+ .AsyncronousTrafficEn = false,
+ .PassthroughTXTrafficEn = false,
+ .shm = &SHM_CHANNEL1,
+ },
+ [2] = {
+ .initialized = false,
+ .AENEnables = false,
+ .AsyncronousTrafficEn = false,
+ .PassthroughTXTrafficEn = false,
+ .shm = &SHM_CHANNEL2,
+ },
+ [3] = {
+ .initialized = false,
+ .AENEnables = false,
+ .AsyncronousTrafficEn = false,
+ .PassthroughTXTrafficEn = false,
+ .shm = &SHM_CHANNEL3,
+ },
+ },
};
void sendNCSIResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID,
@@ -327,12 +364,14 @@ void handleNCSIFrame(NetworkFrame_t* frame)
uint8_t command = frame->controlPacket.ControlPacketType;
uint16_t payloadLength = frame->controlPacket.PayloadLength;
ncsi_handler_t *handler = &gNCSIHandlers[command];
+ channel_state_t *channel = ((ch == CHANNEL_ID_PACKAGE) ? 0 : &gPackageState.channel[ch]);
if(handler->fn)
{
if(ch != CHANNEL_ID_PACKAGE &&
ch >= gPackageState.numChannels)
{
+ channel = 0;
#if CXX_SIMULATOR
printf("[%x] Invalid channel: %d\n", command, ch);
#endif
@@ -344,8 +383,8 @@ void handleNCSIFrame(NetworkFrame_t* frame)
NCSI_RESPONSE_CODE_COMMAND_FAILED,
NCSI_REASON_CODE_INVALID_PARAM);
}
- else if( (true == handler->packageCommand && ch != CHANNEL_ID_PACKAGE) ||
- (false == handler->packageCommand && ch == CHANNEL_ID_PACKAGE))
+ else if( (true == handler->packageCommand && channel) ||
+ (false == handler->packageCommand && !channel))
{
#if CXX_SIMULATOR
printf("[%x] Invalid channel for command: %d\n", command, ch);
@@ -390,6 +429,10 @@ void handleNCSIFrame(NetworkFrame_t* frame)
}
else
{
+ if(channel)
+ {
+ ++channel->shm->NcsiChannelCtrlstatRx.r32;
+ }
gPackageState.selected = true;
handler->fn(frame);
}
@@ -420,6 +463,8 @@ void resetChannel(int ch)
channel->AENEnables = false;
channel->AsyncronousTrafficEn = false;
channel->PassthroughTXTrafficEn = false;
+
+ channel->shm->NcsiChannelCtrlstatRx.r32 = 0;
}
void sendNCSIResponse(uint8_t InstanceID, uint8_t channelID, uint16_t controlID, uint16_t response_code, uint16_t reasons_code)
diff --git a/libs/bcm5719/APE_sym.s b/libs/bcm5719/APE_sym.s
index fb9dcae..b6eef97 100644
--- a/libs/bcm5719/APE_sym.s
+++ b/libs/bcm5719/APE_sym.s
@@ -52,42 +52,38 @@
.equ APE_PERI, 0x60240000
.size APE_PERI, 0x440
-.global DEVICE
-.equ DEVICE, 0xa0040000
-.size DEVICE, 0x7c08
-
-.global DEVICE1
-.equ DEVICE1, 0xa0050000
-.size DEVICE1, 0x7c08
-
-.global DEVICE2
-.equ DEVICE2, 0xa0060000
-.size DEVICE2, 0x7c08
-
-.global DEVICE3
-.equ DEVICE3, 0xa0070000
-.size DEVICE3, 0x7c08
-
.global FILTERS
.equ FILTERS, 0xa0048000
.size FILTERS, 0x188
-.global FILTERS1
-.equ FILTERS1, 0xa0058000
-.size FILTERS1, 0x188
+.global SHM
+.equ SHM, 0x60220000
+.size SHM, 0x894
-.global FILTERS2
-.equ FILTERS2, 0xa0068000
-.size FILTERS2, 0x188
+.global SHM_CHANNEL0
+.equ SHM_CHANNEL0, 0x60220900
+.size SHM_CHANNEL0, 0xcc
-.global FILTERS3
-.equ FILTERS3, 0xa0078000
-.size FILTERS3, 0x188
+.global SHM_CHANNEL1
+.equ SHM_CHANNEL1, 0x60220a00
+.size SHM_CHANNEL1, 0xcc
+
+.global SHM_CHANNEL2
+.equ SHM_CHANNEL2, 0x60220b00
+.size SHM_CHANNEL2, 0xcc
+
+.global SHM_CHANNEL3
+.equ SHM_CHANNEL3, 0x60220c00
+.size SHM_CHANNEL3, 0xcc
.global NVIC
.equ NVIC, 0xe000e000
.size NVIC, 0xf04
+.global DEVICE
+.equ DEVICE, 0xa0040000
+.size DEVICE, 0x7c08
+
.global NVM
.equ NVM, 0x60240000
.size NVM, 0x3c
@@ -108,22 +104,6 @@
.equ RX_PORT3, 0xa000c000
.size RX_PORT3, 0x0
-.global SHM
-.equ SHM, 0x60220000
-.size SHM, 0x9b4
-
-.global SHM1
-.equ SHM1, 0x60221000
-.size SHM1, 0x9b4
-
-.global SHM2
-.equ SHM2, 0x60222000
-.size SHM2, 0x9b4
-
-.global SHM3
-.equ SHM3, 0x60223000
-.size SHM3, 0x9b4
-
.global TX_PORT
.equ TX_PORT, 0xa0020000
.size TX_PORT, 0x0
@@ -140,4 +120,40 @@
.equ TX_PORT3, 0xa0026000
.size TX_PORT3, 0x0
+.global DEVICE1
+.equ DEVICE1, 0xa0050000
+.size DEVICE1, 0x7c08
+
+.global FILTERS1
+.equ FILTERS1, 0xa0058000
+.size FILTERS1, 0x188
+
+.global DEVICE2
+.equ DEVICE2, 0xa0060000
+.size DEVICE2, 0x7c08
+
+.global FILTERS2
+.equ FILTERS2, 0xa0068000
+.size FILTERS2, 0x188
+
+.global DEVICE3
+.equ DEVICE3, 0xa0070000
+.size DEVICE3, 0x7c08
+
+.global FILTERS3
+.equ FILTERS3, 0xa0078000
+.size FILTERS3, 0x188
+
+.global SHM1
+.equ SHM1, 0x60221000
+.size SHM1, 0x894
+
+.global SHM2
+.equ SHM2, 0x60222000
+.size SHM2, 0x894
+
+.global SHM3
+.equ SHM3, 0x60223000
+.size SHM3, 0x894
+
diff --git a/libs/bcm5719/bcm5719_sym.s b/libs/bcm5719/bcm5719_sym.s
index 08c00dd..d9821f6 100644
--- a/libs/bcm5719/bcm5719_sym.s
+++ b/libs/bcm5719/bcm5719_sym.s
@@ -52,26 +52,38 @@
.equ APE_PERI, 0xc0018000
.size APE_PERI, 0x440
-.global BOOTCODE
-.equ BOOTCODE, 0x8000000
-.size BOOTCODE, 0x7000
+.global SHM
+.equ SHM, 0xc0014000
+.size SHM, 0x894
+
+.global SHM_CHANNEL0
+.equ SHM_CHANNEL0, 0xc0014900
+.size SHM_CHANNEL0, 0xcc
+
+.global SHM_CHANNEL1
+.equ SHM_CHANNEL1, 0xc0014a00
+.size SHM_CHANNEL1, 0xcc
+
+.global SHM_CHANNEL2
+.equ SHM_CHANNEL2, 0xc0014b00
+.size SHM_CHANNEL2, 0xcc
+
+.global SHM_CHANNEL3
+.equ SHM_CHANNEL3, 0xc0014c00
+.size SHM_CHANNEL3, 0xcc
.global DEVICE
.equ DEVICE, 0xc0000000
.size DEVICE, 0x7c08
-.global GEN
-.equ GEN, 0xb50
-.size GEN, 0x368
-
-.global MII
-.equ MII, 0x0
-.size MII, 0x71a
-
.global NVM
.equ NVM, 0xc0007000
.size NVM, 0x3c
+.global GEN
+.equ GEN, 0xb50
+.size GEN, 0x368
+
.global RXMBUF
.equ RXMBUF, 0x10000
.size RXMBUF, 0xc800
@@ -80,12 +92,16 @@
.equ SDBCACHE, 0x20000
.size SDBCACHE, 0xc800
-.global SHM
-.equ SHM, 0xc0014000
-.size SHM, 0x9b4
-
.global TXMBUF
.equ TXMBUF, 0x2c800
.size TXMBUF, 0x7400
+.global BOOTCODE
+.equ BOOTCODE, 0x8000000
+.size BOOTCODE, 0x7000
+
+.global MII
+.equ MII, 0x0
+.size MII, 0x71a
+
OpenPOWER on IntegriCloud