The functions for the configuration, control, status and statistics
request primitives are defined here.
*/
-static const char* RLOG_MODULE_NAME="MAC";
-static int RLOG_FILE_ID=220;
-static int RLOG_MODULE_ID=4096;
/* header include files (.h) */
#include "common_def.h"
#include "rgr.h" /* LRG Interface defines */
#include "rg.h" /* MAC defines */
#include "rg_err.h" /* MAC error defines */
+#include "mac_utils.h"
/* header/extern include files (.x) */
#include "crg.x" /* CRG Interface includes */
#endif
#include "ss_rbuf.h"
#include "ss_rbuf.x"
-#include "lwr_mac.h" /* MAC CL defines */
#include "mac_sch_interface.h"
#include "lwr_mac_upr_inf.h"
#include "mac.h"
-#include "lwr_mac_phy.h"
#include "lwr_mac_fsm.h"
+#include "lwr_mac_phy.h"
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/* Public variable declaration */
-LwrMacCb lwrMacCb;
MacCb macCb;
/* forward references */
Elmnt sapType
));
-static Void rgLMMShutdown ARGS((
- Inst inst
-));
-
static Void rgLMMFillCfmPst ARGS((
Pst *reqPst,
Pst *cfmPst,
RgMngmt *cfm
));
-static Void rgLMMGenCntrl ARGS((
-RgMngmt *cntrl,
-RgMngmt *cfm,
-Pst *cfmPst
-));
-
-static Void rgLMMSapCntrl ARGS((
-RgMngmt *cntrl,
-RgMngmt *cfm,
-Pst *cfmPst
-));
-
\f
/**
* @brief Task Initiation callback function.
*
* @details
*
- * Function : rgActvInit
+ * Function : macActvInit
*
* This function is supplied as one of parameters during MAC's
* task registration. SSI will invoke this function once, after
* @return S16
* -# ROK
**/
-S16 rgActvInit
+uint8_t macActvInit
(
Ent entity, /* entity */
Inst inst, /* instance */
SAttachSRngBuf(SS_RNG_BUF_ULMAC_TO_ULRLC, SS_RBUF_ENT_ULRLC,SS_RNG_RX);
#endif
- /* Initializing CL control block */
- memset(&lwrMacCb, 0, sizeof(LwrMacCb));
- lwrMacCb.region = region;
- lwrMacCb.pool = 0;
- lwrMacCb.clCfgDone = TRUE;
- lwrMacCb.numCell = 0;
- lwrMacCb.phyState = PHY_STATE_IDLE;
-
- /* Initialize Scheduler as well */
- schActvInit(ENTMAC, (DEFAULT_CELLS + SCH_INST_START), DFLT_REGION, PWR_UP);
-
/* Initialize lower mac */
- lwrMacLayerInit();
+ lwrMacLayerInit(region, 0);
return ROK;
-} /* rgActvInit */
+} /* macActvInit */
\f
/**
* @brief Layer Manager Configuration request handler.
- RG_DIAG_LVL0(inst,0x0a0b0001, RG_DIAG_NA, SS_DIAG_INV_ARG,\
- "Received CfgReq for MAC layer, Entity = %d, Instance = %d\n", pst->srcEnt, pst->srcInst,0,0);
+ DU_LOG("\nINFO --> MAC : Received CfgReq for MAC layer, Entity = %d, Instance = %d", pst->srcEnt, pst->srcInst);
RG_IS_INST_VALID(pst->dstInst);
inst = pst->dstInst - RG_INST_START;
#ifdef INTEL_WLS_MEM
/* Start WLS message receiver thread */
LwrMacStartWlsRcvr();
- /* Allocate memory for UL transmissions */
- LwrMacEnqueueWlsBlock();
#endif
reason = rgLMMGenCfg(inst,&cfg->t.cfg);
break;
default:
ret = LCM_PRIM_NOK;
reason = LCM_REASON_INVALID_ELMNT;
- RLOG1(L_ERROR, "Invalid Elmnt=%d",
+ DU_LOG("\nERROR --> MAC : Invalid Elmnt=%d",
cfg->hdr.elmId.elmnt);
break;
}
cfm.cfm.status = LCM_PRIM_NOK;
cfm.cfm.reason = LCM_REASON_GENCFG_NOT_DONE;
RgMiLrgStsCfm(&cfmPst,&cfm);
- RLOG0(L_ERROR, "Gen Cfg not done");
+ DU_LOG("\nERROR --> MAC : Gen Cfg not done");
return ROK;
}
default:
cfm.cfm.status = LCM_PRIM_NOK;
cfm.cfm.reason = LCM_REASON_INVALID_ELMNT;
- RLOG1(L_ERROR, "Invalid Elmnt = %d",sts->hdr.elmId.elmnt);
+ DU_LOG("\nERROR --> MAC : Invalid Elmnt = %d",sts->hdr.elmId.elmnt);
break;
}
RgMiLrgStsCfm(&cfmPst,&cfm);
}/*-- RgMiLrgStsReq --*/
\f
-/**
- * @brief Layer Manager Status request handler.
- *
- * @details
- *
- * Function : RgMiLrgStaReq
- *
- * This function handles the solicited status
- * request received from the Layer Manager.
- * -# Based on sta->hdr.elmId.elmnt, it retrieves the status of a
- * particular SAP from the rgCb global control block.
- * -# Invokes the RgMiLrgStaCfm to send back the confirmation to LM.
- *
- * @param[in] Pst *pst, the post structure
- * @param[in] RgMngmt *sta, the status parameter's structure
- * @return S16
- * -# ROK
- **/
-S16 RgMiLrgStaReq
-(
-Pst *pst, /* post structure */
-RgMngmt *sta /* status structure */
-)
-{
- Pst cfmPst;
- RgMngmt cfm;
- Inst inst ;
-
-
- RG_IS_INST_VALID(pst->dstInst);
- inst = pst->dstInst - RG_INST_START;
-
-
- /* Fill the post structure for sending the confirmation */
- rgLMMFillCfmPst(pst, &cfmPst, sta);
-
- if (sta->t.ssta.s.sysId.ptNmb != NULLP)
- {
- SPutSBuf(pst->region, pst->pool, (Data *)sta->t.ssta.s.sysId.ptNmb, LRG_MAX_PT_NUM_SIZE);
- }
-
- memset(&cfm, 0, sizeof(RgMngmt));
- cfm.hdr.elmId.elmnt = sta->hdr.elmId.elmnt;
-
-#ifdef LMINT3
- cfm.hdr.transId = sta->hdr.transId;
-#endif
- /* Check if General Config Done */
- if(rgCb[inst].rgInit.cfgDone != TRUE)
- {
- SGetDateTime(&cfm.t.ssta.dt);
- if (SGetSBuf(cfmPst.region, cfmPst.pool,
- (Data **)&(cfm.t.ssta.s.sysId.ptNmb), LRG_MAX_PT_NUM_SIZE)
- != ROK)
- {
- RLOG0(L_ERROR, "Memory Unavailable for Confirmation");
- return ROK;
- }
- memset((cfm.t.ssta.s.sysId.ptNmb), 0, LRG_MAX_PT_NUM_SIZE);
- rgGetSId(&cfm.t.ssta.s.sysId);
- cfm.cfm.status = LCM_PRIM_NOK;
- cfm.cfm.reason = LCM_REASON_GENCFG_NOT_DONE;
- cfm.hdr.elmId.elmnt = sta->hdr.elmId.elmnt;
- RgMiLrgStaCfm(&cfmPst, &cfm);
- RLOG0(L_ERROR, "Gen Cfg not done");
- return ROK;
- }
-
- switch(sta->hdr.elmId.elmnt)
- {
- case STGEN:
- SGetDateTime(&cfm.t.ssta.dt);
- if (SGetSBuf(cfmPst.region, cfmPst.pool,
- (Data **)&(cfm.t.ssta.s.sysId.ptNmb), LRG_MAX_PT_NUM_SIZE)
- != ROK)
- {
- RLOG0(L_ERROR, "Memory Unavailable for Confirmation");
- return ROK;
- }
- memset((cfm.t.ssta.s.sysId.ptNmb), 0, LRG_MAX_PT_NUM_SIZE);
- rgGetSId(&cfm.t.ssta.s.sysId);
- cfm.cfm.status = LCM_PRIM_OK;
- cfm.cfm.reason = LCM_REASON_NOT_APPL;
- RgMiLrgStaCfm(&cfmPst, &cfm);
- break;
- case STRGUSAP:
- cfm.cfm.status = LCM_PRIM_OK;
- cfm.cfm.reason = LCM_REASON_NOT_APPL;
- SGetDateTime(&cfm.t.ssta.dt);
- memcpy(&(cfm.t.ssta.s.rguSapSta),
- &rgCb[inst].rguSap[sta->t.ssta.sapInst].sapSta,
- sizeof(RgSapSta));
- RgMiLrgStaCfm(&cfmPst, &cfm);
- break;
- case STCRGSAP:
- cfm.cfm.status = LCM_PRIM_OK;
- cfm.cfm.reason = LCM_REASON_NOT_APPL;
- SGetDateTime(&cfm.t.ssta.dt);
- memcpy(&(cfm.t.ssta.s.crgSapSta), &rgCb[inst].crgSap.sapSta,
- sizeof(RgSapSta));
- RgMiLrgStaCfm(&cfmPst, &cfm);
- break;
- case STTFUSAP:
- cfm.cfm.status = LCM_PRIM_OK;
- cfm.cfm.reason = LCM_REASON_NOT_APPL;
- SGetDateTime(&cfm.t.ssta.dt);
- memcpy(&(cfm.t.ssta.s.tfuSapSta), &rgCb[inst].tfuSap.sapSta,
- sizeof(RgSapSta));
- RgMiLrgStaCfm(&cfmPst, &cfm);
- break;
- default:
- cfm.cfm.status = LCM_PRIM_NOK;
- cfm.cfm.reason = LCM_REASON_INVALID_ELMNT;
- RgMiLrgStaCfm(&cfmPst, &cfm);
- RLOG1(L_ERROR, "Invalid elmnt=%d",sta->hdr.elmId.elmnt);
- break;
- }
- return ROK;
-}/*-- RgMiLrgStaReq --*/
-
-\f
-/**
- * @brief Layer Manager Control request handler.
- *
- * @details
- *
- * Function : RgMiLrgCntrlReq
- *
- * This function handles the control
- * request received from the Layer Manager.
- * -# Based on cntrl->hdr.elmId.elmnt, cntrl->t.cntrl.action
- * and cntrl->t.cntrl.subAction, it performs the appropriate control action
- * of SAP (enable/disable), Debug (enable/disable), Trace (enable/disable)
- * and layer shutdown.
- * -# Invokes the RgMiLrgCntrlCfm to send back the confirmation to LM.
- *
- * @param[in] Pst *pst, the post structure
- * @param[in] RgMngmt *cntrl, the control parameter's structure
- * @return S16
- * -# ROK
- **/
-S16 RgMiLrgCntrlReq
-(
-Pst *pst, /* post structure */
-RgMngmt *cntrl /* control structure */
-)
-{
- S16 ret = ROK; /* return value */
- Pst cfmPst;
- RgMngmt cfm;
- Inst inst;
- /* Fill the post structure for sending the confirmation */
-
- RG_IS_INST_VALID(pst->dstInst);
- inst = pst->dstInst - RG_INST_START;
-
- rgLMMFillCfmPst(pst, &cfmPst, cntrl);
-
- memset(&cfm, 0, sizeof(RgMngmt));
-#ifdef LMINT3
- cfm.hdr.transId = cntrl->hdr.transId;
-#endif
- cfm.hdr.elmId.elmnt = cntrl->hdr.elmId.elmnt;
- cfm.t.cntrl.action = cntrl->t.cntrl.action;
- cfm.t.cntrl.subAction = cntrl->t.cntrl.subAction;
-
- /* Check if General Config Done*/
- if(rgCb[inst].rgInit.cfgDone != TRUE)
- {
- cfm.cfm.status = LCM_PRIM_NOK;
- cfm.cfm.reason = LCM_REASON_GENCFG_NOT_DONE;
- cfm.hdr.elmId.elmnt = cntrl->hdr.elmId.elmnt;
- RgMiLrgCntrlCfm(&cfmPst, &cfm);
- RLOG0(L_ERROR, "Gen Cfg not done");
- return ROK;
- }
-
- /* General Config done, process the Control request */
- switch(cntrl->hdr.elmId.elmnt)
- {
- case STGEN:
- rgLMMGenCntrl(cntrl, &cfm, &cfmPst);
- break;
- case STTFUSAP:
- case STRGUSAP:
- case STCRGSAP:
- rgLMMSapCntrl(cntrl, &cfm, &cfmPst);
- break;
- default:
- cfm.cfm.status = LCM_PRIM_NOK;
- cfm.cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RgMiLrgCntrlCfm(&cfmPst, &cfm);
- RLOG1(L_ERROR, "invalid elmnt=%d",cntrl->hdr.elmId.elmnt);
- break;
- }
- return (ret);
-}/*-- RgMiLrgCntrlReq --*/
-
-\f
/**
* @brief SAP Configuration Handler.
*
(cfg->s.rguSap.selector != ODU_SELECTOR_LC))
{
ret = LCM_REASON_INVALID_PAR_VAL;
- RLOG0(L_ERROR, "unsupported Selector value for RGU");
+ DU_LOG("\nERROR --> MAC : unsupported Selector value for RGU");
break;
}
upSapCb = &(rgCb[inst].rguSap[cfg->s.rguSap.spId]);
(cfg->s.crgSap.selector != ODU_SELECTOR_LC))
{
ret = LCM_REASON_INVALID_PAR_VAL;
- RLOG0(L_ERROR, "unsupported Selector value for CRG");
+ DU_LOG("\nERROR --> MAC : unsupported Selector value for CRG");
break;
}
if(rgCb[inst].crgSap.sapSta.sapState == LRG_NOT_CFG)
(cfg->s.tfuSap.selector != ODU_SELECTOR_LC))
{
ret = LCM_REASON_INVALID_PAR_VAL;
- RLOG0(L_ERROR, "unsupported Selector value for TFU");
+ DU_LOG("\nERROR --> MAC : unsupported Selector value for TFU");
break;
}
#endif
if ((cfg->s.genCfg.lmPst.selector != ODU_SELECTOR_TC) &&
(cfg->s.genCfg.lmPst.selector != ODU_SELECTOR_LC))
{
- RLOG0(L_ERROR, "unsupported Selector value for RGU");
+ DU_LOG("\nERROR --> MAC : unsupported Selector value for RGU");
return (LCM_REASON_INVALID_PAR_VAL);
}
/* Update the Pst structure for LM interface */
rgCb[inst].rgInit.pool = cfg->s.genCfg.mem.pool;
rgCb[inst].genCfg.tmrRes = cfg->s.genCfg.tmrRes;
+ macCb.tmrRes = cfg->s.genCfg.tmrRes;
macCb.macInst = rgCb[inst].rgInit.inst;
macCb.procId = rgCb[inst].rgInit.procId;
if(cfg->s.genCfg.numRguSaps == 0)
{
- RGDBGERRNEW(inst,(rgPBuf(inst), "\nrgGenCfg(): Invalid numRguSap.\n"));
+ DU_LOG("\nERROR --> MAC : rgGenCfg(): Invalid numRguSap.\n");
return RFAILED;
}
/* allocate RGR saps */
- if (SGetSBuf(rgCb[inst].rgInit.region,
- rgCb[inst].rgInit.pool,
- (Data **)&rgCb[inst].rguSap,
- (sizeof(RgUpSapCb) * cfg->s.genCfg.numRguSaps)) != ROK)
+ MAC_ALLOC(rgCb[inst].rguSap, sizeof(RgUpSapCb) * cfg->s.genCfg.numRguSaps);
+ if(rgCb[inst].rguSap == NULLP)
{
- RGDBGERRNEW(inst,(rgPBuf(inst), "\nrgGenCfg(): Failed to allocate mem for RGU SAP's.\n"));
+ DU_LOG("\nERROR --> MAC : rgGenCfg(): Failed to allocate mem for RGU SAP's.\n");
return RFAILED;
}
rgCb[inst].numRguSaps = cfg->s.genCfg.numRguSaps;
}
rgCb[inst].tfuSap.sapSta.sapState = LRG_NOT_CFG;
/* Initialize the timer blocks */
- cmInitTimers(rgCb[inst].tmrBlk, RG_MAX_TIMER);
+ cmInitTimers(macCb.tmrBlk, MAX_NUM_TIMER);
/* Initialzie the timer queue */
- memset(&rgCb[inst].tmrTq, 0, sizeof(CmTqType)*RG_TQ_SIZE);
+ memset(&macCb.tmrTq, 0, sizeof(CmTqType) * MAC_TQ_SIZE);
/* Initialize the timer control point */
- memset(&rgCb[inst].tmrTqCp, 0, sizeof(CmTqCp));
- rgCb[inst].tmrTqCp.tmrLen = RG_TQ_SIZE;
-#if 0
+ memset(&macCb.tmrTqCp, 0, sizeof(CmTqCp));
+ macCb.tmrTqCp.tmrLen = MAC_TQ_SIZE;
+
/* Timer Registration request to SSI */
- if (SRegTmrMt(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst,
- (S16)rgCb[inst].genCfg.tmrRes, rgActvTmr) != ROK)
+ if(ODU_REG_TMR_MT(ENTMAC, macCb.macInst, macCb.tmrRes, macActvTmr) != ROK)
{
- RLOG0(L_ERROR, "Failed to register timer");
+ DU_LOG("\nERROR --> MAC : Failed to register timer");
- SPutSBuf(rgCb[inst].rgInit.region,
- rgCb[inst].rgInit.pool,
- (Data *)rgCb[inst].rguSap,
+ MAC_FREE(rgCb[inst].rguSap,
(sizeof(RgUpSapCb) * cfg->s.genCfg.numRguSaps));
return (LCM_REASON_MEM_NOAVAIL);
}
-#endif
+
/* Set Config done in TskInit */
rgCb[inst].rgInit.cfgDone = TRUE;
}
\f
-/***********************************************************
- *
- * Func : rgLMMShutdown
- *
- *
- * Desc : Handles the MAC layer shutdown request. Calls
- * rgCFGFreeCellCb(RgCellCb*) to handle each cellCb deallocation.
- *
- *
- * Ret : Void
- *
- * Notes:
- *
- * File : rg_lmm.c
- *
- **********************************************************/
-static Void rgLMMShutdown(Inst inst)
-{
- RgCellCb *cell = rgCb[inst].cell;
- uint8_t idx;
-
-
- /* Unbind the TFU Sap */
- if(rgCb[inst].tfuSap.sapSta.sapState == LRG_WAIT_BNDCFM)
- {
- //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, LRG_UNBND);
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap);
- }
- rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND;
- }
- if(rgCb[inst].tfuSap.sapSta.sapState == LRG_BND)
- {
- //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, LRG_UNBND);
- rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND;
- }
-
-
- if(cell != NULLP)
- {
- for(idx=0;idx < RG_NUM_SUB_FRAMES; idx++)
- {
- rgTOMRlsSf(inst,&cell->subFrms[idx]);
- }
-
- rgCFGFreeCellCb(cell);
- }
-
- /* Deleting the RGU SAPs */
- SPutSBuf(rgCb[inst].rgInit.region,
- rgCb[inst].rgInit.pool,
- (Data *)rgCb[inst].rguSap,
- (sizeof(RgUpSapCb) * rgCb[inst].numRguSaps));
- rgCb[inst].rguSap = NULLP;
-
- rgCb[inst].inactiveCell = NULLP;
- rgCb[inst].cell = NULLP;
-
- /* De-register the Timer Service */
- (Void) SDeregTmrMt(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst,
- (S16)rgCb[inst].genCfg.tmrRes, rgActvTmr);
-
- /* call back the task initialization function to intialize
- * the global RgCb Struct */
- rgActvInit(rgCb[inst].rgInit.ent, rgCb[inst].rgInit.inst, rgCb[inst].rgInit.region,
- rgCb[inst].rgInit.reason);
-
- return;
-}
-
-\f
-/***********************************************************
- *
- * Func : rgLMMGenCntrl
- *
- *
- * Desc : Processes the LM control request for STGEN elmnt.
- *
- *
- * Ret : Void
- *
- * Notes:
- *
- * File : rg_lmm.c
- *
- **********************************************************/
-static Void rgLMMGenCntrl
-(
-RgMngmt *cntrl,
-RgMngmt *cfm,
-Pst *cfmPst
-)
-{
- Inst inst = (cfmPst->srcInst - RG_INST_START);
-
- cfm->cfm.status = LCM_PRIM_OK;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
-
-
- switch(cntrl->t.cntrl.action)
- {
- case AENA:
- /* Action is Enable */
- switch(cntrl->t.cntrl.subAction)
- {
- case SATRC:
- /* Enable Traces */
- rgCb[inst].rgInit.trc = TRUE;
- rgCb[inst].trcLen = cntrl->t.cntrl.s.trcLen;
- /*Store the response and TransId for sending the Traces */
- memcpy(&rgCb[inst].genCfg.trcResp.response,
- &cntrl->hdr.response, sizeof(Resp));
- rgCb[inst].genCfg.trcResp.transId = cntrl->hdr.transId;
-
- break;
- case SAUSTA:
- /* Enable Unsolicited Status (alarms) */
- rgCb[inst].rgInit.usta = TRUE;
- /*Store the response and TransId for sending the Alarms */
- memcpy(&rgCb[inst].genCfg.ustaResp.response,
- &cntrl->hdr.response, sizeof(Resp));
- rgCb[inst].genCfg.ustaResp.transId = cntrl->hdr.transId;
- break;
- case SADBG:
- /* Enable Debug Printing */
-#ifdef DEBUGP
- rgCb[inst].rgInit.dbgMask |= cntrl->t.cntrl.s.rgDbgCntrl.dbgMask;
-#endif
- break;
-#ifdef SS_DIAG
- case SALOG:
- rgCb[inst].rgInit.logMask = cntrl->t.cntrl.s.logMask;
- break;
-#endif
-
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RLOG1(L_ERROR, "invalid subaction=%d",cntrl->t.cntrl.subAction);
- break;
- }
- break;
- case ADISIMM:
- /* Action is Diable immidiately */
- switch(cntrl->t.cntrl.subAction)
- {
- case SATRC:
- /* Disable Traces */
- rgCb[inst].rgInit.trc = FALSE;
- break;
- case SAUSTA:
- /* Disable Unsolicited Status (alarms) */
- rgCb[inst].rgInit.usta = FALSE;
- break;
- case SADBG:
- /* Disable Debug Printing */
-#ifdef DEBUGP
- rgCb[inst].rgInit.dbgMask &=~cntrl->t.cntrl.s.rgDbgCntrl.dbgMask;
-#endif
- break;
-#ifdef SS_DIAG
- case SALOG:
- rgCb[inst].rgInit.logMask = cntrl->t.cntrl.s.logMask;
- break;
-#endif
-
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RLOG1(L_ERROR, "invalid subaction=%d",cntrl->t.cntrl.subAction);
- break;
- }
- break;
- case ASHUTDOWN:
- /* Free all the memory dynamically allocated by MAC */
- rgLMMShutdown(inst);
- break;
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RLOG1(L_ERROR, "invalid action=%d",cntrl->t.cntrl.action);
- break;
- }
- RgMiLrgCntrlCfm(cfmPst, cfm);
- return;
-}
-
-\f
-/***********************************************************
- *
- * Func : rgLMMSapCntrl
- *
- *
- * Desc : Processes the LM control request for STxxxSAP elmnt.
- *
- *
- * Ret : Void
- *
- * Notes:
- *
- * File : rg_lmm.c
- *
- **********************************************************/
-static Void rgLMMSapCntrl
-(
-RgMngmt *cntrl,
-RgMngmt *cfm,
-Pst *cfmPst
-)
-{
- Inst inst = cfmPst->srcInst - RG_INST_START;
-
- /* Only TFU Sap can be controlled by LM */
- switch(cntrl->hdr.elmId.elmnt)
- {
- case STTFUSAP:
- switch(cntrl->t.cntrl.action)
- {
- case ABND:
- /* Bind Enable Request */
- if ((rgCb[inst].tfuSap.sapSta.sapState == LRG_NOT_CFG) ||
- (rgCb[inst].tfuSap.sapSta.sapState == LRG_BND))
- {
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_SAP;
- }
- else
- {
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- rgLMMStartTmr(inst,RG_BNDREQ_TMR, rgCb[inst].tfuSap.sapCfg.bndTmr.val,
- (PTR)&rgCb[inst].tfuSap);
- }
- /* Change SAP state */
- rgCb[inst].tfuSap.sapSta.sapState = LRG_WAIT_BNDCFM;
- rgCb[inst].tfuSap.numBndRetries++;
- /* Store the response and TransId for sending
- * the Control confirm */
- memcpy(&rgCb[inst].genCfg.bndCfmResp.response,
- &cntrl->hdr.response, sizeof(Resp));
- rgCb[inst].genCfg.bndCfmResp.transId = cntrl->hdr.transId;
-
- /* Sending Status Indication to Layer Manager */
- cfm->cfm.status = LCM_PRIM_OK_NDONE;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
- RgMiLrgCntrlCfm(cfmPst, cfm);
-
- //rgLIMTfuBndReq(inst,rgCb[inst].tfuSap.sapCfg.suId,
- //rgCb[inst].tfuSap.sapCfg.spId);
- RETVOID;
- }
- break;
- case AUBND:
- /* Unbind request */
-
- /* Check if the SAP is configured */
- if( (rgCb[inst].tfuSap.sapSta.sapState == LRG_NOT_CFG) ||
- (rgCb[inst].tfuSap.sapSta.sapState == LRG_UNBND))
- {
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_MSGTYPE;
- }
- else
- {
- //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, TFU_UBNDREQ_MNGMT);
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap);
- }
- /* Change SAP state */
- rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND;
- cfm->cfm.status = LCM_PRIM_OK;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
- }
- break;
- case ADEL:
- /* Delete SAP, does initialization of SAP */
- if ((rgCb[inst].tfuSap.sapSta.sapState == LRG_WAIT_BNDCFM) ||
- (rgCb[inst].tfuSap.sapSta.sapState == LRG_BND))
- {
- //rgLIMTfuUbndReq(inst,rgCb[inst].tfuSap.sapCfg.spId, TFU_UBNDREQ_MNGMT);
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap);
- }
- }
- memset(&rgCb[inst].tfuSap, 0, sizeof(RgLowSapCb));
- rgCb[inst].tfuSap.sapSta.sapState = LRG_NOT_CFG;
- cfm->cfm.status = LCM_PRIM_OK;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
- break;
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RGDBGERRNEW(inst,(rgPBuf(inst), "\nrgLMMSapCntrl(): invalid action=%d",
- cntrl->t.cntrl.action));
- break;
- }
- break;
- case STRGUSAP:
- switch(cntrl->t.cntrl.action)
- {
- case ADEL:
- memset(&rgCb[inst].rguSap[cntrl->t.cntrl.instId], 0, sizeof(RgUpSapCb));
- rgCb[inst].rguSap[cntrl->t.cntrl.instId].sapSta.sapState = LRG_NOT_CFG;
- cfm->cfm.status = LCM_PRIM_OK;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
- break;
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RGDBGERRNEW(inst,(rgPBuf(inst), "\nrgLMMSapCntrl(): invalid action=%d",
- cntrl->t.cntrl.action));
- break;
- }
- break;
- case STCRGSAP:
- switch(cntrl->t.cntrl.action)
- {
- case ADEL:
- memset(&rgCb[inst].crgSap, 0, sizeof(RgUpSapCb));
- rgCb[inst].crgSap.sapSta.sapState = LRG_NOT_CFG;
- cfm->cfm.status = LCM_PRIM_OK;
- cfm->cfm.reason = LCM_REASON_NOT_APPL;
- break;
- default:
- cfm->cfm.status = LCM_PRIM_NOK;
- cfm->cfm.reason = LCM_REASON_INVALID_PAR_VAL;
- RLOG1(L_ERROR, "invalid action=%d",cntrl->t.cntrl.action);
-
- break;
- }
- break;
- default:
- /* Would never here. */
- RETVOID;
- }
- RgMiLrgCntrlCfm(cfmPst, cfm);
- return;
-}
-
-\f
/***********************************************************
*
* Func : rgLMMFillCfmPst
}
break;
default:
- RLOG1(L_ERROR, "Invalid tmrEvnt=%d",tmrEvnt);
+ DU_LOG("\nERROR --> MAC : Invalid tmrEvnt=%d",tmrEvnt);
ret = RFAILED;
break;
}
return (RgMiLrgStaInd(&rgCb[inst].rgInit.lmPst, &usta));
}
-\f
-/**
- * @brief Layer Manager Trace Indication generation.
- *
- * @details
- *
- * Function : rgLMMTrcInd
- *
- * This API is used by the other modules of MAC to send a
- * Trace indication to the Layer Manager.
- *
- * @param[in] Inst inst
- * @param[in] Buffer *srcMbuf, the Message Buffer .
- * @param[in] uint8_t event, the trace event.
- * @return Void
- **/
-Void rgLMMTrcInd
-(
-Inst inst,
-Buffer *srcMbuf, /* Message Buffer */
-uint8_t event /* event */
-)
-{
- Buffer *dstMbuf = NULLP;
- MsgLen bufLen = 0;
- Data *tempBuf;
- MsgLen tempCnt;
- RgMngmt trc;
- Pst pst;
-
-
-
- if ((rgCb[inst].trcLen == LRG_NO_TRACE) || (srcMbuf == NULLP))
- {
- RLOG0(L_ERROR, "Trace Disabled.");
- return;
- }
-
- memset(&trc, 0, sizeof(RgMngmt));
-
- pst = rgCb[inst].rgInit.lmPst;
- pst.selector = rgCb[inst].genCfg.trcResp.response.selector;
- pst.prior = rgCb[inst].genCfg.trcResp.response.prior;
- pst.route = rgCb[inst].genCfg.trcResp.response.route;
- pst.region = rgCb[inst].genCfg.trcResp.response.mem.region;
- pst.pool = rgCb[inst].genCfg.trcResp.response.mem.pool;
-
- trc.hdr.transId = rgCb[inst].genCfg.trcResp.transId;
-
- SGetDateTime(&trc.t.trc.dt);
-
- /* Check if the whole buffer is to be sent in Trace indication */
- if(rgCb[inst].trcLen == LRG_FULL_TRACE)
- {
- if (SCpyMsgMsg(srcMbuf, pst.region, pst.pool, &dstMbuf)
- != ROK)
- {
- RLOG0(L_ERROR, "SCpyMsgMsg Failed.");
- return;
- }
- trc.cfm.status = LCM_PRIM_OK;
- trc.cfm.reason = LCM_REASON_NOT_APPL;
- trc.t.trc.evnt = event;
-
- /* Send Trace Indication to Layer manager */
- RgMiLrgTrcInd(&pst, &trc, dstMbuf);
- }
- /* check if only a specified number of bytes are to be sent */
- else if(rgCb[inst].trcLen > 0)
- {
- /* Get the length of the recvd message buffer */
- if (SFndLenMsg(srcMbuf, &bufLen) != ROK)
- {
- RLOG0(L_ERROR, "SFndLenMsg Failed.");
- return;
- }
- /* Check if the recvd buffer size is less than request trace len */
- if(bufLen < rgCb[inst].trcLen)
- {
- /* Copy the whole of the recvd buffer in trace indication */
-
- if (SCpyMsgMsg(srcMbuf, pst.region, pst.pool, &dstMbuf)
- != ROK)
- {
- RLOG0(L_ERROR, "SCpyMsgMsg Failed.");
- return;
- }
-
- trc.cfm.status = LCM_PRIM_OK;
- trc.cfm.reason = LCM_REASON_NOT_APPL;
- trc.t.trc.evnt = event;
-
- /* Send Trace Indication to Layer manager */
- RgMiLrgTrcInd(&pst, &trc, dstMbuf);
- }
- /* if the recvd buffer size is greater than request trace len */
- if(bufLen >= rgCb[inst].trcLen)
- {
- /* Get a temporary buffer to store the msg */
- if (rgAllocSBuf(inst,&tempBuf, rgCb[inst].trcLen) != ROK)
- {
- RLOG0(L_ERROR, "rgAllocSBuf Failed.");
- return;
- }
-
- /* Copy trcLen nos of bytes from the recvd message */
- if (SCpyMsgFix(srcMbuf,0,rgCb[inst].trcLen,tempBuf,&tempCnt) != ROK)
- {
- RLOG0(L_ERROR, "SCpyMsgFix Failed.");
- return;
- }
-
- if (SGetMsg(pst.region, pst.pool, &dstMbuf) != ROK)
- {
- RLOG0(L_ERROR, "dstMbuf Allocation Failed");
- return;
- }
- /* Copy the tempBuf data to dst mBuf */
- if (SCpyFixMsg(tempBuf,dstMbuf,0,rgCb[inst].trcLen,&tempCnt) != ROK)
- {
- RLOG0(L_ERROR, "SCpyFixMsg Failed.");
- return;
- }
-
- /*ccpu00117052 - MOD - Passing double pointer for proper NULLP
- assignment */
- /* Free the memory allocated for tempBuf */
- rgFreeSBuf(inst,&tempBuf, rgCb[inst].trcLen);
-
- trc.cfm.status = LCM_PRIM_OK;
- trc.cfm.reason = LCM_REASON_NOT_APPL;
- trc.t.trc.evnt = event;
-
- /* Send Trace Indication to Layer manager */
- RgMiLrgTrcInd(&pst, &trc, dstMbuf);
- }
- }
- return;
-}
-
-\f
-/**
- * @brief Layer Manager Control Confirm generation handler
- * for Bind Confirm reception at TFU interface.
- * RgLiTfuBndCfm() forwards the confirmation to this
- * function. All SAP state related handling is restricted
- * to LMM modules, hence the cfm forwarding.
- *
- * @details
- *
- * Function : rgLMMBndCfm
- *
- * This API is used by the LIM module of MAC to forward
- * the Bind Confirm it receives over the TFU interface.
- *
- * @param[in] Pst *pst, Post Structure
- * @param[in] SuId suId, Service user ID
- * @param[in] uint8_t status, Status
- * @return S16
- * -# ROK
- **/
-S16 rgLMMBndCfm
-(
-Pst *pst, /* Post Structure */
-SuId suId, /* Service user ID */
-uint8_t status /* Status */
-)
-{
- Inst inst = pst->dstInst - RG_INST_START;
- S16 ret = ROK;
- RgMngmt cntrlCfm;
- Pst cfmPst;
-
-
- UNUSED(pst);
-
- /* Check if the suId is valid */
- if(rgCb[inst].tfuSap.sapCfg.suId != suId)
- {
- RLOG0(L_ERROR, "Invalid SuId");
- return RFAILED;
- }
-
- /* check the Sap State */
- switch(rgCb[inst].tfuSap.sapSta.sapState)
- {
- case LRG_WAIT_BNDCFM:
- break;
- case LRG_BND:
- /* SAP is already bound */
- return ROK;
- default:
- return RFAILED;
- }
-
- cfmPst = rgCb[inst].rgInit.lmPst;
- cfmPst.selector = rgCb[inst].genCfg.bndCfmResp.response.selector;
- cfmPst.prior = rgCb[inst].genCfg.bndCfmResp.response.prior;
- cfmPst.route = rgCb[inst].genCfg.bndCfmResp.response.route;
- cfmPst.region = rgCb[inst].genCfg.bndCfmResp.response.mem.region;
- cfmPst.pool = rgCb[inst].genCfg.bndCfmResp.response.mem.pool;
-
- memset(&cntrlCfm, 0, sizeof(RgMngmt));
-
- switch(status)
- {
- case CM_BND_OK: /* status is OK */
- /* Change SAP state to Bound */
- rgCb[inst].tfuSap.sapSta.sapState = LRG_BND;
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- ret = rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap);
- }
- /* Send Control Confirm with status as OK to Layer Manager */
- cntrlCfm.cfm.status = LCM_PRIM_OK;
- cntrlCfm.cfm.reason = LCM_REASON_NOT_APPL;
- break;
-
- default:
- /* Change SAP state to UnBound */
- rgCb[inst].tfuSap.sapSta.sapState = LRG_UNBND;
- if (rgCb[inst].tfuSap.sapCfg.bndTmr.enb == TRUE)
- {
- ret = rgLMMStopTmr(inst,RG_BNDREQ_TMR, (PTR)&rgCb[inst].tfuSap);
- }
- /* Send Control Confirm with status as NOK to Layer Manager */
- cntrlCfm.cfm.status = LCM_PRIM_NOK;
- cntrlCfm.cfm.reason = LCM_REASON_NEG_CFM;
- break;
- }
- rgCb[inst].tfuSap.numBndRetries = 0;
- cntrlCfm.hdr.elmId.elmnt = STTFUSAP;
- cntrlCfm.hdr.transId = rgCb[inst].genCfg.bndCfmResp.transId;
-
- ret = RgMiLrgCntrlCfm(&cfmPst, &cntrlCfm);
-
- return (ret);
-}
-
-\f
-/**
- * @brief LTE MAC timer call back function registered with SSI.
- *
- * @details
- *
- * Function : rgActvTmr
- *
- * This function is invoked by SSI for every timer activation
- * period expiry.
- *
- * @return S16
- * -# ROK
- **/
-S16 rgActvTmr(Ent ent,Inst inst)
-{
- Inst macInst = (inst - RG_INST_START);
-
- /* Check if any MAC timer has expired */
- cmPrcTmr(&rgCb[macInst].tmrTqCp, rgCb[macInst].tmrTq, (PFV) rgLMMTmrExpiry);
-
- return ROK;
-
-} /* end of rgActvTmr */
-
/**********************************************************************
End of file