FreeCalypso > hg > freecalypso-citrine
diff L1/stand/l1_pei.c @ 0:75a11d740a02
initial import of gsm-fw from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Thu, 09 Jun 2016 00:02:41 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/L1/stand/l1_pei.c Thu Jun 09 00:02:41 2016 +0000 @@ -0,0 +1,222 @@ +/* + * This is a bastardized version of L1 PEI that will be used only when + * building FreeCalypso in the standalone L1 configuration; see README. + */ + +#define L1_PEI_C + +#define ENTITY_L1 + +#define CUST_OS_C +/*==== INCLUDES =============================================================*/ + +#include <string.h> +#include "typedefs.h" /* to get Condat data types */ +#include "vsi.h" /* to get a lot of macros */ +#include "pei.h" /* to get PEI interface */ +#include "tools.h" /* to get common tools */ +#include "cust_os.h" /* to get cust_os definitions */ + +/*==== CONSTS ================================================================*/ + +/*==== TYPES =================================================================*/ + +typedef struct +{ + char *version; +} T_MONITOR; + +/*==== LOCALS ================================================================*/ + +static T_MONITOR l1_mon; +static USHORT first_access = TRUE; + +static T_HANDLE L1_Handle; + +#define VSI_CALLER L1_Handle, + +static T_HANDLE hCommL1 = VSI_ERROR; +static T_HANDLE hCommFWD = VSI_ERROR; + +/*==== PROTOTYPES ============================================================*/ + +void l1_create_HISR (void); +void l1a_task(unsigned arcg, void *argv); + +/*==== PRIVATE FUNCTIONS =====================================================*/ + + +/* ++------------------------------------------------------------------------------ +| Function : pei_init ++------------------------------------------------------------------------------ +| Description : Initialize Protocol Stack Entity +| +| Parameters : handle - task handle +| +| Return : PEI_OK - entity initialised +| PEI_ERROR - entity not (yet) initialised ++------------------------------------------------------------------------------ +*/ +LOCAL SHORT pei_init ( T_HANDLE Handle ) +{ + L1_Handle = Handle; + + if ( first_access == TRUE ) + { + first_access = FALSE; + _osx_init(); + } + /* + * Associate own "queue" handle (a task handle in the end) with L1_QUEUE, + * in order to be able to receive primitives. + */ + if (hCommL1 < VSI_OK) + { + if ((hCommL1 = vsi_c_open (VSI_CALLER "L1")) < VSI_OK) + return PEI_ERROR; + _osx_open (VSI_CALLER L1_QUEUE, hCommL1); + } + + /* + * Redirect all L1-> outbound messages to our special forwarder + * entity; see README for the explanation. + */ + + if (hCommFWD < VSI_OK) + { + if ((hCommFWD = vsi_c_open (VSI_CALLER "L1IF")) < VSI_OK) + return PEI_ERROR; + } + + _osx_open (VSI_CALLER DL_QUEUE, hCommFWD); + _osx_open (VSI_CALLER RR_QUEUE, hCommFWD); + _osx_open (VSI_CALLER GPF_ACI_QUEUE, hCommFWD); + _osx_open (VSI_CALLER GRR_QUEUE, hCommFWD); + _osx_open (VSI_CALLER LLC_QUEUE, hCommFWD); + _osx_open (VSI_CALLER SNDCP_QUEUE, hCommFWD); + + /* + * Register VSI_CALLER as generic caller entity. + */ + _osx_open (VSI_CALLER 0, 0); + + l1_create_HISR (); + + return PEI_OK; +} + +/* ++------------------------------------------------------------------------------ +| Function : pei_run ++------------------------------------------------------------------------------ +| Description : Process Primitives, main loop is located in the +| Protocol Stack Entity. +| Only needed in active body variant +| +| Parameters : taskhandle - handle of current process +| comhandle - queue handle of current process +| +| Return : PEI_OK - sucessful +| PEI_ERROR - not successful ++------------------------------------------------------------------------------ +*/ +LOCAL SHORT pei_run ( T_HANDLE taskhandle, T_HANDLE comhandle ) +{ + hCommL1 = comhandle; + + l1a_task (0, NULL); + return PEI_OK; +} + +/* ++------------------------------------------------------------------------------ +| Function : pei_config ++------------------------------------------------------------------------------ +| Description : Dynamic Configuration. +| +| Parameters : in_string - configuration string +| +| Return : PEI_OK - sucessful +| PEI_ERROR - not successful ++------------------------------------------------------------------------------ +*/ +LOCAL SHORT pei_config (T_PEI_CONFIG inString) +{ + + + if ( _osx_config ( inString ) == OSX_OK ) + return PEI_OK; + else + return PEI_ERROR; +} + +/* ++------------------------------------------------------------------------------ +| Function : pei_monitor ++------------------------------------------------------------------------------ +| Description : Monitoring of physical Parameters. +| +| Parameters : out_monitor - return the address of the data to be monitored +| +| Return : PEI_OK - sucessful (address in out_monitor is valid) +| PEI_ERROR - not successful ++------------------------------------------------------------------------------ +*/ +LOCAL SHORT pei_monitor (void ** monitor) +{ + l1_mon.version = "FC standalone L1"; + *monitor = &l1_mon; + + return PEI_OK; +} + + +/*==== PUBLIC FUNCTIONS =====================================================*/ + +/* ++------------------------------------------------------------------------------ +| Function : pei_create ++------------------------------------------------------------------------------ +| Description : Create the Protocol Stack Entity. +| +| Parameters : info - Pointer to the structure of entity parameters +| +| Return : PEI_OK - entity created successfully +| ++------------------------------------------------------------------------------ +*/ +GLOBAL SHORT l1_pei_create ( T_PEI_INFO **info ) +{ + static T_PEI_INFO pei_info = + { + "L1", + { + pei_init, + NULL, + NULL, /* no primitive function */ + NULL, /* no timeout function */ + NULL, /* no signal function */ + pei_run, + pei_config, + pei_monitor, + }, + 2800, /* Stack Size */ + 10, /* Queue Entries */ + 235, /* Priority */ + 0, /* number of timer */ + COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND /* flags */ + }; + + /* + * export startup configuration data + */ + *info = &pei_info; + /* + * Initialize entity data + */ + + return PEI_OK; +} + +/*==== END OF FILE ==========================================================*/