?? ss_gen.c
字號:
/********************************************************************20**
Name: System Services -- general functions
Type: C source file
Desc: Source code for System Services startup and general
System Services.
File: ss_gen.c
Sid: ss_gen.c 1.3 - 08/11/98 11:02:18
Prg: kp
*********************************************************************21*/
/* header include files (.h) */
#include "envopt.h" /* environment options */
#include "envdep.h" /* environment dependent */
#include "envind.h" /* environment independent */
#include "gen.h" /* general layer */
#include "ssi.h" /* system services */
#include "ss_err.h" /* errors */
#include "ss_dep.h" /* implementation-specific */
#include "ss_queue.h" /* queues */
#include "ss_task.h" /* tasking */
#include "ss_msg.h" /* messaging */
#include "ss_mem.h" /* memory management interface */
#include "ss_gen.h" /* general */
/* header/extern include files (.x) */
#include "gen.x" /* general layer */
#include "ssi.x" /* system services */
#include "ss_dep.x" /* implementation-specific */
#include "ss_queue.x" /* queues */
#include "ss_task.x" /* tasking */
#include "ss_timer.x" /* timers */
#include "ss_strm.x" /* STREAMS */
#include "ss_msg.x" /* messaging */
#include "ss_mem.x" /* memory management interface */
#include "ss_drvr.x" /* driver tasks */
#include "ss_gen.x" /* general */
/* public variable declarations */
PUBLIC SsOs osCp; /* common OS control point */
EXTERN Cntr cfgNumRegs;
EXTERN SsRegCfg cfgRegInfo[SS_MAX_REGS];
#define ENTLAST ENTSV /* last entity id */
#define ENTNC 0xFF /* Entity not configured */
/*** add by shang, 2002-1-4 ***/
PUBLIC EntDesc_s g_entNameTbl[SS_MAX_ENT] =
{
{ ENTPRM, "ENTPRM" }, /* Permanent task */
{ ENTTST, "ENTTST" }, /* Test */
{ ENTSS, "ENTSS" }, /* Common System Services */
{ ENTMS, "ENTMS" }, /* Multiprocessor Operating System */
{ ENTNS, "ENTNS" }, /* NTSS */
{ ENTSC, "ENTSC"}, /*02 /* Physical Layer - SCC */
{ ENTLB, "ENTLB"}, /*03 /* Data Link Layer - LAPB */
{ ENTLD, "ENTLD"}, /*04 /* Data Link Layer - LAPD */
{ ENTML, "ENTML"}, /*05 /* Data Link Layer - Multilink */
{ ENTBD, "ENTBD"}, /*06 /* Data Link Layer - LAPB & LAPD */
{ ENTXI, "ENTXI"}, /*07 /* Network Layer - X.25 Intermediate System */
{ ENTXN, "ENTXN"}, /*08 /* Network Layer - X.25 End System */
{ ENTXG, "ENTXG"}, /*09 /* Network Layer - X.75 */
{ ENTIN, "ENTIN"}, /*0A /* Network Layer - Q.930/Q.931 */
{ ENTAP, "ENTAP"}, /*0B /* Application Layer - Asynchronous PAD */
{ ENTBR, "ENTBR"}, /*0C /* Data Link Layer - Basic Frame Relay */
/* OBSOLETE */
{ ENTER, "ENTER"}, /*0D /* Data Link Layer - Extended Frame Relay */
/* OBSOLETE */
{ ENTSM, "ENTSM"}, /*0E /* Stack Manager */
{ ENTMD, "ENTMD"}, /*0F /* Mos Driver */
{ ENTAL, "ENTAL"}, /*10 /* Application Program */
{ ENTLDLM, "ENTLDLM" }, /* Lapd Layer Manager */
{ ENTTC, "ENTTC"}, /*12 /* TCP/IP */
{ ENTIX, "ENTIX"}, /*13 /* X.31 */
{ ENTSI, "ENTSI"}, /*14 /* SS7 - isup */
{ ENTSN, "ENTSN"}, /*15 /* SS7 - mtp, level 3 */
{ ENTSD, "ENTSD"}, /*16 /* SS7 - mtp, level 2 */
{ ENTST, "ENTST"}, /*17 /* SS7 - tcap */
{ ENTDB, "ENTDB"}, /*18 /* 68000 Debugger */
{ ENTIS, "ENTIS"}, /*19 /* Physical - ISAC-S */
{ ENTLC, "ENTLC"}, /*1A /* Data Link Layer - LLC */
{ ENTOD, "ENTOD"}, /*1B /* Novell ODI */
{ ENTSE, "ENTSE"}, /*1C /* 68302 */
{ ENTHE, "ENTHE"}, /*1D /* Hello World */
{ ENTSP, "ENTSP"}, /*1E /* SS7 - sccp */
{ ENTCC, "ENTCC"}, /*1F /* Interworking call control */
{ ENTTU, "ENTTU"}, /*20 /* SS7 - tcap user */
{ ENTUD, "ENTUD"}, /*21 /* UDP/IP (without TCP) */
{ ENTM1, "ENTM1"}, /*22 /* Dummy MAC (with MACINT1) */
{ ENTM2, "ENTM2"}, /*23 /* Dummy MAC (with MACINT2) */
{ ENTM3, "ENTM3"}, /*24 /* Dummy MAC (with MACINT3) */
{ ENTTP, "ENTTP"}, /*25 /* SS7 - tup */
{ ENTBS, "ENTBS"}, /*26 /* ATM - LANE Broadcast Server (BUS) */
{ ENTM4, "ENTM4"}, /*27 /* Dummy MAC (with MACINT4) */
{ ENTM5, "ENTM5"}, /*28 /* Dummy MAC (with MACINT5) */
{ ENTM6, "ENTM6"}, /*29 /* Dummy MAC (with MACINT6) */
{ ENTM7, "ENTM7"}, /*2A /* Dummy MAC (with MACINT7) */
{ ENTM8, "ENTM8"}, /*2B /* Dummy MAC (with MACINT8) */
{ ENTM9, "ENTM9"}, /*2C /* Dummy MAC (with MACINT9) */
{ ENTME, "ENTME"}, /*2D /* Message Exchange */
{ ENTAC, "ENTAC"}, /*2E /* ATM - cpcs */
{ ENTAS, "ENTAS"}, /*2F /* ATM - q.saal */
{ ENTAM, "ENTAM"}, /*30 /* ATM - q.93b */
{ ENTUM, "ENTUM"}, /*31 /* ATM - ume */
{ ENTMU, "ENTMU"}, /*32 /* ATM - management user */
{ ENTLR, "ENTLR"}, /*33 /* loader */
{ ENTLU, "ENTLU"}, /*34 /* loader user */
{ ENTRY, "ENTRY"}, /*35 /* relay */
{ ENTEC, "ENTEC"}, /*36 /* ATM - LANE Client (LEC) */
{ ENTFA, "ENTFA"}, /*37 /* ATM - Fujitsu ALC driver */
{ ENTSR, "ENTSR"}, /*38 /* MTP 3 Simple Router */
{ ENTES, "ENTES"}, /*39 /* ATM - LANE Services (LEServices) */
{ ENTPN, "ENTPN"}, /*3A /* ATM - PNNI */
{ ENTQI, "ENTQI"}, /*3B /* QUICC Driver */
{ ENTWD, "ENTWD"}, /*3C /* MTP Level 2 Wrapper */
{ ENTWN, "ENTWN"}, /*3D /* MTP Level 3 Wrapper */
{ ENTWI, "ENTWI"}, /*3E /* ISUP Wrapper */
{ ENTWU, "ENTWU"}, /*3F /* TUP Wrapper */
{ ENTWS, "ENTWS"}, /*40 /* SCCP Wrapper */
{ ENTWC, "ENTWC"}, /*41 /* TCAP Wrapper */
{ ENTPU, "ENTPU"}, /*42 /* ATM PNNI User */
{ ENTSA, "ENTSA"}, /*43 /* ATM - Q.2140 */
{ ENTFM, "ENTFM"}, /*44 /* SS7 - Fault Manager */
{ ENTBI, "ENTBI"}, /*45 /* ATM - b-isup */
{ ENTMA, "ENTMA"}, /*46 /* SS7 - MAP*/
{ ENTFN, "ENTFN"}, /*47 /* Frame Relay Network Layer - Q.933 */
{ ENTNV, "ENTNV"}, /*48 /* V5.X PSTN */
{ ENTLV, "ENTLV"}, /*49 /* LAPV5-DL */
{ ENTEV, "ENTEV"}, /*4a /* V5.X Envelope Function */
{ ENTPL, "ENTPL"}, /*4b /* ATM - PMC Sierra LASAR driver */
{ ENTAU, "ENTAU"}, /*4c /* MAP Upper User */
{ ENTVM, "ENTVM"}, /*4d /* V5.1 mac layer */
{ ENTAF, "ENTAF"}, /*4e /* Frame Relay ATM IW Layer */
{ ENTFR, "ENTFR"}, /*4f /* Frame Relay */
{ ENTMT, "ENTMT"}, /*50 /* mt_ss */
{ ENTCV, "ENTCV"}, /*51 /* V5.X Control Protocol */
{ ENTMV, "ENTMV"}, /*52 /* V5.X System Management Layer */
{ ENTIM, "ENTIM"}, /*53 /* ATM - IME */
{ ENTBV, "ENTBV"}, /*54 /* V5 - BCC. */
{ ENTPA, "ENTPA"}, /*55 /* PLOA */
{ ENTPV, "ENTPV"}, /*56 /* V5 - Protection Protocol. */
{ ENTLK, "ENTLK"}, /*57 /* V5 - LCP */
{ ENTL1, "ENTL1"}, /*58 /* V5 - Link Layer 1 */
{ ENTIA, "ENTIA"}, /*59 /* map is41 */
{ ENTIU, "ENTIU"}, /*5a /* map is41 user */
{ ENTRM, "ENTRM"}, /*5b /* Resource Manager */
{ ENTRT, "ENTRT"}, /*5c /* Router */
{ ENTSG, "ENTSG"}, /*5d /* System manager */
{ ENTPQ, "ENTPQ"}, /*5e /* Power QUICC Driver */
{ ENTMC, "ENTMC"}, /*5f /* Mac over sockets */
{ ENTIE, "ENTIE"}, /*60 /* INAP */
{ ENTBW, "ENTBW"}, /* BISUP Wrapper */
{ ENTIW, "ENTIW"}, /* ISUP Wrapper */
{ ENTQW, "ENTQW"}, /* ISDN Wrapper */
{ ENTAW, "ENTAW"}, /* q.93B Wrapper */
{ ENTSF, "ENTSF"}, /*61 /* Switching Fabric */
{ ENTVF, "ENTVF"}, /*62 /* Integrated V5 layer 3 */
{ ENTCL, "ENTCL"}, /*63 /* ASN.1 encoder/decoder */
{ ENTSH, "ENTSH"}, /*65 /* System Agent */
{ ENTMR, "ENTMR"}, /*66 /* Message Router */
{ ENTL4, "ENTL4"}, /*67 /* dummy layer4 */
{ ENTTT, "ENTTT"}, /*68 /* TCAP over TCP/IP */
{ ENTPR, "ENTPR"}, /*69 /* MPC860SAR Driver */
{ ENTGN, "ENTGN"}, /*6a /* GPRS Network Service */
{ ENTGG, "ENTGG"}, /*6b /* GPRS BSSGP */
{ ENTAR, "ENTAR"}, /*6c /* ARI module */
{ ENTGT, "ENTGT"}, /*6d /* GPRS GTP */
{ ENTGM, "ENTGM"}, /*6e /* GPRS Mobility Management */
{ ENTGR, "ENTGR"}, /*6f /* GPRS Relay */
{ ENTGW, "ENTGW"}, /*70 /* GPRS Ineterworking unit */
{ ENTGL, "ENTGL"}, /*71 /* GPRS LLC */
{ ENTGS, "ENTGS"}, /*72 /* GPRS SNDCP */
{ ENTGZ, "ENTGZ"}, /*73 /* GPRS RLC/MAC */
{ ENTGY, "ENTGY"}, /*74 /* GPRS SMS */
{ ENTHI, "ENTHI"}, /*75 /* TUCL */
{ ENTHC, "ENTHC"}, /*76 /* H.323 */
{ ENTHU, "ENTHU"}, /*77 /* H.323 user */
{ ENTHR, "ENTHR"}, /*78 /* RTP/RTCP */
{ ENTNM, "ENTNM"}, /*79 /* GPRS Network Management */
{ ENTGB, "ENTGB"}, /*7a /* GPRS BSS Relay */
{ ENTGP, "ENTGP"}, /*7b /* GPRS PDP at MS */
{ ENTIQ, "ENTIQ"}, /*7c /* Q.930/931-Q.SAAL Convergence Layer */
{ ENTXM, "ENTXM"}, /*7d /* Connection Manager */
{ ENTMG, "ENTMG"}, /*7e /* MGCP */
{ ENTHG, "ENTHG"}, /*7f /* Annex G */
{ ENTDN, "ENTDN"}, /*80 /* LDF-MTP3 */
{ ENTTS, "ENTTS"}, /*81 /* Trillium Stack Manager */
{ ENTVO, "ENTVO"}, /*82 /* MPC8260 Driver */
{ ENTGO, "ENTGO"}, /*83 /* GTP Location-MGMT */
{ ENTGI, "ENTGI"}, /*84 /* CC-3G */
{ ENTGH, "ENTGH"}, /*85 /* GTP-Charging */
{ ENTGU, "ENTGU"}, /*86 /* Relay on IU for GTP */
{ ENTLN, "ENTLN"}, /*87 /* MPLS */
{ ENTSB, "ENTSB"}, /*88 /* SCTP */
{ ENTIT, "ENTIT"}, /*89 /* M3UA */
{ ENTFW, "ENTFW"}, /*8a /* MPLS - Forwarder */
{ ENTRL, "ENTRL"}, /*8b /* MPLS - Resource Manager */
{ ENTAL2, "ENTAL2"}, /* AAL2 Signaling */
{ ENTAA, "ENTAA"}, /*8d /* AAL2 Signaling User */
{ ENTRA, "ENTRA"}, /*8f /* RANAP */
{ ENTNF, "ENTNF"}, /*90 /* M3UA-NIF */
{ ENTRN, "ENTRN"}, /*91 /* RNSAP */
{ ENTDP, "ENTDP"}, /*92 /* LDF-SCCP */
{ ENTDT, "ENTDT"}, /*93 /* LDF-TCAP */
{ ENTNU, "ENTNU"}, /*94 /* SUA NIF */
{ ENTP1, "ENTP1"}, /*95 /* PXY dummy for PLOA */
{ ENTID, "ENTID"}, /*96 /* IUA */
{ ENTND, "ENTND"}, /*97 /* IUA-NIF */
{ ENTDM, "ENTDM"}, /*98 /* IWF */
{ ENTSO, "ENTSO"}, /*99 /* SIP */
{ ENTSV, "ENTSV"}, /*9A /* SIP */
{ ENTNC, NULLP }
};
/*** add by shang is over ***/
/*
*
* Fun: System Services initialization function
*
* Desc: This is the general initialization function for
* all System Services implementations. It initializes
* all the common global data structures and calls the
* implementation-specific initialization and start
* functions.
*
* Ret: Void
*
* Notes:
*
* File: ss_gen.c
*
*/
#ifdef ANSI
PUBLIC S16 SInit
(
void
)
#else
PUBLIC S16 SInit()
#endif
{
S16 ret;
REG1 S16 i;
REG2 S16 j;
REG3 S16 k;
SsTTskEntry *tTsk;
SsSTskEntry *sTsk;
SsTmrEntry *tmr;
SsRegionEntry *reg;
#ifdef SS_DRVR_SUPPORT
SsDrvrTskEntry *drvrTsk;
#endif
TRC1(SInit);
/* implementation specific general initialization */
ret = ssdInitGen();
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init ssdInitGen");
RETVALUE(RFAILED);
}
/* start initializing OS control point */
osCp.procId = SS_PROC_ID;
/* initialize memory information */
osCp.numRegions = 0;
if (ROK != SInitRegion())
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init ssdInitGen");
RETVALUE(RFAILED);
}
for (i = 0; i < SS_MAX_REGS; i++)
{
reg = &osCp.regionTbl[i];
reg->used = FALSE;
reg->start = NULLP;
reg->size = 0;
reg->regCb = NULLP;
reg->flags = 0;
reg->alloc = NULLP;
reg->free = NULLP;
reg->ctl = NULLP;
/* zero the pool information */
reg->numPools = 0;
for (j = 0; j < SS_MAX_POOLS_PER_REG; j++)
reg->poolTbl[j].type = SS_POOL_UND;
/* find this region ID in the region configuration structure */
for (j = 0; j < cfgNumRegs; j++)
if (cfgRegInfo[j].region == i)
break;
/* this region is not configured */
if (j == cfgNumRegs)
continue;
/* Load the configuration information into the region table.
* Note, the region still has to be registered, for it to
* be usable.
*/
for (k = 0; k < cfgRegInfo[j].numPools; k++)
{
reg->poolTbl[k].type = cfgRegInfo[j].pools[k].type;
if (reg->poolTbl[k].type == SS_POOL_DYNAMIC)
reg->poolTbl[k].u.dpool.size = cfgRegInfo[j].pools[k].size;
}
}
ret = ssInitSema(&osCp.regionTblSem, 1);
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init ssInitSema");
goto cleanup1;
}
/* implementation specific memory initialization */
ret = ssdInitMem();
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init ssdInitMem");
ssDestroySema(&osCp.regionTblSem);
goto cleanup1;
}
/* initialize TAPA and system task information */
for (i = 0; i < SS_MAX_ENT; i++)
for (j = 0; j < SS_MAX_INST; j++)
osCp.tTskIds[i][j] = SS_TSKNC;
for (i = 0; i < SS_MAX_TTSKS; i++)
{
tTsk = &osCp.tTskTbl[i];
tTsk->used = FALSE;
tTsk->ent = ENTNC;
tTsk->inst = INSTNC;
tTsk->tskType = TTUND;
tTsk->tskPrior = 0;
tTsk->initTsk = NULLP;
tTsk->actvTsk = NULLP;
tTsk->sTsk = NULLP;
tTsk->nxt = i + 1;
}
osCp.numTTsks = 0;
osCp.nxtTTskEntry = 0;
ret = ssInitSema(&osCp.tTskTblSem, SS_MAX_STSKS);
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init ssInitSema");
goto cleanup2;
}
/* initialize system task information */
for (i = 0; i < SS_MAX_STSKS; i++)
{
sTsk = &osCp.sTskTbl[i];
sTsk->used = FALSE;
sTsk->termPend = FALSE;
sTsk->tskPrior = 0;
for (j = 0; j < SS_MAX_TTSKS; j++)
sTsk->tTsks[j] = SS_INVALID_IDX;
sTsk->numTTsks = 0;
sTsk->nxt = i + 1;
}
osCp.numSTsks = 0;
osCp.nxtSTskEntry = 0;
ret = SInitLock(&osCp.sTskTblLock, SS_STSKTBL_LOCK);
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init SInitLock");
ssDestroySema(&osCp.tTskTblSem);
goto cleanup2;
}
/* implementation specific task initialization */
ret = ssdInitTsk();
if (ret != ROK)
{
SSLOGERROR(ERRCLS_DEBUG, ESS208, (ErrVal) ret,
"Could not init SInitLock");
SDestroyLock(&osCp.sTskTblLock);
ssDestroySema(&osCp.tTskTblSem);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -