Compare commits
4 Commits
682711c2a6
...
0dc8e66455
| Author | SHA1 | Date | |
|---|---|---|---|
| 0dc8e66455 | |||
| aad5a08dcc | |||
| cb1c461102 | |||
| 03c81dc004 |
@ -8,8 +8,12 @@
|
||||
#ifndef FREE_RTOS_BASE_SWAP_H_
|
||||
#define FREE_RTOS_BASE_SWAP_H_
|
||||
|
||||
#define BASE_SWAP32(value) __builtin_bswap32(value)
|
||||
#include <arm_acle.h>
|
||||
|
||||
#define BASE_SWAP16(value) (uint16_t)__builtin_bswap16(value)
|
||||
//#define BASE_SWAP32(value) __builtin_bswap32(value)
|
||||
#define BASE_SWAP32(value) __rev(value)
|
||||
|
||||
//#define BASE_SWAP16(value) (uint16_t)__builtin_bswap16(value)
|
||||
#define BASE_SWAP16(value) (uint16_t)__rev16(value)
|
||||
|
||||
#endif /* FREE_RTOS_BASE_SWAP_H_ */
|
||||
|
||||
@ -257,6 +257,8 @@ bool free_rtos::Eth::Open()
|
||||
|
||||
EnetAppUtils_print("%s: Open enet driver\r\n", name_.c_str());
|
||||
|
||||
EnetApp_driverInit();
|
||||
|
||||
status = EnetApp_driverOpen(enetType_, instId_);
|
||||
if (ENET_SOK != status) {
|
||||
EnetAppUtils_print("%s: fail to open enet driver\r\n", name_.c_str());
|
||||
|
||||
@ -53,12 +53,14 @@ void free_rtos::EthRxFlow::initRxFreePktQ(void * appPriv, EnetDma_PktQ * p_packe
|
||||
EnetDma_Pkt *pPktInfo;
|
||||
uint32_t i;
|
||||
int32_t status;
|
||||
uint32_t scatterSegmentSize[1] = {ENET_MEM_LARGE_POOL_PKT_SIZE};
|
||||
|
||||
for (i = 0U; i < qCount; ++i)
|
||||
{
|
||||
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
||||
ENET_MEM_LARGE_POOL_PKT_SIZE,
|
||||
ENETDMA_CACHELINE_ALIGNMENT);
|
||||
ENETDMA_CACHELINE_ALIGNMENT,
|
||||
1,
|
||||
scatterSegmentSize);
|
||||
EnetAppUtils_assert(pPktInfo != NULL);
|
||||
|
||||
ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState, ENET_PKTSTATE_APP_WITH_FREEQ);
|
||||
@ -171,9 +173,9 @@ bool free_rtos::EthRxFlow::open(TEthMacPorts port_id, int32_t enetDmaRxChId, UBa
|
||||
rx_flow_idx_ = rxChInfo.rxFlowIdx;
|
||||
dma_handle_ = rxChInfo.hRxCh;
|
||||
|
||||
if (rxChInfo.macAddressValid)
|
||||
if (rxChInfo.numValidMacAddress != 0)
|
||||
{
|
||||
EnetUtils_copyMacAddr(mac_addr_.bytes, rxChInfo.macAddr);
|
||||
EnetUtils_copyMacAddr(mac_addr_.bytes, rxChInfo.macAddr[0]);
|
||||
mac_addr_.addr&= ETH_FRAME_MAC_ADDR_MASK;
|
||||
|
||||
eth_stack_.set_mac_address(mac_addr_.addr);
|
||||
@ -183,7 +185,6 @@ bool free_rtos::EthRxFlow::open(TEthMacPorts port_id, int32_t enetDmaRxChId, UBa
|
||||
EnetAppUtils_assert(rxChInfo.sizeThreshEn == 0U);
|
||||
EnetAppUtils_assert(rxChInfo.maxNumRxPkts >= numPkts[enetDmaRxChId]);
|
||||
EnetAppUtils_assert(rxChInfo.chIdx == port_id);
|
||||
EnetAppUtils_assert(rxChInfo.useDefaultFlow == true);
|
||||
|
||||
if (dma_handle_ == nullptr)
|
||||
{
|
||||
|
||||
@ -57,7 +57,7 @@ void EnetApp_initLinkArgs(Enet_Type enetType,
|
||||
IcssgMacPort_initCfg(icssgMacCfg);
|
||||
icssgMacCfg->specialFramePrio = 1U;
|
||||
|
||||
/* Set port link params */
|
||||
/* Set port link params */
|
||||
portLinkCfg->macPort = macPort;
|
||||
|
||||
mii->layerType = ethPort.mii.layerType;
|
||||
@ -71,32 +71,10 @@ void EnetApp_initLinkArgs(Enet_Type enetType,
|
||||
if (boardPhyCfg != NULL)
|
||||
{
|
||||
EnetPhy_initCfg(phyCfg);
|
||||
if ((ENET_ICSSG_DUALMAC == enetType) && (2U == instId))
|
||||
{
|
||||
phyCfg->phyAddr = CONFIG_ENET_ICSS0_PHY1_ADDR;
|
||||
}
|
||||
else if ((ENET_ICSSG_DUALMAC == enetType) && (3U == instId))
|
||||
{
|
||||
phyCfg->phyAddr = CONFIG_ENET_ICSS0_PHY2_ADDR;
|
||||
}
|
||||
else if ((ENET_ICSSG_SWITCH == enetType) && (1U == instId))
|
||||
{
|
||||
if (macPort == ENET_MAC_PORT_1)
|
||||
{
|
||||
phyCfg->phyAddr = CONFIG_ENET_ICSS0_PHY1_ADDR;
|
||||
}
|
||||
else
|
||||
{
|
||||
phyCfg->phyAddr = CONFIG_ENET_ICSS0_PHY2_ADDR;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
EnetAppUtils_assert(false);
|
||||
}
|
||||
|
||||
phyCfg->isStrapped = boardPhyCfg->isStrapped;
|
||||
phyCfg->loopbackEn = false;
|
||||
phyCfg->phyAddr = boardPhyCfg->phyAddr;
|
||||
phyCfg->isStrapped = boardPhyCfg->isStrapped;
|
||||
phyCfg->loopbackEn = false;
|
||||
phyCfg->skipExtendedCfg = boardPhyCfg->skipExtendedCfg;
|
||||
phyCfg->extendedCfgSize = boardPhyCfg->extendedCfgSize;
|
||||
memcpy(phyCfg->extendedCfg, boardPhyCfg->extendedCfg, phyCfg->extendedCfgSize);
|
||||
|
||||
@ -25,13 +25,15 @@ static void eth_initTxFreePktQ(void * appPriv, EnetDma_PktQ * p_packet_queue, ui
|
||||
{
|
||||
EnetDma_Pkt *pPktInfo;
|
||||
uint32_t i;
|
||||
uint32_t scatterSegmentSize[1] = {ENET_MEM_LARGE_POOL_PKT_SIZE};
|
||||
|
||||
/* Initialize TX EthPkts and queue them to txFreePktInfoQ */
|
||||
for (i = 0U; i < qCount; i++)
|
||||
{
|
||||
pPktInfo = EnetMem_allocEthPkt(appPriv,
|
||||
ENET_MEM_LARGE_POOL_PKT_SIZE,
|
||||
ENETDMA_CACHELINE_ALIGNMENT);
|
||||
ENETDMA_CACHELINE_ALIGNMENT,
|
||||
1,
|
||||
scatterSegmentSize);
|
||||
EnetAppUtils_assert(pPktInfo != NULL);
|
||||
|
||||
ENET_UTILS_SET_PKT_APP_STATE(&pPktInfo->pktState, ENET_PKTSTATE_APP_WITH_FREEQ);
|
||||
|
||||
@ -7,6 +7,8 @@
|
||||
#include "free_rtos/ethernet_ip/eth_checksum.h"
|
||||
#include "free_rtos/base/swap.h"
|
||||
|
||||
#include <arm_acle.h>
|
||||
|
||||
uint16_t eth_calcChksum(uint32_t sum, uint8_t * const data, uint16_t len)
|
||||
{
|
||||
uint16_t i;
|
||||
@ -54,44 +56,74 @@ uint16_t eth_calcChksum2(uint32_t sum, uint8_t * const hdata, uint16_t hlen, uin
|
||||
return ~sum;
|
||||
}
|
||||
|
||||
inline uint32_t calcSum(void * buffer, uint32_t sum, void * const data, uint16_t len) {
|
||||
uint32_t * buffer_start32 = (uint32_t*)buffer;
|
||||
uint32_t * data_start32 = (uint32_t*)data;
|
||||
uint32_t * data_end32 = data_start32 + len/sizeof(uint32_t);
|
||||
uint32_t remainder = len%sizeof(uint32_t);
|
||||
uint32_t value;
|
||||
union PointerConverter
|
||||
{
|
||||
void * unknown;
|
||||
uint64_t * octet;
|
||||
uint32_t * quartet;
|
||||
uint16_t * duet;
|
||||
uint8_t * solo;
|
||||
};
|
||||
|
||||
while(data_start32 < data_end32) {
|
||||
value = *data_start32++;
|
||||
*buffer_start32++ = value;
|
||||
value = __rev16(value);
|
||||
sum += (value&0xFFFF) + (value>>16);
|
||||
struct Array {
|
||||
uint16_t duet0;
|
||||
uint16_t duet1;
|
||||
uint16_t duet2;
|
||||
uint16_t duet3;
|
||||
};
|
||||
|
||||
union ValueConverter
|
||||
{
|
||||
uint64_t octet;
|
||||
uint32_t quartet;
|
||||
uint16_t duet;
|
||||
uint8_t solo;
|
||||
struct Array array;
|
||||
};
|
||||
|
||||
uint32_t calcSum(void * const buffer, uint32_t sum, void * const data, uint16_t len)
|
||||
{
|
||||
union PointerConverter buffer_start;
|
||||
union PointerConverter data_start;
|
||||
union ValueConverter value;
|
||||
|
||||
buffer_start.unknown = buffer;
|
||||
data_start.unknown = data;
|
||||
|
||||
while(len >= sizeof(uint32_t)) {
|
||||
len -= sizeof(uint32_t);
|
||||
|
||||
value.quartet = *data_start.quartet++;
|
||||
*buffer_start.quartet++ = value.quartet;
|
||||
|
||||
value.quartet = __rev16(value.quartet);
|
||||
sum += value.array.duet0 + value.array.duet1;
|
||||
}
|
||||
|
||||
uint16_t * buffer_start16 = (uint16_t*)buffer_start32;
|
||||
uint16_t * data_start16 = (uint16_t*)data_start32;
|
||||
if(len >= sizeof(uint16_t)) {
|
||||
len -= sizeof(uint16_t);
|
||||
|
||||
if(remainder > 1) {
|
||||
value = *data_start16++;
|
||||
*buffer_start16++ = value;
|
||||
value = __rev16(value);
|
||||
sum += value;
|
||||
value.duet = *data_start.duet++;
|
||||
*buffer_start.duet++ = value.duet;
|
||||
|
||||
value.quartet = __rev16(value.quartet);
|
||||
sum += value.duet;
|
||||
}
|
||||
|
||||
uint8_t * buffer_start8 = (uint8_t*)buffer_start16;
|
||||
uint8_t * data_start8 = (uint8_t*)data_start16;
|
||||
if(len >= sizeof(uint8_t)) {
|
||||
len -= sizeof(uint8_t);
|
||||
|
||||
if(remainder == 1) {
|
||||
value = *data_start8++;
|
||||
*buffer_start8++ = value;
|
||||
value = __rev16(value);
|
||||
sum += value;
|
||||
value.solo = *data_start.solo++;
|
||||
*buffer_start.solo++ = value.solo;
|
||||
|
||||
value.quartet = __rev16(value.quartet);
|
||||
sum += value.solo;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
uint16_t eth_calcChksum3(void * buffer, uint32_t sum, void * const hdata, uint16_t hlen, void * const data, uint16_t len)
|
||||
uint16_t eth_calcChksum3(void * const buffer, uint32_t sum, void * const hdata, uint16_t hlen, void * const data, uint16_t len)
|
||||
{
|
||||
if(hdata != 0) {
|
||||
sum = calcSum(buffer, sum, hdata, hlen);
|
||||
|
||||
@ -16,7 +16,7 @@ extern "C" {
|
||||
|
||||
uint16_t eth_calcChksum(uint32_t sum, uint8_t * const data, uint16_t len);
|
||||
uint16_t eth_calcChksum2(uint32_t sum, uint8_t * const hdata, uint16_t hlen, uint8_t * const data, uint16_t len);
|
||||
uint16_t eth_calcChksum3(void * buffer, uint32_t sum, void * const hdata, uint16_t hlen, void * const data, uint16_t len);
|
||||
uint16_t eth_calcChksum3(void * const buffer, uint32_t sum, void * const hdata, uint16_t hlen, void * const data, uint16_t len);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -61,7 +61,7 @@ public:
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (buff_[toggle_].size() == 0) {
|
||||
if (buff_[out_toggle_].size() == 0) {
|
||||
if(capture_buffer() == false) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -70,5 +70,5 @@ MEMORY
|
||||
MSRAM_0 : ORIGIN = 0x70000100 , LENGTH = 0x70000 - 0x100
|
||||
MSRAM_1 : ORIGIN = 0x70070000 , LENGTH = 0x10000
|
||||
MSRAM_2 : ORIGIN = 0x70160000 , LENGTH = 0x80000
|
||||
DDR : ORIGIN = 0x808A0000 , LENGTH = 0x150000
|
||||
DDR : ORIGIN = 0x808A0000 , LENGTH = 0x300000
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@
|
||||
|
||||
#define BOOTLOADER_SD_APPIMAGE_FILENAME ("/sd0/app")
|
||||
|
||||
#define BOOTLOADER_APPIMAGE_MAX_FILE_SIZE (0x150000) /* Size of section MSRAM_2 specified in linker.cmd */
|
||||
#define BOOTLOADER_APPIMAGE_MAX_FILE_SIZE (0x300000) /* Size of section MSRAM_2 specified in linker.cmd */
|
||||
uint8_t gAppImageBuf[BOOTLOADER_APPIMAGE_MAX_FILE_SIZE] __attribute__((aligned(128), section(".bss.filebuf")));
|
||||
|
||||
/* call this API to stop the booting process and spin, do that you can connect
|
||||
|
||||
Loading…
Reference in New Issue
Block a user