FreeCalypso > hg > fc-magnetite
view src/aci2/aci/psa_sim.h @ 662:8cd8fd15a095
SIM speed enhancement re-enabled and made configurable
TI's original code supported SIM speed enhancement, but Openmoko had it
disabled, and OM's disabling of speed enhancement somehow caused certain
SIM cards to start working which didn't work before (OM's bug #666).
Because our FC community is much smaller in year 2020 than OM's community
was in their day, we are not able to find one of those #666-affected SIMs,
thus the real issue they had encountered remains elusive. Thus our
solution is to re-enable SIM speed enhancement and simply wait for if
and when someone runs into a #666-affected SIM once again. We provide
a SIM_allow_speed_enhancement global variable that allows SIM speed
enhancement to be enabled or disabled per session, and an /etc/SIM_spenh
file in FFS that allows it to enabled or disabled on a non-volatile
basis. SIM speed enhancement is now enabled by default.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 24 May 2020 05:02:28 +0000 |
parents | 93999a60b835 |
children |
line wrap: on
line source
/* +----------------------------------------------------------------------------- | Project : GSM-PS (6147) | Modul : PSA +----------------------------------------------------------------------------- | Copyright 2002 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : Definitions for the protocol stack adapter | Subscriber Identity Module ( SIM ) +----------------------------------------------------------------------------- */ #ifndef PSA_SIM_H #define PSA_SIM_H /*==== CONSTANTS ==================================================*/ #define PIN_LEN (8) /* PIN length in bytes */ #define MIN_PIN_LEN (4) /* Marcus: Issue 1589: 28/01/2003: Minimum PIN length in bytes */ #define PUK_LEN (8) /* PUK length in bytes */ #define ICC_LEN (10) /* chip card identifier length in bytes */ #define SRV_TAB_LEN MAX_SRV_TBL /* service table length in bytes */ #define CBM_ID_LEN (10) /* CBM id length in bytes */ #define DPER_KEY_LEN (16) /* de-pers. key length in bytes */ #define ACC_MAX (8) /* maximum number of simultanious SIM access */ #define SRV_ALLOC_ACTIV (0x03) /* SIM service allocated and activated */ #define NO_ENTRY (-1) /* not a valid entry */ /* Masking for SIM service table: */ #define NO_ALLOCATED 0 #define ALLOCATED_AND_DEACTIVATED 2 #define ALLOCATED_AND_ACTIVATED 3 /* CPHS_CSP PLMN mode bit*/ #define CPHS_CSP_PLMN_MODE_BIT_OFF 0x00 #define CPHS_CSP_PLMN_MODE_BIT_ON 0X01 #define UBYTES_PER_PLMN 3 typedef enum { SRV_CHV1_Disable = 1, /* #1 CHV1 disable function */ SRV_ADN, /* #2 Abbreviated Dialling Numbers (ADN) */ SRV_FDN, /* #3 Fixed Dialling Numbers (FDN) */ SRV_SMS_Storage, /* #4 Short Message Storage (SMS) */ SRV_AOC, /* #5 Advice of Charge (AoC) */ SRV_CCP, /* #6 Capability Configuration Parameters (CCP) */ SRV_PLMN_Select, /* #7 PLMN selector */ SRV_RFU1, /* #8 RFU */ SRV_MSISDN, /* #9 MSISDN */ SRV_EXT1, /* #10 Extension1 */ SRV_EXT2, /* #11 Extension2 */ SRV_SMS_Parms, /* #12 SMS Parameters */ SRV_LDN, /* #13 Last Number Dialled (LND) */ SRV_CBM_Ident, /* #14 Cell Broadcast Message Identifier */ SRV_GrpLvl1, /* #15 Group Identifier Level 1 */ SRV_GrpLvl2, /* #16 Group Identifier Level 2 */ SRV_SrvProvName, /* #17 Service Provider Name */ SRV_SDN, /* #18 Service Dialling Numbers (SDN) */ SRV_EXT3, /* #19 Extension3 */ SRV_RFU2, /* #20 RFU */ SRV_VCGS, /* #21 VGCS Group Identifier List (EFVGCS and EFVGCSS) */ SRV_VBS, /* #22 VBS Group Identifier List (EFVBS and EFVBSS) */ SRV_EMLPP, /* #23 enhanced Multi Level Precedence and Pre emption Service */ SRV_AutoEMLPP, /* #24 Automatic Answer for eMLPP */ SRV_DtaDownlCB, /* #25 Data download via SMS CB */ SRV_DtaDownlPP, /* #26 Data download via SMS PP */ SRV_MnuSel, /* #27 Menu selection */ SRV_CalCntrl, /* #28 Call control */ SRV_ProActSIM, /* #29 Proactive SIM */ SRV_CBMIdRnge, /* #30 Cell Broadcast Message Identifier Ranges */ SRV_BDN, /* #31 Barred Dialling Numbers (BDN) */ SRV_EXT4, /* #32 Extension4 */ SRV_DePersCK, /* #33 De personalization Control Keys */ SRV_CoOpNwL, /* #34 Co operative Network List */ SRV_SMS_StatRep, /* #35 Short Message Status Reports */ SRV_NwIndAlMS, /* #36 Network's indication of alerting in the MS */ SRV_MOSMCtrlSIM, /* #37 Mobile Originated Short Message control by SIM */ SRV_GPRS, /* #38 GPRS */ SRV_RFU3, /* #39 Image (IMG) */ SRV_RFU4, /* #40 SoLSA (Support of Local Service Area) */ SRV_USSDsupportInCC, /* #41 USSD string data object supported in Call Control */ SRV_No_42, /* #42 RUN AT COMMAND command */ SRV_No_43, /* #43 User controlled PLMN Selector with Access Technology */ SRV_No_44, /* #44 Operator controlled PLMN Selector with Access Technology */ SRV_No_45, /* #45 HPLMN Selector with Access Technology */ SRV_No_46, /* #46 CPBCCH Information */ SRV_No_47, /* #47 Investigation Scan */ SRV_No_48, /* #48 Extended Capability Configuration Parameters */ SRV_No_49, /* #49 MExE */ SRV_No_50, /* #50 RPLMN last used Access Technology */ SRV_PNN, /* #51 PLMN Network Name */ SRV_OPL, /* #52 Operator PLMN List */ SRV_No_53, /* #53 Mailbox Dialling Numbers */ SRV_No_54, /* #54 Message Waiting Indication Status */ SRV_No_55, /* #55 Call Forwarding Indication Status */ SRV_No_56, /* #56 Service Provider Display Information */ SRV_No_57, /* #57 Multimedia Messaging Service (MMS) */ SRV_No_58, /* #58 Extension 8 */ SRV_No_59 /* #59 MMS User Connectivity Parameters */ } T_SIM_SRV; typedef enum /* SIM status */ { NO_VLD_SS = 0, /* not a valid SIM status */ SS_OK, /* SIM is OK */ SS_INV, /* SIM is invalid */ SS_BLKD, /* SIM is blocked */ SS_URCHB /* SIM is unreachable */ } T_SIM_SIMST; typedef enum /* PIN status */ { NO_VLD_PS = 0, /* not a valid PIN status */ PS_RDY, /* ready, no PIN is requested */ PS_PIN1, /* PIN 1 is requested */ PS_PIN2, /* PIN 2 is requested */ PS_PUK1, /* PUK 1 is requested */ PS_PUK2 /* PUK 2 is requested */ } T_SIM_PINST; typedef enum /* PIN1 enable/disable status */ { NO_VLD_PEDS = 0, /* not a valid PED status */ PEDS_ENA, /* PIN 1 enabled */ PEDS_DIS /* PIN 1 disabled */ } T_SIM_PEDST; typedef enum /* SIM access type */ { NO_VLD_ACT = 0, /* not a valid access type */ ACT_RD_DAT, /* read a datafield */ ACT_WR_DAT, /* write a datafield */ ACT_RD_REC, /* read a record */ ACT_WR_REC, /* write a record */ ACT_INC_DAT /* increment a datafield */ } T_SIM_ACTP; /*==== TYPES ======================================================*/ typedef struct SIMSetPrm { UBYTE actProc; /* activation procedure */ UBYTE STKprof[MAX_STK_PRF]; /* SIM toolkit profile */ UBYTE PINType; /* type of PIN */ CHAR curPIN[PIN_LEN]; /* current PIN */ CHAR newPIN[PIN_LEN]; /* new PIN */ CHAR unblkKey[PUK_LEN]; /* unblocking key */ /* ** This flag is the customisation flag, introuduced for the Cust1 MMI. It is defaulted to 0, and is ** changed by the AT%CUST=n command. If the %CUST command is not received, the ACI and ** other afffected entities will continue to behave as normal */ UBYTE cust_mode; /* ** This flag is the STK Call or Short Message Control flag, introuduced for the Cust1 MMI. ** It is defaulted to 1, and is changed by the AT%SATCC=n command. If the %SATCC command is not received, ** the ACI entity will continue to behave as normal. If CC or SM Control By SIM is disabled it will be re-enabled ** automatically, on receipt of a Terminal Response from the MMI. */ UBYTE sat_cc_mode; #ifdef FF_DUAL_SIM UBYTE SIM_Selected; /* stores the currently selected SIM number*/ #endif /*FF_DUAL_SIM*/ } T_SIM_SET_PRM; typedef struct SIMAccPrm { UBYTE ntryUsdFlg; /* flags entry usage */ UBYTE accType; /* type of access */ USHORT reqDataFld; /* requested datafield identifier */ USHORT dataOff; /* datafield offset */ UBYTE recNr; /* record number */ BOOL check_dataLen; /* has size of data to be checked against size of exch buffer ? */ UBYTE dataLen; /* data length */ UBYTE * exchData; /* points to exchange data buffer */ UBYTE recMax; /* maximum records */ USHORT errCode; /* error code */ void (*rplyCB)(SHORT aId); /* points to reply call-back */ } T_SIM_ACC_PRM; typedef struct SIMTrnsAccPrm { UBYTE cmd; /* access command */ USHORT reqDataFld; /* requested datafield identifier */ UBYTE p1; /* parameter 1 */ UBYTE p2; /* parameter 2 */ UBYTE p3; /* parameter 3 */ USHORT dataLen; /* data length in bytes */ UBYTE * transData; /* points to data buffer */ } T_SIM_TRNS_ACC_PRM; typedef struct { UBYTE sw1; /* SIM result code 1 */ UBYTE sw2; /* SIM result code 2 */ USHORT rspLen; /* length of response data */ UBYTE * rsp; /* ponter to response data */ } T_SIM_TRNS_RSP_PRM; #ifdef FF_SAT_E typedef struct { UBYTE dtiConn; /* dti connection qualifier */ UBYTE dtiUnit; /* dti connection unit */ UBYTE chnId; /* move to sat_bip_chn channel id */ UBYTE bipConn; /* bip connection qualifier */ UBYTE genRes; /* general result */ UBYTE addRes; /* additional result */ } T_SIM_SAT_CHN; #endif /* FF_SAT_E */ #ifdef FF_SAT_E typedef struct { T_SIM_SAT_CHN sat_chn_prm; void (*dti_cb)(UBYTE dtiConn, UBYTE chnId); /* holds callback for DTI estb */ void (*bip_cb)(UBYTE bipConn, UBYTE chnId);/* holds callback for BIP estb */ } T_SIM_DTI_CH_PRM; #endif /* F_SAT_E */ typedef struct { UBYTE plmn[UBYTES_PER_PLMN]; /* Packed PLMN as stored on the SIM */ UBYTE pnn_rec_num; USHORT lac1; USHORT lac2; } T_opl; typedef struct { UBYTE num_rcd; /* Number of records in EFopl */ UBYTE opl_status; /* Status of OPL records retrieval */ T_opl opl_rcd[OPL_MAX_RECORDS]; } T_opl_field;//EONS /* * Compare this with the similiar struct T_pnn_name in psa_mm.h */ typedef struct { UBYTE v_plmn; /* valid flag */ UBYTE long_len; /* length of operator long name */ UBYTE long_ext_dcs; /* octet 3 of IEI */ UBYTE long_name [MAX_LONG_OPER_LEN-1];/* long name for operator, no '\0' */ UBYTE shrt_len; /* length of operator short name */ UBYTE shrt_ext_dcs; /* octet 3 of IEI */ UBYTE shrt_name [MAX_SHRT_OPER_LEN-1];/* short name for operator, no '\0' */ } T_pnn; typedef struct { UBYTE num_rcd; UBYTE pnn_status; T_pnn pnn_rcd[PNN_MAX_RECORDS]; } T_pnn_field; typedef struct { UBYTE len; /* length of atr */ UBYTE data[MAX_SIM_ATR]; /* atr data */ } T_SIM_ATR; typedef struct SIMShrdParm { UBYTE owner; /* identifies the used set */ SHORT aId; /* access identifier */ T_SIM_SET_PRM setPrm[OWN_MAX]; /* possible sets */ T_SIM_ACC_PRM atb[ACC_MAX]; /* table of access parameter */ #ifdef FF_DUAL_SIM UBYTE SIM_Powered_on; /* stores the currently powered SIM number*/ UBYTE SIM_Selection; /* flag to indicate if SIM selection is taking place*/ #endif /*FF_DUAL_SIM*/ UBYTE PINStat; /* status of PIN requirement */ UBYTE pn1Cnt; /* PIN 1 counter */ UBYTE pn2Cnt; /* PIN 2 counter */ UBYTE pk1Cnt; /* PUK 1 counter */ UBYTE pk2Cnt; /* PUK 2 counter */ UBYTE pn1Stat; /* PIN 1 status */ UBYTE pn2Stat; /* PIN 2 status */ UBYTE PINQuery; /* CPIN? when CFUN=0 */ UBYTE crdPhs; /* phase of card */ UBYTE SIMStat; /* status of SIM card */ UBYTE PEDStat; /* PIN1 enable/disable status */ UBYTE crdFun; /* SIM card functionality */ UBYTE srvTab[SRV_TAB_LEN]; /* SIM service table */ T_imsi_field imsi; /* IMSI */ UBYTE PLMN_Mode_Bit; /* PLMN mode bit in EF_CSP */ UBYTE mnc_len; /* length of MNC in IMSI (2 or 3 digits)*/ USHORT rslt; /* result of SIM operation */ UBYTE synCs; /* SIM synchronisation cause */ BOOL ciSIMEnabled; /* current ciphering indicator state */ int fuRef; /* Reference for File Update */ BOOL imei_blocked; #ifdef FF_SAT_E T_SIM_DTI_CH_PRM *sim_dti_chPrm; /* points to sim dti channel parameters */ #endif /* FF_SAT_E */ T_opl_field opl_list; /* Operator PLMN list (for EONS) */ T_pnn_field pnn_list; /* Operator PNN list (for EONS) */ UBYTE sat_class_e_dti_id; /* DTI ID for SAT class E */ T_SIM_ATR atr; /* Answer to Reset */ UBYTE overall_cust_mode; /* Overall Cust Mode, this is set when the SIM is initially activated, it is incumbent on the system that once set, every ACI channel will use the same customisation mode */ T_ACI_SIMEF_MODE SIMEFMode[CMD_SRC_MAX]; /* SIMEF mode for each command source */ T_ACI_CLASS classFDN; /* FDN classtype during SIM_ACTIVATE_REQ / SIM_ACTIVATE_CNF */ T_ACI_PB_STAT pb_stat; /* SIM phonebook status */ } T_SIM_SHRD_PRM; typedef enum { ACI_INIT_TYPE_ALL = 0, /* init all parameters */ ACI_INIT_TYPE_SOFT_OFF /* init only parameters for soft power off */ } T_ACI_INIT_TYPE; /*==== PROTOTYPES =================================================*/ EXTERN BOOL psaSIM_hasCustModeBeenSet(void); EXTERN SHORT psaSIM_VerifyPIN ( void ); EXTERN SHORT psaSIM_ChangePIN ( void ); EXTERN SHORT psaSIM_DisablePIN ( void ); EXTERN SHORT psaSIM_EnablePIN ( void ); EXTERN SHORT psaSIM_UnblockCard ( void ); EXTERN void psaSIM_SyncSIM ( void ); EXTERN SHORT psaSIM_AccessSIMData ( void ); #ifdef FF_DUAL_SIM EXTERN SHORT psaSIM_SelectSIM ( void ); #endif /*FF_DUAL_SIM*/ EXTERN SHORT psaSIM_ActivateSIM ( void ); EXTERN void psaSIM_Init ( T_ACI_INIT_TYPE init_type ); EXTERN void psaSIM_InitAtbNtry ( SHORT idx ); EXTERN void psaSIM_CloseAtb ( USHORT error ); EXTERN SHORT psaSIM_atbNewEntry ( void ); EXTERN SHORT psaSIM_atbFindDatFld ( USHORT datFld2Find, UBYTE accType2Find, UBYTE recNr2Find ); EXTERN CHAR* psaSIM_cnvrtIMSI2ASCII ( CHAR * imsiBuf ); EXTERN void psaSIM_decodeIMSI (UBYTE* imsi_field, UBYTE imsi_c_field, CHAR* imsi_asciiz); EXTERN void psaSIM_encodeIMSI (CHAR* imsi_asciiz, UBYTE* imsi_c_field, UBYTE* imsi_field); #ifdef SIM_PERS_OTA EXTERN void aci_slock_ota_init(); #endif #ifdef TRACING EXTERN void psaSIM_shrPrmDump ( void ); #endif /* TRACING */ EXTERN BOOL psaSIM_ChkSIMSrvSup ( UBYTE srvNr ); EXTERN SHORT psaSIM_TrnsSIMAccess ( T_SIM_TRNS_ACC_PRM * prm ); #ifdef FF_SAT_E EXTERN void psaSIM_SATBIPChn ( T_SIM_SAT_CHN chnInf, void (*cb)(UBYTE bipConn, UBYTE chnId)); EXTERN void psaSIM_SATChn ( T_SIM_SAT_CHN chnInf, void (*cb)(UBYTE dtiConn, UBYTE chnId)); EXTERN void psaSIM_EvDatAvail ( BOOL evStat ); EXTERN void psaSIM_Bip_Req ( void ); EXTERN void psaSIM_Bip_Config_Req ( ); EXTERN void psaSIM_Dti_Req ( ULONG link_id ); #endif /* #ifdef FF_SAT_E */ /*==== EXPORT =====================================================*/ #ifdef PSA_SIMF_C GLOBAL T_SIM_SHRD_PRM simShrdPrm; #else EXTERN T_SIM_SHRD_PRM simShrdPrm; #endif /* PSA_SIMF_C */ #endif /* PSA_SIM_H */ /*==== EOF =======================================================*/