//****************************************************************************** // // Function Name: KRIL_StkSetProfile // // Description: // Notes: // //****************************************************************************** void KRIL_StkSetProfile(void *ril_cmd, Kril_CAPI2Info_t *capi2_rsp) { KRIL_CmdList_t *pdata = (KRIL_CmdList_t*)ril_cmd; KRIL_DEBUG(DBG_INFO,"pdata->handler_state:0x%lX\n", pdata->handler_state); if (capi2_rsp && capi2_rsp->result != RESULT_OK) { KRIL_DEBUG(DBG_ERROR,"CAPI2 response failed:%d\n", capi2_rsp->result); pdata->handler_state = BCM_ErrorCAPI2Cmd; return; } switch (pdata->handler_state) { case BCM_SendCAPI2Cmd: { UInt8 *stkprofile = (UInt8*)pdata->ril_cmd->data; RawDataPrintfun(stkprofile, pdata->ril_cmd->datalen, "stkprofile"); // Update terminal_profile_data[] memcpy(terminal_profile_data, stkprofile, sizeof(terminal_profile_data)/sizeof(UInt8)); CAPI2_SatkApi_SetTermProfile(InitClientInfo(pdata->ril_cmd->SimId), stkprofile, pdata->ril_cmd->datalen); pdata->handler_state = BCM_RESPCAPI2Cmd; break; } case BCM_RESPCAPI2Cmd: pdata->result = BCM_E_SUCCESS; pdata->handler_state = BCM_FinishCAPI2Cmd; break; default: KRIL_DEBUG(DBG_ERROR,"Error handler_state:0x%lX\n", pdata->handler_state); pdata->handler_state = BCM_ErrorCAPI2Cmd; break; } }
void KRIL_InitCmdHandler(void *ril_cmd, Kril_CAPI2Info_t *capi2_rsp) { KRIL_CmdList_t *pdata = (KRIL_CmdList_t *)ril_cmd; ClientInfo_t clientInfo; CAPI2_MS_Element_t data; if (capi2_rsp != NULL) { KRIL_DEBUG(DBG_INFO, "handler_state:0x%lX::result:%d\n", pdata->handler_state, capi2_rsp->result); if(capi2_rsp->result != RESULT_OK) { pdata->handler_state = BCM_ErrorCAPI2Cmd; } } switch(pdata->handler_state) { case BCM_SendCAPI2Cmd: { KrilInit_t *pInitData = (KrilInit_t *)(pdata->ril_cmd->data); // if there is a valid IMEI, make appropriate CAPI2 call to set // IMEI on CP, otherwise fall through to next init command if (pInitData->is_valid_imei) { KRIL_DEBUG(DBG_INFO, "OTP IMEI:%s\n", pInitData->imei); #ifdef CONFIG_BRCM_SIM_SECURE_ENABLE // Record IMEI1 infomation if (FALSE == ProcessImei((UInt8*)pInitData->imei, sImei_Info)) { KRIL_DEBUG(DBG_ERROR,"Process IMEI:%s Failed!!!", pInitData->imei); pdata->handler_state = BCM_ErrorCAPI2Cmd; kernel_power_off(); } #endif //CONFIG_BRCM_SIM_SECURE_ENABLE memset(&data, 0, sizeof(CAPI2_MS_Element_t)); memcpy(data.data_u.imeidata, pInitData->imei, IMEI_DIGITS); data.inElemType = MS_LOCAL_PHCTRL_ELEM_IMEI; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SET_HSDPA_PHY_CATEGORY; break; } #ifdef CONFIG_BRCM_SIM_SECURE_ENABLE else { // For secure boot, the IMEI is important inform for verifying SIM lock data. KRIL_DEBUG(DBG_ERROR, "IMEI is invalid. Error!!!\n"); kernel_power_off(); } #endif //CONFIG_BRCM_SIM_SECURE_ENABLE // if OTP IMEI passed from URIL is not valid, we skip the // CAPI2_MS_SetElement() call and fall through to execute the // next CAPI2 init call instead... } case BCM_SET_HSDPA_PHY_CATEGORY: { struct file *filp; mm_segment_t fs; int ret; int hsdpa_phy_cat = 8; filp = filp_open("/data/hsdpa.dat", O_RDWR|O_SYNC, 0); if (IS_ERR(filp)) { // Do not set hsdpa phy category value. just go next case. (Normal operaton) pdata->handler_state = BCM_SMS_ELEM_CLIENT_HANDLE_MT_SMS; } else { // hsdpa phy category is changed to do Vodafone test fs = get_fs(); set_fs(get_ds()); ret = filp->f_op->read(filp, (char __user *)&hsdpa_phy_cat, sizeof(hsdpa_phy_cat), &filp->f_pos); set_fs(fs); filp_close(filp, NULL); KRIL_DEBUG(DBG_ERROR,"BCM_SET_HSDPA_PHY_CATEGORY\n"); CAPI2_SYSPARM_SetHSDPAPHYCategory(GetNewTID(), GetClientID(), hsdpa_phy_cat ); pdata->handler_state = BCM_SMS_ELEM_CLIENT_HANDLE_MT_SMS; break; } } case BCM_SMS_ELEM_CLIENT_HANDLE_MT_SMS: { memset((UInt8*)&data, 0, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SMS_ELEM_CLIENT_HANDLE_MT_SMS; data.data_u.bData = TRUE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SMS_SetSmsReadStatusChangeMode; break; } case BCM_SMS_SetSmsReadStatusChangeMode: { CAPI2_SMS_SetSmsReadStatusChangeMode(GetNewTID(), GetClientID(), FALSE); pdata->handler_state = BCM_SYS_SetFilteredEventMask; break; } case BCM_SYS_SetFilteredEventMask: { UInt16 filterList[]={MSG_RSSI_IND, MSG_CELL_INFO_IND, MSG_LCS_RRC_UE_STATE_IND, MSG_DATE_TIMEZONE_IND, MSG_DATA_SUSPEND_IND, MSG_DATA_RESUME_IND, MSG_CAPI2_AT_RESPONSE_IND, MSG_UE_3G_STATUS_IND}; CAPI2_SYS_SetFilteredEventMask(GetNewTID(), GetClientID(), &filterList[0], sizeof(filterList)/sizeof(UInt16), SYS_AP_DEEP_SLEEP_MSG_FILTER); pdata->handler_state = BCM_SYS_SetRssiThreshold; break; } case BCM_SYS_SetRssiThreshold: { CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_PhoneCtrlApi_SetRssiThreshold(&clientInfo, g_RSSIThreshold, 20, g_RSSIThreshold, 20); pdata->handler_state = BCM_TIMEZONE_SetTZUpdateMode; break; } case BCM_TIMEZONE_SetTZUpdateMode: { CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_NetRegApi_SetTZUpdateMode(&clientInfo, TIMEZONE_UPDATEMODE_NO_TZ_UPDATE); pdata->handler_state = BCM_SATK_SetTermProfile; break; } case BCM_SATK_SetTermProfile: { CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_SatkApi_SetTermProfile(&clientInfo, terminal_profile_data, sizeof(terminal_profile_data)/sizeof(UInt8)); pdata->handler_state = BCM_SATK_SETUP_CALL_CTR; break; } case BCM_SATK_SETUP_CALL_CTR: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_SETUP_CALL_CTR; #ifdef OEM_RIL_ENABLE data.data_u.bData = FALSE; pdata->handler_state = BCM_SATK_SEND_SS_CTR; #else data.data_u.bData = TRUE; pdata->handler_state = BCM_SS_SET_ENABLE_OLD_SS_MSG; #endif CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SATK_ICON_DISP_SUPPORTED; break; } case BCM_SATK_ICON_DISP_SUPPORTED: { memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_ICON_DISP_SUPPORTED; data.data_u.bData = TRUE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); #ifdef OEM_RIL_ENABLE pdata->handler_state = BCM_SATK_SEND_SS_CTR; #else pdata->handler_state = BCM_SS_SET_ENABLE_OLD_SS_MSG; #endif break; } #ifdef OEM_RIL_ENABLE case BCM_SATK_SEND_SS_CTR: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_SEND_SS_CTR; data.data_u.bData = FALSE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SATK_SEND_USSD_CTR; break; } case BCM_SATK_SEND_USSD_CTR: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_SEND_USSD_CTR; data.data_u.bData = FALSE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SATK_SEND_SMS_CTR; break; } case BCM_SATK_SEND_SMS_CTR: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_SEND_SMS_CTR; data.data_u.bData = FALSE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SATK_SEND_ENABLE_7BIT_CONVERSIONS; break; } case BCM_SATK_SEND_ENABLE_7BIT_CONVERSIONS: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_ENABLE_7BIT_CONVERSIONS; data.data_u.bData = FALSE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SATK_SEND_SETUP_EVENT_LIST_CTR; break; } case BCM_SATK_SEND_SETUP_EVENT_LIST_CTR: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SATK_ELEM_SETUP_EVENT_LIST_CTR; data.data_u.bData = FALSE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_CFG_SIM_LOCK_SUPPORTED; break; } case BCM_CFG_SIM_LOCK_SUPPORTED: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_CFG_ELEM_SIM_LOCK_SUPPORTED ; data.data_u.bData = TRUE; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SS_SET_ENABLE_OLD_SS_MSG; break; } #endif case BCM_SS_SET_ENABLE_OLD_SS_MSG: { // enabled sending of "old" supp svcs messages // NOTE: this should go away when we move to the new SS apis memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SS_ELEM_ENABLE_OLD_SS_MSG; data.data_u.u8Data = 1; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SS_SET_ELEM_FDN_CHECK; break; } case BCM_SS_SET_ELEM_FDN_CHECK: { // enable FDN check for SS dialing memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_SS_ELEM_FDN_CHECK; data.data_u.u8Data = 1; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement(&clientInfo, &data); pdata->handler_state = BCM_SET_SupportedRATandBand; break; } case BCM_SET_SupportedRATandBand: { KrilInit_t *pInitData = (KrilInit_t *)(pdata->ril_cmd->data); KRIL_SetPreferredNetworkType(pInitData->networktype); KRIL_SetBandMode(pInitData->band); CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); KRIL_DEBUG(DBG_INFO,"BCM_SET_SupportedRATandBand network type %d\n", pInitData->networktype); KRIL_DEBUG(DBG_INFO,"BCM_SET_SupportedRATandBand band %d conv band %d\n", pInitData->band, ConvertBandMode(pInitData->band)); //TODO jw check this new api last two extra parameter. CAPI2_NetRegApi_SetSupportedRATandBand(&clientInfo, ConvertNetworkType(pInitData->networktype), ConvertBandMode(pInitData->band), ConvertNetworkType(pInitData->networktype), ConvertBandMode(pInitData->band) ); //++ JSHAN Attach for next power on vGprsAttachMode = pInitData->gprs_attach_init; if (vGprsAttachMode == 1 || vGprsAttachMode == 2) pdata->handler_state = BCM_SET_AttachMode; else pdata->handler_state = BCM_SET_RADIO_OFF; //-- JSHAN Attach for next power on break; } //++ JSHAN Attach for next power on case BCM_SET_AttachMode: { CAPI2_MS_Element_t data; memset((UInt8*)&data, 0x00, sizeof(CAPI2_MS_Element_t)); data.inElemType = MS_LOCAL_PHCTRL_ELEM_ATTACH_MODE; data.data_u.u8Data = vGprsAttachMode; CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_MsDbApi_SetElement ( &clientInfo,&data); pdata->handler_state = BCM_SET_RADIO_OFF; break; } //-- JSHAN Attach for next power on case BCM_SET_RADIO_OFF: { // For flight mode power up battery ADC & deep sleep issue (MobC00131482), set the initial CP state to RADIO_OFF. // If MS is powered up in normal mode, Android framework will send RIL_REQUEST_RADIO_POWER to RIL. CAPI2_InitClientInfo(&clientInfo, GetNewTID(), GetClientID()); CAPI2_PhoneCtrlApi_ProcessNoRfReq(&clientInfo); pdata->handler_state = BCM_RESPCAPI2Cmd; break; } case BCM_RESPCAPI2Cmd: { pdata->handler_state = BCM_FinishCAPI2Cmd; break; } default: { KRIL_DEBUG(DBG_ERROR,"Error handler_state:0x%lX\n", pdata->handler_state); pdata->handler_state = BCM_ErrorCAPI2Cmd; break; } } }