diff options
author | Evan Lojewski <github@meklort.com> | 2019-04-14 16:37:22 -0600 |
---|---|---|
committer | Evan Lojewski <github@meklort.com> | 2019-04-14 16:37:22 -0600 |
commit | 0cf10183e0f05c643b8c9112ef74efa2a8396eab (patch) | |
tree | 556592a81bbbc8f4c9dc84d0f6adae2aeded8232 /libs | |
parent | aef26ac93ecc586ca49d3352835afb37901c54e0 (diff) | |
download | bcm5719-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.c | 55 | ||||
-rw-r--r-- | libs/bcm5719/APE_sym.s | 98 | ||||
-rw-r--r-- | libs/bcm5719/bcm5719_sym.s | 46 |
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 + |