sitara_depot/components/free_rtos/ethernet/eth_ti_enet_inst.c

139 lines
4.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
* app_enet_open_close.c
*
* Created on: 1 мар. 2023 г.
* Author: sychev
* Файл реализует функции объявленные в сгенеренном файле
* ti_enet_open_close.h и вызываемые в сгенеренном файле ti_enet_open_close.с
*/
#include <utils/include/enet_board.h>
#include <networking/enet/core/include/per/icssg.h>
#include <networking/enet/utils/include/enet_apputils.h>
#define ETH_TYPES_MAC_PORT_MAX (2u) /// Количество mac-портов
/// Сгенеренные файлы
#include <ti_board_config.h>
#include <stddef.h>
static void eth_macMode2MacMii(emac_mode macMode, EnetMacPort_Interface *mii);
static int32_t eth_getSubsPortIdx(Enet_Type enetType, uint32_t instId, uint32_t *subsportIdx);
/*
* Объявлена и используется в сгенеренном файле ti_enet_open_close.h
*/
void EnetApp_initLinkArgs(Enet_Type enetType,
uint32_t instId,
EnetPer_PortLinkCfg *portLinkCfg,
Enet_MacPort macPort)
{
EnetBoard_EthPort ethPort;
const EnetBoard_PhyCfg *boardPhyCfg;
IcssgMacPort_Cfg *icssgMacCfg;
EnetMacPort_LinkCfg *linkCfg = &portLinkCfg->linkCfg;
EnetMacPort_Interface *mii = &portLinkCfg->mii;
EnetPhy_Cfg *phyCfg = &portLinkCfg->phyCfg;
int32_t status = ENET_SOK;
EnetAppUtils_print("Open mac port %u\r\n", ENET_MACPORT_ID(macPort));
/* Setup board for requested Ethernet port */
ethPort.enetType = enetType;
ethPort.instId = instId;
ethPort.macPort = macPort;
ethPort.boardId = ENETBOARD_AM64X_AM243X_EVM;
eth_macMode2MacMii(RGMII, &ethPort.mii);
status = EnetBoard_setupPorts(&ethPort, 1U);
if (status != ENET_SOK)
{
EnetAppUtils_print("Failed to setup MAC port %u\r\n", ENET_MACPORT_ID(macPort));
EnetAppUtils_assert(false);
}
icssgMacCfg = portLinkCfg->macCfg;
IcssgMacPort_initCfg(icssgMacCfg);
icssgMacCfg->specialFramePrio = 1U;
/* Set port link params */
portLinkCfg->macPort = macPort;
mii->layerType = ethPort.mii.layerType;
mii->sublayerType = ethPort.mii.sublayerType;
mii->variantType = ENET_MAC_VARIANT_FORCED;
linkCfg->speed = ENET_SPEED_AUTO;
linkCfg->duplexity = ENET_DUPLEX_AUTO;
boardPhyCfg = EnetBoard_getPhyCfg(&ethPort);
if (boardPhyCfg != NULL)
{
EnetPhy_initCfg(phyCfg);
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);
}
else
{
EnetAppUtils_print("No PHY configuration found for mac %u\r\n", ENET_MACPORT_ID(macPort));
EnetAppUtils_assert(false);
}
}
/*
* Объявлена и используется в сгенеренном файле ti_enet_open_close.h
*/
void EnetApp_updateIcssgInitCfg(Enet_Type enetType, uint32_t instId, Icssg_Cfg *icssgCfg)
{
EnetRm_ResCfg *resCfg;
uint32_t i;
/* Prepare init configuration for all peripherals */
EnetAppUtils_print("\nInit configs EnetType:%u, InstId :%u\r\n", enetType, instId);
EnetAppUtils_print("----------------------------------------------\r\n");
resCfg = &icssgCfg->resCfg;
/* We use software MAC address pool from apputils, but it will give same MAC address.
* Add port index to make them unique */
for (i = 0U; i < ETH_TYPES_MAC_PORT_MAX; ++i)
{
resCfg->macList.macAddress[i][ENET_MAC_ADDR_LEN - 1] += i;
}
resCfg->macList.numMacAddress = ETH_TYPES_MAC_PORT_MAX;
}
static void eth_macMode2MacMii(emac_mode macMode,
EnetMacPort_Interface *mii)
{
switch (macMode)
{
case RMII:
mii->layerType = ENET_MAC_LAYER_MII;
mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;
mii->variantType = ENET_MAC_VARIANT_NONE;
break;
case RGMII:
mii->layerType = ENET_MAC_LAYER_GMII;
mii->sublayerType = ENET_MAC_SUBLAYER_REDUCED;
mii->variantType = ENET_MAC_VARIANT_FORCED;
break;
default:
EnetAppUtils_print("Invalid MAC mode: %u\r\n", macMode);
EnetAppUtils_assert(false);
break;
}
}