avoid usage of goto`
This commit is contained in:
@@ -278,7 +278,7 @@ static int32_t Mpc_SystemConfig(MPC *instPtr, uint8_t *msg)
|
|||||||
* @param InstPtr A double pointer to MPC instance.
|
* @param InstPtr A double pointer to MPC instance.
|
||||||
* @param config A pointer to MPC configurations.
|
* @param config A pointer to MPC configurations.
|
||||||
*
|
*
|
||||||
* @return None.
|
* @return Error code.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
||||||
@@ -290,7 +290,7 @@ int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
|||||||
(*instPtr) = malloc(sizeof(MPC));
|
(*instPtr) = malloc(sizeof(MPC));
|
||||||
if ((*instPtr) == NULL)
|
if ((*instPtr) == NULL)
|
||||||
{
|
{
|
||||||
return FAILURE;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*instPtr)->rxQueue = NULL;
|
(*instPtr)->rxQueue = NULL;
|
||||||
(*instPtr)->txQueue = NULL;
|
(*instPtr)->txQueue = NULL;
|
||||||
@@ -307,14 +307,15 @@ int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
|||||||
bramConfigPtr = XBram_LookupConfig(config->bramId);
|
bramConfigPtr = XBram_LookupConfig(config->bramId);
|
||||||
if (bramConfigPtr == NULL)
|
if (bramConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Mpc_Destroy(*instPtr);
|
||||||
goto mpc_init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
Status = XBram_CfgInitialize(&mpcBram, bramConfigPtr,
|
Status = XBram_CfgInitialize(&mpcBram, bramConfigPtr,
|
||||||
bramConfigPtr->CtrlBaseAddress);
|
bramConfigPtr->CtrlBaseAddress);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto mpc_init_error;
|
Mpc_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Execute the BRAM driver selftest.
|
* Execute the BRAM driver selftest.
|
||||||
@@ -322,7 +323,8 @@ int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
|||||||
Status = XBram_SelfTest(&mpcBram, 0);
|
Status = XBram_SelfTest(&mpcBram, 0);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto mpc_init_error;
|
Mpc_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
mpcHwConfig.txBuffAddr = mpcBram.Config.MemBaseAddress;
|
mpcHwConfig.txBuffAddr = mpcBram.Config.MemBaseAddress;
|
||||||
@@ -332,32 +334,47 @@ int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config)
|
|||||||
Status = MpcHw_Init(&((*instPtr)->mpchwDesc), &mpcHwConfig);
|
Status = MpcHw_Init(&((*instPtr)->mpchwDesc), &mpcHwConfig);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
Mpc_Destroy(*instPtr);
|
||||||
goto mpc_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
if (CircQueueCreate(&((*instPtr)->txQueue), (*instPtr)->config.txQueueMax) == false)
|
if (CircQueueCreate(&((*instPtr)->txQueue), (*instPtr)->config.txQueueMax) == false)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
Mpc_Destroy(*instPtr);
|
||||||
goto mpc_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
if (CircQueueCreate(&((*instPtr)->rxQueue), (*instPtr)->config.rxQueueMax) == false)
|
if (CircQueueCreate(&((*instPtr)->rxQueue), (*instPtr)->config.rxQueueMax) == false)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
Mpc_Destroy(*instPtr);
|
||||||
goto mpc_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*instPtr)->isEnable = false; // nothing received.
|
(*instPtr)->isEnable = false; // nothing received.
|
||||||
(*instPtr)->isRxDone = false; // nothing received.
|
(*instPtr)->isRxDone = false; // nothing received.
|
||||||
(*instPtr)->isTxDone = true; // nothing to be sent.
|
(*instPtr)->isTxDone = true; // nothing to be sent.
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
|
||||||
mpc_init_error:
|
|
||||||
free((*instPtr)->mpchwDesc);
|
|
||||||
free((*instPtr)->txQueue);
|
|
||||||
free((*instPtr)->rxQueue);
|
|
||||||
free(*instPtr);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
/**
|
||||||
|
* @brief Destroy MPC instance.
|
||||||
|
*
|
||||||
|
* @param InstPtr A pointer to MPC instance.
|
||||||
|
*
|
||||||
|
* @return None.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
void Mpc_Destroy(MPC *instPtr)
|
||||||
|
{
|
||||||
|
if (instPtr == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
free(instPtr->mpchwDesc);
|
||||||
|
free(instPtr->txQueue);
|
||||||
|
free(instPtr->rxQueue);
|
||||||
|
free(instPtr);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/**
|
/**
|
||||||
* @brief Generate a remote test response message.
|
* @brief Generate a remote test response message.
|
||||||
@@ -534,17 +551,16 @@ int32_t Mpc_RxIrqHandler(MPC *instPtr)
|
|||||||
Status = MpcHw_Recv(instPtr->mpchwDesc, mpcReq);
|
Status = MpcHw_Recv(instPtr->mpchwDesc, mpcReq);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto recv_error;
|
DBG_ERROR("SystemBus::RX error!\n");
|
||||||
|
free(mpcReq);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
if (CircQueuePush(instPtr->rxQueue, (void *)mpcReq) == false)
|
if (CircQueuePush(instPtr->rxQueue, (void *)mpcReq) == false)
|
||||||
{
|
{
|
||||||
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
||||||
Status = EQUEUE;
|
free(mpcReq);
|
||||||
goto recv_error;
|
return EQUEUE;
|
||||||
}
|
}
|
||||||
instPtr->isRxDone = false; // another reception is undergoing.
|
instPtr->isRxDone = false; // another reception is undergoing.
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
recv_error:
|
|
||||||
free(mpcReq);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ typedef struct
|
|||||||
/************************** Function Prototypes ******************************/
|
/************************** Function Prototypes ******************************/
|
||||||
|
|
||||||
int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config);
|
int32_t Mpc_Init(MPC **instPtr, MPC_CONFIG *config);
|
||||||
|
void Mpc_Destroy(MPC *instPtr);
|
||||||
|
|
||||||
int32_t Mpc_HandleCmd(MPC *instPtr);
|
int32_t Mpc_HandleCmd(MPC *instPtr);
|
||||||
int32_t Mpc_PendRemoteTest(MPC *instPtr);
|
int32_t Mpc_PendRemoteTest(MPC *instPtr);
|
||||||
|
|||||||
@@ -470,6 +470,12 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
|
|||||||
|
|
||||||
// Clear random content
|
// Clear random content
|
||||||
memset(*instPtr, 0x00, sizeof(L2_INST));
|
memset(*instPtr, 0x00, sizeof(L2_INST));
|
||||||
|
(*instPtr)->sendPktData = NULL;
|
||||||
|
(*instPtr)->recvPktData = NULL;
|
||||||
|
(*instPtr)->schdEventPool = NULL;
|
||||||
|
(*instPtr)->nodeList = NULL;
|
||||||
|
(*instPtr)->scanFSM = NULL;
|
||||||
|
(*instPtr)->serviceFSM = NULL;
|
||||||
memcpy(&((*instPtr)->config), config, sizeof(L2_CONFIG));
|
memcpy(&((*instPtr)->config), config, sizeof(L2_CONFIG));
|
||||||
|
|
||||||
// Packet buffer
|
// Packet buffer
|
||||||
@@ -477,15 +483,15 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
|
|||||||
if ((*instPtr)->sendPktData == NULL)
|
if ((*instPtr)->sendPktData == NULL)
|
||||||
{
|
{
|
||||||
DBG_ERROR("Allocate memory for sendPktData failed.\n");
|
DBG_ERROR("Allocate memory for sendPktData failed.\n");
|
||||||
Status = ENOMEM;
|
Linklayer_Destroy(*instPtr);
|
||||||
goto init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*instPtr)->recvPktData = calloc(L2_PACK_LEN_MAX / sizeof(uint64_t), sizeof(uint64_t));
|
(*instPtr)->recvPktData = calloc(L2_PACK_LEN_MAX / sizeof(uint64_t), sizeof(uint64_t));
|
||||||
if ((*instPtr)->recvPktData == NULL)
|
if ((*instPtr)->recvPktData == NULL)
|
||||||
{
|
{
|
||||||
DBG_ERROR("Allocate memory for recvPktData failed.\n");
|
DBG_ERROR("Allocate memory for recvPktData failed.\n");
|
||||||
Status = ENOMEM;
|
Linklayer_Destroy(*instPtr);
|
||||||
goto init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
// Reset basic info
|
// Reset basic info
|
||||||
(*instPtr)->netStartTime = NET_START_TIME_INFTY;
|
(*instPtr)->netStartTime = NET_START_TIME_INFTY;
|
||||||
@@ -528,32 +534,33 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
|
|||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
DBG_ERROR("L2_CreateSchedEventPool runs failed, with error code: %" PRId32 ".\n", Status);
|
DBG_ERROR("L2_CreateSchedEventPool runs failed, with error code: %" PRId32 ".\n", Status);
|
||||||
goto init_error;
|
Linklayer_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = L2_NodeList_Init(&((*instPtr)->nodeList));
|
Status = L2_NodeList_Init(&((*instPtr)->nodeList));
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
DBG_ERROR("NodeList_Init runs failed, with error code: %" PRId32 ".\n", Status);
|
DBG_ERROR("NodeList_Init runs failed, with error code: %" PRId32 ".\n", Status);
|
||||||
goto init_error;
|
Linklayer_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = L2_Scan_Init(&((*instPtr)->scanFSM));
|
Status = L2_Scan_Init(&((*instPtr)->scanFSM));
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Linklayer_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = L2_Service_Init(&((*instPtr)->serviceFSM));
|
Status = L2_Service_Init(&((*instPtr)->serviceFSM));
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Linklayer_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
init_error:
|
|
||||||
Linklayer_Destroy(*instPtr);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -637,7 +644,10 @@ int32_t Linklayer_Reconfig(L2_INST *instPtr, const L2_CONFIG *config)
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
void Linklayer_Destroy(L2_INST *instPtr)
|
void Linklayer_Destroy(L2_INST *instPtr)
|
||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
if (instPtr == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
free(instPtr->sendPktData);
|
free(instPtr->sendPktData);
|
||||||
free(instPtr->recvPktData);
|
free(instPtr->recvPktData);
|
||||||
// Destroy FSMs and nodeList
|
// Destroy FSMs and nodeList
|
||||||
|
|||||||
@@ -796,7 +796,6 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
{
|
{
|
||||||
ASSERT(instPtr != NULL);
|
ASSERT(instPtr != NULL);
|
||||||
L2_TOR_TYPE torState;
|
L2_TOR_TYPE torState;
|
||||||
int32_t Status;
|
|
||||||
const NODE_ENTRY *commNode;
|
const NODE_ENTRY *commNode;
|
||||||
PHY_INST *phyRef = instPtr->config.phyInstPtr;
|
PHY_INST *phyRef = instPtr->config.phyInstPtr;
|
||||||
DBG_INFO("-------- Scan Routine --------\n");
|
DBG_INFO("-------- Scan Routine --------\n");
|
||||||
@@ -856,8 +855,7 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD && torState == L2_TOR_TX)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD && torState == L2_TOR_TX)
|
||||||
{
|
{
|
||||||
DBG_ERROR("Only head node can send init-scan Frame.\n");
|
DBG_ERROR("Only head node can send init-scan Frame.\n");
|
||||||
Status = FAILURE;
|
return FAILURE;
|
||||||
goto routine_err;
|
|
||||||
}
|
}
|
||||||
L2_SetupNextSlot(instPtr, torState, L2_SCAN_FRAME);
|
L2_SetupNextSlot(instPtr, torState, L2_SCAN_FRAME);
|
||||||
break;
|
break;
|
||||||
@@ -868,14 +866,12 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
if (L2_GetNodeType(instPtr) != L2_NODE_HEAD)
|
||||||
{
|
{
|
||||||
DBG_ERROR("Only head node can send ADV Frame.\n");
|
DBG_ERROR("Only head node can send ADV Frame.\n");
|
||||||
Status = FAILURE;
|
return FAILURE;
|
||||||
goto routine_err;
|
|
||||||
}
|
}
|
||||||
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
|
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
|
||||||
if (ScanMsg_Packing(instPtr, L2_ADV_FRAME, rtneEntry->dst) != SUCCESS)
|
if (ScanMsg_Packing(instPtr, L2_ADV_FRAME, rtneEntry->dst) != SUCCESS)
|
||||||
{
|
{
|
||||||
Status = FAILURE;
|
return FAILURE;
|
||||||
goto routine_err;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Antenna setting (reserved.) */
|
/* Antenna setting (reserved.) */
|
||||||
@@ -896,8 +892,7 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
|
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
|
||||||
if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS)
|
if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS)
|
||||||
{
|
{
|
||||||
Status = FAILURE;
|
return FAILURE;
|
||||||
goto routine_err;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Antenna setting (reserved.) */
|
/* Antenna setting (reserved.) */
|
||||||
@@ -905,12 +900,9 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
DBG_ERROR("Cannot start a routine for slot type [%" PRId8 "] properly.\n", rtneEntry->slotType);
|
DBG_ERROR("Cannot start a routine for slot type [%" PRId8 "] properly.\n", rtneEntry->slotType);
|
||||||
Status = FAILURE;
|
return FAILURE;
|
||||||
goto routine_err;
|
|
||||||
}
|
}
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
routine_err:
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @} LinkLayer_Scan*/
|
/** @} LinkLayer_Scan*/
|
||||||
|
|||||||
@@ -439,14 +439,15 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
bramConfigPtr = XBram_LookupConfig(phyConfig->antBramId);
|
bramConfigPtr = XBram_LookupConfig(phyConfig->antBramId);
|
||||||
if (bramConfigPtr == NULL)
|
if (bramConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
Status = XBram_CfgInitialize(&antConfigBram, bramConfigPtr,
|
Status = XBram_CfgInitialize(&antConfigBram, bramConfigPtr,
|
||||||
bramConfigPtr->CtrlBaseAddress);
|
bramConfigPtr->CtrlBaseAddress);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Execute the BRAM driver selftest.
|
* Execute the BRAM driver selftest.
|
||||||
@@ -454,20 +455,22 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
Status = XBram_SelfTest(&antConfigBram, 0);
|
Status = XBram_SelfTest(&antConfigBram, 0);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
bramConfigPtr = XBram_LookupConfig(phyConfig->txBramId);
|
bramConfigPtr = XBram_LookupConfig(phyConfig->txBramId);
|
||||||
if (bramConfigPtr == NULL)
|
if (bramConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
Status = XBram_CfgInitialize(&txDataBram, bramConfigPtr,
|
Status = XBram_CfgInitialize(&txDataBram, bramConfigPtr,
|
||||||
bramConfigPtr->CtrlBaseAddress);
|
bramConfigPtr->CtrlBaseAddress);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Execute the BRAM driver selftest.
|
* Execute the BRAM driver selftest.
|
||||||
@@ -475,20 +478,22 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
Status = XBram_SelfTest(&txDataBram, 0);
|
Status = XBram_SelfTest(&txDataBram, 0);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
bramConfigPtr = XBram_LookupConfig(phyConfig->rxBramId);
|
bramConfigPtr = XBram_LookupConfig(phyConfig->rxBramId);
|
||||||
if (bramConfigPtr == NULL)
|
if (bramConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
Status = XBram_CfgInitialize(&rxDataBram, bramConfigPtr,
|
Status = XBram_CfgInitialize(&rxDataBram, bramConfigPtr,
|
||||||
bramConfigPtr->CtrlBaseAddress);
|
bramConfigPtr->CtrlBaseAddress);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Execute the BRAM driver selftest.
|
* Execute the BRAM driver selftest.
|
||||||
@@ -496,7 +501,8 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
Status = XBram_SelfTest(&rxDataBram, 0);
|
Status = XBram_SelfTest(&rxDataBram, 0);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
(*instPtr)->antConfigAddr = antConfigBram.Config.MemBaseAddress;
|
(*instPtr)->antConfigAddr = antConfigBram.Config.MemBaseAddress;
|
||||||
@@ -510,14 +516,15 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
bramConfigPtr = XBram_LookupConfig(phyConfig->antInfoBramId);
|
bramConfigPtr = XBram_LookupConfig(phyConfig->antInfoBramId);
|
||||||
if (bramConfigPtr == NULL)
|
if (bramConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
Status = XBram_CfgInitialize(&antInfoBram, bramConfigPtr,
|
Status = XBram_CfgInitialize(&antInfoBram, bramConfigPtr,
|
||||||
bramConfigPtr->CtrlBaseAddress);
|
bramConfigPtr->CtrlBaseAddress);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Execute the BRAM driver self test.
|
* Execute the BRAM driver self test.
|
||||||
@@ -525,7 +532,8 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
Status = XBram_SelfTest(&antInfoBram, 0);
|
Status = XBram_SelfTest(&antInfoBram, 0);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
(*instPtr)->antInfoAddr = antInfoBram.Config.MemBaseAddress;
|
(*instPtr)->antInfoAddr = antInfoBram.Config.MemBaseAddress;
|
||||||
uint32_t phyMainCtrl = PhyRead(*instPtr, PHY_MAIN_CTRL);
|
uint32_t phyMainCtrl = PhyRead(*instPtr, PHY_MAIN_CTRL);
|
||||||
@@ -545,8 +553,8 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
xadcConfigPtr = XAdcPs_LookupConfig(phyConfig->hwXadcId);
|
xadcConfigPtr = XAdcPs_LookupConfig(phyConfig->hwXadcId);
|
||||||
if (xadcConfigPtr == NULL)
|
if (xadcConfigPtr == NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
XAdcPs_CfgInitialize(&((*instPtr)->hwXadc), xadcConfigPtr, xadcConfigPtr->BaseAddress);
|
XAdcPs_CfgInitialize(&((*instPtr)->hwXadc), xadcConfigPtr, xadcConfigPtr->BaseAddress);
|
||||||
|
|
||||||
@@ -554,36 +562,37 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
|
|||||||
Status = XAdcPs_SelfTest(&((*instPtr)->hwXadc));
|
Status = XAdcPs_SelfTest(&((*instPtr)->hwXadc));
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto init_error;
|
Phy_Destroy(*instPtr);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Disable the Channel Sequencer before configuring the Sequence registers. */
|
/* Disable the Channel Sequencer before configuring the Sequence registers. */
|
||||||
XAdcPs_SetSequencerMode(&((*instPtr)->hwXadc), XADCPS_SEQ_MODE_SAFE);
|
XAdcPs_SetSequencerMode(&((*instPtr)->hwXadc), XADCPS_SEQ_MODE_SAFE);
|
||||||
#else
|
#else
|
||||||
|
(*instPtr)->antConfigAddr = NULL;
|
||||||
|
(*instPtr)->recvDataAddr = NULL;
|
||||||
|
(*instPtr)->sendDataAddr = NULL;
|
||||||
(*instPtr)->antConfigAddr = (uintptr_t)calloc(L1_ANTCONFIG_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
(*instPtr)->antConfigAddr = (uintptr_t)calloc(L1_ANTCONFIG_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
||||||
if ((*instPtr)->antConfigAddr == (uintptr_t)NULL)
|
if ((*instPtr)->antConfigAddr == (uintptr_t)NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
(*instPtr)->recvDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
(*instPtr)->recvDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
||||||
if ((*instPtr)->recvDataAddr == (uintptr_t)NULL)
|
if ((*instPtr)->recvDataAddr == (uintptr_t)NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
(*instPtr)->sendDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
(*instPtr)->sendDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
|
||||||
if ((*instPtr)->sendDataAddr == (uintptr_t)NULL)
|
if ((*instPtr)->sendDataAddr == (uintptr_t)NULL)
|
||||||
{
|
{
|
||||||
Status = EDCONF;
|
Phy_Destroy(*instPtr);
|
||||||
goto init_error;
|
return EDCONF;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
init_error:
|
|
||||||
Phy_Destroy(*instPtr);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|||||||
@@ -658,7 +658,7 @@ int32_t SystemBus_MakeResp(SYSBUS *instPtr)
|
|||||||
* @param InstPtr A double pointer to System Bus instance.
|
* @param InstPtr A double pointer to System Bus instance.
|
||||||
* @param config A pointer to System Bus configurations.
|
* @param config A pointer to System Bus configurations.
|
||||||
*
|
*
|
||||||
* @return None.
|
* @return Error code.
|
||||||
*
|
*
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
||||||
@@ -670,7 +670,7 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
|||||||
(*instPtr) = malloc(sizeof(SYSBUS));
|
(*instPtr) = malloc(sizeof(SYSBUS));
|
||||||
if ((*instPtr) == NULL)
|
if ((*instPtr) == NULL)
|
||||||
{
|
{
|
||||||
return FAILURE;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*instPtr)->rxQueue = NULL;
|
(*instPtr)->rxQueue = NULL;
|
||||||
(*instPtr)->txQueue = NULL;
|
(*instPtr)->txQueue = NULL;
|
||||||
@@ -684,29 +684,45 @@ int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config)
|
|||||||
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
Status = SysbusUart_Init(&((*instPtr)->uartInst), &uartConfig);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
SystemBus_Destroy(*instPtr);
|
||||||
goto sysbus_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
if (CircQueueCreate(&((*instPtr)->txQueue), (*instPtr)->config.txQueueMax) == false)
|
if (CircQueueCreate(&((*instPtr)->txQueue), (*instPtr)->config.txQueueMax) == false)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
SystemBus_Destroy(*instPtr);
|
||||||
goto sysbus_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
if (CircQueueCreate(&((*instPtr)->rxQueue), (*instPtr)->config.rxQueueMax) == false)
|
if (CircQueueCreate(&((*instPtr)->rxQueue), (*instPtr)->config.rxQueueMax) == false)
|
||||||
{
|
{
|
||||||
Status = ENOMEM;
|
SystemBus_Destroy(*instPtr);
|
||||||
goto sysbus_init_error;
|
return ENOMEM;
|
||||||
}
|
}
|
||||||
(*instPtr)->isRxDone = false; // nothing received.
|
(*instPtr)->isRxDone = false; // nothing received.
|
||||||
(*instPtr)->isTxDone = true; // nothing to be sent.
|
(*instPtr)->isTxDone = true; // nothing to be sent.
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
sysbus_init_error:
|
|
||||||
free((*instPtr)->uartInst);
|
/*****************************************************************************/
|
||||||
free((*instPtr)->txQueue);
|
/**
|
||||||
free((*instPtr)->rxQueue);
|
* @brief Destroy System Bus instance.
|
||||||
free(*instPtr);
|
*
|
||||||
return Status;
|
* @param InstPtr A pointer to System Bus instance.
|
||||||
|
*
|
||||||
|
* @return None.
|
||||||
|
*
|
||||||
|
******************************************************************************/
|
||||||
|
void SystemBus_Destroy(SYSBUS *instPtr)
|
||||||
|
{
|
||||||
|
if (instPtr == NULL)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
free(instPtr->uartInst);
|
||||||
|
free(instPtr->txQueue);
|
||||||
|
free(instPtr->rxQueue);
|
||||||
|
free(instPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
@@ -748,19 +764,17 @@ int32_t SystemBus_RxIntrHandler(SYSBUS *instPtr)
|
|||||||
Status = SysbusUart_Recv(instPtr->uartInst, sysbusReq);
|
Status = SysbusUart_Recv(instPtr->uartInst, sysbusReq);
|
||||||
if (Status != SUCCESS)
|
if (Status != SUCCESS)
|
||||||
{
|
{
|
||||||
goto recv_error;
|
free(sysbusReq);
|
||||||
|
return Status;
|
||||||
}
|
}
|
||||||
if (CircQueuePush(instPtr->rxQueue, (void *)sysbusReq) == false)
|
if (CircQueuePush(instPtr->rxQueue, (void *)sysbusReq) == false)
|
||||||
{
|
{
|
||||||
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
DBG_ERROR("SystemBus::RX Queue overflowed!\n");
|
||||||
Status = EQUEUE;
|
free(sysbusReq);
|
||||||
goto recv_error;
|
return EQUEUE;
|
||||||
}
|
}
|
||||||
instPtr->isRxDone = false; // another reception is undergoing.
|
instPtr->isRxDone = false; // another reception is undergoing.
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
recv_error:
|
|
||||||
free(sysbusReq);
|
|
||||||
return Status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @} SystemBus*/
|
/** @} SystemBus*/
|
||||||
@@ -60,6 +60,7 @@ typedef struct
|
|||||||
/************************** Function Prototypes ******************************/
|
/************************** Function Prototypes ******************************/
|
||||||
|
|
||||||
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config);
|
int32_t SystemBus_Init(SYSBUS **instPtr, SYSBUS_CONFIG *config);
|
||||||
|
void SystemBus_Destroy(SYSBUS *instPtr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @defgroup SystemBus_Protocol_Routine
|
* @defgroup SystemBus_Protocol_Routine
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ bool CircQueueCreate(CIRC_QUEUE **q, uint32_t queueCapacity)
|
|||||||
ASSERT(q != NULL);
|
ASSERT(q != NULL);
|
||||||
CIRC_QUEUE *queue;
|
CIRC_QUEUE *queue;
|
||||||
queue = malloc(sizeof(CIRC_QUEUE));
|
queue = malloc(sizeof(CIRC_QUEUE));
|
||||||
if (!queue)
|
if (queue == NULL)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -65,16 +65,14 @@ bool CircQueueCreate(CIRC_QUEUE **q, uint32_t queueCapacity)
|
|||||||
queue->data = malloc(queueCapacity * sizeof(void *));
|
queue->data = malloc(queueCapacity * sizeof(void *));
|
||||||
if (queue->data == NULL)
|
if (queue->data == NULL)
|
||||||
{
|
{
|
||||||
goto error;
|
free(queue);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
queue->bounds = queueCapacity;
|
queue->bounds = queueCapacity;
|
||||||
queue->nelts = 0;
|
queue->nelts = 0;
|
||||||
queue->in = 0;
|
queue->in = 0;
|
||||||
queue->out = 0;
|
queue->out = 0;
|
||||||
return true;
|
return true;
|
||||||
error:
|
|
||||||
free(queue);
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user