/* 7/18/95                                                                    */
/*----------------------------------------------------------------------------*/
/*      Residual Data header definitions and prototypes                       */
/*----------------------------------------------------------------------------*/

/* Structure map for RESIDUAL on PowerPC Reference Platform                   */
/* residual.h - Residual data structure passed in r3.                         */
/*              Load point passed in r4 to boot image.                        */
/* For enum's: if given in hex then they are bit significant,                 */
/*             i.e. only one bit is on for each enum                          */
/* Reserved fields must be filled with zeros.                                */

#ifndef _RESIDUAL_
#define _RESIDUAL_

#ifndef __ASSEMBLY__

#define MAX_CPUS 32                     /* These should be set to the maximum */
#define MAX_MEMS 64                     /* number possible for this system.   */
#define MAX_DEVICES 256                 /* Changing these will change the     */
#define AVE_PNP_SIZE 32                 /* structure, hence the version of    */
#define MAX_MEM_SEGS 64                 /* this header file.                  */

/*----------------------------------------------------------------------------*/
/*               Public structures...                                         */
/*----------------------------------------------------------------------------*/

#include "pnp.h"

typedef enum _L1CACHE_TYPE {
  NoneCAC = 0,
  SplitCAC = 1,
  CombinedCAC = 2
  } L1CACHE_TYPE;

typedef enum _TLB_TYPE {
  NoneTLB = 0,
  SplitTLB = 1,
  CombinedTLB = 2
  } TLB_TYPE;

typedef enum _FIRMWARE_SUPPORT {
  Conventional = 0x01,
  OpenFirmware = 0x02,
  Diagnostics = 0x04,
  LowDebug = 0x08,
  Multiboot = 0x10,
  LowClient = 0x20,
  Hex41 = 0x40,
  FAT = 0x80,
  ISO9660 = 0x0100,
  SCSI_InitiatorID_Override = 0x0200,
  Tape_Boot = 0x0400,
  FW_Boot_Path = 0x0800
  } FIRMWARE_SUPPORT;

typedef enum _FIRMWARE_SUPPLIERS {
  IBMFirmware = 0x00,
  MotoFirmware = 0x01,                  /* 7/18/95                            */
  FirmWorks = 0x02,                     /* 10/5/95                            */
  Bull = 0x03,                          /* 04/03/96                           */
  } FIRMWARE_SUPPLIERS;

typedef enum _ENDIAN_SWITCH_METHODS {
  UsePort92 = 0x01,
  UsePCIConfigA8 = 0x02,
  UseFF001030 = 0x03,
  } ENDIAN_SWITCH_METHODS;

typedef enum _SPREAD_IO_METHODS {
  UsePort850 = 0x00,
/*UsePCIConfigA8 = 0x02,*/
  } SPREAD_IO_METHODS;

typedef struct _VPD {

  /* Box dependent stuff */
  unsigned char PrintableModel[32];     /* Null terminated string.
					   Must be of the form:
					   vvv,<20h>,<model designation>,<0x0>
					   where vvv is the vendor ID
					   e.g. IBM PPS MODEL 6015<0x0>       */
  unsigned char Serial[16];             /* 12/94:
					   Serial Number; must be of the form:
					   vvv<serial number> where vvv is the
					   vendor ID.
					   e.g. IBM60151234567<20h><20h>      */
  unsigned char Reserved[48];
  unsigned long FirmwareSupplier;       /* See FirmwareSuppliers enum         */
  unsigned long FirmwareSupports;       /* See FirmwareSupport enum           */
  unsigned long NvramSize;              /* Size of nvram in bytes             */
  unsigned long NumSIMMSlots;
  unsigned short EndianSwitchMethod;    /* See EndianSwitchMethods enum       */
  unsigned short SpreadIOMethod;        /* See SpreadIOMethods enum           */
  unsigned long SmpIar;
  unsigned long RAMErrLogOffset;        /* Heap offset to error log           */
  unsigned long Reserved5;
  unsigned long Reserved6;
  unsigned long ProcessorHz;            /* Processor clock frequency in Hertz */
  unsigned long ProcessorBusHz;         /* Processor bus clock frequency      */
  unsigned long Reserved7;
  unsigned long TimeBaseDivisor;        /* (Bus clocks per timebase tic)*1000 */
  unsigned long WordWidth;              /* Word width in bits                 */
  unsigned long PageSize;               /* Page size in bytes                 */
  unsigned long CoherenceBlockSize;     /* Unit of transfer in/out of cache
					   for which coherency is maintained;
					   normally <= CacheLineSize.         */
  unsigned long GranuleSize;            /* Unit of lock allocation to avoid   */
					/*   false sharing of locks.          */

  /* L1 Cache variables */
  unsigned long CacheSize;              /* L1 Cache size in KB. This is the   */
					/*   total size of the L1, whether    */
					/*   combined or split                */
  unsigned long CacheAttrib;            /* L1CACHE_TYPE                       */
  unsigned long CacheAssoc;             /* L1 Cache associativity. Use this
					   for combined cache. If split, put
					   zeros here.                        */
  unsigned long CacheLineSize;          /* L1 Cache line size in bytes. Use
					   for combined cache. If split, put
					   zeros here.                        */
  /* For split L1 Cache: (= combined if combined cache) */
  unsigned long I_CacheSize;
  unsigned long I_CacheAssoc;
  unsigned long I_CacheLineSize;
  unsigned long D_CacheSize;
  unsigned long D_CacheAssoc;
  unsigned long D_CacheLineSize;

  /* Translation Lookaside Buffer variables */
  unsigned long TLBSize;                /* Total number of TLBs on the system */
  unsigned long TLBAttrib;              /* Combined I+D or split TLB          */
  unsigned long TLBAssoc;               /* TLB Associativity. Use this for
					   combined TLB. If split, put zeros
					   here.                              */
  /* For split TLB: (= combined if combined TLB) */
  unsigned long I_TLBSize;
  unsigned long I_TLBAssoc;
  unsigned long D_TLBSize;
  unsigned long D_TLBAssoc;

  unsigned long ExtendedVPD;            /* Offset to extended VPD area;
					   null if unused                     */
  } VPD;

typedef enum _DEVICE_FLAGS {
  Enabled = 0x4000,                     /* 1 - PCI device is enabled          */
  Integrated = 0x2000,
  Failed = 0x1000,                      /* 1 - device failed POST code tests  */
  Static = 0x0800,                      /* 0 - dynamically configurable
					   1 - static                         */
  Dock = 0x0400,                        /* 0 - not a docking station device
					   1 - is a docking station device    */
  Boot = 0x0200,                        /* 0 - device cannot be used for BOOT
					   1 - can be a BOOT device           */
  Configurable = 0x0100,                /* 1 - device is configurable         */
  Disableable = 0x80,                   /* 1 - device can be disabled         */
  PowerManaged = 0x40,                  /* 0 - not managed; 1 - managed       */
  ReadOnly = 0x20,                      /* 1 - device is read only            */
  Removable = 0x10,                     /* 1 - device is removable            */
  ConsoleIn = 0x08,
  ConsoleOut = 0x04,
  Input = 0x02,
  Output = 0x01
  } DEVICE_FLAGS;

typedef enum _BUS_ID {
  ISADEVICE = 0x01,
  EISADEVICE = 0x02,
  PCIDEVICE = 0x04,
  PCMCIADEVICE = 0x08,
  PNPISADEVICE = 0x10,
  MCADEVICE = 0x20,
  MXDEVICE = 0x40,                      /* Devices on mezzanine bus           */
  PROCESSORDEVICE = 0x80,               /* Devices on processor bus           */
  VMEDEVICE = 0x100,
  } BUS_ID;

typedef struct _DEVICE_ID {
  unsigned long BusId;                  /* See BUS_ID enum above              */
  unsigned long DevId;                  /* Big Endian format                  */
  unsigned long SerialNum;              /* For multiple usage of a single
					   DevId                              */
  unsigned long Flags;                  /* See DEVICE_FLAGS enum above        */
  unsigned char BaseType;               /* See pnp.h for bit definitions      */
  unsigned char SubType;                /* See pnp.h for bit definitions      */
  unsigned char Interface;              /* See pnp.h for bit definitions      */
  unsigned char Spare;
  } DEVICE_ID;

typedef union _BUS_ACCESS {
  struct _PnPAccess{
    unsigned char CSN;
    unsigned char LogicalDevNumber;
    unsigned short ReadDataPort;
    } PnPAccess;
  struct _ISAAccess{
    unsigned char SlotNumber;           /* ISA Slot Number generally not
					   available; 0 if unknown            */
    unsigned char LogicalDevNumber;
    unsigned short ISAReserved;
    } ISAAccess;
  struct _MCAAccess{
    unsigned char SlotNumber;
    unsigned char LogicalDevNumber;
    unsigned short MCAReserved;
    } MCAAccess;
  struct _PCMCIAAccess{
    unsigned char SlotNumber;
    unsigned char LogicalDevNumber;
    unsigned short PCMCIAReserved;
    } PCMCIAAccess;
  struct _EISAAccess{
    unsigned char SlotNumber;
    unsigned char FunctionNumber;
    unsigned short EISAReserved;
    } EISAAccess;
  struct _PCIAccess{
    unsigned char BusNumber;
    unsigned char DevFuncNumber;
    unsigned short PCIReserved;
    } PCIAccess;
  struct _ProcBusAccess{
    unsigned char BusNumber;
    unsigned char BUID;
    unsigned short ProcBusReserved;
    } ProcBusAccess;
  } BUS_ACCESS;

/* Per logical device information */
typedef struct _PPC_DEVICE {
  DEVICE_ID DeviceId;
  BUS_ACCESS BusAccess;

  /* The following three are offsets into the DevicePnPHeap */
  /* All are in PnP compressed format                       */
  unsigned long AllocatedOffset;        /* Allocated resource description     */
  unsigned long PossibleOffset;         /* Possible resource description      */
  unsigned long CompatibleOffset;       /* Compatible device identifiers      */
  } PPC_DEVICE;

typedef enum _CPU_STATE {
  CPU_GOOD = 0,                         /* CPU is present, and active         */
  CPU_GOOD_FW = 1,                      /* CPU is present, and in firmware    */
  CPU_OFF = 2,                          /* CPU is present, but inactive       */
  CPU_FAILED = 3,                       /* CPU is present, but failed POST    */
  CPU_NOT_PRESENT = 255                 /* CPU not present                    */
  } CPU_STATE;

typedef struct _PPC_CPU {
  unsigned long CpuType;                /* Result of mfspr from Processor
					   Version Register (PVR).
					   PVR(0-15) = Version (e.g. 601)
					   PVR(16-31 = EC Level               */
  unsigned char CpuNumber;              /* CPU Number for this processor      */
  unsigned char CpuState;               /* CPU State, see CPU_STATE enum      */
  unsigned short Reserved;
  } PPC_CPU;

typedef struct _PPC_MEM {
  unsigned long SIMMSize;               /* 0 - absent or bad
					   8M, 32M (in MB)                    */
  } PPC_MEM;

typedef enum _MEM_USAGE {
  Other = 0x8000,
  ResumeBlock = 0x4000,                 /* for use by power management        */
  SystemROM = 0x2000,                   /* Flash memory (populated)           */
  UnPopSystemROM = 0x1000,              /* Unpopulated part of SystemROM area */
  IOMemory = 0x0800,
  SystemIO = 0x0400,
  SystemRegs = 0x0200,
  PCIAddr = 0x0100,
  PCIConfig = 0x80,
  ISAAddr = 0x40,
  Unpopulated = 0x20,                   /* Unpopulated part of System Memory  */
  Free = 0x10,                          /* Free part of System Memory         */
  BootImage = 0x08,                     /* BootImage part of System Memory    */
  FirmwareCode = 0x04,                  /* FirmwareCode part of System Memory */
  FirmwareHeap = 0x02,                  /* FirmwareHeap part of System Memory */
  FirmwareStack = 0x01                  /* FirmwareStack part of System Memory*/
  } MEM_USAGE;

typedef struct _MEM_MAP {
  unsigned long Usage;                  /* See MEM_USAGE above                */
  unsigned long BasePage;               /* Page number measured in 4KB pages  */
  unsigned long PageCount;              /* Page count measured in 4KB pages   */
  } MEM_MAP;

typedef struct _RESIDUAL {
  unsigned long ResidualLength;         /* Length of Residual                 */
  unsigned char Version;                /* of this data structure             */
  unsigned char Revision;               /* of this data structure             */
  unsigned short EC;                    /* of this data structure             */
  /* VPD */
  VPD VitalProductData;
  /* CPU */
  unsigned short MaxNumCpus;            /* Max CPUs in this system            */
  unsigned short ActualNumCpus;         /* ActualNumCpus < MaxNumCpus means   */
					/* that there are unpopulated or      */
					/* otherwise unusable cpu locations   */
  PPC_CPU Cpus[MAX_CPUS];
  /* Memory */
  unsigned long TotalMemory;            /* Total amount of memory installed   */
  unsigned long GoodMemory;             /* Total amount of good memory        */
  unsigned long ActualNumMemSegs;
  MEM_MAP Segs[MAX_MEM_SEGS];
  unsigned long ActualNumMemories;
  PPC_MEM Memories[MAX_MEMS];
  /* Devices */
  unsigned long ActualNumDevices;
  PPC_DEVICE Devices[MAX_DEVICES];
  unsigned char DevicePnPHeap[2*MAX_DEVICES*AVE_PNP_SIZE];
  } RESIDUAL;


extern RESIDUAL *res;
extern void print_residual_device_info(void);
extern PPC_DEVICE *residual_find_device(unsigned long BusMask,
					unsigned char * DevID, int BaseType,
					int SubType, int Interface, int n);
extern PnP_TAG_PACKET *PnP_find_packet(unsigned char *p, unsigned packet_tag,
				       int n);
extern PnP_TAG_PACKET *PnP_find_small_vendor_packet(unsigned char *p,
						    unsigned packet_type,
						    int n);
extern PnP_TAG_PACKET *PnP_find_large_vendor_packet(unsigned char *p,
						    unsigned packet_type,
						    int n);
#endif /* __ASSEMBLY__ */
#endif  /* ndef _RESIDUAL_ */
