static uint32_t mds_quiesced_ack(struct ncsmds_callback_info *mds_info) { SMFSV_EVT *smfsv_evt; if (smfd_cb->is_quiesced_set == true) { /** allocate an SMFSV_EVT **/ if (NULL == (smfsv_evt = calloc(1, sizeof(SMFSV_EVT)))) { LOG_NO("calloc FAILED"); goto err; } /** Initialize the Event **/ smfsv_evt->type = SMFSV_EVT_TYPE_SMFD; smfsv_evt->info.smfd.type = SMFD_EVT_QUIESCED_ACK; smfsv_evt->cb_hdl = (uint32_t)mds_info->i_yr_svc_hdl; /* Push the event and we are done */ if (NCSCC_RC_FAILURE == m_NCS_IPC_SEND(&smfd_cb->mbx, smfsv_evt, NCS_IPC_PRIORITY_VERY_HIGH)) { TRACE("ipc send failed"); smfsv_evt_destroy(smfsv_evt); goto err; } } return NCSCC_RC_SUCCESS; err: return NCSCC_RC_FAILURE; }
/**************************************************************************** * Name : smfd_process_mbx * * Description : This is the function which process the IPC mail box of * SMFD * * Arguments : mbx - This is the mail box pointer on which SMFD is * going to block. * * Return Values : None. * * Notes : None. *****************************************************************************/ void smfd_process_mbx(SYSF_MBX * mbx) { SMFSV_EVT *evt = (SMFSV_EVT *) m_NCS_IPC_NON_BLK_RECEIVE(mbx, evt); if (evt != NULL) { if (evt->type != SMFSV_EVT_TYPE_SMFD) { LOG_ER("SMFD received wrong event type %d", evt->type); goto err; } switch (evt->info.smfd.type) { case SMFD_EVT_MDS_INFO: { proc_mds_info(smfd_cb, evt); break; } case SMFD_EVT_CMD_RSP: { /* The CMD RSP is always received synchronized so skip it here */ break; } case SMFD_EVT_CBK_RSP: { proc_callback_rsp(smfd_cb, evt); break; } case SMFD_EVT_QUIESCED_ACK: { proc_quiesced_ack(smfd_cb, evt); break; } default: { LOG_ER("SMFND received unknown event %d", evt->info.smfnd.type); break; } } } err: smfsv_evt_destroy(evt); }