mirror of
https://github.com/elliotnunn/wedge.git
synced 2024-11-24 19:33:27 +00:00
691 lines
30 KiB
C
691 lines
30 KiB
C
|
/*
|
|||
|
* Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
|
|||
|
*
|
|||
|
* @APPLE_LICENSE_HEADER_START@
|
|||
|
*
|
|||
|
* "Portions Copyright (c) 1999 Apple Computer, Inc. All Rights
|
|||
|
* Reserved. This file contains Original Code and/or Modifications of
|
|||
|
* Original Code as defined in and that are subject to the Apple Public
|
|||
|
* Source License Version 1.0 (the 'License'). You may not use this file
|
|||
|
* except in compliance with the License. Please obtain a copy of the
|
|||
|
* License at http://www.apple.com/publicsource and read it before using
|
|||
|
* this file.
|
|||
|
*
|
|||
|
* The Original Code and all software distributed under the License are
|
|||
|
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
|
|||
|
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
|
|||
|
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
|
|||
|
* FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
|
|||
|
* License for the specific language governing rights and limitations
|
|||
|
* under the License."
|
|||
|
*
|
|||
|
* @APPLE_LICENSE_HEADER_END@
|
|||
|
*/
|
|||
|
|
|||
|
/*
|
|||
|
File: PPCInfoRecordsPriv.h
|
|||
|
|
|||
|
Contains: PowerPC information records created by hardware intialization and maintained by the NanoKernel.
|
|||
|
|
|||
|
Version: Mac OS
|
|||
|
|
|||
|
DRI: Jim Murphy
|
|||
|
|
|||
|
Copyright: <EFBFBD> 1997-1998 by Apple Computer, Inc., all rights reserved.
|
|||
|
|
|||
|
Warning: *** APPLE INTERNAL USE ONLY ***
|
|||
|
This file contains unreleased SPI's
|
|||
|
|
|||
|
BuildInfo: Built by: Naga Pappireddi
|
|||
|
With Interfacer: 3.0d9 (PowerPC native)
|
|||
|
From: PPCInfoRecordsPriv.i
|
|||
|
Revision: 18
|
|||
|
Dated: 9/9/98
|
|||
|
Last change by: RAV
|
|||
|
Last comment: Set nanokernel info rev to 1.0.4. I'm reserving 2.0.0 for the
|
|||
|
|
|||
|
Bugs: Report bugs to Radar component "System Interfaces", "Latest"
|
|||
|
List the version information (from above) in the Problem Description.
|
|||
|
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
// LIGHTLY EDITED TO MAKE CONFIGINFO REFLECT ITS TRUE SELF
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#ifndef __PPCINFORECORDSPRIV__
|
|||
|
#define __PPCINFORECORDSPRIV__
|
|||
|
|
|||
|
#ifndef __MACTYPES__
|
|||
|
#include <MacTypes.h>
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#if PRAGMA_ONCE
|
|||
|
#pragma once
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
extern "C" {
|
|||
|
#endif
|
|||
|
|
|||
|
#if PRAGMA_IMPORT
|
|||
|
#pragma import on
|
|||
|
#endif
|
|||
|
|
|||
|
#if PRAGMA_STRUCT_ALIGN
|
|||
|
#pragma options align=mac68k
|
|||
|
#elif PRAGMA_STRUCT_PACKPUSH
|
|||
|
#pragma pack(push, 2)
|
|||
|
#elif PRAGMA_STRUCT_PACK
|
|||
|
#pragma pack(2)
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
Configuration Info Record
|
|||
|
Used to pass Configuration information from the Boot Program to the
|
|||
|
NanoKernel for data structure and address mapping initialization.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
struct NKConfigurationInfo {
|
|||
|
/* Physical ROM Info*/
|
|||
|
UInt32 ROMCheckSumByte0; /* ROM Checksum - Byte Lane 0*/
|
|||
|
UInt32 ROMCheckSumByte1; /* ROM Checksum - Byte Lane 1*/
|
|||
|
UInt32 ROMCheckSumByte2; /* ROM Checksum - Byte Lane 2*/
|
|||
|
UInt32 ROMCheckSumByte3; /* ROM Checksum - Byte Lane 3*/
|
|||
|
UInt32 ROMCheckSumByte4; /* ROM Checksum - Byte Lane 4*/
|
|||
|
UInt32 ROMCheckSumByte5; /* ROM Checksum - Byte Lane 5*/
|
|||
|
UInt32 ROMCheckSumByte6; /* ROM Checksum - Byte Lane 6*/
|
|||
|
UInt32 ROMCheckSumByte7; /* ROM Checksum - Byte Lane 7*/
|
|||
|
UInt64 ROMCheckSum64; /* ROM Checksum - 64 bit sum of doublewords*/
|
|||
|
|
|||
|
UInt32 ROMImageBaseOffset; /* Offset of Base of total ROM image*/
|
|||
|
UInt32 ROMImageSize; /* Number of bytes in ROM image*/
|
|||
|
UInt32 ROMImageVersion; /* ROM Version number for entire ROM*/
|
|||
|
|
|||
|
/* ROM component Info (offsets are from base of ConfigInfo page)*/
|
|||
|
UInt32 Mac68KROMOffset; /* Offset of base of Macintosh 68K ROM*/
|
|||
|
UInt32 Mac68KROMSize; /* Number of bytes in Macintosh 68K ROM*/
|
|||
|
|
|||
|
UInt32 ExceptionTableOffset; /* Offset of base of PowerPC Exception Table Code*/
|
|||
|
UInt32 ExceptionTableSize; /* Number of bytes in PowerPC Exception Table Code*/
|
|||
|
|
|||
|
UInt32 HWInitCodeOffset; /* Offset of base of Hardware Init Code*/
|
|||
|
UInt32 HWInitCodeSize; /* Number of bytes in Hardware Init Code*/
|
|||
|
|
|||
|
UInt32 KernelCodeOffset; /* Offset of base of NanoKernel Code*/
|
|||
|
UInt32 KernelCodeSize; /* Number of bytes in NanoKernel Code*/
|
|||
|
|
|||
|
UInt32 EmulatorCodeOffset; /* Offset of base of Emulator Code*/
|
|||
|
UInt32 EmulatorCodeSize; /* Number of bytes in Emulator Code*/
|
|||
|
|
|||
|
UInt32 OpcodeTableOffset; /* Offset of base of Opcode Table*/
|
|||
|
UInt32 OpcodeTableSize; /* Number of bytes in Opcode Table*/
|
|||
|
|
|||
|
/* Offsets within the Emulator Data Page.*/
|
|||
|
UInt8 BootstrapVersion[16]; /* Bootstrap loader version info*/
|
|||
|
UInt32 BootVersionOffset; /* offset within EmulatorData of BootstrapVersion*/
|
|||
|
UInt32 ECBOffset; /* offset within EmulatorData of ECB*/
|
|||
|
UInt32 IplValueOffset; /* offset within EmulatorData of IplValue*/
|
|||
|
|
|||
|
/* Offsets within the Emulator Code.*/
|
|||
|
UInt32 EmulatorEntryOffset; /* offset within Emulator Code of entry point*/
|
|||
|
UInt32 KernelTrapTableOffset; /* offset within Emulator Code of KernelTrapTable*/
|
|||
|
|
|||
|
/* Interrupt Passing Masks.*/
|
|||
|
UInt32 TestIntMaskInit; /* initial value for test interrupt mask*/
|
|||
|
UInt32 ClearIntMaskInit; /* initial value for clear interrupt mask*/
|
|||
|
UInt32 PostIntMaskInit; /* initial value for post interrupt mask*/
|
|||
|
UInt32 LA_InterruptCtl; /* logical address of Interrupt Control I/O page*/
|
|||
|
UInt8 InterruptHandlerKind; /* kind of handler to use*/
|
|||
|
UInt8 filler1;
|
|||
|
UInt16 filler2;
|
|||
|
|
|||
|
UInt32 LA_InfoRecord; /* logical address of InfoRecord page*/
|
|||
|
UInt32 LA_KernelData; /* logical address of KernelData page*/
|
|||
|
UInt32 LA_EmulatorData; /* logical address of EmulatorData page*/
|
|||
|
UInt32 LA_DispatchTable; /* logical address of Dispatch Table*/
|
|||
|
UInt32 LA_EmulatorCode; /* logical address of Emulator Code*/
|
|||
|
|
|||
|
UInt32 MacLowMemInitOffset; /* offset to list of LowMem addr/data values*/
|
|||
|
|
|||
|
/* Address Space Mapping.*/
|
|||
|
UInt32 PageAttributeInit; /* default WIMG/PP settings for PTE creation*/
|
|||
|
UInt32 PageMapInitSize; /* size of page mapping info*/
|
|||
|
UInt32 PageMapInitOffset; /* offset to page mapping info (from base of ConfigInfo)*/
|
|||
|
UInt32 PageMapIRPOffset; /* offset of InfoRecord map info (from base of PageMap)*/
|
|||
|
UInt32 PageMapKDPOffset; /* offset of KernelData map info (from base of PageMap)*/
|
|||
|
UInt32 PageMapEDPOffset; /* offset of EmulatorData map info (from base of PageMap)*/
|
|||
|
|
|||
|
UInt32 SegMap32SupInit[32]; /* 32 bit mode Segment Map Supervisor space*/
|
|||
|
UInt32 SegMap32UsrInit[32]; /* 32 bit mode Segment Map User space*/
|
|||
|
UInt32 SegMap32CPUInit[32]; /* 32 bit mode Segment Map CPU space*/
|
|||
|
UInt32 SegMap32OvlInit[32]; /* 32 bit mode Segment Map Overlay mode*/
|
|||
|
|
|||
|
UInt32 BATRangeInit[32]; /* BAT mapping ranges*/
|
|||
|
|
|||
|
UInt32 BatMap32SupInit; /* 32 bit mode BAT Map Supervisor space*/
|
|||
|
UInt32 BatMap32UsrInit; /* 32 bit mode BAT Map User space*/
|
|||
|
UInt32 BatMap32CPUInit; /* 32 bit mode BAT Map CPU space*/
|
|||
|
UInt32 BatMap32OvlInit; /* 32 bit mode BAT Map Overlay mode*/
|
|||
|
|
|||
|
/* Only needed for Smurf*/
|
|||
|
UInt32 SharedMemoryAddr; /* physical address of Mac/Smurf shared message mem*/
|
|||
|
|
|||
|
UInt32 PA_RelocatedLowMemInit; /* physical address of RelocatedLowMem*/
|
|||
|
|
|||
|
UInt32 OpenFWBundleOffset; /* Offset of base of OpenFirmware PEF Bundle*/
|
|||
|
UInt32 OpenFWBundleSize; /* Number of bytes in OpenFirmware PEF Bundle*/
|
|||
|
|
|||
|
UInt32 LA_OpenFirmware; /* logical address of Open Firmware*/
|
|||
|
UInt32 PA_OpenFirmware; /* physical address of Open Firmware*/
|
|||
|
UInt32 LA_HardwarePriv; /* logical address of HardwarePriv callback*/
|
|||
|
|
|||
|
UInt32 filler3[2]; /* pad structure size out to a cache block*/
|
|||
|
};
|
|||
|
typedef struct NKConfigurationInfo NKConfigurationInfo;
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
System Info Record
|
|||
|
Used to pass System information from the NanoKernel to user mode
|
|||
|
software.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkSystemInfoPtr = 0x5FFFEFF0, /* logical address of SystemInfo record*/
|
|||
|
nkSystemInfoVer = 0x5FFFEFF4, /* version number of SystemInfo record*/
|
|||
|
nkSystemInfoLen = 0x5FFFEFF6 /* length of SystemInfo record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKSystemInfo {
|
|||
|
UInt32 PhysicalMemorySize; /* Number of bytes in Physical RAM*/
|
|||
|
UInt32 UsableMemorySize; /* Number of bytes in Usable RAM*/
|
|||
|
UInt32 LogicalMemorySize; /* Number of bytes in Logical RAM*/
|
|||
|
UInt32 HashTableSize; /* Number of bytes in Memory Hash Table*/
|
|||
|
|
|||
|
UInt32 L2DataCacheTotalSize; /* number of bytes in the L2 Data Cache*/
|
|||
|
UInt32 L2InstCacheTotalSize; /* number of bytes in the L2 Instruction Cache*/
|
|||
|
UInt16 L2CombinedCaches; /* 1 <- combined or no cache, 0 <- split cache*/
|
|||
|
UInt16 L2InstCacheBlockSize; /* number of bytes in a Block of the L2 Instruction Cache*/
|
|||
|
UInt16 L2DataCacheBlockSize; /* number of bytes in a Block of the L2 Data Cache*/
|
|||
|
UInt16 L2InstCacheAssociativity; /* Associativity of the L2 Instruction Cache*/
|
|||
|
UInt16 L2DataCacheAssociativity; /* Associativity of the L2 Data Cache*/
|
|||
|
UInt16 unused_1; /* unused*/
|
|||
|
|
|||
|
UInt16 unused_2; /* unused*/
|
|||
|
UInt8 FlashManufacturerCode; /* Flash ROM Manufacturer code*/
|
|||
|
UInt8 FlashDeviceCode; /* Flash ROM Device code*/
|
|||
|
UInt32 FlashStart; /* Starting address of Flash ROM*/
|
|||
|
UInt32 FlashSize; /* Number of bytes in Flash ROM*/
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/* 0x30 */
|
|||
|
|
|||
|
|
|||
|
UInt32 Bank0Start; /* Starting address of RAM bank 0*/
|
|||
|
UInt32 Bank0Size; /* Number of bytes in RAM bank 0*/
|
|||
|
UInt32 Bank1Start; /* Starting address of RAM bank 1*/
|
|||
|
UInt32 Bank1Size; /* Number of bytes in RAM bank 1*/
|
|||
|
UInt32 Bank2Start; /* Starting address of RAM bank 2*/
|
|||
|
UInt32 Bank2Size; /* Number of bytes in RAM bank 2*/
|
|||
|
UInt32 Bank3Start; /* Starting address of RAM bank 3*/
|
|||
|
UInt32 Bank3Size; /* Number of bytes in RAM bank 3*/
|
|||
|
UInt32 Bank4Start; /* Starting address of RAM bank 4*/
|
|||
|
UInt32 Bank4Size; /* Number of bytes in RAM bank 4*/
|
|||
|
UInt32 Bank5Start; /* Starting address of RAM bank 5*/
|
|||
|
UInt32 Bank5Size; /* Number of bytes in RAM bank 5*/
|
|||
|
UInt32 Bank6Start; /* Starting address of RAM bank 6*/
|
|||
|
UInt32 Bank6Size; /* Number of bytes in RAM bank 6*/
|
|||
|
UInt32 Bank7Start; /* Starting address of RAM bank 7*/
|
|||
|
UInt32 Bank7Size; /* Number of bytes in RAM bank 7*/
|
|||
|
UInt32 Bank8Start; /* Starting address of RAM bank 8*/
|
|||
|
UInt32 Bank8Size; /* Number of bytes in RAM bank 8*/
|
|||
|
UInt32 Bank9Start; /* Starting address of RAM bank 9*/
|
|||
|
UInt32 Bank9Size; /* Number of bytes in RAM bank 9*/
|
|||
|
UInt32 Bank10Start; /* Starting address of RAM bank 10*/
|
|||
|
UInt32 Bank10Size; /* Number of bytes in RAM bank 10*/
|
|||
|
UInt32 Bank11Start; /* Starting address of RAM bank 11*/
|
|||
|
UInt32 Bank11Size; /* Number of bytes in RAM bank 11*/
|
|||
|
UInt32 Bank12Start; /* Starting address of RAM bank 12*/
|
|||
|
UInt32 Bank12Size; /* Number of bytes in RAM bank 12*/
|
|||
|
UInt32 Bank13Start; /* Starting address of RAM bank 13*/
|
|||
|
UInt32 Bank13Size; /* Number of bytes in RAM bank 13*/
|
|||
|
UInt32 Bank14Start; /* Starting address of RAM bank 14*/
|
|||
|
UInt32 Bank14Size; /* Number of bytes in RAM bank 14*/
|
|||
|
UInt32 Bank15Start; /* Starting address of RAM bank 15*/
|
|||
|
UInt32 Bank15Size; /* Number of bytes in RAM bank 15*/
|
|||
|
UInt32 Bank16Start; /* Starting address of RAM bank 16*/
|
|||
|
UInt32 Bank16Size; /* Number of bytes in RAM bank 16*/
|
|||
|
UInt32 Bank17Start; /* Starting address of RAM bank 17*/
|
|||
|
UInt32 Bank17Size; /* Number of bytes in RAM bank 17*/
|
|||
|
UInt32 Bank18Start; /* Starting address of RAM bank 18*/
|
|||
|
UInt32 Bank18Size; /* Number of bytes in RAM bank 18*/
|
|||
|
UInt32 Bank19Start; /* Starting address of RAM bank 19*/
|
|||
|
UInt32 Bank19Size; /* Number of bytes in RAM bank 19*/
|
|||
|
UInt32 Bank20Start; /* Starting address of RAM bank 20*/
|
|||
|
UInt32 Bank20Size; /* Number of bytes in RAM bank 20*/
|
|||
|
UInt32 Bank21Start; /* Starting address of RAM bank 21*/
|
|||
|
UInt32 Bank21Size; /* Number of bytes in RAM bank 21*/
|
|||
|
UInt32 Bank22Start; /* Starting address of RAM bank 22*/
|
|||
|
UInt32 Bank22Size; /* Number of bytes in RAM bank 22*/
|
|||
|
UInt32 Bank23Start; /* Starting address of RAM bank 23*/
|
|||
|
UInt32 Bank23Size; /* Number of bytes in RAM bank 23*/
|
|||
|
UInt32 Bank24Start; /* Starting address of RAM bank 24*/
|
|||
|
UInt32 Bank24Size; /* Number of bytes in RAM bank 24*/
|
|||
|
UInt32 Bank25Start; /* Starting address of RAM bank 25*/
|
|||
|
UInt32 Bank25Size; /* Number of bytes in RAM bank 25*/
|
|||
|
|
|||
|
/* Interrupt Support Data*/
|
|||
|
UInt32 IntCntrBaseAddr; /* Interrupt Controller Base Address (variable is used since this is a PCI Dev and address is relocatable)*/
|
|||
|
UInt32 IntPendingReg[2]; /* Data of current interrupts pending register*/
|
|||
|
|
|||
|
/* These fields were added to report information about tightly-coupled L2 caches.*/
|
|||
|
/* The inline L2 information should be used in situations where there is a CPU*/
|
|||
|
/* card L2 cache that can coexist with a motherboard L2.*/
|
|||
|
|
|||
|
UInt32 InlineL2DSize; /* Size of in-line L2 Dcache*/
|
|||
|
UInt32 InlineL2ISize; /* Size of in-line L2 Icache*/
|
|||
|
UInt16 InlineL2Combined; /* 1 <- combined or no cache, 0 <- split cache*/
|
|||
|
UInt16 InlineL2IBlockSize; /* Block size of in-line I L2 cache*/
|
|||
|
UInt16 InlineL2DBlockSize; /* Block size of in-line D L2 cache*/
|
|||
|
UInt16 InlineL2IAssoc; /* Associativity of L2 I*/
|
|||
|
UInt16 InlineL2DAssoc; /* Associativity of L2 D*/
|
|||
|
UInt16 filler1; /* pad*/
|
|||
|
|
|||
|
/* More Interrupt Support Data*/
|
|||
|
UInt32 IntsCompleted[2]; /* completed interrupts*/
|
|||
|
|
|||
|
UInt32 filler2[6]; /* pad to nice cache block alignment*/
|
|||
|
};
|
|||
|
typedef struct NKSystemInfo NKSystemInfo;
|
|||
|
|
|||
|
enum {
|
|||
|
kMaxBanks = 26, /* 6 banks, 0<>25*/
|
|||
|
kSystemInfoVersion = 0x0105 /* 1.0.5*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
Diagnostic Info Record
|
|||
|
Used to pass Diagnostic information from the power on Diagnostics to
|
|||
|
the NanoKernel, and from the NanoKernel to user mode software.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkDiagnosticInfoPtr = 0x5FFFEFE8, /* logical address of DiagnosticInfo record*/
|
|||
|
nkDiagnosticInfoVer = 0x5FFFEFEC, /* version number of DiagnosticInfo record*/
|
|||
|
nkDiagnosticInfoLen = 0x5FFFEFEE /* length of DiagnosticInfo record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKDiagnosticInfo {
|
|||
|
UInt32 BankMBFailOffset; /* Mother Board RAM failure code*/
|
|||
|
UInt32 BankAFailOffset; /* Bank A RAM failure code*/
|
|||
|
UInt32 BankBFailOffset; /* Bank B RAM failure code*/
|
|||
|
UInt32 BankCFailOffset; /* Bank C RAM failure code*/
|
|||
|
|
|||
|
UInt32 BankDFailOffset; /* Bank D RAM failure code*/
|
|||
|
UInt32 BankEFailOffset; /* Bank E RAM failure code*/
|
|||
|
UInt32 BankFFailOffset; /* Bank F RAM failure code*/
|
|||
|
UInt32 BankGFailOffset; /* Bank G RAM failure code*/
|
|||
|
|
|||
|
UInt32 BankHFailOffset; /* Bank H RAM failure code*/
|
|||
|
UInt32 CacheFailOffset; /* cache failure code*/
|
|||
|
UInt32 LongBootParamOffset; /* on longBoot this is where the params will be*/
|
|||
|
UInt32 POSTTraceOffset; /* this tells us what route the POST took*/
|
|||
|
|
|||
|
UInt32 POSTOldWarmOffset; /* logged address of old warmstart flag*/
|
|||
|
UInt32 POSTOldLongOffset; /* logged address of old long boot flag*/
|
|||
|
UInt32 POSTOldGlobbOffset; /* logged address of old Diagnostic Info Record*/
|
|||
|
UInt32 POSTOldParamOffset; /* the params from the old diag globb*/
|
|||
|
|
|||
|
UInt32 POSTStartRTCUOffset; /* PPC Real Time Clock Upper at start of POST*/
|
|||
|
UInt32 POSTStartRTCLOffset; /* PPC Real Time Clock Lower at start of POST*/
|
|||
|
UInt32 POSTEndRTCUOffset; /* PPC Real Time Clock Upper at end of POST*/
|
|||
|
UInt32 POSTEndRTCLOffset; /* PPC Real Time Clock Lower at end of POST*/
|
|||
|
|
|||
|
UInt32 POSTTestTypeOffset; /* when long RAM tests fail test type which failed is put here*/
|
|||
|
UInt32 POSTError2Offset; /* result codes from tests*/
|
|||
|
UInt32 POSTError3Offset; /* result codes from tests*/
|
|||
|
UInt32 POSTError4Offset; /* result codes from tests*/
|
|||
|
|
|||
|
UInt8 RegistersStore[140]; /* store all 60x registers here, still fit into 256 bytes size.*/
|
|||
|
|
|||
|
UInt32 DiagPOSTResult2; /* POST results*/
|
|||
|
UInt32 DiagPOSTResult1; /* POST results*/
|
|||
|
UInt32 DiagLongBootSig; /* Burn in restart flag*/
|
|||
|
UInt32 DiagWarmStartHigh; /* First long of native warm start (WLSC) <SM44>*/
|
|||
|
UInt32 DiagWarmStartLow; /* Second long of native warm start (SamB) <SM44>*/
|
|||
|
};
|
|||
|
typedef struct NKDiagnosticInfo NKDiagnosticInfo;
|
|||
|
|
|||
|
enum {
|
|||
|
kDiagnosticInfoVersion = 0x0100 /* 1.0.0*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
NanoKernel Info Record
|
|||
|
Used to pass NanoKernel statistics from the NanoKernel to user mode
|
|||
|
software.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkNanoKernelInfoPtr = 0x5FFFEFE0, /* logical address of NanoKernelInfo record*/
|
|||
|
nkNanoKernelInfoVer = 0x5FFFEFE4, /* version number of NanoKernelInfo record*/
|
|||
|
nkNanoKernelInfoLen = 0x5FFFEFE6 /* length of NanoKernelInfo record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKNanoKernelInfo {
|
|||
|
UInt32 ExceptionCauseCounts[32]; /* counters per exception cause*/
|
|||
|
UInt32 NanoKernelCallCounts[16]; /* counters per NanoKernel call*/
|
|||
|
UInt32 ExternalIntCount; /* count of External Interrupts*/
|
|||
|
UInt32 MisalignmentCount; /* count of Misalignment Interrupts*/
|
|||
|
UInt32 FPUReloadCount; /* count of FPU reloads on demand*/
|
|||
|
UInt32 DecrementerIntCount; /* count of Decrementer Interrupts*/
|
|||
|
UInt32 QuietWriteCount; /* count of Writes to Quiet Read-Only memory*/
|
|||
|
UInt32 HashTableCreateCount; /* count of Hash Table Entry creations*/
|
|||
|
UInt32 HashTableDeleteCount; /* count of Hash Table Entry deletions*/
|
|||
|
UInt32 HashTableOverflowCount; /* count of Hash Table Entry overflows*/
|
|||
|
UInt32 EmulatedUnimpInstCount; /* count of Emulated unimplemented instructions*/
|
|||
|
UInt32 NCBPtrCacheMissCount; /* count of NCB Pointer cache misses*/
|
|||
|
UInt32 ExceptionPropagateCount; /* count of Exceptions propagated to system*/
|
|||
|
UInt32 ExceptionForcedCount; /* count of Exceptions forced to system*/
|
|||
|
UInt64 SysContextCpuTime; /* CPU Time used by System Context*/
|
|||
|
UInt64 AltContextCpuTime; /* CPU Time used by Alternate Context*/
|
|||
|
|
|||
|
UInt32 blueProcessID; /* ID of the blue process.*/
|
|||
|
UInt32 blueTaskID; /* ID of the blue task.*/
|
|||
|
UInt32 pageQueueID; /* ID of the page fault queue.*/
|
|||
|
UInt32 TaskCount; /* Number of tasks.*/
|
|||
|
UInt32 FreePoolExtendCount; /* Number of pages given to the nanokernel.*/
|
|||
|
UInt32 rsrv1[3];
|
|||
|
};
|
|||
|
typedef struct NKNanoKernelInfo NKNanoKernelInfo;
|
|||
|
|
|||
|
enum {
|
|||
|
kNanoKernelInfoVersion = 0x0104 /* 1.0.4*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
Processor Info Record
|
|||
|
Used to pass Processor information from the NanoKernel to user mode
|
|||
|
software.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkProcessorInfoPtr = 0x5FFFEFD8, /* logical address of ProcessorInfo record*/
|
|||
|
nkProcessorInfoVer = 0x5FFFEFDC, /* version number of ProcessorInfo record*/
|
|||
|
nkProcessorInfoLen = 0x5FFFEFDE /* length of ProcessorInfo record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKProcessorInfo {
|
|||
|
UInt32 ProcessorVersionReg; /* contents of the PVR special purpose register*/
|
|||
|
UInt32 CpuClockRateHz; /* CPU Clock frequency*/
|
|||
|
UInt32 BusClockRateHz; /* Bus Clock frequency*/
|
|||
|
UInt32 DecClockRateHz; /* Decrementer Clock frequency*/
|
|||
|
UInt32 PageSize; /* number of bytes in a memory page*/
|
|||
|
UInt32 DataCacheTotalSize; /* number of bytes in the Data Cache*/
|
|||
|
UInt32 InstCacheTotalSize; /* number of bytes in the Instruction Cache*/
|
|||
|
UInt16 CoherencyBlockSize; /* number of bytes in a Coherency Block*/
|
|||
|
UInt16 ReservationGranuleSize; /* number of bytes in a Reservation Granule*/
|
|||
|
UInt16 CombinedCaches; /* 1 <- combined or no cache, 0 <- split cache*/
|
|||
|
UInt16 InstCacheLineSize; /* number of bytes in a Line of the Instruction Cache*/
|
|||
|
UInt16 DataCacheLineSize; /* number of bytes in a Line of the Data Cache*/
|
|||
|
UInt16 DataCacheBlockSizeTouch; /* number of bytes in a Block for DCBT DCBTST*/
|
|||
|
UInt16 InstCacheBlockSize; /* number of bytes in a Block of the Instruction Cache*/
|
|||
|
UInt16 DataCacheBlockSize; /* number of bytes in a Block of the Data Cache*/
|
|||
|
UInt16 InstCacheAssociativity; /* Associativity of the Instruction Cache*/
|
|||
|
UInt16 DataCacheAssociativity; /* Associativity of the Data Cache*/
|
|||
|
|
|||
|
UInt16 TransCacheTotalSize; /* number of entries in the Translation Cache*/
|
|||
|
UInt16 TransCacheAssociativity; /* Associativity of the Translation Cache*/
|
|||
|
|
|||
|
/* These fields were added to report information about back-side L2 caches*/
|
|||
|
|
|||
|
UInt32 ProcessorL2DSize; /* Size of back-side L2 Dcache*/
|
|||
|
UInt32 ProcessorL2ISize; /* Size of back-side L2 Icache*/
|
|||
|
UInt16 ProcessorL2Combined; /* 1 <- combined or no cache, 0 <- split cache*/
|
|||
|
UInt16 ProcessorL2IBlockSize; /* Block size of back-side I L2 cache*/
|
|||
|
UInt16 ProcessorL2DBlockSize; /* Block size of back-side D L2 cache*/
|
|||
|
UInt16 ProcessorL2IAssoc; /* Associativity of L2 I*/
|
|||
|
UInt16 ProcessorL2DAssoc; /* Associativity of L2 D*/
|
|||
|
|
|||
|
UInt16 filler1; /* align to long*/
|
|||
|
|
|||
|
UInt32 ProcessorFlags; /* flags to specify processor features*/
|
|||
|
UInt32 filler2[5]; /* pad to nice cache block alignment*/
|
|||
|
};
|
|||
|
typedef struct NKProcessorInfo NKProcessorInfo;
|
|||
|
/*
|
|||
|
ProcessorFlags - Definitions for the processor flags field. These are bit positions,
|
|||
|
as in <EFBFBD>1 << hasVMX<EFBFBD>, and not masks.
|
|||
|
*/
|
|||
|
|
|||
|
enum {
|
|||
|
hasL2CR = 0,
|
|||
|
hasPLRUL1 = 1,
|
|||
|
hasTAU = 2,
|
|||
|
hasVMX = 3
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
kProcessorInfoVersion = 0x0101 /* 1.0.1*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
Hardware Info Record
|
|||
|
Used to pass hardware information from the NanoKernel to user mode
|
|||
|
software.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkHWInfoPtr = 0x5FFFEFD0, /* logical address of HWInfo record*/
|
|||
|
nkHWInfoVer = 0x5FFFEFD4, /* version number of HWInfo record*/
|
|||
|
nkHWInfoLen = 0x5FFFEFD6 /* length of HWInfo record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkHWInfoFlagSlowMESH = 1, /* set if fast MESH doesn't work on this box*/
|
|||
|
nkHWInfoFlagAsynchMESH = 2, /* set if Synchronous MESH doesn't work on this box*/
|
|||
|
nkHWInfoFlagNoCopySWTLB = 4 /* set if the software TLB walk code for 603 should NOT be copied*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKHWInfo {
|
|||
|
UInt32 MacROM_Base; /* base address (physical) of Mac ROM*/
|
|||
|
UInt32 DeviceTreeBase; /* base address of the copied device tree properties*/
|
|||
|
UInt32 UniversalInfoTableBase; /* base address of the Universal Info Table*/
|
|||
|
UInt32 ConfigInfoTableBase; /* base address of the Config Info Table*/
|
|||
|
UInt16 * VectorLookupTable; /* base address of the interrupt vector lookup table*/
|
|||
|
UInt32 * VectorMaskTable; /* base address of the interrupt vector mask table*/
|
|||
|
|
|||
|
UInt32 OpenPICBaseAddr; /* OpenPIC base address*/
|
|||
|
|
|||
|
UInt8 * ISAMaster8259; /* ISA Master 8259 ports*/
|
|||
|
UInt8 * ISASlave8259; /* ISA Slave 8259 ports*/
|
|||
|
UInt32 * InterruptAck8259; /* address to read to ack 8259 interrupt*/
|
|||
|
|
|||
|
/* interrupt pending bits (actively changing)*/
|
|||
|
|
|||
|
UInt32 PendingInts[2]; /* 64 bits of pending interrupts*/
|
|||
|
|
|||
|
/* some Mac I/O device base addresses*/
|
|||
|
|
|||
|
UInt32 ADB_Base; /* base address of ADB*/
|
|||
|
UInt32 SCSI_DMA_Base; /* base address of SCSI DMA registers*/
|
|||
|
|
|||
|
/* RTAS related stuff*/
|
|||
|
|
|||
|
UInt32 RTAS_PrivDataArea; /* RTAS private data area */
|
|||
|
UInt32 MacOS_NVRAM_Offset; /* offset into nvram to MacOS data*/
|
|||
|
|
|||
|
UInt32 RTAS_NVRAM_Fetch; /* token for RTAS NVRAM fetch*/
|
|||
|
UInt32 RTAS_NVRAM_Store; /* token for RTAS NVRAM store*/
|
|||
|
UInt32 RTAS_Get_Clock; /* token for RTAS clock get*/
|
|||
|
UInt32 RTAS_Set_Clock; /* token for RTAS clock set*/
|
|||
|
UInt32 RTAS_Restart; /* token for RTAS Restart*/
|
|||
|
UInt32 RTAS_Shutdown; /* token for RTAS Shutdown*/
|
|||
|
UInt32 RTAS_Restart_At; /* token for RTAS system startup at specified time*/
|
|||
|
UInt32 RTAS_EventScan; /* token for RTAS event scan*/
|
|||
|
UInt32 RTAS_Check_Exception; /* token for RTAS check exception*/
|
|||
|
UInt32 RTAS_Read_PCI_Config; /* token for RTAS read PCI config*/
|
|||
|
UInt32 RTAS_Write_PCI_Config; /* token for RTAS write PCI config*/
|
|||
|
|
|||
|
/* SIO interrupt source numbers for the MPIC*/
|
|||
|
|
|||
|
SInt16 SIOIntVect; /* SIO (8259 cascade vector) vector number*/
|
|||
|
SInt16 SIOIntBit; /* SIO (8259 cascade vector) bit number*/
|
|||
|
|
|||
|
SInt32 Signature; /* signature for this record ('Hnfo')*/
|
|||
|
|
|||
|
/* more interrupt source numbers*/
|
|||
|
|
|||
|
SInt16 SpuriousIntVect; /* spurious vector number*/
|
|||
|
|
|||
|
SInt16 CPU_ID; /* the ID of this CPU (universal-tables-related)*/
|
|||
|
|
|||
|
SInt16 SCCAIntVect; /* SCC A (non-DMA) vector number*/
|
|||
|
SInt16 SCCBIntVect; /* SCC B (non-DMA) vector number*/
|
|||
|
SInt16 SCSIIntVect; /* SCSI vector number*/
|
|||
|
SInt16 SCSIDMAIntVect; /* SCSI DMA vector number*/
|
|||
|
SInt16 VIAIntVect; /* VIA vector number*/
|
|||
|
SInt16 VIAIntBit; /* VIA bit number*/
|
|||
|
SInt16 ADBIntVect; /* ADB vector number*/
|
|||
|
SInt16 NMIIntVect; /* NMI vector number*/
|
|||
|
SInt16 NMIIntBit; /* NMI bit number*/
|
|||
|
|
|||
|
/* current (actively changing) interrupt handling variables*/
|
|||
|
|
|||
|
SInt16 ISAPendingInt; /* currently pending ISA/8259 interrupt*/
|
|||
|
SInt8 CompletedInts[8]; /* completed interrupts*/
|
|||
|
|
|||
|
SInt32 HardwareInfoFlags; /* 32 bits of flags (see enum above)*/
|
|||
|
|
|||
|
UInt32 RTAS_Get_PowerOn_Time; /* token for RTAS getting time for system startup*/
|
|||
|
|
|||
|
UInt32 filler1[1]; /* pad to cache block alignment*/
|
|||
|
};
|
|||
|
typedef struct NKHWInfo NKHWInfo;
|
|||
|
|
|||
|
enum {
|
|||
|
kHWInfoVersion = 0x0103 /* 1.0.3*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
/*
|
|||
|
_______________________________________________________________________
|
|||
|
Processor State Record
|
|||
|
Used to save the state of the processor across sleep.
|
|||
|
_______________________________________________________________________
|
|||
|
*/
|
|||
|
|
|||
|
|
|||
|
enum {
|
|||
|
nkProcessorStatePtr = 0x5FFFEFC8, /* logical address of ProcessorState record*/
|
|||
|
nkProcessorStateVer = 0x5FFFEFCC, /* version number of ProcessorState record*/
|
|||
|
nkProcessorStateLen = 0x5FFFEFCE /* length of ProcessorState record*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
struct NKProcessorState {
|
|||
|
UInt32 saveDBAT0u; /* place to store DBAT0U*/
|
|||
|
UInt32 saveDBAT0l; /* place to store DBAT0L*/
|
|||
|
UInt32 saveDBAT1u; /* place to store DBAT1U*/
|
|||
|
UInt32 saveDBAT1l; /* place to store DBAT1L*/
|
|||
|
UInt32 saveDBAT2u; /* place to store DBAT2U*/
|
|||
|
UInt32 saveDBAT2l; /* place to store DBAT2L*/
|
|||
|
UInt32 saveDBAT3u; /* place to store DBAT3U*/
|
|||
|
UInt32 saveDBAT3l; /* place to store DBAT3L*/
|
|||
|
|
|||
|
UInt32 saveIBAT0u; /* place to store IBAT0U*/
|
|||
|
UInt32 saveIBAT0l; /* place to store IBAT0L*/
|
|||
|
UInt32 saveIBAT1u; /* place to store IBAT1U*/
|
|||
|
UInt32 saveIBAT1l; /* place to store IBAT1L*/
|
|||
|
UInt32 saveIBAT2u; /* place to store IBAT2U*/
|
|||
|
UInt32 saveIBAT2l; /* place to store IBAT2L*/
|
|||
|
UInt32 saveIBAT3u; /* place to store IBAT3U*/
|
|||
|
UInt32 saveIBAT3l; /* place to store IBAT3L*/
|
|||
|
|
|||
|
UInt32 saveSPRG0; /* place to store SPRG0*/
|
|||
|
UInt32 saveSPRG1; /* place to store SPRG1*/
|
|||
|
UInt32 saveSPRG2; /* place to store SPRG2*/
|
|||
|
UInt32 saveSPRG3; /* place to store SPRG3*/
|
|||
|
|
|||
|
UInt32 saveL2CR; /* place to store Arthur's L2CR*/
|
|||
|
|
|||
|
UInt32 saveSRR0; /* place to store SRR0*/
|
|||
|
UInt32 saveSRR1; /* place to store SRR1*/
|
|||
|
UInt32 saveTBU; /* place to store TBU*/
|
|||
|
UInt32 saveTBL; /* place to store TBL*/
|
|||
|
UInt32 saveHID0; /* place to store HID0*/
|
|||
|
UInt32 saveDEC; /* place to store DEC*/
|
|||
|
UInt32 saveMSR; /* place to store MSR*/
|
|||
|
UInt32 saveSDR1; /* place to store SDR1*/
|
|||
|
|
|||
|
/* saveKernelDataPtr needs to always be right after saveReturnAddr*/
|
|||
|
/* because of how the code works. DO NOT CHANGE THIS ORDERING!*/
|
|||
|
|
|||
|
UInt32 saveReturnAddr; /* place to store the addr to jump to.*/
|
|||
|
UInt32 saveKernelDataPtr; /* place to store the KernelDataPtr*/
|
|||
|
UInt32 saveContextPtr; /* place to store the ContextPtr*/
|
|||
|
};
|
|||
|
typedef struct NKProcessorState NKProcessorState;
|
|||
|
|
|||
|
enum {
|
|||
|
kProcessorStateVersion = 0x0100 /* 1.0.0*/
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
#if PRAGMA_STRUCT_ALIGN
|
|||
|
#pragma options align=reset
|
|||
|
#elif PRAGMA_STRUCT_PACKPUSH
|
|||
|
#pragma pack(pop)
|
|||
|
#elif PRAGMA_STRUCT_PACK
|
|||
|
#pragma pack()
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef PRAGMA_IMPORT_OFF
|
|||
|
#pragma import off
|
|||
|
#elif PRAGMA_IMPORT
|
|||
|
#pragma import reset
|
|||
|
#endif
|
|||
|
|
|||
|
#ifdef __cplusplus
|
|||
|
}
|
|||
|
#endif
|
|||
|
|
|||
|
#endif /* __PPCINFORECORDSPRIV__ */
|
|||
|
|