927 lines
23 KiB
C
927 lines
23 KiB
C
|
/*++
|
||
|
INTEL CORPORATION PROPRIETARY INFORMATION
|
||
|
|
||
|
This software is supplied under the terms of a license
|
||
|
agreement or nondisclosure agreement with Intel Corporation
|
||
|
and may not be copied or disclosed except in accordance with
|
||
|
the terms of that agreement.
|
||
|
|
||
|
Copyright (c) 1992-1999 Intel Corporation.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
ssc.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
This module is used by the NT device drivers for doing Gambit
|
||
|
Simulation System Calls (SSC). It defines the SSC calls and
|
||
|
the related data structures.
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Ayelet Edrey (aedrey) 1-Jun-1995
|
||
|
|
||
|
Environment:
|
||
|
|
||
|
IA-64 NT running on Gambit
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
#ifndef _SSC_H
|
||
|
#define _SSC_H
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifdef WINNT
|
||
|
# ifdef CDECL
|
||
|
# undef CDECL
|
||
|
# endif
|
||
|
#define CDECL __cdecl
|
||
|
#else
|
||
|
#define CDECL
|
||
|
#endif
|
||
|
|
||
|
#define MAX_SSC_STRING 512
|
||
|
|
||
|
/* NOTE : all pointers are 64 bit addresses to physical memory */
|
||
|
|
||
|
/* Structures and Enums */
|
||
|
typedef unsigned int SSC_HANDLE;
|
||
|
typedef int SSC_BOOL;
|
||
|
typedef void *LARGE_POINTER;
|
||
|
typedef unsigned short GB_U16;
|
||
|
typedef unsigned long GB_U32;
|
||
|
typedef unsigned int U32;
|
||
|
typedef LONGLONG LARGE_RET_VAL;
|
||
|
|
||
|
|
||
|
/* Disk */
|
||
|
#define SSC_ACCESS_READ 0x1 /* for OpenVolume */
|
||
|
#define SSC_ACCESS_WRITE 0x2 /* for OpenVolume */
|
||
|
|
||
|
#define SSC_MAX_VOLUMES 128
|
||
|
#define SSC_MAX_VOLUME_NAME 512
|
||
|
#define SSC_IO_BLOCK_SIZE 512
|
||
|
|
||
|
#define SSC_INVALID_HANDLE SSC_MAX_VOLUMES
|
||
|
|
||
|
/* Disk Request */
|
||
|
typedef struct _SSC_DISK_REQUEST {
|
||
|
LARGE_POINTER DiskBufferAddress;
|
||
|
GB_U32 DiskByteCount;
|
||
|
GB_U32 PaddingWord;
|
||
|
} *PSSC_DISK_REQUEST, SSC_DISK_REQUEST;
|
||
|
|
||
|
/* Disk Completion */
|
||
|
typedef struct _SSC_DISK_COMPLETION {
|
||
|
SSC_HANDLE VolumeHandle;
|
||
|
GB_U32 XferBytes;
|
||
|
} *PSSC_DISK_COMPLETION, SSC_DISK_COMPLETION;
|
||
|
|
||
|
/* interrupt */
|
||
|
typedef enum {
|
||
|
SSC_INTERRUPT_NONE=0,
|
||
|
SSC_DISK_INTERRUPT,
|
||
|
SSC_MOUSE_INTERRUPT,
|
||
|
SSC_KEYBOARD_INTERRUPT,
|
||
|
SSC_CLOCK_TIMER_INTERRUPT,
|
||
|
SSC_PROFILE_TIMER_INTERRUPT,
|
||
|
SSC_APC_INTERRUPT,
|
||
|
SSC_DPC_INTERRUPT,
|
||
|
SSC_SERIAL_INTERRUPT,
|
||
|
SSC_PERFMON_INTERRUPT,
|
||
|
SSC_INTERRUPT_LAST
|
||
|
} SSC_INTERRUPT;
|
||
|
|
||
|
/* timer */
|
||
|
typedef struct _SSC_TIME_FIELDS {
|
||
|
GB_U32 Year;
|
||
|
GB_U32 Month;
|
||
|
GB_U32 Day;
|
||
|
GB_U32 Hour;
|
||
|
GB_U32 Minute;
|
||
|
GB_U32 Second;
|
||
|
GB_U32 Milliseconds;
|
||
|
GB_U32 WeekDay;
|
||
|
} SSC_TIME_FIELDS, *PSSC_TIME_FIELDS;
|
||
|
|
||
|
/* TAL VM */
|
||
|
typedef struct _SSC_TAL_VM_INFO {
|
||
|
LARGE_INTEGER PageSize;
|
||
|
LARGE_INTEGER NumberOfDataTr;
|
||
|
LARGE_INTEGER NumberOfInstructionTr;
|
||
|
LARGE_INTEGER NumberOfDataTc;
|
||
|
LARGE_INTEGER NumberOfInstructionTc;
|
||
|
LARGE_INTEGER UnifiedTlb;
|
||
|
LARGE_INTEGER ProtectionKeySize;
|
||
|
LARGE_INTEGER RegionIdSize;
|
||
|
LARGE_INTEGER HardwareMissHandler;
|
||
|
LARGE_INTEGER NumberOfProtectionId;
|
||
|
LARGE_INTEGER VirtualAddressSize;
|
||
|
LARGE_INTEGER PhysicalAddressSize;
|
||
|
} SSC_TAL_VM_INFO,*PSSC_TAL_VM_INFO;
|
||
|
|
||
|
/* TAL CACHE SUMMARY */
|
||
|
typedef struct _SSC_TAL_CACHE_SUMMARY {
|
||
|
LARGE_INTEGER CacheLevel;
|
||
|
LARGE_INTEGER UniqueCache;
|
||
|
LARGE_INTEGER Snoop;
|
||
|
} SSC_TAL_CACHE_SUMMARY,*PSSC_TAL_CACHE_SUMMARY;
|
||
|
|
||
|
/* TAL CACHE INFO */
|
||
|
typedef struct _SSC_TAL_CACHE {
|
||
|
LARGE_INTEGER LineSize;
|
||
|
LARGE_INTEGER Stride;
|
||
|
LARGE_INTEGER AliasBoundary;
|
||
|
LARGE_INTEGER Hint;
|
||
|
LARGE_INTEGER MemoryAttribute;
|
||
|
LARGE_INTEGER CacheSize;
|
||
|
LARGE_INTEGER LoadPenalty;
|
||
|
LARGE_INTEGER StorePenalty;
|
||
|
LARGE_INTEGER Associativity;
|
||
|
LARGE_INTEGER Unified;
|
||
|
} SSC_TAL_CACHE;
|
||
|
|
||
|
typedef struct _SSC_TAL_CACHE_INFO {
|
||
|
SSC_TAL_CACHE DataLevel0;
|
||
|
SSC_TAL_CACHE DataLevel1;
|
||
|
SSC_TAL_CACHE DataLevel2;
|
||
|
SSC_TAL_CACHE InstLevel0;
|
||
|
SSC_TAL_CACHE InstLevel1;
|
||
|
SSC_TAL_CACHE InstLevel2;
|
||
|
} SSC_TAL_CACHE_INFO, *PSSC_CACHE_INFO;
|
||
|
|
||
|
typedef LARGE_INTEGER SSC_TAL_MEM_ATTRIB;
|
||
|
typedef LARGE_POINTER SSC_TAL_FIXED_ADDR;
|
||
|
|
||
|
/* TAL PROC ID */
|
||
|
typedef struct _SSC_TAL_PROC_ID {
|
||
|
LARGE_INTEGER ArchitectureRevision;
|
||
|
LARGE_INTEGER ProcessorModel;
|
||
|
LARGE_INTEGER ProcessorRevision;
|
||
|
LARGE_INTEGER Gr;
|
||
|
char Vendor[32];
|
||
|
char Name[32];
|
||
|
} SSC_TAL_PROC_ID, *PSSC_TAL_PROC_ID;
|
||
|
|
||
|
/* TAL DEBUG */
|
||
|
typedef struct _SSC_TAL_DEBUG_INFO {
|
||
|
LARGE_INTEGER IRegister;
|
||
|
LARGE_INTEGER DRegister;
|
||
|
} SSC_TAL_DEBUG_INFO, *PSSC_TAL_DEBUG_INFO;
|
||
|
|
||
|
/* Config TAL */
|
||
|
typedef struct _SSC_TAL {
|
||
|
SSC_TAL_VM_INFO VmInfo;
|
||
|
SSC_TAL_CACHE_SUMMARY CacheSummary;
|
||
|
SSC_TAL_CACHE_INFO CacheInfo;
|
||
|
SSC_TAL_MEM_ATTRIB MemoryAttrib;
|
||
|
SSC_TAL_FIXED_ADDR FixedAddress;
|
||
|
SSC_TAL_PROC_ID ProcessorId;
|
||
|
SSC_TAL_DEBUG_INFO DebugInfo;
|
||
|
} SSC_TAL, *PSSC_TAL;
|
||
|
|
||
|
/* Config Mem */
|
||
|
typedef enum {
|
||
|
SSC_MEM_TYPE_RAM = 0,
|
||
|
SSC_MEM_TYPE_ROM,
|
||
|
SSC_MEM_TYPE_IO
|
||
|
} SSC_MEM_TYPE, *PSSC_MEM_TYPE;
|
||
|
|
||
|
typedef struct _SSC_MEM {
|
||
|
LARGE_POINTER StartAddress;
|
||
|
LARGE_INTEGER Size;
|
||
|
SSC_MEM_TYPE Type;
|
||
|
char InitValue;
|
||
|
char PaddingByte1;
|
||
|
char PaddingByte2;
|
||
|
char PaddingByte3;
|
||
|
} SSC_MEM, *PSSC_MEM;
|
||
|
|
||
|
/* VGA size */
|
||
|
typedef enum {
|
||
|
SSC_SCREEN_SIZE_NONE = 0,
|
||
|
SSC_SCREEN_SIZE_800x600,
|
||
|
SSC_SCREEN_SIZE_640x480,
|
||
|
SSC_SCREEN_SIZE_25x80, /* text mode */
|
||
|
SSC_SCREEN_SIZE_LAST
|
||
|
} SSC_SCREEN_SIZE;
|
||
|
|
||
|
/* Keyboard */
|
||
|
#define SSC_KBD_GET_SUCCESS 1
|
||
|
#define SSC_KBD_GET_NODATA 0
|
||
|
#define SSC_KBD_EXTENDED_KEY_VAL 0xE000
|
||
|
#define SSC_KBD_UP_KEY_VAL 0x80
|
||
|
|
||
|
typedef struct _SSC_KBD_LOCK {
|
||
|
U32 KbdNumLock:1 , /* Num lock is ON */
|
||
|
KbdCapsLock:1, /* Caps lock is ON */
|
||
|
KbdScrollLock:1, /* Scroll lock is ON */
|
||
|
KbdFillers:29;
|
||
|
} SSC_KBD_LOCK;
|
||
|
|
||
|
/* Mouse */
|
||
|
typedef U32 SSC_MOUSEBUTTONS;
|
||
|
|
||
|
/* SscMouseGetKeyEvent returns this structure. the prototype of the
|
||
|
function returns int instead, for compilation reasons. */
|
||
|
typedef struct _SSC_MOUSEDATA {
|
||
|
U32 MouseXLocation : 12,
|
||
|
MouseYLocation : 12,
|
||
|
MouseButtonLeft : 1,
|
||
|
MouseButtonRight : 1,
|
||
|
MouseButtonMiddle : 1,
|
||
|
MouseValid :1,
|
||
|
MouseFillers : 4;
|
||
|
} SSC_MOUSEDATA;
|
||
|
|
||
|
|
||
|
/* Kernel debug */
|
||
|
|
||
|
#define SSC_KD_SUCCESS 0
|
||
|
#define SSC_KD_ERROR -1
|
||
|
|
||
|
typedef struct _SSC_DEBUG_PARAMETERS {
|
||
|
U32 CommunicationPort;
|
||
|
U32 BaudRate;
|
||
|
} SSC_DEBUG_PARAMETERS, *PSSC_DEBUG_PARAMETERS;
|
||
|
|
||
|
#define MAX_SSC_MEM 50
|
||
|
#define MAX_SSC_PARAMS 10
|
||
|
|
||
|
/* Network */
|
||
|
|
||
|
#define SSC_SERIAL_SUCCESS 1
|
||
|
#define SSC_SERIAL_FAILED 0
|
||
|
#define SSC_SERIAL_GET_SUCCESS 1 /* data was returned, there may be more data */
|
||
|
#define SSC_SERIAL_GET_NODATA 0
|
||
|
#define SSC_SERIAL_MAX_FIFO_SIZE 512
|
||
|
|
||
|
typedef struct _SSC_INTERRUPT_INFO {
|
||
|
SSC_HANDLE SerialHandle;
|
||
|
GB_U32 CommEvent;
|
||
|
GB_U32 ModemControl;
|
||
|
GB_U32 ErrorFlags;
|
||
|
U32 NumberOfChars;
|
||
|
} *PSSC_INTERRUPT_INFO, SSC_INTERRUPT_INFO;
|
||
|
|
||
|
/* CommEvent decodings */
|
||
|
#define SSC_EV_RXCHAR 0x0001 /* A character was received and placed
|
||
|
in the input buffer */
|
||
|
#define SSC_EV_RXFLAG 0x0002 /* The event character was received and placed
|
||
|
in the input buffer */
|
||
|
#define SSC_EV_TXEMPTY 0x0004 /* The last character in the output buffer
|
||
|
was sent */
|
||
|
#define SSC_EV_CTS 0x0008 /* The CTS (clear-to-send) signal changed state */
|
||
|
#define SSC_EV_DSR 0x0010 /* The DSR (data-set-ready) signal changed */
|
||
|
#define SSC_EV_RLSD 0x0020 /* (receive-line-signal-detect) signal changed */
|
||
|
#define SSC_EV_BREAK 0x0040 /* A break was detected on input */
|
||
|
#define SSC_EV_ERR 0x0080 /* A line-status error occurred */
|
||
|
#define SSC_EV_RING 0x0100 /* A ring indicator was detected */
|
||
|
|
||
|
/* Modem control is one of the following */
|
||
|
|
||
|
#define SSC_MS_CTS_ON 0x0010 /* The CTS (clear-to-send) signal is on. */
|
||
|
#define SSC_MS_DSR_ON 0x0020 /* The DSR (data-set-ready) signal is on.*/
|
||
|
#define SSC_MS_RING_ON 0x0040 /* The ring indicator signal is on. */
|
||
|
#define SSC_MS_RLSD_ON 0x0080 /* The RLSD (receive-line-signal-detect)
|
||
|
signal is on. */
|
||
|
/* Error Codes */
|
||
|
|
||
|
#define SSC_CE_RXOVER 0x0001 /* An input buffer overflow has occurred.
|
||
|
There is either no room in the input buffer,
|
||
|
or a character was received after the
|
||
|
end-of-file (EOF) character. */
|
||
|
#define SSC_CE_OVERRUN 0x0002 /* A character-buffer overrun has occurred.
|
||
|
The next character is lost. */
|
||
|
#define SSC_CE_RXPARITY 0x0004 /* The hardware detected a parity error */
|
||
|
#define SSC_CE_FRAME 0x0008 /* The hardware detected a framing error. */
|
||
|
#define SSC_CE_BREAK 0x0010 /* The hardware detected a break condition. */
|
||
|
#define SSC_CE_TXFULL 0x0100 /* The application tried to transmit a character,
|
||
|
but the output buffer was full. */
|
||
|
#define SSC_CE_IOE 0x0400 /* An I/O error occurred during communications
|
||
|
with the device. */
|
||
|
#define SSC_CE_MODE 0x8000 /* The requested mode is not supported,
|
||
|
or the hFile parameter is invalid. If
|
||
|
this value is specified, it is the
|
||
|
only valid error. */
|
||
|
|
||
|
/* Config */
|
||
|
typedef struct _SSC_CONFIG {
|
||
|
SSC_TAL Tal;
|
||
|
SSC_MEM Memory[MAX_SSC_MEM];
|
||
|
LARGE_INTEGER Params[MAX_SSC_PARAMS];
|
||
|
} SSC_CONFIG, *PSSC_CONFIG;
|
||
|
|
||
|
typedef struct _SSC_IMAGE_INFO {
|
||
|
LARGE_POINTER LoadBase; /* base address for image load */
|
||
|
GB_U32 ImageSize;
|
||
|
GB_U32 ImageType;
|
||
|
LARGE_INTEGER ProcessID;
|
||
|
GB_U32 LoadCount;
|
||
|
} SSC_IMAGE_INFO, *PSSC_IMAGE_INFO;
|
||
|
|
||
|
|
||
|
/* define types in Unix like style */
|
||
|
typedef SSC_CONFIG Ssc_config_t;
|
||
|
typedef SSC_TAL_DEBUG_INFO Ssc_tal_debug_info_t;
|
||
|
typedef SSC_TAL Ssc_tal_t;
|
||
|
typedef SSC_MEM Ssc_mem_t;
|
||
|
typedef SSC_MEM_TYPE Ssc_mem_type_t;
|
||
|
typedef SSC_TAL_PROC_ID Ssc_tal_proc_id_t;
|
||
|
typedef SSC_TAL_MEM_ATTRIB Ssc_tal_mem_attrib_t;
|
||
|
typedef SSC_TAL_FIXED_ADDR Ssc_tal_fixed_addr_t;
|
||
|
typedef SSC_TAL_CACHE Ssc_tal_cache_t;
|
||
|
typedef SSC_TAL_CACHE_SUMMARY Ssc_tal_cache_summary_t;
|
||
|
typedef SSC_TAL_CACHE_INFO Ssc_tal_cache_info_t;
|
||
|
typedef SSC_TAL_VM_INFO Ssc_tal_vm_info_t;
|
||
|
typedef SSC_TIME_FIELDS Ssc_time_fields_t;
|
||
|
typedef SSC_DISK_COMPLETION Ssc_disk_completion_t;
|
||
|
typedef SSC_DISK_REQUEST Ssc_disk_request_t;
|
||
|
typedef SSC_INTERRUPT Ssc_interrupt_t;
|
||
|
typedef SSC_SCREEN_SIZE Ssc_screen_size_t;
|
||
|
typedef SSC_KBD_LOCK Ssc_kbd_lock_t;
|
||
|
typedef SSC_MOUSEBUTTONS Ssc_mousebuttons_t;
|
||
|
typedef SSC_MOUSEDATA Ssc_mousedata_t;
|
||
|
typedef SSC_DEBUG_PARAMETERS Ssc_debug_parameters_t;
|
||
|
typedef SSC_INTERRUPT_INFO Ssc_interrupt_info_t;
|
||
|
typedef SSC_IMAGE_INFO Ssc_image_info_t;
|
||
|
|
||
|
/* performance SSC return values */
|
||
|
#define SSC_SUCCESS 0
|
||
|
#define SSC_VIRTUAL_ADDRESS_NOT_FOUND 1
|
||
|
#define SSC_ILLEGAL_NAME 2
|
||
|
#define SSC_ILLEGAL_HANDLE 3
|
||
|
#define SSC_PERMISSION_DENIED 4
|
||
|
#define SSC_VIRTUAL_ADDRESS_NOT_LOCKED 5
|
||
|
|
||
|
#define GE_SSC_ERR_FIRST 6
|
||
|
#define GE_SSC_ERR_BUFF_TOO_SHORT 6 /* supplied buffer is too short for value */
|
||
|
#define GE_SSC_ERR_INVALID_HNDL 7 /* invalid object handl supplied */
|
||
|
#define GE_SSC_ERR_INVALID_TOOL 8 /* GE internal error */
|
||
|
#define GE_SSC_ERR_INVALID_GE_STAGE 9 /* GE internal error */
|
||
|
#define GE_SSC_ERR_NO_INIT 10 /* GE internal error */
|
||
|
#define GE_SSC_ERR_NOT_OWNER 11 /* object can not be set */
|
||
|
#define GE_SSC_ERR_NOT_ITEM 12 /* operation can be done only on an item object (not a family of objects) */
|
||
|
#define GE_SSC_ERR_OBJ_CLOSED 13 /* object is not available for use due to configuration */
|
||
|
#define GE_SSC_ERR_OBJ_NOT_OPENED 14 /* object is not available for use */
|
||
|
#define GE_SSC_ERR_OBJ_NOT_AVAILABLE 15 /* object not required for use in this session */
|
||
|
#define GE_SSC_ERR_OBJ_NOT_ACTIVE 16 /* object should be active befor used for this operation */
|
||
|
#define GE_SSC_ERR_OBJ_UNDER_TREATMENT 17 /* object is in use at the moment */
|
||
|
#define GE_SSC_ERR_WRONG_CLASS 18 /* specified class is invalid for this operation */
|
||
|
#define GE_SSC_ERR_WRONG_SIZE 19 /* specified wrong size */
|
||
|
#define GE_SSC_ERR_NO_OWNER 20 /* object is not available for use */
|
||
|
#define GE_SSC_ERR_OWNER_FAILURE 21 /* owner failed to handle the operation */
|
||
|
#define GE_SSC_ERR_UNKNOWN 22 /* unrecognized error number detected */
|
||
|
#define GE_SSC_ERR_LAST 22
|
||
|
|
||
|
|
||
|
/* SSC Functions */
|
||
|
|
||
|
/* Disk */
|
||
|
SSC_HANDLE CDECL
|
||
|
SscDiskOpenVolume(
|
||
|
LARGE_POINTER VolumeName,
|
||
|
GB_U32 AccessMode
|
||
|
);
|
||
|
|
||
|
SSC_BOOL CDECL
|
||
|
SscDiskCloseVolume(
|
||
|
SSC_HANDLE VolumeHandle
|
||
|
);
|
||
|
|
||
|
int CDECL
|
||
|
SscDiskReadVolume(
|
||
|
SSC_HANDLE VolumeHandle,
|
||
|
GB_U32 NReq,
|
||
|
LARGE_POINTER RequestPtr,
|
||
|
LARGE_INTEGER VolumeOffset
|
||
|
);
|
||
|
|
||
|
int CDECL
|
||
|
SscDiskWriteVolume(
|
||
|
SSC_HANDLE VolumeHandle,
|
||
|
GB_U32 NReq,
|
||
|
LARGE_POINTER RequestPtr,
|
||
|
LARGE_INTEGER VolumeOffset
|
||
|
);
|
||
|
|
||
|
SSC_BOOL CDECL
|
||
|
SscDiskGetCompletion(
|
||
|
LARGE_POINTER DiskCompletionPtr
|
||
|
);
|
||
|
|
||
|
SSC_BOOL CDECL
|
||
|
SscDiskWaitIoCompletion(
|
||
|
LARGE_POINTER DiskCompletionPtr
|
||
|
);
|
||
|
|
||
|
|
||
|
/* the file SSC_HANDLE in low word, error code in high word */
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscOpenHostFile (LARGE_POINTER HostPathNameAddress
|
||
|
);
|
||
|
|
||
|
/* the file SSC_HANDLE in low word, error code in high word.
|
||
|
Does not create a new file if a host file does not exist. */
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscOpenHostFileNoCreate (LARGE_POINTER HostPathNameAddress
|
||
|
);
|
||
|
|
||
|
U32 CDECL
|
||
|
SscWriteHostFile(
|
||
|
SSC_HANDLE SscFileHandle,
|
||
|
LARGE_POINTER TransferBufferAddress,
|
||
|
LARGE_POINTER TransferBufferSizeAddress
|
||
|
);
|
||
|
|
||
|
U32 CDECL
|
||
|
SscReadHostFile(
|
||
|
SSC_HANDLE SscFileHandle,
|
||
|
LARGE_POINTER TransferBufferAddress,
|
||
|
LARGE_POINTER TransferBufferSizeAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
void CDECL
|
||
|
SscCloseHostFile(SSC_HANDLE HostFileHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
/* Kernel debug */
|
||
|
U32 CDECL
|
||
|
SscKdInitialize(
|
||
|
LARGE_POINTER DebugParameters,
|
||
|
SSC_BOOL Initialize
|
||
|
);
|
||
|
|
||
|
U32 CDECL
|
||
|
SscKdPortGetByte(
|
||
|
LARGE_POINTER InputPtr
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscKdPortPutByte(
|
||
|
unsigned char Output
|
||
|
);
|
||
|
|
||
|
/* Video */
|
||
|
void CDECL
|
||
|
SscDisplayString(
|
||
|
LARGE_POINTER CharacterString
|
||
|
);
|
||
|
|
||
|
U32 CDECL
|
||
|
SscVideoSetPalette (
|
||
|
U32 iStart,
|
||
|
U32 cEntries,
|
||
|
LARGE_POINTER lppe
|
||
|
);
|
||
|
|
||
|
/* Keyboard */
|
||
|
int CDECL
|
||
|
SscKbdSynchronizeState(
|
||
|
SSC_KBD_LOCK KbdLock
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscKbdGetKeyCode(
|
||
|
LARGE_POINTER KeyCodeAddress
|
||
|
);
|
||
|
|
||
|
/* Mouse */
|
||
|
SSC_MOUSEBUTTONS CDECL
|
||
|
SscMouseGetButtons();
|
||
|
|
||
|
int CDECL
|
||
|
SscMouseGetKeyEvent();
|
||
|
|
||
|
/* Network */
|
||
|
|
||
|
SSC_HANDLE CDECL
|
||
|
SscSerialOpen(
|
||
|
GB_U32 SerialPortID
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscSerialGetInterruptInfo(
|
||
|
LARGE_POINTER SerialInterruptInfoPtr,
|
||
|
LARGE_POINTER SerialMessegePtr
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscSerialWriteChar(
|
||
|
SSC_HANDLE SerialHandle,
|
||
|
LARGE_POINTER SerialCharPtr,
|
||
|
GB_U32 NumChars
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscSerialClose(
|
||
|
SSC_HANDLE SerialHandle
|
||
|
);
|
||
|
|
||
|
|
||
|
/* Debug */
|
||
|
void CDECL
|
||
|
SscDbgPrintf(
|
||
|
LARGE_POINTER CharacterString
|
||
|
);
|
||
|
|
||
|
/* Interrupt */
|
||
|
void CDECL
|
||
|
SscConnectInterrupt(
|
||
|
SSC_INTERRUPT InterruptSource,
|
||
|
GB_U32 Vector
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscGenerateInterrupt(
|
||
|
SSC_INTERRUPT InterruptSource
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscSetPeriodicInterruptInterval(
|
||
|
GB_U32 InterruptSource,
|
||
|
GB_U32 IntervalInNanoSeconds
|
||
|
);
|
||
|
|
||
|
/* TAL */
|
||
|
void CDECL
|
||
|
SscTalInitTC();
|
||
|
|
||
|
void CDECL
|
||
|
SscTalHalt();
|
||
|
|
||
|
void CDECL
|
||
|
SscGetConfig(
|
||
|
LARGE_POINTER ConfigInfoPtr
|
||
|
);
|
||
|
|
||
|
/* Video */
|
||
|
void CDECL
|
||
|
SscVideoSetMode(
|
||
|
SSC_SCREEN_SIZE ScreenSize
|
||
|
);
|
||
|
|
||
|
/* Performance */
|
||
|
|
||
|
void CDECL
|
||
|
SscCreateProcess(
|
||
|
U32 ProcessID,
|
||
|
U32 EProcess
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscCreateProcess64(
|
||
|
LARGE_INTEGER ProcessID,
|
||
|
LARGE_POINTER EProcess
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscCreateThread(
|
||
|
U32 ProcessID,
|
||
|
U32 ThreadID,
|
||
|
U32 EThread
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscCreateThread64(
|
||
|
LARGE_INTEGER ProcessID,
|
||
|
LARGE_INTEGER ThreadID,
|
||
|
LARGE_POINTER EThread
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscSwitchProcess64(
|
||
|
LARGE_INTEGER NewProcessID,
|
||
|
LARGE_POINTER NewEProcess
|
||
|
);
|
||
|
void CDECL
|
||
|
SscSwitchThread(
|
||
|
U32 NewThreadID,
|
||
|
U32 NewEThread
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscSwitchThread64(
|
||
|
LARGE_INTEGER NewThreadID,
|
||
|
LARGE_POINTER NewEThread
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscDeleteProcess(
|
||
|
U32 ProcessID
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscDeleteProcess64(
|
||
|
LARGE_INTEGER ProcessID
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscDeleteThread(
|
||
|
U32 ThreadID
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscDeleteThread64(
|
||
|
LARGE_INTEGER ThreadID
|
||
|
);
|
||
|
|
||
|
/* image loading/unloading functions */
|
||
|
void
|
||
|
SscLoadImage(LARGE_POINTER FullPathName,
|
||
|
U32 LoadBase,
|
||
|
U32 ImageSize,
|
||
|
U32 ImageType,
|
||
|
U32 ProcessID,
|
||
|
U32 LoadCount);
|
||
|
|
||
|
void
|
||
|
SscUnloadImage(U32 LoadBase,
|
||
|
U32 ProcessID,
|
||
|
U32 LoadCount);
|
||
|
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscLoadImage64(
|
||
|
LARGE_POINTER FullPathNamePhysicalAddress,
|
||
|
LARGE_POINTER ImageInfoPhysicalAddress
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscUnloadImage64(
|
||
|
LARGE_POINTER FullPathNamePhysicalAddress,
|
||
|
LARGE_POINTER ImageInfoPhysicalAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
/* Performance Counter handoff call */
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfCounterAddress(
|
||
|
LARGE_POINTER CounterNamePhysicalAddress,
|
||
|
LARGE_POINTER CounterPhysicalAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
/* Trace Generation Control */
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfForm(
|
||
|
U32 SwitchMode,
|
||
|
LARGE_POINTER FormNamePhysicalAddress
|
||
|
);
|
||
|
|
||
|
|
||
|
/* Generating and dispatching a send event.
|
||
|
i.e. an application can put something in the trace pipe */
|
||
|
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscPerfEventHandle(
|
||
|
LARGE_POINTER EventNamePhysicalAddress
|
||
|
);
|
||
|
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscPerfHandleApp(
|
||
|
LARGE_POINTER EventNameAddress
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfFormActivate(
|
||
|
LARGE_POINTER FormName
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfFormDeActivate(
|
||
|
LARGE_POINTER FormName
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfSendEvent(
|
||
|
U32 Handle
|
||
|
);
|
||
|
|
||
|
/* Simulated code access to data items in the Gambit Environment */
|
||
|
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscPerfCounterHandle(
|
||
|
LARGE_POINTER DataItemNamePhysicalAddress
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfSetCounter32(
|
||
|
U32 Handle,
|
||
|
U32 Value
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfGetNotifier32(
|
||
|
U32 Handle
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfSetNotifier32(
|
||
|
U32 Handle,
|
||
|
U32 Value
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfSetCounter64(
|
||
|
U32 Handle,
|
||
|
LARGE_INTEGER Value
|
||
|
);
|
||
|
|
||
|
GB_U32 CDECL
|
||
|
SscPerfSetCounterStr(
|
||
|
U32 Handle,
|
||
|
LARGE_POINTER StringValuePhysicalAddress
|
||
|
);
|
||
|
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscPerfGetCounter32(
|
||
|
U32 Handle
|
||
|
);
|
||
|
|
||
|
LARGE_RET_VAL CDECL
|
||
|
SscPerfGetCounter64(
|
||
|
U32 Handle
|
||
|
);
|
||
|
|
||
|
/* Misc. */
|
||
|
void CDECL
|
||
|
SscTraceUserInfo(
|
||
|
GB_U32 Mark
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscMakeBeep(
|
||
|
GB_U32 Frequency
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscQueryRealTimeClock(
|
||
|
LARGE_POINTER TimeFieldsPtr
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscExit(
|
||
|
int ExitCode
|
||
|
);
|
||
|
|
||
|
/* KDI */
|
||
|
|
||
|
#ifdef SSC_KDI
|
||
|
/* GENERAL KDI INTERFACE to CALL any function in kernel */
|
||
|
typedef struct kdi_jmptable {
|
||
|
int KdiMagic; /* Some known magic value */
|
||
|
int KdiVersion; /* Some version value */
|
||
|
LARGE_INTEGER *KdiActive; /* for internal OS use */
|
||
|
LARGE_INTEGER *KeiEnabled; /* kdi can be used now */
|
||
|
LARGE_POINTER *KdiBuffer; /* pointer to buffer area of */
|
||
|
/* size 4096 bytes */
|
||
|
LARGE_POINTER (*KdiCallFunc)(); /* function to call func */
|
||
|
LARGE_POINTER *KdiReserved[3]; /* reserved area */
|
||
|
|
||
|
/* FUNCTIONS EXPORTED VIA KDI */
|
||
|
|
||
|
LARGE_POINTER (*KdiMemoryRead)(); /* function for mem read */
|
||
|
LARGE_POINTER (*KdiMemoryWrite)(); /* function for mem write */
|
||
|
LARGE_POINTER (*KdiCopy)(); /* function for mem read/write */
|
||
|
LARGE_POINTER (*KdiBootInfo)(); /* function to provide call back
|
||
|
info */
|
||
|
LARGE_POINTER (*KdiVirtualToPhysical)(); /* virtual -> physical */
|
||
|
LARGE_POINTER (*KdiPhysicalToVirtual)(); /* physical -> virtual */
|
||
|
LARGE_POINTER (*KdiMapUser)(); /* function to map user */
|
||
|
LARGE_POINTER (*KdiUnmapUser)(); /* function to unmap user */
|
||
|
LARGE_POINTER (*KdiFiller[25])(); /* fillers */
|
||
|
} kdi_jmptable_t;
|
||
|
|
||
|
/* trap to the debugger with value to indicate an internal reason
|
||
|
the value is passed to gb_t.opt.info.kdi */
|
||
|
int CDECL
|
||
|
SscTrap(
|
||
|
int Value
|
||
|
);
|
||
|
|
||
|
typedef enum {
|
||
|
SSC_KDI_STATUS_OK = 0, /* KDI or KDI call is OK */
|
||
|
SSC_KDI_STATUS_DISABLED, /* KDI not available right now */
|
||
|
SSC_KDI_STATUS_BUSY, /* KDI already in use */
|
||
|
SSC_KDI_STATUS_FAILED /* KDI call failed */
|
||
|
} SSC_kdi_status_t;
|
||
|
|
||
|
/* return from a previous call of gambit to the kernel k_callf function
|
||
|
return the return value of the function in ret_val and a status in
|
||
|
status */
|
||
|
int CDECL
|
||
|
SscReturn(
|
||
|
int ReturnValue,
|
||
|
Ssc_kdi_status_t Status
|
||
|
);
|
||
|
|
||
|
#endif SSC_KDI
|
||
|
|
||
|
/* Statistics */
|
||
|
|
||
|
/* Instruction Counter Functions */
|
||
|
|
||
|
|
||
|
U32 CDECL
|
||
|
SscIcountGet(
|
||
|
void
|
||
|
);
|
||
|
|
||
|
/* Instruction Mix Collection */
|
||
|
typedef enum {
|
||
|
SSC_COLLECT_START,
|
||
|
SSC_COLLECT_STOP
|
||
|
} SSC_imix_index_t;
|
||
|
|
||
|
void CDECL
|
||
|
SscInstrMixCollect(
|
||
|
SSC_imix_index_t Index
|
||
|
);
|
||
|
|
||
|
|
||
|
typedef enum {
|
||
|
Enable=0,
|
||
|
Disable=1
|
||
|
} Ssc_event_enable_t;
|
||
|
|
||
|
/* CPROF requests */
|
||
|
typedef enum {
|
||
|
SSC_CPROF_NONE = 0,
|
||
|
SSC_CPROF_ON,
|
||
|
SSC_CPROF_OFF,
|
||
|
SSC_CPROF_RESET,
|
||
|
SSC_CPROF_CLEAR,
|
||
|
SSC_CPROF_PRINT
|
||
|
} SSC_cprof_request;
|
||
|
|
||
|
/* GEMSTONE requests */
|
||
|
typedef enum {
|
||
|
SSC_GEMSTONE_NONE = 0,
|
||
|
SSC_GEMSTONE_START,
|
||
|
SSC_GEMSTONE_ON,
|
||
|
SSC_GEMSTONE_OFF
|
||
|
} SSC_gemstone_request;
|
||
|
|
||
|
/* MP specific */
|
||
|
|
||
|
/* Set OS_RENDEZ address */
|
||
|
void CDECL
|
||
|
SscSetOSRendez(
|
||
|
LARGE_POINTER OsRendezEntryPoint
|
||
|
);
|
||
|
|
||
|
/* MP interrupt association */
|
||
|
void CDECL
|
||
|
SscConnectInterruptEx(
|
||
|
SSC_INTERRUPT InterruptSource,
|
||
|
GB_U32 Vector,
|
||
|
GB_U16 LocalID
|
||
|
);
|
||
|
|
||
|
/* Get number of CPUs in the MP system */
|
||
|
GB_U32 CDECL
|
||
|
SscGetNumberOfCPUs(
|
||
|
void
|
||
|
);
|
||
|
|
||
|
/* Get LIDs of CPUs in the MP system */
|
||
|
void CDECL
|
||
|
SscGetLIDs(
|
||
|
LARGE_POINTER LIDs0,
|
||
|
LARGE_POINTER LIDs1,
|
||
|
LARGE_POINTER LIDs2,
|
||
|
LARGE_POINTER LIDs3
|
||
|
);
|
||
|
|
||
|
void CDECL
|
||
|
SscPlatformAssociateInterrupt(
|
||
|
LARGE_POINTER VirtualAddr,
|
||
|
GB_U32 Device,
|
||
|
GB_U32 Vector);
|
||
|
|
||
|
void CDECL
|
||
|
SscPlatformMemSync(
|
||
|
LARGE_POINTER PhysicalAddress, /* Physical address of the block */
|
||
|
GB_U32 Size, /* size of the block */
|
||
|
GB_U32 Operation); /* 0 = Read, 1 = Write */
|
||
|
|
||
|
void CDECL
|
||
|
SscDevMemSync(
|
||
|
LARGE_POINTER PhysicalPageAddress /* Physical address of the page written by device */
|
||
|
);
|
||
|
|
||
|
#endif /* _SSC_H */
|