/* In this file, symbols defined OSMain assembly files are given C+ definitions. This file is included when you compile the kernel, after the assembly files have been assembled, making the C+ definitions available for the C+ OSMain files. It is also included as part of booting. The assembly global labels are stored as HTT_SYS_SYMBOL entries in the hash table. These symols are placed into the OSMain binary module and added to the symbol hash table at boot before this file gets #included during boot. See $LK,"AdamK2","FF:::/LT/OSMain/OS.SPZ,AdamK2"$ for where it is included during compiling the kernel. $LK,"AdamK2","FF:::/LT/OSMain/AdamK.APZ,AdamK2"$ for where it is included during boots. $LK,"AddOsMapSymbols","FF:::/LT/OSMain/OSEnd.CPZ,AddOsMapSymbols"$ for where the OSMain symbols are added to the hash tables. */ #define EC_FS 0x011 #define EC_GS 0x012 #define EC_CLI 0x046 #define EC_STI 0x047 #define EC_DISABLE_CACHE 0x048 #define EC_ENABLE_CACHE 0x049 #define EC_WBINVD 0x04A #define EC_INVD 0x04B #define EC_GET_FLAGS 0x04C #define EC_SET_FLAGS 0x04D #define EC_GET_BASE_PTR 0x04E #define EC_SET_BASE_PTR 0x04F #define EC_GET_STACK_PTR 0x050 #define EC_SET_STACK_PTR 0x051 #define EC_SET_RAX 0x052 #define EC_BT 0x053 #define EC_BTS 0x054 #define EC_BTR 0x055 #define EC_BTC 0x056 #define EC_BSF 0x057 #define EC_BSR 0x058 #define EC_INSQUE 0x059 #define EC_INSQUE_REV 0x05A #define EC_REMQUE 0x05B #define EC_STRLEN 0x05C #define EC_MEMCPY 0x05D #define EC_MEMSET 0x05E #define EC_INPD 0x05F #define EC_INPW 0x060 #define EC_INP 0x061 #define EC_OUTPD 0x062 #define EC_OUTPW 0x063 #define EC_OUTP 0x064 #define EC_RDTSC 0x065 #define EC_LBTS 0x081 #define EC_LBTR 0x082 #define EC_LBTC 0x083 #define EC_ABSI8 0x090 #define EC_PREEMPT 0x092 #help_index "Misc" public LTextern SYS_FLAGS U8 sys_flags[1]; public LTextern SYS_BOOT_BASE U4 sys_boot_base; LTextern SYS_BOOT_CODE U4 sys_boot_code; public LTextern SYS_BOOT_HEADER_BASE U4 sys_boot_header_base; LTextern SYS_CUR_FOCUS_TASK TssStruct *sys_cur_focus_task; LTextern SYS_CUR_SCAN_CODE U8 sys_cur_scan_code; public LTextern SYS_PROGRESS1 U8 progress1; public LTextern SYS_PROGRESS2 U8 progress2; public LTextern SYS_PROGRESS3 U8 progress3; public LTextern SYS_PROGRESS4 U8 progress4; #help_index "Graphics" LTextern SYS_TEXTBASE U4 *textbase; #help_index "Bit" #help_file "::/LT/Doc/Bit.TXZ" public LTintern EC_BT BoolU8 Bt(void *bit_field,U8 bit); public LTintern EC_BTS BoolU8 Bts(void *bit_field,U8 bit); public LTintern EC_BTR BoolU8 Btr(void *bit_field,U8 bit); public LTintern EC_BTC BoolU8 Btc(void *bit_field,U8 bit); //Locked for (for multitple CPU's) public LTintern EC_LBTS BoolU8 LBts(void *bit_field,U8 bit); public LTintern EC_LBTR BoolU8 LBtr(void *bit_field,U8 bit); public LTintern EC_LBTC BoolU8 LBtc(void *bit_field,U8 bit); //Scan U8 sized item forward for first set bit. //Return -1 if not found. public LTintern EC_BSF I8 Bsf(U8 bit_field_value); //Scan U8 sized item reverse for first set bit. //Return -1 if not found. public LTintern EC_BSR I8 Bsr(U8 bit_field_value); public LTextern OR_U4_BIT_FIELD void OrU4BitField( void *bit_field,U8 bit,U4 pattern); public LTextern EXTRACT_U4_BIT_FIELD U4 ExtractU4BitField( void *bit_field,U8 bit,U8 size); #help_index "Circular Queue" #help_file "::/LT/Doc/Queue.TXZ" //Insert item into queue after predicessor. public LTintern EC_INSQUE void InsQue(void *entry,void *pred); //Reversed insert into queue. Insert //item into queue before successor. public LTintern EC_INSQUE_REV void InsQueRev(void *entry,void *succ); //Remove item from queue. public LTintern EC_REMQUE void RemQue(void *entry); #help_index "Task" public LTintern EC_PREEMPT BoolU8 Preempt(BoolU4 val); #help_index "Processor/IO Port" public LTintern EC_INP U1 InP(U8 port); public LTintern EC_OUTP void OutP(U8 port, U8 val); public LTintern EC_INPW U8 InPW(U8 port); public LTintern EC_OUTPW void OutPW(U8 port, U8 val); public LTintern EC_INPD U8 InPD(U8 port); public LTintern EC_OUTPD void OutPD(U8 port, U8 val); public LTextern CP_REP_INSB void RepInSB(void *buf,U8 cnt,U8 port); public LTextern CP_REP_INSW void RepInSW(void *buf,U8 cnt,U8 port); public LTextern CP_REP_OUTSB void RepOutSB(void *buf,U8 cnt,U8 port); public LTextern CP_REP_OUTSW void RepOutSW(void *buf,U8 cnt,U8 port); #help_index "Memory" public LTintern EC_MEMCPY void MemCpy(void *dst,void *src,U8 cnt); public LTintern EC_MEMSET void MemSet(void *dst,U8 val,U8 cnt); LTextern SYS_MEM_FREE_LIST MemBlk *mem_free_list; LTextern SYS_MEM_FREE_2MEG_LIST MemBlk *mem_free_2Meg_list; LTextern SYS_FREE_PAGE_HASH MemBlk *free_page_hash[FREE_PAGE_HASH_SIZE]; LTextern SYS_FREE_PAGE_HASH2 MemBlk *free_page_hash2[64]; public LTextern SYS_HEAP_BASE U4 sys_heap_base; public LTextern SYS_HEAP_LIMIT U4 sys_heap_limit; #help_index "Char/Operations" public LTintern EC_STRLEN U8 StrLen(I1 *st); public LTextern CP_STRCMP I8 StrCmp(I1 *st1,I1 *st2); public LTextern CP_STRICMP I8 StrICmp(I1 *st1,I1 *st2); public LTextern CP_STRNCMP I8 StrNCmp(I1 *st1,I1 *st2,U8 n); public LTextern CP_STRNICMP I8 StrNICmp(I1 *st1,I1 *st2,U8 n); public LTextern CP_STRSTR I1 *StrStr(I1 *st,I1 *pattern); public LTextern CP_STRISTR I1 *StrIStr(I1 *st,I1 *pattern); public LTextern CP_STRCPY void StrCpy(I1 *dest,I1 *src); public LTextern CP_STRCAT void StrCat(I1 *dest,I1 *src); #help_index "Processor" public LTextern CP_CPUID void CpuId(U4 rax,RaxRbxRcxRdx *result); public LTextern CP_GETCR0 U8 GetCR0(); public LTextern CP_SETCR0 void SetCR0(U8 d); public LTextern CP_LTR void SetTR(U8 d); public LTextern CP_GETCR3 U8 GetCR3(); public LTextern CP_SETCR3 void SetCR3(U8 d); public LTextern CP_GETCR4 U8 GetCR4(); public LTextern CP_SETCR4 void SetCR4(U8 d); LTextern IRQ_VECTORS U4 sys_irq_vectors[MAXIDT]; //changing these will not change interrupts public LTintern EC_CLI void Cli(); public LTintern EC_STI void Sti(); public LTintern EC_GET_FLAGS U8 GetFlags(); public LTintern EC_SET_FLAGS void SetFlags(U8 d); public LTintern EC_GET_STACK_PTR void *GetStackPtr(); public LTintern EC_SET_STACK_PTR void SetStackPtr(void *d); public LTintern EC_GET_BASE_PTR void *GetBasePtr(); public LTintern EC_SET_BASE_PTR void SetBasePtr(U8 d); LTextern SYS_SEMA_IRQS sema sema_irqs[NUM_IRQ_SEMAS]; LTextern SYS_SEMA_IRQ_BUSY sema sema_irq_busy[NUM_IRQ_SEMAS]; LTextern SYS_FREE_GDT_LIST U4 free_gdt_list; LTextern SYS_GDTTAB GdtTabStruct gdttab[MAXGDT]; #help_index "Processor;MultiCore;Boot" public LTextern CP_HLT void Hlt(); #help_index "Processor/Cache;Memory/Cache;MultiCore/Cache" //Invalidate cache public LTintern EC_INVD void Invd(); //Write back and invalidate cache. public LTintern EC_WBINVD void WbInvd(); public LTintern EC_DISABLE_CACHE void DisableCache(); public LTintern EC_ENABLE_CACHE void EnableCache(); //Flush cache line. public LTextern CP_CLFLUSH void ClFlush(U1 *b); #help_index "MultiCore" #help_file "::/LT/Doc/MultiCore.TXZ" LTextern CP_PUT_GS_BASE void SetGs(CPUStruct *c); LTextern SYS_UNCACHED_MP_CNT U8 *uncached_mp_cnt; public LTextern SYS_MP_CNT U8 mp_cnt; LTextern SYS_TEMP_CPU0_STRUCT CPUStruct sys_temp_cpu0_struct; public LTextern SYS_MP_CPU_STRUCTS CPUStruct *mp_cpu_structs; LTextern RESTORE_CONTEXT void RestoreContext(); public LTintern EC_GS CPUStruct *Gs(); LTextern SYS_SEMAS sema sys_semas[NUM_SYS_SEMAS]; #help_index "Time/CPU Cycles" public LTintern EC_RDTSC U8 GetTimeStamp(); #help_index "Time/Jiffies;Task" LTextern SYS_TIMER U8 sys_timer; LTextern SYS_JIFFIES U8 sys_jiffies; #help_index "Math" public LTintern EC_ABSI8 I8 AbsI8(I8 i); public LTextern CP_FSQRT double Sqrt(double d); public LTextern CP_FSIN double Sin(double d); public LTextern CP_FCOS double Cos(double d); public LTextern CP_FTAN double Tan(double d); public LTextern CP_ARG double Arg(double x,double y); public LTextern CP_FATAN double ATan(double d); public LTextern CP_ROUND double Round(double d); public LTextern CP_TRUNC double Trunc(double d); public LTextern CP_FLOOR double Floor(double d); public LTextern CP_CEILING double Ceiling(double d); public LTextern CP_POW10 double Pow10(double d); public LTextern CP_LOG2 double Log2(double d); public LTextern CP_LOG10 double Log10(double d); public LTextern CP_LN double Ln(double d); public LTextern CP_EXP double Exp(double d); LTextern CP_FLDCW void Fldcw(U2 w); LTextern CP_FCLEX void Fclex(); LTextern CP_FSTCW U2 Fstcw(); LTextern CP_FSTSW U2 Fstsw(); public LTextern FC_1 double one; public LTextern FC_PI double pi; public LTextern FC_PI2 double pi2; public LTextern FC_E double e; //not implemented public LTextern FC_LOG2_10 double log2_10; public LTextern FC_LOG2_E double log2_E; public LTextern FC_LOG10_2 double log10_2; public LTextern FC_LOGE_2 double logE_2; #help_index "Task" public LTextern SWAP_IN_NEXT void SwapInNext(); public LTextern CP_DEACTIVATE_USER TssStruct *DeactivateUser(); public LTextern CP_ACTIVATE_NEXT_USER void ActivateNextUser(); public LTintern EC_FS TssStruct *Fs(); #help_index "Hash" #help_file "::/LT/Doc/Hash.TXZ" public LTextern CP_HASH_STR U8 HashStr(I1 *st); public LTextern CP_FIND_HASH_ENTRY SysHashEntry * FindHashEntry(I1 *st,SysHashTable *table,U8 mask); public LTextern CP_FIND_HASH_BUCKET SysHashEntry ** FindHashBucket(I1 *st,SysHashTable *table); public LTextern CP_ADD_SYS_HASH_ENTRY void AddSysHashEntry(SysHashEntry *temph,SysHashTable *table); public LTextern CP_FIND_EXTERN void *FindExtern(I1 *st); #help_index "Char/Output" public LTextern CRLF void CrLf(); #help_index "Char/BitMaps" public LTextern SYS_ALPHA_BITMAP U1 alpha_bitmap[1]; public LTextern SYS_ALPHA_NUMERIC_BITMAP U1 alpha_numeric_bitmap[1]; public LTextern SYS_DEC_NUMERIC_BITMAP U1 dec_numeric_bitmap[1]; public LTextern SYS_HEX_NUMERIC_BITMAP U1 hex_numeric_bitmap[1]; public LTextern SYS_PRINTABLE_CHARS_BITMAP U1 printable_chars_bitmap[1]; public LTextern SYS_SAFE_DOLLAR_CHARS_BITMAP U1 safe_dollar_chars_bitmap[1]; public LTextern SYS_FILENAME_CHARS_BITMAP U1 filename_chars_bitmap[1]; public LTextern SYS_DISPLAYABLE_CHARS_BITMAP U1 displayable_chars_bitmap[1]; #help_index "Compression" LTextern CP_ARC_DETERMINE_COMPRESSION_TYPE I8 ArcDetermineCompressionType(void *src,U8 size); //This is just an XOR checksum. LTextern CP_ARC_CHECK_SUM U8 ArcCheckSum(U1 *buf,U8 size); LTextern CP_ARC_GET_TABLE_ENTRY void ArcGetTableEntry(ArcCs *c); #help_index "Call" public LTextern CP_CALL U8 Call(void *s); public LTextern CP_INDCALL void CallInd(void *fun_add,...); //This is just an array of pointers //to functions. //See $LK,"Extern Number Definitions","MN:EXT_WIN_TO_TOP"$ public LTextern SYS_EXTERN_TABLE void **ext; public LTextern CP_CALLEXTNUM void CallExtNum(U8 num,...); //Search symbol table for function name //and pass it parameters public LTextern CP_CALLEXTSTR void CallExtStr(I1 *name,...); #help_index ""