**	sysmon.i
**
**      $Filename: sysmon.i $
**      $Revision: 1.15 $
**      $Date: 2000/06/27 19:57:04 $
**
*******************************************************************************
**	definition of sysmon.library base and internal structures (version 1.15)
*******************************************************************************
**
**	Copyright (c) 1995-2000 by Etienne Vogt.
**

	IFND	SYSMON_I
SYSMON_I	SET	1

	IFND	EXEC_LIBRARIES_I
	INCLUDE	"exec/libraries.i"
	ENDC

	IFND	EXEC_SEMAPHORES_I
	INCLUDE	"exec/semaphores.i"
	ENDC

	IFND	EXEC_MEMORY_I
	INCLUDE	"exec/memory.i"
	ENDC

	IFND	DEVICES_TIMER_I
	INCLUDE	"devices/timer.i"
	ENDC

	IFND	DOS_DATETIME_I
	INCLUDE	"dos/datetime.i"
	ENDC

* library data structure
* All field in the SysmonBase structure are PRIVATE !!!
* Don't access these directly as they will change in future versions.
* You have been warned !!!

HASHSIZE	EQU	32
HASHMASK	EQU	$f8

 STRUCTURE SysmonBase,LIB_SIZE			; Standard lib node
	UBYTE	sb_Flags			; Some flags here
	UBYTE	sb_pad				; We are now longword aligned
	APTR	sb_ExecBase			; Pointer to exec
	APTR	sb_UtilityBase			; Pointer to utility
	BPTR	sb_SegList			; SegList BCPL pointer
	APTR	sb_CurrTaskInfo			; Current TaskInfo Structure
	APTR	sb_Switch			; Original Switch() entry point
	APTR	sb_Dispatch			; Original Dispatch() entry point
	APTR	sb_AddTask			; Original AddTask() entry point
	APTR	sb_RemTask			; Original RemTask() entry point
	APTR	sb_FindTask			; Original FindTask() entry point
	APTR	sb_Alert			; Original Alert() entry point
	APTR	sb_ExitIntr			; Original ExitIntr() entry point
	APTR	sb_Schedule			; Original Schedule() entry point
	APTR	sb_Exception			; Original Exception() entry point
	APTR	sb_SetTaskPri			; Original SetTaskPri() entry point
	APTR	sb_SetExcept			; Original SetExcept() entry point
	APTR	sb_SetSignal			; Original SetSignal() entry point
	APTR	sb_Signal			; Original Signal() entry point
	APTR	sb_Wait				; Original Wait() entry point
	APTR	sb_TaskExit			; Original ExecBase->TaskExitCode
	APTR	sb_TaskExcept			; Original ExecBase->TaskExceptCode
	APTR	sb_TaskTrap			; Original ExecBase->TaskTrapCode
	STRUCT	sb_TimeReq,IOTV_SIZE		; Time Request
	STRUCT	sb_TempTime,EV_SIZE		; Temporary EClock Time
	STRUCT	sb_TaskFrozen,LH_SIZE		; List of frozen tasks
	BYTE	sb_ResetBit			; Signal bit for reset handler
	UBYTE	sb_ResetFlags			; Flags for reset handler
	STRUCT	sb_TaskInfoHash,4*HASHSIZE	; TaskInfo hash table
	APTR	sb_ServerEntry			; Server process entry point
	APTR	sb_ServerName			; Server process name
	APTR	sb_SyslogFile			; SysLog file name
	APTR	sb_SyslogWindow			; Syslog Window Name
	UBYTE	sb_FilePri			; File logging priority
	UBYTE	sb_WindowPri			; Window logging priority
	UBYTE	sb_ConsolePri			; Console logging priority
	UBYTE	sb_NumLogBuffers		; Number of allocated Buffers
	APTR	sb_Buffers			; Pointer to allocated buffers
	APTR	sb_DOSBase			; Pointer to dos
	APTR	sb_DateTime			; struct DateTime used by syslog
	ULONG	sb_StampPeriod			; Period for syslog file stamp
	BPTR	sb_LogWindowHandle		; LogWindow file handle
	APTR	sb_IntuitionBase		; Pointer to intuition
	APTR	sb_LastGuru			; Pointer to LastGuru structure
	APTR	sb_SyslogPort			; Pointer to Syslog MsgPort
	APTR	sb_ServerProc			; Pointer to server process
	APTR	sb_ResetHandler			; Pointer to reset handler
	APTR	sb_ResetReq			; Pointer to reset request
	STRUCT	sb_BCPSem,SS_SIZE		; Semaphore for Broadcast Ports list
	STRUCT	sb_BroadcastPorts,MLH_SIZE	; List of Registered Broadcast Ports
	STRUCT	sb_TTASem,SS_SIZE		; Semaphore for Task Table Access
	STRUCT	sb_TTRSem,SS_SIZE		; Semaphore for Task Table Removal
	STRUCT	sb_CPUTime,EV_SIZE		; Total CPU Time used by tasks
	APTR	sb_MMUBase			; Pointer to mmu library
	APTR	sb_ColdReboot			; Cached ColdReboot() vector
 LABEL   SysmonBase_SIZEOF

* The TaskInfo structure contains the CPU usage information in EClock ticks.
* The link pointers are private and should not be used. Use the smNextTaskInfo()
* function to traverse the list.
* This structure may be extended later with new fields. Also all fields are
* strictly READ ONLY.

 STRUCTURE TaskInfo,0
	APTR	ti_Link				; private pointer to next TaskInfo
	APTR	ti_Pred				; private pointer to previous TaskInfo
	APTR	ti_Task				; pointer to Task Control Block
	ULONG	ti_DispCount			; Task Dispatch counter
	STRUCT	ti_StartTime,EV_SIZE		; Starting EClock Time
	STRUCT	ti_LaunchTime,EV_SIZE		; Last Launch Time
	STRUCT	ti_CPUTime,EV_SIZE		; Cumulated CPU Time
	UBYTE	ti_Flags			; Various flags
	UBYTE	ti_ExcptState			; Task State saved by Exception()
	BYTE	ti_EDNestCnt			; Exception Disable Nest Count
	UBYTE	ti_FreezeState			; Task State saved by smFreeze()
 LABEL	TaskInfo_SIZEOF
	
* ti_Flags bits

	BITDEF	TI,INEXCEPT,0			; Task is inside Exception code
	BITDEF	TI,WAKEUP,1			; A WakeUp request is pending

* This is the private structure used by smVSysLog() to communicate with the
* Sysmon.server process.

SM_MAXLOGCHARS	EQU	256			; Max bytes in SysLog message

 STRUCTURE SysLogMsg,MN_SIZE			; Message structure
	ULONG	slm_Priority			; SysLog priority and flags
	STRUCT	slm_Text,SM_MAXLOGCHARS		; Syslog Message body
 LABEL	SysLogMsg_SIZEOF

SYSMONNAME	MACRO
	DC.B	'sysmon.library',0
	ENDM

SERVERNAME	MACRO
	DC.B	'Sysmon.server',0
	ENDM

* sb_Flags bits

	BITDEF	SBF,FPU,0			; System has a FPU
	BITDEF	SBF,IDLELED,1			; Dim power LED when CPU is idle
	BITDEF	SBF,MMU,2			; System has a MMU (according to mmu.library)

* sb_ResetFlags bits

	BITDEF	SBRST,ACTIVATE,0		; Activate reset handler
	BITDEF	SBRST,PENDING,1			; Reset is pending
	BITDEF	SBRST,OLDMMU,2			; Restore old MMU setup before reboot
	BITDEF	SBRST,CACHEREBOOT,3		; Use a cached ColdReboot() vector

* Alert definitions
* These are the Guru codes that sysmon.library can spit out in a panic
* condition.

AN_Sysmon	EQU	$40000000	; SubSystem ID
AN_smNoTaskInfo	EQU	$40000001	; No TaskInfo structure for this task
AN_smNoTIMem	EQU	$40010002	; No mem for TaskInfo at startup
AN_smSysLogBuf	EQU	$40010003	; No memory for syslog buffers
AN_BadSysLogMsg	EQU	$40000004	; Bad SysLogMsg received by server
AN_smNoLastGuru	EQU	$40010005	; No memory for LastGuru buffer
AN_smNoAlertMem	EQU	$40010006	; No memory for new alert.hook module
AN_smSuperTaskSwitch EQU $C0000007	; Attempt to switch task from supervisor mode
AO_Sysmon	EQU	$00008040	; Alert object

* These are reused obsolete exec alert codes

AN_UnInitExcpt	EQU	$0100000A	; Uninitialized task exception (not CPU trap)

* New Task States Definitions (not all used yet !)
* TS_STOP is not a real state. It is used by ShowSys to identify tasks that
* are stuck in a Wait(0) call, such as crashed tasks that have been suspended.

TS_STOP		EQU	$80		; Stopped task (Wait(0L))
TS_FROZEN	EQU	$81		; Frozen task
TS_HIBERNATE	EQU	$82		; Hibernating task
TS_PAGEFLTWAIT	EQU	$83		; Task suspended for page fault processing
TS_WAITAND	EQU	$84		; Task waiting for several signals set together
TS_TRAP		EQU	$85		; Task suspended by exception trap code
TS_FREEWAIT	EQU	$86		; Task waiting for free memory

* SysLog priorities and flags
* The priorities are similar to that used on UNIX systems. This means that
* the values use the UNIX ordering that is reversed from the Amiga one.
* The facilities are also UNIX like and indicate what part of the system
* produced the message. This is purely informational currently.
* The flags are Amiga and sysmon specifics.

* Priorities

LOG_EMERG	EQU	0		; Panic condition (Guru time)
LOG_ALERT	EQU	1		; Very serious problem
LOG_CRIT	EQU	2		; Critical error
LOG_ERR		EQU	3		; General error condition
LOG_WARN	EQU	4		; Warning condition
LOG_NOTICE	EQU	5		; Noticeable event
LOG_INFO	EQU	6		; General informational event
LOG_DEBUG	EQU	7		; Debugging information
LOG_PRI		EQU	$7		; Mask for priority field

* Facilities

LOG_NOFAC	EQU	(0<<3)		; no facility
LOG_KERN	EQU	(1<<3)		; kernel/system messages
LOG_USER	EQU	(2<<3)		; random user-level messages
LOG_MAIL	EQU	(3<<3)		; mail system
LOG_DAEMON	EQU	(4<<3)		; system daemons/commodities
LOG_AUTH	EQU	(5<<3)		; security/authorization messages
LOG_SYSLOG	EQU	(6<<3)		; messages generated internally by Syslog
LOG_NEWS	EQU	(7<<3)		; network news subsystem
LOG_UUCP	EQU	(8<<3)		; UUCP subsystem
LOG_CRON	EQU	(9<<3)		; cron/queue_manager subsystem
LOG_AUTHPRIV	EQU	(10<<3)		; private security/authorization messages
LOG_FTP		EQU	(11<<3)		; ftp daemon
* other codes through 15 reserved for system use
LOG_LOCAL0	EQU	(16<<3)		; reserved for local use
LOG_LOCAL1	EQU	(17<<3)		; reserved for local use
LOG_LOCAL2	EQU	(18<<3)		; reserved for local use
LOG_LOCAL3	EQU	(19<<3)		; reserved for local use
LOG_LOCAL4	EQU	(20<<3)		; reserved for local use
LOG_LOCAL5	EQU	(21<<3)		; reserved for local use
LOG_LOCAL6	EQU	(22<<3)		; reserved for local use
LOG_LOCAL7	EQU	(23<<3)		; reserved for local use
LOG_MARK	EQU	(24<<3)		; special time stamp mark
LOG_UNKNOWN	EQU	(25<<3)		; unknown facility code
LOG_FAC		EQU	$03f8		; Mask for facility field

* Flags

LOG_INUSE	EQU	$80000000	; Message is in use (private !)
LOG_NOHEAD	EQU	$40000000	; Don't prepend header
LOG_NOWIN	EQU	$20000000	; Don't output to window
LOG_NOFILE	EQU	$10000000	; Don't output to file

LOGB_INUSE	EQU	31		; Bit numbers for flags
LOGB_NOHEAD	EQU	30
LOGB_NOWIN	EQU	29
LOGB_NOFILE	EQU	28


* Flags definitions for smHalt()

	BITDEF	HALT,REBOOT,0		; Reboot immediately
	BITDEF	HALT,REKICK,1		; Reload kickstart on MMU-Kicked systems.

* Broadcast Message send via smSendBroadcastMsg()
* The sender must allocate this structure and fill in the different fields.

 STRUCTURE BroadcastMsg,MN_SIZE			; Standard Message structure
	UBYTE	bcm_Level			; Event Level
	UBYTE	bcm_Flags			; Flags
	UWORD	bcm_TimeOut			; Reply Time Out in ticks
	UWORD	bcm_CountDown			; Countdown to Event in seconds
	UBYTE	bcm_ReplyCount			; Reply count after sending
	UBYTE	bcm_TimeOutCount		; Time Out count after sending
	APTR	bcm_SenderTask			; Sender Task (Filled by smSendBroadCastMsg())
	APTR	bcm_EventTxt			; Text describing the event
	STRUCT	bcm_Reserved,4*4		; Reserved for future expansion
 LABEL	BCM_SIZEOF

* defines for event levels

BCM_HALT	EQU	0		; System Halt/Reboot imminent
BCM_UNMOUNT	EQU	1		; FileSystems will be UnMounted now
BCM_SHUTDOWN	EQU	2		; Shutdown countdown message
BCM_URGENT	EQU	3		; Urgent Message 
BCM_NORMAL	EQU	4		; Normal Message
BCM_DEBUG	EQU	5		; Debug Level Message

* defines for bcm_Flags

	BITDEF	BCM,DOOMSDAY,0		; Keyboard reset pending (System reboot in 10 seconds at most)
	BITDEF	BCM,CANCEL,1		; A previously announced event has been cancelled

* defines for smLockTaskTable()/smUnLockTaskTable() flags

	BITDEF	LTT,READ,0		; Read access to task table
	BITDEF	LTT,WRITE,1		; Write access (PRIVATE !)
	BITDEF	LTT,REMOVE,2		; Prevent task removal


* The LastGuru structure contains information about the last Guru Meditation
* The data is stored in a high memory buffer by Alert() that is allocated by
* sysmon.library during initialisation.
* As this buffer is allocated early with AllocMem(MEMF_REVERSE), it will be
* kept at the same address after reboot. This trick was already used successfully
* on recoverable ram disks like vdisk.device
* Some Fields are only valid if the corresponding register exists on the CPU
* installed in the system.

 STRUCTURE LastGuru,MC_SIZE		; leave space for a memory chunk
	ULONG	lg_Sig			; Alert signature ('HELP')
	ULONG	lg_AlertNum		; Guru Meditation number
	ULONG	lg_AlertAddr		; TCB Address of crashed task
	STRUCT	lg_TaskName,32		; Task name limited to 32 bytes
	STRUCT	lg_DataRegs,8*4		; Data registers D0-D7
	STRUCT	lg_AddrRegs,8*4		; Address registers A0-A7
	STRUCT	lg_FloatRegs,8*12	; Floating point registers FP0-FP7
	ULONG	lg_FPCR			; Floating Point Control Register
	ULONG	lg_FPSR			; Floating Point Status Register
	ULONG	lg_FPIAR		; Floating Point Instruction Address Register
	ULONG	lg_PC			; Program Counter
	ULONG	lg_USP			; User Stack Pointer
	ULONG	lg_SSP			; Supervisor/Interrupt Stack Pointer
	ULONG	lg_MSP			; Master Stack Pointer / Processor Control Register [68060]
	ULONG	lg_VBR			; Vector Base Register
	ULONG	lg_SFC			; Source Function Codes
	ULONG	lg_DFC			; Destination Function Codes
	ULONG	lg_CACR			; Cache Control Register
	ULONG	lg_TC			; Translation Control register
	ULONG	lg_ITT0			; Intruction Transparent Translation 0
	ULONG	lg_ITT1			; Intruction Transparent Translation 1
	ULONG	lg_DTT0			; Data Transparent Translation 0 / Common Root Pointer [68030]
	ULONG	lg_DTT1			; Data Transparent Translation 1 / Common Root Pointer [68030]
	ULONG	lg_URP			; User Root Pointer / Supervisor Root Pointer [68030]
	ULONG	lg_SRP			; Supervisor Root Pointer
	ULONG	lg_MMUSR		; MMU Status Register / Bus Control Register [68060]
	ULONG	lg_CAAR			; Cache Address Register
	UWORD	lg_SR			; Status Register
	UWORD	lg_AC			; Access Control register [68851]
	STRUCT	lg_DRP,8		; DMA Root Pointer [68851]
	STRUCT	lg_BAD,8*2		; Breakpoint Acknowledge Data registers [68851]
	STRUCT	lg_BAC,8*2		; Breakpoint Acknowledge Control registers [68851]
	UBYTE	lg_CAL			; Current Access Level [68851]
	UBYTE	lg_VAL			; Valid Access Level [68851]
	UBYTE	lg_SCC			; Stack Change Control register [68851]
	UBYTE	lg_Pad			; Padding byte
 LABEL lg_SizeOf


* Function LVOs

	INCLUDE "exec/funcdef.i"

	FUNCDEF	smGetTaskInfo
	FUNCDEF	smFreeze
	FUNCDEF	smUnFreeze
	FUNCDEF	smSleep
	FUNCDEF	smVKPrintf
	FUNCDEF	smVSPrintf
	FUNCDEF	smVSysLog
	FUNCDEF	smFindTaskInfo
	FUNCDEF	smNextTaskInfo
	FUNCDEF	smHalt
	FUNCDEF smVSnPrintf
	FUNCDEF smFindNode
	FUNCDEF	smAddBroadcastPort
	FUNCDEF	smRemBroadcastPort
	FUNCDEF	smSendBroadcastMsg
	FUNCDEF	smGetVBR
	FUNCDEF	smMoveVBR
	FUNCDEF smLockTaskTable
	FUNCDEF	smUnLockTaskTable
	FUNCDEF	smDisallowExcept
	FUNCDEF	smAllowExcept
	FUNCDEF	smHibernate
	FUNCDEF	smWakeUp
	FUNCDEF	smScheduleWakeUp
	FUNCDEF	smEndExcept
	FUNCDEF	smWaitAnd

   ENDC  ;SYSMON_I

