avoid usage of goto`

This commit is contained in:
Gatsby Van
2024-06-25 10:59:54 +08:00
parent 884d9bcca9
commit f8212892a2
8 changed files with 144 additions and 103 deletions
@@ -470,6 +470,12 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
// Clear random content
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));
// Packet buffer
@@ -477,15 +483,15 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
if ((*instPtr)->sendPktData == NULL)
{
DBG_ERROR("Allocate memory for sendPktData failed.\n");
Status = ENOMEM;
goto init_error;
Linklayer_Destroy(*instPtr);
return ENOMEM;
}
(*instPtr)->recvPktData = calloc(L2_PACK_LEN_MAX / sizeof(uint64_t), sizeof(uint64_t));
if ((*instPtr)->recvPktData == NULL)
{
DBG_ERROR("Allocate memory for recvPktData failed.\n");
Status = ENOMEM;
goto init_error;
Linklayer_Destroy(*instPtr);
return ENOMEM;
}
// Reset basic info
(*instPtr)->netStartTime = NET_START_TIME_INFTY;
@@ -528,32 +534,33 @@ int32_t Linklayer_Init(L2_INST **instPtr, const L2_CONFIG *config)
if (Status != SUCCESS)
{
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));
if (Status != SUCCESS)
{
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));
if (Status != SUCCESS)
{
goto init_error;
Linklayer_Destroy(*instPtr);
return Status;
}
Status = L2_Service_Init(&((*instPtr)->serviceFSM));
if (Status != SUCCESS)
{
goto init_error;
Linklayer_Destroy(*instPtr);
return Status;
}
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)
{
ASSERT(instPtr != NULL);
if (instPtr == NULL)
{
return;
}
free(instPtr->sendPktData);
free(instPtr->recvPktData);
// 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);
L2_TOR_TYPE torState;
int32_t Status;
const NODE_ENTRY *commNode;
PHY_INST *phyRef = instPtr->config.phyInstPtr;
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)
{
DBG_ERROR("Only head node can send init-scan Frame.\n");
Status = FAILURE;
goto routine_err;
return FAILURE;
}
L2_SetupNextSlot(instPtr, torState, L2_SCAN_FRAME);
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)
{
DBG_ERROR("Only head node can send ADV Frame.\n");
Status = FAILURE;
goto routine_err;
return FAILURE;
}
memset(instPtr->sendPktData, 0xAA, L2_PACK_LEN_MAX);
if (ScanMsg_Packing(instPtr, L2_ADV_FRAME, rtneEntry->dst) != SUCCESS)
{
Status = FAILURE;
goto routine_err;
return FAILURE;
}
}
/* 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);
if (ScanMsg_Packing(instPtr, L2_CFM_FRAME, rtneEntry->dst) != SUCCESS)
{
Status = FAILURE;
goto routine_err;
return FAILURE;
}
}
/* Antenna setting (reserved.) */
@@ -905,12 +900,9 @@ int32_t L2_Scan_Routine(L2_INST *instPtr, const L2_RTNE_TABLE_ENTRY *rtneEntry)
break;
default:
DBG_ERROR("Cannot start a routine for slot type [%" PRId8 "] properly.\n", rtneEntry->slotType);
Status = FAILURE;
goto routine_err;
return FAILURE;
}
return SUCCESS;
routine_err:
return Status;
}
/** @} LinkLayer_Scan*/
@@ -439,14 +439,15 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
bramConfigPtr = XBram_LookupConfig(phyConfig->antBramId);
if (bramConfigPtr == NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
Status = XBram_CfgInitialize(&antConfigBram, bramConfigPtr,
bramConfigPtr->CtrlBaseAddress);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
/*
* Execute the BRAM driver selftest.
@@ -454,20 +455,22 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
Status = XBram_SelfTest(&antConfigBram, 0);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
bramConfigPtr = XBram_LookupConfig(phyConfig->txBramId);
if (bramConfigPtr == NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
Status = XBram_CfgInitialize(&txDataBram, bramConfigPtr,
bramConfigPtr->CtrlBaseAddress);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
/*
* Execute the BRAM driver selftest.
@@ -475,20 +478,22 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
Status = XBram_SelfTest(&txDataBram, 0);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
bramConfigPtr = XBram_LookupConfig(phyConfig->rxBramId);
if (bramConfigPtr == NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
Status = XBram_CfgInitialize(&rxDataBram, bramConfigPtr,
bramConfigPtr->CtrlBaseAddress);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
/*
* Execute the BRAM driver selftest.
@@ -496,7 +501,8 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
Status = XBram_SelfTest(&rxDataBram, 0);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
(*instPtr)->antConfigAddr = antConfigBram.Config.MemBaseAddress;
@@ -510,14 +516,15 @@ int32_t Phy_Init(PHY_INST **instPtr, PHY_CONFIG *phyConfig)
bramConfigPtr = XBram_LookupConfig(phyConfig->antInfoBramId);
if (bramConfigPtr == NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
Status = XBram_CfgInitialize(&antInfoBram, bramConfigPtr,
bramConfigPtr->CtrlBaseAddress);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
/*
* 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);
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
(*instPtr)->antInfoAddr = antInfoBram.Config.MemBaseAddress;
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);
if (xadcConfigPtr == NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
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));
if (Status != SUCCESS)
{
goto init_error;
Phy_Destroy(*instPtr);
return Status;
}
/* Disable the Channel Sequencer before configuring the Sequence registers. */
XAdcPs_SetSequencerMode(&((*instPtr)->hwXadc), XADCPS_SEQ_MODE_SAFE);
#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));
if ((*instPtr)->antConfigAddr == (uintptr_t)NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
(*instPtr)->recvDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
if ((*instPtr)->recvDataAddr == (uintptr_t)NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
(*instPtr)->sendDataAddr = (uintptr_t)calloc(L1_TXRXDATA_MAX_LEN / sizeof(uint64_t), sizeof(uint64_t));
if ((*instPtr)->sendDataAddr == (uintptr_t)NULL)
{
Status = EDCONF;
goto init_error;
Phy_Destroy(*instPtr);
return EDCONF;
}
#endif
return SUCCESS;
init_error:
Phy_Destroy(*instPtr);
return Status;
}
/*****************************************************************************/