FreeCalypso > hg > fc-magnetite
comparison src/g23m-fad/l2r/l2r_pei.c @ 174:90eb61ecd093
src/g23m-fad: initial import from TCS3.2/LoCosto
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Wed, 12 Oct 2016 05:40:46 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 173:bf64d785238a | 174:90eb61ecd093 |
|---|---|
| 1 /* | |
| 2 +----------------------------------------------------------------------------- | |
| 3 | Project : CSD (8411) | |
| 4 | Modul : L2r_pei.c | |
| 5 +----------------------------------------------------------------------------- | |
| 6 | Copyright 2002 Texas Instruments Berlin, AG | |
| 7 | All rights reserved. | |
| 8 | | |
| 9 | This file is confidential and a trade secret of Texas | |
| 10 | Instruments Berlin, AG | |
| 11 | The receipt of or possession of this file does not convey | |
| 12 | any rights to reproduce or disclose its contents or to | |
| 13 | manufacture, use, or sell anything it may describe, in | |
| 14 | whole, or in part, without the specific written consent of | |
| 15 | Texas Instruments Berlin, AG. | |
| 16 +----------------------------------------------------------------------------- | |
| 17 | Purpose : This Modul defines the process body interface | |
| 18 | for the component L2R of the base station | |
| 19 +----------------------------------------------------------------------------- | |
| 20 */ | |
| 21 | |
| 22 #ifndef L2R_PEI_C | |
| 23 #define L2R_PEI_C | |
| 24 #endif | |
| 25 | |
| 26 #define ENTITY_L2R | |
| 27 #define ENTITY_TRA | |
| 28 | |
| 29 /*==== INCLUDES ===================================================*/ | |
| 30 | |
| 31 #include <string.h> | |
| 32 | |
| 33 #include "typedefs.h" | |
| 34 #include "pconst.cdg" | |
| 35 #include "vsi.h" | |
| 36 #include "macdef.h" | |
| 37 #include "custom.h" | |
| 38 #include "gsm.h" | |
| 39 #include "tools.h" | |
| 40 #include "cus_l2r.h" | |
| 41 #include "cnf_l2r.h" | |
| 42 #include "mon_l2r.h" | |
| 43 #include "prim.h" | |
| 44 #include "pei.h" | |
| 45 #include "tok.h" | |
| 46 #include "dti.h" /* functionality of the dti library */ | |
| 47 | |
| 48 #include "cl_ribu.h" | |
| 49 #include "l2r.h" | |
| 50 #include "tra_pei.h" | |
| 51 | |
| 52 /*==== CONST ======================================================*/ | |
| 53 /*==== VAR EXPORT =================================================*/ | |
| 54 | |
| 55 GLOBAL T_MODE l2r_data_mode = NONTRANSP; /* = default */ | |
| 56 | |
| 57 GLOBAL T_TRA_DATA *tra_data; | |
| 58 GLOBAL T_TRA_DATA *tra_data_first_elem; | |
| 59 GLOBAL DTI_HANDLE l2r_hDTI; /* DTI connection for DTI library */ | |
| 60 | |
| 61 GLOBAL T_HANDLE l2r_handle; | |
| 62 GLOBAL T_HANDLE hCommCTRL = VSI_ERROR; /* Controller Communication */ | |
| 63 GLOBAL T_HANDLE hCommRLP = VSI_ERROR; /* RLP Communication */ | |
| 64 | |
| 65 #ifdef _SIMULATION_ | |
| 66 GLOBAL T_HANDLE hCommRA = VSI_ERROR; /* RA Communication */ | |
| 67 #endif | |
| 68 | |
| 69 LOCAL T_HANDLE hCommL2R = VSI_ERROR; /* L2R Communication (used by relay entity) */ | |
| 70 | |
| 71 /* | |
| 72 * instance data base | |
| 73 */ | |
| 74 GLOBAL T_L2R_DATA l2r_data_base [L2R_INSTANCES], *l2r_data; | |
| 75 GLOBAL ULONG l2r_data_magic_num; | |
| 76 | |
| 77 /*==== VAR LOCAL ==================================================*/ | |
| 78 | |
| 79 LOCAL BOOL first_access = TRUE; | |
| 80 LOCAL T_MONITOR l2r_mon; | |
| 81 | |
| 82 /* | |
| 83 +------------------------------------------------------------------------------ | |
| 84 | Function : pei_not_supported | |
| 85 +------------------------------------------------------------------------------ | |
| 86 | Description : An unsupported primitive is received. | |
| 87 | | |
| 88 | Parameters : data - | |
| 89 | | |
| 90 | | |
| 91 | Return : - | |
| 92 +------------------------------------------------------------------------------ | |
| 93 */ | |
| 94 | |
| 95 | |
| 96 LOCAL void pei_not_supported (void *data) | |
| 97 { | |
| 98 TRACE_FUNCTION ("pei_not_supported()"); | |
| 99 PFREE (data); | |
| 100 } | |
| 101 | |
| 102 /* | |
| 103 * | |
| 104 * Use MAK_FUNC_0 for primitives which contains no SDU. | |
| 105 * | |
| 106 * Use MAK_FUNC_S for primitives which contains a SDU. | |
| 107 */ | |
| 108 | |
| 109 /* | |
| 110 * jumptable for the entity service access point. Contains | |
| 111 * the processing-function addresses and opcodes of | |
| 112 * request and response primitives. | |
| 113 * | |
| 114 */ | |
| 115 | |
| 116 LOCAL const T_FUNC l2r_table[] = { | |
| 117 MAK_FUNC_0( mgt_l2r_activate_req , L2R_ACTIVATE_REQ ), | |
| 118 MAK_FUNC_0( mgt_l2r_deactivate_req , L2R_DEACTIVATE_REQ ), | |
| 119 MAK_FUNC_0( mgt_l2r_connect_req , L2R_CONNECT_REQ ), | |
| 120 MAK_FUNC_0( mgt_l2r_disc_req , L2R_DISC_REQ ), | |
| 121 MAK_FUNC_N( pei_not_supported , 0 ), | |
| 122 MAK_FUNC_N( pei_not_supported , 0 ), | |
| 123 MAK_FUNC_N( pei_not_supported , 0 ), | |
| 124 MAK_FUNC_0( mgt_l2r_dti_req , L2R_DTI_REQ ) | |
| 125 }; | |
| 126 | |
| 127 LOCAL const T_FUNC tra_table[] = { | |
| 128 MAK_FUNC_0( mgt_tra_activate_req , TRA_ACTIVATE_REQ ), | |
| 129 MAK_FUNC_0( mgt_tra_deactivate_req , TRA_DEACTIVATE_REQ ), | |
| 130 MAK_FUNC_0( mgt_tra_dti_req , TRA_DTI_REQ ) | |
| 131 }; | |
| 132 | |
| 133 LOCAL void pei_dti_connect_req(T_DTI2_CONNECT_REQ *dti_connect_req); | |
| 134 LOCAL void pei_dti_connect_cnf(T_DTI2_CONNECT_CNF *dti_connect_cnf); | |
| 135 LOCAL void pei_dti_connect_ind(T_DTI2_CONNECT_IND *dti_connect_ind); | |
| 136 LOCAL void pei_dti_connect_res(T_DTI2_CONNECT_RES *dti_connect_res); | |
| 137 LOCAL void pei_dti_disconnect_req(T_DTI2_DISCONNECT_REQ *dti_disconnect_req); | |
| 138 LOCAL void pei_dti_disconnect_ind(T_DTI2_DISCONNECT_IND *dti_disconnect_ind); | |
| 139 LOCAL void pei_dti_data_req(T_DTI2_DATA_REQ *dti_data_req); | |
| 140 LOCAL void pei_dti_getdata_req(T_DTI2_GETDATA_REQ *dti_getdata_req); | |
| 141 LOCAL void pei_dti_data_ind(T_DTI2_DATA_IND *dti_data_ind); | |
| 142 LOCAL void pei_dti_ready_ind(T_DTI2_READY_IND *dti_ready_ind); | |
| 143 LOCAL void pei_dti_data_test_req(T_DTI2_DATA_TEST_REQ *dti_data_test_req); | |
| 144 LOCAL void pei_dti_data_test_ind(T_DTI2_DATA_TEST_IND *dti_data_test_ind); | |
| 145 | |
| 146 LOCAL const T_FUNC dti_ul_table[] = { | |
| 147 MAK_FUNC_0( pei_dti_connect_req , DTI2_CONNECT_REQ ), | |
| 148 MAK_FUNC_0( pei_dti_connect_res , DTI2_CONNECT_RES ), | |
| 149 MAK_FUNC_0( pei_dti_disconnect_req , DTI2_DISCONNECT_REQ ), | |
| 150 MAK_FUNC_0( pei_dti_getdata_req , DTI2_GETDATA_REQ ), | |
| 151 MAK_FUNC_0( pei_dti_data_req , DTI2_DATA_REQ ) | |
| 152 #ifdef _SIMULATION_ | |
| 153 , | |
| 154 MAK_FUNC_S( pei_dti_data_test_req , DTI2_DATA_TEST_REQ ) | |
| 155 #endif /* _SIMULATION_ */ | |
| 156 }; | |
| 157 | |
| 158 LOCAL const T_FUNC dti_dl_table[] = { | |
| 159 MAK_FUNC_0( pei_dti_connect_ind , DTI2_CONNECT_IND ), | |
| 160 MAK_FUNC_0( pei_dti_connect_cnf , DTI2_CONNECT_CNF ), | |
| 161 MAK_FUNC_0( pei_dti_disconnect_ind , DTI2_DISCONNECT_IND ), | |
| 162 MAK_FUNC_0( pei_dti_ready_ind , DTI2_READY_IND ), | |
| 163 MAK_FUNC_0( pei_dti_data_ind , DTI2_DATA_IND ) | |
| 164 #ifdef _SIMULATION_ | |
| 165 , | |
| 166 MAK_FUNC_S( pei_dti_data_test_ind , DTI2_DATA_TEST_IND ) | |
| 167 #endif /* _SIMULATION_ */ | |
| 168 }; | |
| 169 | |
| 170 LOCAL const T_FUNC ra_table[] = { | |
| 171 MAK_FUNC_0( rcv_ra_ready_ind , RA_READY_IND ), | |
| 172 MAK_FUNC_S( rcv_ra_data_ind , RA_DATA_IND ), | |
| 173 }; | |
| 174 | |
| 175 LOCAL const T_FUNC rlp_table[] = { | |
| 176 MAK_FUNC_0( mgt_rlp_detach_cnf , RLP_DETACH_CNF ), | |
| 177 MAK_FUNC_0( mgt_rlp_connect_ind , RLP_CONNECT_IND ), | |
| 178 MAK_FUNC_0( mgt_rlp_connect_cnf , RLP_CONNECT_CNF ), | |
| 179 MAK_FUNC_0( mgt_rlp_disc_ind , RLP_DISC_IND ), | |
| 180 MAK_FUNC_0( mgt_rlp_disc_cnf , RLP_DISC_CNF ), | |
| 181 MAK_FUNC_0( mgt_rlp_reset_ind , RLP_RESET_IND ), | |
| 182 MAK_FUNC_0( mgt_rlp_reset_cnf , RLP_RESET_CNF ), | |
| 183 MAK_FUNC_0( up_rlp_ready_ind , RLP_READY_IND ), | |
| 184 MAK_FUNC_S( dn_rlp_data_ind , RLP_DATA_IND ), | |
| 185 MAK_FUNC_S( mgt_rlp_ui_ind , RLP_UI_IND ), | |
| 186 MAK_FUNC_0( mgt_rlp_xid_ind , RLP_XID_IND ), | |
| 187 MAK_FUNC_0( mgt_rlp_error_ind , RLP_ERROR_IND ), | |
| 188 MAK_FUNC_0( mgt_rlp_statistic_ind , RLP_STATISTIC_IND ) | |
| 189 }; | |
| 190 | |
| 191 /* | |
| 192 +------------------------------------------------------------------------------ | |
| 193 | Function : pei_primitive | |
| 194 +------------------------------------------------------------------------------ | |
| 195 | Description : Process protocol specific primitive. | |
| 196 | | |
| 197 | Parameters : ptr - | |
| 198 | | |
| 199 | | |
| 200 | Return : PEI_ERROR - | |
| 201 | PEI_OK - | |
| 202 +------------------------------------------------------------------------------ | |
| 203 */ | |
| 204 LOCAL SHORT pei_primitive (void * ptr) | |
| 205 { | |
| 206 T_PRIM * prim = ptr; | |
| 207 /* | |
| 208 * @ADAPT@ | |
| 209 * | | | |
| 210 * Controller/UL UPPER LAYER | |
| 211 * | | | |
| 212 * v v | |
| 213 * +-----------(l2r)------(tra)----+ | |
| 214 * | | | | |
| 215 * | L2R | TRA | | |
| 216 * | | | | |
| 217 * +-------------^----------^------+ | |
| 218 * | | | |
| 219 * RLP RA LOWER LAYER | |
| 220 * | | | |
| 221 * | |
| 222 */ | |
| 223 | |
| 224 TRACE_FUNCTION ("pei_primitive()"); | |
| 225 | |
| 226 if (prim NEQ NULL) | |
| 227 { | |
| 228 ULONG opc = prim->custom.opc; | |
| 229 USHORT n; | |
| 230 const T_FUNC *table; | |
| 231 | |
| 232 VSI_PPM_REC ((T_PRIM_HEADER *)prim, __FILE__, __LINE__); | |
| 233 | |
| 234 PTRACE_IN (opc); | |
| 235 l2r_data = GET_INSTANCE (*primData); | |
| 236 | |
| 237 switch (SAP_NR(opc)) | |
| 238 { | |
| 239 case SAP_NR(L2R_UL): table = l2r_table; n = TAB_SIZE (l2r_table); break; | |
| 240 case SAP_NR(TRA_UL): table = tra_table; n = TAB_SIZE (tra_table); break; | |
| 241 case SAP_NR(RLP_DL): table = rlp_table; n = TAB_SIZE (rlp_table); break; | |
| 242 case DTI2_UL: | |
| 243 { | |
| 244 table = dti_ul_table; n = TAB_SIZE (dti_ul_table); | |
| 245 /* | |
| 246 * to be able to distinguish DTI1/DTI2 opcodes, | |
| 247 * the ones for DTI2 start at 0x50 | |
| 248 */ | |
| 249 opc -= 0x50; | |
| 250 } | |
| 251 break; | |
| 252 case DTI2_DL: | |
| 253 { | |
| 254 table = dti_dl_table; n = TAB_SIZE (dti_dl_table); | |
| 255 /* | |
| 256 * to be able to distinguish DTI1/DTI2 opcodes, | |
| 257 * the ones for DTI2 start at 0x50 | |
| 258 */ | |
| 259 opc -= 0x50; | |
| 260 } | |
| 261 break; | |
| 262 case SAP_NR(RA_DL ): table = ra_table; n = TAB_SIZE (ra_table); break; | |
| 263 default : table = NULL; n = 0; break; | |
| 264 } | |
| 265 | |
| 266 if (table != NULL ) | |
| 267 { | |
| 268 if (PRIM_NR(opc) < n) | |
| 269 { | |
| 270 table += PRIM_NR(opc); | |
| 271 #ifdef PALLOC_TRANSITION | |
| 272 P_SDU(prim) = table->soff ? (T_sdu*) (((char*)&prim->data) + table->soff) : 0; | |
| 273 P_LEN(prim) = table->size + sizeof (T_PRIM_HEADER); | |
| 274 #endif /* PALLOC_TRANSITION */ | |
| 275 JUMP (table->func) (P2D(prim)); | |
| 276 } | |
| 277 else | |
| 278 { | |
| 279 pei_not_supported (P2D(prim)); | |
| 280 } | |
| 281 return PEI_OK; | |
| 282 } | |
| 283 /* | |
| 284 * Primitive is no GSM Primitive | |
| 285 * then forward to the environment | |
| 286 */ | |
| 287 | |
| 288 #ifdef GSM_ONLY | |
| 289 PFREE (P2D(prim)) | |
| 290 | |
| 291 return PEI_ERROR; | |
| 292 #else | |
| 293 if (opc & SYS_MASK) | |
| 294 vsi_c_primitive (VSI_CALLER prim); | |
| 295 else | |
| 296 { | |
| 297 PFREE (P2D(prim)); | |
| 298 return PEI_ERROR; | |
| 299 } | |
| 300 #endif /* GSM_ONLY */ | |
| 301 } | |
| 302 return PEI_OK; | |
| 303 } | |
| 304 | |
| 305 /* | |
| 306 +------------------------------------------------------------------------------ | |
| 307 | Function: pei_sig_callback | |
| 308 +------------------------------------------------------------------------------ | |
| 309 | PURPOSE : Callback function for DTILIB | |
| 310 +------------------------------------------------------------------------------ | |
| 311 */ | |
| 312 | |
| 313 LOCAL void pei_sig_callback(U8 instance, U8 interfac, U8 channel, | |
| 314 U8 reason, T_DTI2_DATA_IND *dti_data_ind) | |
| 315 { | |
| 316 TRACE_FUNCTION("pei_sig_callback"); | |
| 317 | |
| 318 if (l2r_data_mode EQ NONTRANSP) | |
| 319 { | |
| 320 | |
| 321 #ifdef _SIMULATION_ | |
| 322 if (interfac NEQ L2R_DTI_UP_INTERFACE || channel NEQ L2R_DTI_UP_CHANNEL) | |
| 323 { | |
| 324 TRACE_ERROR("[PEI_SIG_CALLBACK] channel or interface not valid!"); | |
| 325 return; /* error, not found */ | |
| 326 } | |
| 327 #endif /* _SIMULATION_ */ | |
| 328 | |
| 329 if (l2r_hDTI NEQ D_NO_DATA_BASE) | |
| 330 { | |
| 331 switch (reason) | |
| 332 { | |
| 333 case DTI_REASON_CONNECTION_OPENED: | |
| 334 sig_dti_mgt_connection_opened_ind(); | |
| 335 break; | |
| 336 | |
| 337 case DTI_REASON_CONNECTION_CLOSED: | |
| 338 sig_dti_mgt_connection_closed_ind(); | |
| 339 break; | |
| 340 | |
| 341 case DTI_REASON_DATA_RECEIVED: | |
| 342 PACCESS (dti_data_ind); | |
| 343 { | |
| 344 PPASS (dti_data_ind, dti_data_req, DTI2_DATA_REQ); | |
| 345 sig_dti_up_data_received_ind(dti_data_req); | |
| 346 } | |
| 347 break; | |
| 348 | |
| 349 case DTI_REASON_TX_BUFFER_FULL: | |
| 350 sig_dti_dn_tx_buffer_full_ind(); | |
| 351 break; | |
| 352 | |
| 353 case DTI_REASON_TX_BUFFER_READY: | |
| 354 sig_dti_dn_tx_buffer_ready_ind(); | |
| 355 break; | |
| 356 | |
| 357 default: | |
| 358 TRACE_ERROR("unknown DTILIB reason parameter"); | |
| 359 break; | |
| 360 } | |
| 361 } | |
| 362 else | |
| 363 { | |
| 364 TRACE_ERROR("Pointer to DTILIB database not existing"); | |
| 365 } | |
| 366 } | |
| 367 else if (l2r_data_mode EQ TRANSP) | |
| 368 { | |
| 369 | |
| 370 #ifdef _SIMULATION_ | |
| 371 if (interfac NEQ TRA_DTI_UP_INTERFACE || channel NEQ TRA_DTI_UP_CHANNEL) | |
| 372 { | |
| 373 TRACE_ERROR("[PEI_SIG_CALLBACK] channel or interface not valid!"); | |
| 374 return; /* error, not found */ | |
| 375 } | |
| 376 #endif /* _SIMULATION_ */ | |
| 377 | |
| 378 if (l2r_hDTI NEQ D_NO_DATA_BASE) | |
| 379 { | |
| 380 switch (reason) | |
| 381 { | |
| 382 case DTI_REASON_CONNECTION_OPENED: | |
| 383 sig_dti_tra_mgt_connection_opened_ind(); | |
| 384 break; | |
| 385 | |
| 386 case DTI_REASON_CONNECTION_CLOSED: | |
| 387 sig_dti_tra_mgt_connection_closed_ind(); | |
| 388 break; | |
| 389 | |
| 390 case DTI_REASON_DATA_RECEIVED: | |
| 391 PACCESS (dti_data_ind); | |
| 392 { | |
| 393 PPASS (dti_data_ind, dti_data_req, DTI2_DATA_REQ); | |
| 394 sig_dti_tra_up_data_received_ind(dti_data_req); | |
| 395 } | |
| 396 break; | |
| 397 | |
| 398 case DTI_REASON_TX_BUFFER_FULL: | |
| 399 sig_dti_tra_dn_tx_buffer_full_ind(); | |
| 400 break; | |
| 401 | |
| 402 case DTI_REASON_TX_BUFFER_READY: | |
| 403 sig_dti_tra_dn_tx_buffer_ready_ind(); | |
| 404 break; | |
| 405 | |
| 406 default: | |
| 407 TRACE_ERROR("unknown DTILIB reason parameter"); | |
| 408 break; | |
| 409 } | |
| 410 } | |
| 411 else | |
| 412 { | |
| 413 TRACE_ERROR("Pointer to DTILIB database not existing"); | |
| 414 } | |
| 415 } | |
| 416 } /*lint !e715 instance, interfac, channel not referenced */ | |
| 417 | |
| 418 /* | |
| 419 +------------------------------------------------------------------------------ | |
| 420 | Function : pei_init | |
| 421 +------------------------------------------------------------------------------ | |
| 422 | Description : Initialize Protocol Stack Entity | |
| 423 | | |
| 424 | Parameters : handle - | |
| 425 | | |
| 426 | | |
| 427 | Return : PEI_OK - | |
| 428 | PEI_ERROR - | |
| 429 +------------------------------------------------------------------------------ | |
| 430 */ | |
| 431 | |
| 432 #define CTRL_NAME ACI_NAME | |
| 433 | |
| 434 LOCAL SHORT pei_init (T_HANDLE handle) | |
| 435 { | |
| 436 BOOL ret = PEI_OK; | |
| 437 | |
| 438 tra_data = NULL; | |
| 439 | |
| 440 l2r_handle = handle; | |
| 441 | |
| 442 TRACE_FUNCTION ("pei_init()"); | |
| 443 | |
| 444 if (hCommCTRL < VSI_OK) | |
| 445 { | |
| 446 if ((hCommCTRL = vsi_c_open (VSI_CALLER CTRL_NAME)) < VSI_OK) | |
| 447 return PEI_ERROR; | |
| 448 } | |
| 449 | |
| 450 if (hCommRLP < VSI_OK) | |
| 451 { | |
| 452 if ((hCommRLP = vsi_c_open (VSI_CALLER RLP_NAME)) < VSI_OK) | |
| 453 return PEI_ERROR; | |
| 454 } | |
| 455 | |
| 456 if (hCommL2R < VSI_OK) | |
| 457 { | |
| 458 if ((hCommL2R = vsi_c_open (VSI_CALLER L2R_NAME)) < VSI_OK) | |
| 459 return PEI_ERROR; | |
| 460 } | |
| 461 | |
| 462 #ifdef _SIMULATION_ | |
| 463 if (hCommRA < VSI_OK) | |
| 464 { | |
| 465 if ((hCommRA = vsi_c_open (VSI_CALLER RA_NAME)) < VSI_OK) | |
| 466 return PEI_ERROR; | |
| 467 } | |
| 468 #endif | |
| 469 | |
| 470 /* | |
| 471 * initialize dtilib for this entity | |
| 472 */ | |
| 473 l2r_hDTI = dti_init(L2R_INSTANCES, handle, DTI_DEFAULT_OPTIONS, pei_sig_callback); | |
| 474 | |
| 475 if(!l2r_hDTI) | |
| 476 return PEI_ERROR; | |
| 477 | |
| 478 l2r_data = &l2r_data_base[0]; | |
| 479 l2r_data_magic_num = 0; /* memory is not yet initialized */ | |
| 480 INIT_STATE (DTI, DTI_CLOSED); | |
| 481 mgt_init(&l2r_data->mgt); | |
| 482 dn_init(&l2r_data->dn); | |
| 483 up_init(&l2r_data->up); | |
| 484 tra_data_first_elem = (T_TRA_DATA *) &l2r_data_base[0]; | |
| 485 return (ret); | |
| 486 } | |
| 487 | |
| 488 /* | |
| 489 +------------------------------------------------------------------------------ | |
| 490 | Function : pei_timeout | |
| 491 +------------------------------------------------------------------------------ | |
| 492 | Description : Process timeout | |
| 493 | | |
| 494 | Parameters : index - | |
| 495 | | |
| 496 | | |
| 497 | Return : PEI_OK - | |
| 498 | | |
| 499 +------------------------------------------------------------------------------ | |
| 500 */ | |
| 501 EXTERN void tim_tup_snd (void); | |
| 502 | |
| 503 LOCAL SHORT pei_timeout (USHORT index) | |
| 504 { | |
| 505 if (index EQ TIMER_TUP_SND) | |
| 506 { | |
| 507 tim_tup_snd (); | |
| 508 } | |
| 509 return PEI_OK; | |
| 510 } | |
| 511 | |
| 512 /* | |
| 513 +------------------------------------------------------------------------------ | |
| 514 | Function : pei_signal | |
| 515 +------------------------------------------------------------------------------ | |
| 516 | Description : Functional interface to signal a primitive. | |
| 517 | | |
| 518 | Parameters : opc - | |
| 519 | primData - | |
| 520 | | |
| 521 | | |
| 522 | Return : PEI_OK | |
| 523 +------------------------------------------------------------------------------ | |
| 524 */ | |
| 525 | |
| 526 LOCAL SHORT pei_signal (ULONG opc, void *primData) | |
| 527 { | |
| 528 #ifdef OPTION_SIGNAL | |
| 529 | |
| 530 l2r_data = GET_INSTANCE (prim); | |
| 531 switch (opc) | |
| 532 { | |
| 533 case RA_READY_IND: | |
| 534 rcv_ra_ready_ind | |
| 535 ( | |
| 536 (T_RA_READY_IND *)primData | |
| 537 ); | |
| 538 break; | |
| 539 | |
| 540 case RA_DATA_IND: | |
| 541 rcv_ra_data_ind | |
| 542 ( | |
| 543 (T_RA_DATA_IND *)primData | |
| 544 ); | |
| 545 break; | |
| 546 | |
| 547 case RA_BREAK_IND: | |
| 548 rcv_ra_break_ind | |
| 549 ( | |
| 550 (T_RA_BREAK_IND *)primData | |
| 551 ); | |
| 552 break; | |
| 553 } | |
| 554 #endif /* OPTION_SIGNAL */ | |
| 555 return PEI_OK; | |
| 556 } | |
| 557 | |
| 558 /* | |
| 559 +------------------------------------------------------------------------------ | |
| 560 | Function : pei_exit | |
| 561 +------------------------------------------------------------------------------ | |
| 562 | Description : Close Resources and terminate | |
| 563 | | |
| 564 | Parameters : - | |
| 565 | | |
| 566 | | |
| 567 | Return : PEI_OK - | |
| 568 +------------------------------------------------------------------------------ | |
| 569 */ | |
| 570 | |
| 571 LOCAL SHORT pei_exit (void) | |
| 572 { | |
| 573 TRACE_FUNCTION ("pei_exit()"); | |
| 574 | |
| 575 /* | |
| 576 * clean up vsi communication | |
| 577 */ | |
| 578 vsi_c_close (VSI_CALLER hCommCTRL); | |
| 579 hCommCTRL = VSI_ERROR; | |
| 580 | |
| 581 vsi_c_close (VSI_CALLER hCommRLP); | |
| 582 hCommRLP = VSI_ERROR; | |
| 583 | |
| 584 #ifdef _SIMULATION_ | |
| 585 vsi_c_close (VSI_CALLER hCommRA); | |
| 586 hCommRA = VSI_ERROR; | |
| 587 #endif | |
| 588 | |
| 589 if (GET_STATE (DTI) NEQ DTI_CLOSED) | |
| 590 { | |
| 591 if (l2r_data_mode EQ NONTRANSP) | |
| 592 { | |
| 593 dti_close(l2r_hDTI, L2R_DTI_UP_DEF_INSTANCE, L2R_DTI_UP_INTERFACE, L2R_DTI_UP_CHANNEL, FALSE); | |
| 594 SET_STATE (DTI, DTI_CLOSED); | |
| 595 } | |
| 596 else if (l2r_data_mode EQ TRANSP) | |
| 597 { | |
| 598 dti_close(l2r_hDTI, TRA_DTI_UP_INSTANCE, TRA_DTI_UP_INTERFACE, TRA_DTI_UP_CHANNEL, FALSE); | |
| 599 SET_STATE (DTI, DTI_CLOSED); | |
| 600 } | |
| 601 } | |
| 602 | |
| 603 vsi_c_close (VSI_CALLER hCommL2R); | |
| 604 hCommL2R = VSI_ERROR; | |
| 605 | |
| 606 /* | |
| 607 * Shut down dtilib communication | |
| 608 */ | |
| 609 dti_deinit(l2r_hDTI); | |
| 610 return PEI_OK; | |
| 611 } | |
| 612 | |
| 613 /* | |
| 614 +------------------------------------------------------------------------------ | |
| 615 | Function : pei_config | |
| 616 +------------------------------------------------------------------------------ | |
| 617 | Description : Dynamic Configuration | |
| 618 | | |
| 619 | Parameters : inString - | |
| 620 | | |
| 621 | | |
| 622 | Return : PEI_OK - | |
| 623 +------------------------------------------------------------------------------ | |
| 624 */ | |
| 625 | |
| 626 LOCAL SHORT pei_config (T_PEI_CONFIG inString) | |
| 627 { | |
| 628 #ifndef NCONFIG | |
| 629 | |
| 630 char *s = inString; | |
| 631 | |
| 632 const T_STR_IND tmr_name_to_ind[] = | |
| 633 { | |
| 634 { "TUP_SND", 1 }, | |
| 635 { NULL, 0 } | |
| 636 }; | |
| 637 | |
| 638 TRACE_FUNCTION ("pei_config()"); | |
| 639 TRACE_EVENT (s); | |
| 640 | |
| 641 if (ConfigTimer(VSI_CALLER inString, tmr_name_to_ind) EQ VSI_OK) | |
| 642 return PEI_OK; | |
| 643 else | |
| 644 return PEI_ERROR; | |
| 645 | |
| 646 #else /* NCONFIG */ | |
| 647 | |
| 648 return PEI_OK; | |
| 649 | |
| 650 #endif | |
| 651 } | |
| 652 | |
| 653 /* | |
| 654 +------------------------------------------------------------------------------ | |
| 655 | Function : pei_monitor | |
| 656 +------------------------------------------------------------------------------ | |
| 657 | Description : Monitoring of physical Parameters | |
| 658 | | |
| 659 | Parameters : monitor - | |
| 660 | | |
| 661 | | |
| 662 | Return : PEI_OK; | |
| 663 +------------------------------------------------------------------------------ | |
| 664 */ | |
| 665 | |
| 666 LOCAL SHORT pei_monitor (void **monitor) | |
| 667 { | |
| 668 TRACE_FUNCTION ("pei_monitor()"); | |
| 669 | |
| 670 l2r_mon.version = VERSION_L2R; | |
| 671 *monitor = &l2r_mon; | |
| 672 return PEI_OK; | |
| 673 } | |
| 674 | |
| 675 /* | |
| 676 +------------------------------------------------------------------------------ | |
| 677 | Function : pei_dti_connect_req | |
| 678 +------------------------------------------------------------------------------ | |
| 679 | PURPOSE : Call the process function dti_dti_connect_req | |
| 680 +------------------------------------------------------------------------------ | |
| 681 */ | |
| 682 | |
| 683 LOCAL void pei_dti_connect_req(T_DTI2_CONNECT_REQ *dti_connect_req) | |
| 684 { | |
| 685 dti_dti_connect_req (l2r_hDTI, dti_connect_req); | |
| 686 } | |
| 687 | |
| 688 /* | |
| 689 +------------------------------------------------------------------------------ | |
| 690 | Function : pei_dti_connect_cnf | |
| 691 +------------------------------------------------------------------------------ | |
| 692 | PURPOSE : Call the process function dti_dti_connect_cnf | |
| 693 +------------------------------------------------------------------------------ | |
| 694 */ | |
| 695 | |
| 696 LOCAL void pei_dti_connect_cnf(T_DTI2_CONNECT_CNF *dti_connect_cnf) | |
| 697 { | |
| 698 dti_dti_connect_cnf(l2r_hDTI, dti_connect_cnf); | |
| 699 } | |
| 700 | |
| 701 /* | |
| 702 +------------------------------------------------------------------------------ | |
| 703 | Function : pei_dti_connect_ind | |
| 704 +------------------------------------------------------------------------------ | |
| 705 | PURPOSE : Call the process function dti_dti_connect_ind | |
| 706 +------------------------------------------------------------------------------ | |
| 707 */ | |
| 708 | |
| 709 LOCAL void pei_dti_connect_ind(T_DTI2_CONNECT_IND *dti_connect_ind) | |
| 710 { | |
| 711 dti_dti_connect_ind(l2r_hDTI, dti_connect_ind); | |
| 712 } | |
| 713 | |
| 714 /* | |
| 715 +------------------------------------------------------------------------------ | |
| 716 | Function : pei_dti_connect_res | |
| 717 +------------------------------------------------------------------------------ | |
| 718 | PURPOSE : Call the process function dti_dti_connect_res | |
| 719 +------------------------------------------------------------------------------ | |
| 720 */ | |
| 721 | |
| 722 LOCAL void pei_dti_connect_res(T_DTI2_CONNECT_RES *dti_connect_res) | |
| 723 { | |
| 724 dti_dti_connect_res(l2r_hDTI, dti_connect_res); | |
| 725 } | |
| 726 | |
| 727 /* | |
| 728 +------------------------------------------------------------------------------ | |
| 729 | Function : pei_dti_disconnect_req | |
| 730 +------------------------------------------------------------------------------ | |
| 731 | PURPOSE : Call the process function dti_dti_disconnect_req | |
| 732 +------------------------------------------------------------------------------ | |
| 733 */ | |
| 734 | |
| 735 LOCAL void pei_dti_disconnect_req(T_DTI2_DISCONNECT_REQ *dti_disconnect_req) | |
| 736 { | |
| 737 dti_dti_disconnect_req (l2r_hDTI, dti_disconnect_req); | |
| 738 } | |
| 739 | |
| 740 /* | |
| 741 +------------------------------------------------------------------------------ | |
| 742 | Function : pei_dti_disconnect_ind | |
| 743 +------------------------------------------------------------------------------ | |
| 744 | PURPOSE : Call the process function dti_dti_disconnect_ind | |
| 745 +------------------------------------------------------------------------------ | |
| 746 */ | |
| 747 | |
| 748 LOCAL void pei_dti_disconnect_ind(T_DTI2_DISCONNECT_IND *dti_disconnect_ind) | |
| 749 { | |
| 750 dti_dti_disconnect_ind (l2r_hDTI, dti_disconnect_ind); | |
| 751 } | |
| 752 | |
| 753 /* | |
| 754 +------------------------------------------------------------------------------ | |
| 755 | Function : pei_dti_data_req | |
| 756 +------------------------------------------------------------------------------ | |
| 757 | PURPOSE : Call the process function dti_dti_data_req | |
| 758 +------------------------------------------------------------------------------ | |
| 759 */ | |
| 760 | |
| 761 LOCAL void pei_dti_data_req(T_DTI2_DATA_REQ *dti_data_req) | |
| 762 { | |
| 763 dti_dti_data_req (l2r_hDTI, dti_data_req); | |
| 764 } | |
| 765 | |
| 766 /* | |
| 767 +------------------------------------------------------------------------------ | |
| 768 | Function : pei_dti_getdata_req | |
| 769 +------------------------------------------------------------------------------ | |
| 770 | PURPOSE : Call the process function dti_dti_getdata_req | |
| 771 +------------------------------------------------------------------------------ | |
| 772 */ | |
| 773 | |
| 774 LOCAL void pei_dti_getdata_req(T_DTI2_GETDATA_REQ *dti_getdata_req) | |
| 775 { | |
| 776 dti_dti_getdata_req (l2r_hDTI, dti_getdata_req); | |
| 777 } | |
| 778 | |
| 779 /* | |
| 780 +------------------------------------------------------------------------------ | |
| 781 | Function : pei_dti_data_ind | |
| 782 +------------------------------------------------------------------------------ | |
| 783 | PURPOSE : Call the process function dti_dti_data_ind | |
| 784 +------------------------------------------------------------------------------ | |
| 785 */ | |
| 786 | |
| 787 LOCAL void pei_dti_data_ind(T_DTI2_DATA_IND *dti_data_ind) | |
| 788 { | |
| 789 dti_dti_data_ind (l2r_hDTI, dti_data_ind); | |
| 790 } | |
| 791 | |
| 792 /* | |
| 793 +------------------------------------------------------------------------------ | |
| 794 | Function : pei_dti_ready_ind | |
| 795 +------------------------------------------------------------------------------ | |
| 796 | PURPOSE : Call the process function dti_dti_ready_ind | |
| 797 +------------------------------------------------------------------------------ | |
| 798 */ | |
| 799 | |
| 800 LOCAL void pei_dti_ready_ind(T_DTI2_READY_IND *dti_ready_ind) | |
| 801 { | |
| 802 dti_dti_ready_ind (l2r_hDTI, dti_ready_ind); | |
| 803 } | |
| 804 | |
| 805 #ifdef _SIMULATION_ | |
| 806 | |
| 807 /* | |
| 808 +------------------------------------------------------------------------------ | |
| 809 | Function : pei_dti_data_test_req | |
| 810 +------------------------------------------------------------------------------ | |
| 811 | PURPOSE : Call the process function dti_dti_data_test_req | |
| 812 +------------------------------------------------------------------------------ | |
| 813 */ | |
| 814 | |
| 815 LOCAL void pei_dti_data_test_req(T_DTI2_DATA_TEST_REQ *dti_data_test_req) | |
| 816 { | |
| 817 dti_dti_data_test_req (l2r_hDTI, dti_data_test_req); | |
| 818 } | |
| 819 | |
| 820 /* | |
| 821 +------------------------------------------------------------------------------ | |
| 822 | Function : pei_dti_data_test_ind | |
| 823 +------------------------------------------------------------------------------ | |
| 824 | PURPOSE : Call the process function dti_dti_data_test_ind | |
| 825 +------------------------------------------------------------------------------ | |
| 826 */ | |
| 827 | |
| 828 LOCAL void pei_dti_data_test_ind(T_DTI2_DATA_TEST_IND *dti_data_test_ind) | |
| 829 { | |
| 830 dti_dti_data_test_ind (l2r_hDTI, dti_data_test_ind); | |
| 831 } | |
| 832 | |
| 833 #endif /* _SIMULATION_ */ | |
| 834 | |
| 835 /* | |
| 836 +------------------------------------------------------------------------------ | |
| 837 | Function : pei_create | |
| 838 +------------------------------------------------------------------------------ | |
| 839 | Description : Create the Protocol Stack Entity | |
| 840 | | |
| 841 | Parameters : info - | |
| 842 | | |
| 843 | | |
| 844 | Return : PEI_OK - | |
| 845 +------------------------------------------------------------------------------ | |
| 846 */ | |
| 847 | |
| 848 /*lint -e714 : Symbol not referenced */ | |
| 849 /*lint -e765 : external could be made static */ | |
| 850 GLOBAL T_PEI_RETURN l2r_pei_create (T_PEI_INFO **info) | |
| 851 { | |
| 852 static const T_PEI_INFO pei_info = | |
| 853 { | |
| 854 "L2R", | |
| 855 { | |
| 856 pei_init, | |
| 857 pei_exit, | |
| 858 pei_primitive, | |
| 859 pei_timeout, | |
| 860 pei_signal, | |
| 861 NULL, /* no run function */ | |
| 862 pei_config, | |
| 863 pei_monitor | |
| 864 }, | |
| 865 1024, | |
| 866 10, | |
| 867 205, | |
| 868 2, | |
| 869 #ifdef _TARGET_ | |
| 870 (PASSIVE_BODY|COPY_BY_REF|TRC_NO_SUSPEND|PRIM_NO_SUSPEND) | |
| 871 #else | |
| 872 (PASSIVE_BODY|COPY_BY_REF) | |
| 873 #endif | |
| 874 }; | |
| 875 | |
| 876 TRACE_FUNCTION ("pei_create()"); | |
| 877 | |
| 878 /* | |
| 879 * Close Resources if open | |
| 880 */ | |
| 881 if (first_access) | |
| 882 first_access = FALSE; | |
| 883 else | |
| 884 pei_exit (); | |
| 885 | |
| 886 /* | |
| 887 * Export Startup Configuration data | |
| 888 */ | |
| 889 *info = (T_PEI_INFO *)&pei_info; | |
| 890 | |
| 891 return PEI_OK; | |
| 892 } |
