FreeCalypso > hg > fc-tourmaline
view src/cs/drivers/drv_core/security/secure_types.h @ 303:f76436d19a7a default tip
!GPRS config: fix long-standing AT+COPS chance hanging bug
There has been a long-standing bug in FreeCalypso going back years:
sometimes in the AT command bring-up sequence of an ACI-only MS,
the AT+COPS command would produce only a power scan followed by
cessation of protocol stack activity (only L1 ADC traces), instead
of the expected network search sequence. This behaviour was seen
in different FC firmware versions going back to Citrine, and seemed
to follow some law of chance, not reliably repeatable.
This bug has been tracked down and found to be specific to !GPRS
configuration, stemming from our TCS2/TCS3 hybrid and reconstruction
of !GPRS support that was bitrotten in TCS3.2/LoCosto version.
ACI module psa_mms.c, needed only for !GPRS, was missing in the TCS3
version and had to be pulled from TCS2 - but as it turns out,
there is a new field in the MMR_REG_REQ primitive that needs to be
set correctly, and that psa_mms.c module is the place where this
initialization needed to be added.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 08 Jun 2023 08:23:37 +0000 |
parents | 4e78acac3d88 |
children |
line wrap: on
line source
/* @(#) nom : secure_types.h SID: 1.2 date : 09/19/03 */ /* Filename: secure_types.h */ /* Version: 1.2 */ /****************************************************************************** * WIRELESS COMMUNICATION SYSTEM DEVELOPMENT * * (C) 2002 Texas Instruments France. All rights reserved * * Author : Constantin HAIDAMOUS * * * Important Note * -------------- * * This S/W is a preliminary version. It contains information on a product * under development and is issued for evaluation purposes only. Features * characteristics, data and other information are subject to change. * * The S/W is furnished under Non Disclosure Agreement and may be used or * copied only in accordance with the terms of the agreement. It is an offence * to copy the software in any way except as specifically set out in the * agreement. No part of this document may be reproduced or transmitted in any * form or by any means, electronic or mechanical, including photocopying and * recording, for any purpose without the express written permission of Texas * Instruments Inc. * ****************************************************************************** * * FILE NAME: secure_types.h * * * PURPOSE: * * * FILE REFERENCES: * * Name IO Description * ------------- -- --------------------------------------------- * * * * EXTERNAL VARIABLES: * * Source: none * * Name Type IO Description * ------------------- --------------- -- ---------------------------- * * * * ABNORMAL TERMINATION CONDITIONS, ERROR AND WARNING MESSAGES: * * * * ASSUMPTION, CONSTRAINTS, RESTRICTIONS: * * * * NOTES: * * * * REQUIREMENTS/FUNCTIONAL SPECIFICATION REFERENCES: * * * * * DEVELOPMENT HISTORY: * * Date Name(s) Version Description * ---------- -------------------- ------- --------------------------------- * 04/12/2002 Constantin HAIDAMOUS V1.0.0 First release * 22-Apr-02 Francois AMAND V1.0.1 Update of secure status to * facilitate integration in final * ROM code. * Data alignment in struture to * optimize memory requirement. * Management of global secure data. * 28-Apr-02 Francois AMAND V1.0.2 Update some constants to be * compliant with certificate * definition. * Add CALYPSO PLUS specific * parameters structure. * Differentiate Manufacturer and * Platform certificate. * Add debug request field in Manu- * facturer certificate. * Optimize certificate field size. * Change commentary wrapper to be * ANSI compliant. * 29-Apr-02 Francois AMAND V1.0.3 Remove unused constant. * Set under compilation flag the * secure services. * 14-May-02 Francois AMAND V1.0.4 Add CONF_CSI field in T_CONF_PARAM * structure definition. * Change name of CS_MODE to EX_CTRL * Change size of DCCTRL_CSx to 8 * bits to optimize size and alignment. * 17-May-02 Francois AMAND V1.0.5 Modification of hashing size for * binding/unbinding. * 17-May-02 Constantin HAIDAMOUS V1.0.6 Integration of data structure for * binding/unbinding services API . * 17-May-02 Francois AMAND V1.0.7 Integration of RSA S/W and Check * ROM in Secure Services. * Update of Secure Services manage- * ment. * 22-May-02 Constantin HAIDAMOUS V1.0.8 Changing RSA modulus length , Max * RSA length =2048 bits. Adding initial * vectore for Binding structure. * 27-May-02 Francois AMAND V1.0.9 Changing SAMSON to CALYPSO. * Addition of Secure Services for * RUN Time checker. * 28-May-02 Constantin HAIDAMOUS V1.0.10 Changing C_PLAT_SIG_SIZE to 4. * * 06-June-02 Constantin HAIDAMOUS V1.0.11 Changing Secure service API. * * 12-Jun-02 Francois AMAND V1.0.12 Update of T_CONF_PARAM according * to last memory interface spec. * 13-Jun-02 Constantin HAIDAMOUS V1.0.13 Update of T_UNBINDCTX for segmented * unbind operation optimization. * 14-Jun-02 Constantin HAIDAMOUS V1.0.14 Update of T_BINDCTX for segmented * bind operation . * 14-Jun-02 Francois AMAND V1.0.15 Force d_temp in Secure RAM. * Remove other definitions. * 25-Jun-02 Francois AMAND V1.0.16 Addition of Platform unbinding * during boot concept under compi- * lation flag C_PLATFORM_UNBIND_BOOT. * 27-Jun-02 Constantin HAIDAMOUS V1.0.17 Adding C_SECURE_RNG_ALARM to E_SECURE_STATUS * C_SECURE_RNG_ALARM = C_RNG_ALARM from Safenet * 09-Jul-02 Constantin HAIDAMOUS V1.0.18 Adding Application ID and Timeout for Bind function * 16-Jul-02 Francois AMAND V1.0.19 Add S/W pseudo-random generator. * 19-Jul-02 Francois AMAND V1.0.20 Remove S/W pseudo-random. * 01-Aug-02 Constantin HAIDAMOUS V1.0.21 Removing boolean b_HashDone in Bind and Unbind Context * 27-Jan-03 Francois AMAND V2.0.0 Remove of C_PLATFORM_UNBIND_BOOT flag * 27-Jan-03 Francois AMAND V2.0.1 Add compliance with SW@P 2.0 (REQ03047) * 20-Mar-03 Francois AMAND V2.0.2 Code cleaning * * ALGORITHM: * * *******************************************************************************/ #ifndef _SECURE_TYPES_H #define _SECURE_TYPES_H #ifndef C_SECURE_SERVICES #define C_SECURE_SERVICES 1 #endif #ifndef C_PLATFORM_UNBIND_BOOT #define C_PLATFORM_UNBIND_BOOT 0 #endif #ifndef C_CHIPSET #define C_CHIPSET_CALYPSO 4 #define C_CHIPSET_CALYPSOPLUS 12 #define C_CHIPSET CHIPSET #endif /**************************************************************************** * Constants ****************************************************************************/ #define C_WORD32LGB 4 #ifndef NULL /* To avoid conflict with other compilers */ #define NULL (UWORD32 *) 0x00000000L #endif /*Certificate block*/ /*Length in long word (32 bits)*/ #define C_SHA1HASHLG 5 #define C_MD5HASHLG 4 #define C_RSAKEYLG 64 /* Max Modulus size : 2048 bits */ #define C_RSASIGLG C_RSAKEYLG #define C_DIE_ID_SIZE 2 /* DIE ID defined on 64-bits */ #define C_PLATFORM_DATA_SIZE 16048 /* Maximum value to have CertSize coded on 16-bits */ #if C_SECURE_SERVICES == 1 #define C_IVLG 2 #define C_TDESKEYLG 4 #define C_TDESKEYLGB C_TDESKEYLG * C_WORD32LGB #define C_PLAT_SIG_SIZE 4 /* Must be a multiple of 64 bits */ #endif #define C_MANUF_SIG_SIZE C_RSASIGLG /*Certificate Type*/ #define C_CERTTYPE_MAN 0x00 #define C_CERTTYPE_PLAT 0x01 #if C_SECURE_SERVICES == 1 /*Confidentiality request*/ #define C_CRYPTVOID 0x00 #define C_CRYPTNOREQUEST 0x00 #define C_CRYPTREQUEST 0x01 #endif /*Debug request*/ #define C_DEBUGNOREQUEST 0x00 #define C_DEBUGREQUEST 0x01 /*CS image check request*/ #define C_CSIMGNOREQUEST 0x00 #define C_CSIMGREQUEST 0x01 /*Temporary block*/ #define C_TEMPDATALG 32 #define C_TEMPDATALGB C_TEMPDATALG * C_WORD32LGB #define C_CERT_TEMP_SWKEY 0 #define C_CERT_TEMP_DATA C_CERT_TEMP_SWKEY + C_TDESKEYLG /**************************************************************************** * Structures ****************************************************************************/ /* CALYPSO PLUS Parameters */ typedef struct { /* External Memory Interface configuration */ UWORD16 d_conf_cs5; UWORD16 d_exws_cs5; UWORD16 d_ex_ctrl; /* Authentication configuration */ UWORD16 d_cs_img_req; UWORD32 d_flash_size; UWORD32 d_granularity; } T_CONF_PARAM; /* RSA Public key */ typedef struct { UWORD32 a_Modulus[C_RSAKEYLG]; /*Public Modulus*/ UWORD32 d_ModulusLength; /*Public Modulus length in bytes*/ UWORD32 d_Exponent; /*Public Exponent*/ }T_RSAPUBKEY; /*Certificate Structure*/ typedef struct { UWORD16 d_Certsize; /* Size of Certificate*/ UWORD8 d_Certtype; /* Type of Certificate*/ UWORD8 d_Debugrequest; /* Debug request*/ UWORD32 d_Addcode; /* Start Address of code*/ UWORD32 d_Codesize; /* Size of code*/ UWORD32 d_CodeStartAdd; /* Entry point address */ T_RSAPUBKEY d_Manpubkey; /* Manufacturer Public key*/ T_RSAPUBKEY d_Origpubkey; /* Originator Public key */ UWORD32 a_Origpubkeysig[C_MANUF_SIG_SIZE]; /* Originator Public key Signature*/ UWORD32 a_Swsig[C_MANUF_SIG_SIZE]; /* Software Signature*/ T_CONF_PARAM d_Confparam; /* Configuration parameters*/ UWORD32 a_die_id[C_DIE_ID_SIZE]; /* DIE ID field */ } T_MANUFACTURER_CERTIFICATE; #if C_SECURE_SERVICES == 1 /* * Define ROM secure service entry point address */ #define C_ROM_SSERVICE_ENTRY_POINT_ADDR 0x00000024L /* * Definition of function pointer to use ROM Secure Services */ typedef UWORD16 (*T_ROM_SSERVICE) (UWORD16, void *, void *); typedef struct { UWORD16 d_Certsize; /* Size of Certificate*/ UWORD8 d_Certtype; /* Type of Certificate*/ UWORD8 d_Confrequest; /* Confidentiality request*/ UWORD32 d_Addcode; /* Start Address of code*/ UWORD32 d_Codesize; /* Size of code*/ UWORD32 d_AppID; /* Application ID*/ UWORD32 a_iv[C_IVLG]; /* Initial Vector for TDES CBC*/ UWORD32 a_Encswkey[C_TDESKEYLG]; /* Encrypted S/W key */ UWORD32 a_Swsig[C_PLAT_SIG_SIZE]; /* Software Signature*/ UWORD32 a_Certsig[C_PLAT_SIG_SIZE]; /* Certificate Signature*/ } T_PLATFORM_CERTIFICATE; /*Unbind Context Structure used for segmented Unbind operation*/ typedef struct { UWORD32 d_Startpos; /*Start position of data to process */ UWORD32 d_Currentpos; /*Current position of data to process */ UWORD32 a_Currentdigest[C_MD5HASHLG]; /*Current digest*/ UWORD32 d_Digcount; /*Digest Count */ UWORD32 a_Currentiv[C_IVLG]; /*Current initial vector */ UWORD32 a_Encswkey[C_TDESKEYLG]; /*Encrypted TDES software Key */ UWORD32 a_iv[C_IVLG]; /*Initial Vector */ UWORD32 d_Codesize; /*Code size*/ UWORD32 d_AppID; /*Application ID*/ UWORD32 a_Swsig[C_PLAT_SIG_SIZE]; /*Software Signature*/ UWORD8 d_Confrequest; /*Confidentiality request*/ BOOLEAN b_UnbindDone; /*Set to 1 if data unbinding is done*/ } T_UNBINDCTX; /*Bind Context Structure used for segmented Bind operation*/ typedef struct { UWORD32 d_Startpos; /*Start position of data to process*/ UWORD32 d_Currentpos; /*Current position of data to process */ UWORD32 a_Currentdigest[C_MD5HASHLG]; /*Current digest*/ UWORD32 d_Digcount; /*Digest Count */ UWORD32 a_Currentiv[C_IVLG]; /*Current initial vector */ UWORD32 a_Encswkey[C_TDESKEYLG]; /*Encrypted TDES software Key */ UWORD32 a_iv[C_IVLG]; /*Initial Vector */ UWORD32 d_Addcode; /*Store address of code */ UWORD32 d_Codesize; /*Code size*/ UWORD32 d_AppID; /*Application ID*/ UWORD8 d_Confrequest; /*Confidentiality request*/ BOOLEAN b_KeyCreateDone; /*Set to 1 if TDES software key creation is done */ BOOLEAN b_BindDone; /*Set to 1 if data binding is done*/ } T_BINDCTX; typedef struct { T_PLATFORM_CERTIFICATE* p_Cert; UWORD32* p_Code; T_PLATFORM_CERTIFICATE* p_CertCtx; T_UNBINDCTX* p_UnbindCtx; UWORD32 d_Steplength; BOOLEAN b_start; } T_SSERVICE_UNBIND; typedef struct { T_PLATFORM_CERTIFICATE* p_Cert; UWORD32* p_Code; T_PLATFORM_CERTIFICATE* p_CertCtx; T_BINDCTX* p_BindCtx; UWORD32 d_Steplength; UWORD32 d_timeout; BOOLEAN b_start; } T_SSERVICE_BIND; /* * Structure definition for RSA S/W secure services */ typedef struct { UWORD32 * p_datain; UWORD32 * p_dataout; UWORD32 output_length; T_RSAPUBKEY * p_rsapubkey; UWORD32 * p_rsaheap; } T_SSERVICE_RSA; /* * Structure definition for Checker ROM secure services */ typedef struct { UWORD16 d_checksum; UWORD16 d_rom_id; } T_SSERVICE_CHECKROM; /* * Structure definition for Run Time Checker secure services */ typedef struct { UWORD32 * p_rsaheap; T_MANUFACTURER_CERTIFICATE * p_certificate; } T_SSERVICE_RUNTIMECHECKER; /* * Structure definition for Run Time Platform Data Checker secure services */ typedef struct { T_PLATFORM_CERTIFICATE* p_Cert; } T_SSERVICE_RUNTIME_PLAT_CHECKER; #endif /* C_SECURE_SERVICES == 1 */ /**************************************************************************** * Global variables ****************************************************************************/ #ifndef SECURE_GLOBAL #define SECURE_GLOBAL extern #endif #ifdef _TMS470 #pragma DATA_SECTION(d_temp,".secdata") #pragma DATA_SECTION(a_hash_certificate,".secdata") #endif SECURE_GLOBAL UWORD32 d_temp[C_TEMPDATALG]; /*Temporary data in Secure RAM*/ SECURE_GLOBAL UWORD32 a_hash_certificate[C_SHA1HASHLG]; /* SHA-1 hashing of Manufacturer Certificate */ /**************************************************************************** * Status ****************************************************************************/ typedef enum { C_SECURE_ERROR = 0, C_SECURE_SUCCESS = 1, C_SECURE_INVALID_ID = 2, C_SECURE_RNG_ALARM = 3, C_SECURE_INVALID_DIE_ID = 4, C_SECURE_BLANK_DIE_ID = 5 }E_SECURE_STATUS; /**************************************************************************** * Function prototype for secure services ****************************************************************************/ #if C_SECURE_SERVICES == 1 #define C_MAX_DEFINED_ID 6 #define C_SEC_SERVICE_BINDING_ID 0x0000 #define C_SEC_SERVICE_UNBINDING_ID 0x0001 #define C_SEC_SERVICE_RSA_ID 0x0002 #define C_SEC_SERVICE_CHECKROM_ID 0x0003 #define C_SEC_SERVICE_RUN_TIME_CHECKER_ID 0x0004 #define C_SEC_SERVICE_RUN_TIME_PLATFORM_DATA_CHECKER 0x0005 E_SECURE_STATUS ROM_Sservice_Unbind(UWORD16 reserved, T_SSERVICE_UNBIND* p_StructUnbind); E_SECURE_STATUS ROM_Sservice_Bind(UWORD16 reserved, T_SSERVICE_BIND* p_StructBind); E_SECURE_STATUS ROM_Sservice_Rsa(UWORD16 reserved, T_SSERVICE_RSA* p_StructRsa); E_SECURE_STATUS ROM_Sservice_CheckRom(UWORD16 reserved, T_SSERVICE_CHECKROM* p_StructCheckRom); E_SECURE_STATUS ROM_Sservice_RunTimeChecker( UWORD16 reserved, T_SSERVICE_RUNTIMECHECKER* p_StructRunTimeChecker); E_SECURE_STATUS ROM_Sservice_RunTimePlatformDataChecker( UWORD16 reserved, T_SSERVICE_RUNTIME_PLAT_CHECKER* p_StructRunTimePlatChecker); #endif #endif /* _SECURE_TYPES_H */