home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-ppc / residual.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  14.8 KB  |  351 lines

  1. /* 7/18/95                                                                    */
  2. /*----------------------------------------------------------------------------*/
  3. /*      Residual Data header definitions and prototypes                       */
  4. /*----------------------------------------------------------------------------*/
  5.  
  6. /* Structure map for RESIDUAL on PowerPC Reference Platform                   */
  7. /* residual.h - Residual data structure passed in r3.                         */
  8. /*              Load point passed in r4 to boot image.                        */
  9. /* For enum's: if given in hex then they are bit significant,                 */
  10. /*             i.e. only one bit is on for each enum                          */
  11. /* Reserved fields must be filled with zeros.                                */
  12.  
  13. #ifdef __KERNEL__
  14. #ifndef _RESIDUAL_
  15. #define _RESIDUAL_
  16.  
  17. #ifndef __ASSEMBLY__
  18.  
  19. #define MAX_CPUS 32                     /* These should be set to the maximum */
  20. #define MAX_MEMS 64                     /* number possible for this system.   */
  21. #define MAX_DEVICES 256                 /* Changing these will change the     */
  22. #define AVE_PNP_SIZE 32                 /* structure, hence the version of    */
  23. #define MAX_MEM_SEGS 64                 /* this header file.                  */
  24.  
  25. /*----------------------------------------------------------------------------*/
  26. /*               Public structures...                                         */
  27. /*----------------------------------------------------------------------------*/
  28.  
  29. #include <asm/pnp.h>
  30.  
  31. typedef enum _L1CACHE_TYPE {
  32.   NoneCAC = 0,
  33.   SplitCAC = 1,
  34.   CombinedCAC = 2
  35.   } L1CACHE_TYPE;
  36.  
  37. typedef enum _TLB_TYPE {
  38.   NoneTLB = 0,
  39.   SplitTLB = 1,
  40.   CombinedTLB = 2
  41.   } TLB_TYPE;
  42.  
  43. typedef enum _FIRMWARE_SUPPORT {
  44.   Conventional = 0x01,
  45.   OpenFirmware = 0x02,
  46.   Diagnostics = 0x04,
  47.   LowDebug = 0x08,
  48.   Multiboot = 0x10,
  49.   LowClient = 0x20,
  50.   Hex41 = 0x40,
  51.   FAT = 0x80,
  52.   ISO9660 = 0x0100,
  53.   SCSI_InitiatorID_Override = 0x0200,
  54.   Tape_Boot = 0x0400,
  55.   FW_Boot_Path = 0x0800
  56.   } FIRMWARE_SUPPORT;
  57.  
  58. typedef enum _FIRMWARE_SUPPLIERS {
  59.   IBMFirmware = 0x00,
  60.   MotoFirmware = 0x01,                  /* 7/18/95                            */
  61.   FirmWorks = 0x02,                     /* 10/5/95                            */
  62.   Bull = 0x03,                          /* 04/03/96                           */
  63.   } FIRMWARE_SUPPLIERS;
  64.  
  65. typedef enum _ENDIAN_SWITCH_METHODS {
  66.   UsePort92 = 0x01,
  67.   UsePCIConfigA8 = 0x02,
  68.   UseFF001030 = 0x03,
  69.   } ENDIAN_SWITCH_METHODS;
  70.  
  71. typedef enum _SPREAD_IO_METHODS {
  72.   UsePort850 = 0x00,
  73. /*UsePCIConfigA8 = 0x02,*/
  74.   } SPREAD_IO_METHODS;
  75.  
  76. typedef struct _VPD {
  77.  
  78.   /* Box dependent stuff */
  79.   unsigned char PrintableModel[32];     /* Null terminated string.
  80.                                            Must be of the form:
  81.                                            vvv,<20h>,<model designation>,<0x0>
  82.                                            where vvv is the vendor ID
  83.                                            e.g. IBM PPS MODEL 6015<0x0>       */
  84.   unsigned char Serial[16];             /* 12/94:
  85.                                            Serial Number; must be of the form:
  86.                                            vvv<serial number> where vvv is the
  87.                                            vendor ID.
  88.                                            e.g. IBM60151234567<20h><20h>      */
  89.   unsigned char Reserved[48];
  90.   unsigned long FirmwareSupplier;       /* See FirmwareSuppliers enum         */
  91.   unsigned long FirmwareSupports;       /* See FirmwareSupport enum           */
  92.   unsigned long NvramSize;              /* Size of nvram in bytes             */
  93.   unsigned long NumSIMMSlots;
  94.   unsigned short EndianSwitchMethod;    /* See EndianSwitchMethods enum       */
  95.   unsigned short SpreadIOMethod;        /* See SpreadIOMethods enum           */
  96.   unsigned long SmpIar;
  97.   unsigned long RAMErrLogOffset;        /* Heap offset to error log           */
  98.   unsigned long Reserved5;
  99.   unsigned long Reserved6;
  100.   unsigned long ProcessorHz;            /* Processor clock frequency in Hertz */
  101.   unsigned long ProcessorBusHz;         /* Processor bus clock frequency      */
  102.   unsigned long Reserved7;
  103.   unsigned long TimeBaseDivisor;        /* (Bus clocks per timebase tic)*1000 */
  104.   unsigned long WordWidth;              /* Word width in bits                 */
  105.   unsigned long PageSize;               /* Page size in bytes                 */
  106.   unsigned long CoherenceBlockSize;     /* Unit of transfer in/out of cache
  107.                                            for which coherency is maintained;
  108.                                            normally <= CacheLineSize.         */
  109.   unsigned long GranuleSize;            /* Unit of lock allocation to avoid   */
  110.                                         /*   false sharing of locks.          */
  111.  
  112.   /* L1 Cache variables */
  113.   unsigned long CacheSize;              /* L1 Cache size in KB. This is the   */
  114.                                         /*   total size of the L1, whether    */
  115.                                         /*   combined or split                */
  116.   unsigned long CacheAttrib;            /* L1CACHE_TYPE                       */
  117.   unsigned long CacheAssoc;             /* L1 Cache associativity. Use this
  118.                                            for combined cache. If split, put
  119.                                            zeros here.                        */
  120.   unsigned long CacheLineSize;          /* L1 Cache line size in bytes. Use
  121.                                            for combined cache. If split, put
  122.                                            zeros here.                        */
  123.   /* For split L1 Cache: (= combined if combined cache) */
  124.   unsigned long I_CacheSize;
  125.   unsigned long I_CacheAssoc;
  126.   unsigned long I_CacheLineSize;
  127.   unsigned long D_CacheSize;
  128.   unsigned long D_CacheAssoc;
  129.   unsigned long D_CacheLineSize;
  130.  
  131.   /* Translation Lookaside Buffer variables */
  132.   unsigned long TLBSize;                /* Total number of TLBs on the system */
  133.   unsigned long TLBAttrib;              /* Combined I+D or split TLB          */
  134.   unsigned long TLBAssoc;               /* TLB Associativity. Use this for
  135.                                            combined TLB. If split, put zeros
  136.                                            here.                              */
  137.   /* For split TLB: (= combined if combined TLB) */
  138.   unsigned long I_TLBSize;
  139.   unsigned long I_TLBAssoc;
  140.   unsigned long D_TLBSize;
  141.   unsigned long D_TLBAssoc;
  142.  
  143.   unsigned long ExtendedVPD;            /* Offset to extended VPD area;
  144.                                            null if unused                     */
  145.   } VPD;
  146.  
  147. typedef enum _DEVICE_FLAGS {
  148.   Enabled = 0x4000,                     /* 1 - PCI device is enabled          */
  149.   Integrated = 0x2000,
  150.   Failed = 0x1000,                      /* 1 - device failed POST code tests  */
  151.   Static = 0x0800,                      /* 0 - dynamically configurable
  152.                                            1 - static                         */
  153.   Dock = 0x0400,                        /* 0 - not a docking station device
  154.                                            1 - is a docking station device    */
  155.   Boot = 0x0200,                        /* 0 - device cannot be used for BOOT
  156.                                            1 - can be a BOOT device           */
  157.   Configurable = 0x0100,                /* 1 - device is configurable         */
  158.   Disableable = 0x80,                   /* 1 - device can be disabled         */
  159.   PowerManaged = 0x40,                  /* 0 - not managed; 1 - managed       */
  160.   ReadOnly = 0x20,                      /* 1 - device is read only            */
  161.   Removable = 0x10,                     /* 1 - device is removable            */
  162.   ConsoleIn = 0x08,
  163.   ConsoleOut = 0x04,
  164.   Input = 0x02,
  165.   Output = 0x01
  166.   } DEVICE_FLAGS;
  167.  
  168. typedef enum _BUS_ID {
  169.   ISADEVICE = 0x01,
  170.   EISADEVICE = 0x02,
  171.   PCIDEVICE = 0x04,
  172.   PCMCIADEVICE = 0x08,
  173.   PNPISADEVICE = 0x10,
  174.   MCADEVICE = 0x20,
  175.   MXDEVICE = 0x40,                      /* Devices on mezzanine bus           */
  176.   PROCESSORDEVICE = 0x80,               /* Devices on processor bus           */
  177.   VMEDEVICE = 0x100,
  178.   } BUS_ID;
  179.  
  180. typedef struct _DEVICE_ID {
  181.   unsigned long BusId;                  /* See BUS_ID enum above              */
  182.   unsigned long DevId;                  /* Big Endian format                  */
  183.   unsigned long SerialNum;              /* For multiple usage of a single
  184.                                            DevId                              */
  185.   unsigned long Flags;                  /* See DEVICE_FLAGS enum above        */
  186.   unsigned char BaseType;               /* See pnp.h for bit definitions      */
  187.   unsigned char SubType;                /* See pnp.h for bit definitions      */
  188.   unsigned char Interface;              /* See pnp.h for bit definitions      */
  189.   unsigned char Spare;
  190.   } DEVICE_ID;
  191.  
  192. typedef union _BUS_ACCESS {
  193.   struct _PnPAccess{
  194.     unsigned char CSN;
  195.     unsigned char LogicalDevNumber;
  196.     unsigned short ReadDataPort;
  197.     } PnPAccess;
  198.   struct _ISAAccess{
  199.     unsigned char SlotNumber;           /* ISA Slot Number generally not
  200.                                            available; 0 if unknown            */
  201.     unsigned char LogicalDevNumber;
  202.     unsigned short ISAReserved;
  203.     } ISAAccess;
  204.   struct _MCAAccess{
  205.     unsigned char SlotNumber;
  206.     unsigned char LogicalDevNumber;
  207.     unsigned short MCAReserved;
  208.     } MCAAccess;
  209.   struct _PCMCIAAccess{
  210.     unsigned char SlotNumber;
  211.     unsigned char LogicalDevNumber;
  212.     unsigned short PCMCIAReserved;
  213.     } PCMCIAAccess;
  214.   struct _EISAAccess{
  215.     unsigned char SlotNumber;
  216.     unsigned char FunctionNumber;
  217.     unsigned short EISAReserved;
  218.     } EISAAccess;
  219.   struct _PCIAccess{
  220.     unsigned char BusNumber;
  221.     unsigned char DevFuncNumber;
  222.     unsigned short PCIReserved;
  223.     } PCIAccess;
  224.   struct _ProcBusAccess{
  225.     unsigned char BusNumber;
  226.     unsigned char BUID;
  227.     unsigned short ProcBusReserved;
  228.     } ProcBusAccess;
  229.   } BUS_ACCESS;
  230.  
  231. /* Per logical device information */
  232. typedef struct _PPC_DEVICE {
  233.   DEVICE_ID DeviceId;
  234.   BUS_ACCESS BusAccess;
  235.  
  236.   /* The following three are offsets into the DevicePnPHeap */
  237.   /* All are in PnP compressed format                       */
  238.   unsigned long AllocatedOffset;        /* Allocated resource description     */
  239.   unsigned long PossibleOffset;         /* Possible resource description      */
  240.   unsigned long CompatibleOffset;       /* Compatible device identifiers      */
  241.   } PPC_DEVICE;
  242.  
  243. typedef enum _CPU_STATE {
  244.   CPU_GOOD = 0,                         /* CPU is present, and active         */
  245.   CPU_GOOD_FW = 1,                      /* CPU is present, and in firmware    */
  246.   CPU_OFF = 2,                          /* CPU is present, but inactive       */
  247.   CPU_FAILED = 3,                       /* CPU is present, but failed POST    */
  248.   CPU_NOT_PRESENT = 255                 /* CPU not present                    */
  249.   } CPU_STATE;
  250.  
  251. typedef struct _PPC_CPU {
  252.   unsigned long CpuType;                /* Result of mfspr from Processor
  253.                                            Version Register (PVR).
  254.                                            PVR(0-15) = Version (e.g. 601)
  255.                                            PVR(16-31 = EC Level               */
  256.   unsigned char CpuNumber;              /* CPU Number for this processor      */
  257.   unsigned char CpuState;               /* CPU State, see CPU_STATE enum      */
  258.   unsigned short Reserved;
  259.   } PPC_CPU;
  260.  
  261. typedef struct _PPC_MEM {
  262.   unsigned long SIMMSize;               /* 0 - absent or bad
  263.                                            8M, 32M (in MB)                    */
  264.   } PPC_MEM;
  265.  
  266. typedef enum _MEM_USAGE {
  267.   Other = 0x8000,
  268.   ResumeBlock = 0x4000,                 /* for use by power management        */
  269.   SystemROM = 0x2000,                   /* Flash memory (populated)           */
  270.   UnPopSystemROM = 0x1000,              /* Unpopulated part of SystemROM area */
  271.   IOMemory = 0x0800,
  272.   SystemIO = 0x0400,
  273.   SystemRegs = 0x0200,
  274.   PCIAddr = 0x0100,
  275.   PCIConfig = 0x80,
  276.   ISAAddr = 0x40,
  277.   Unpopulated = 0x20,                   /* Unpopulated part of System Memory  */
  278.   Free = 0x10,                          /* Free part of System Memory         */
  279.   BootImage = 0x08,                     /* BootImage part of System Memory    */
  280.   FirmwareCode = 0x04,                  /* FirmwareCode part of System Memory */
  281.   FirmwareHeap = 0x02,                  /* FirmwareHeap part of System Memory */
  282.   FirmwareStack = 0x01                  /* FirmwareStack part of System Memory*/
  283.   } MEM_USAGE;
  284.  
  285. typedef struct _MEM_MAP {
  286.   unsigned long Usage;                  /* See MEM_USAGE above                */
  287.   unsigned long BasePage;               /* Page number measured in 4KB pages  */
  288.   unsigned long PageCount;              /* Page count measured in 4KB pages   */
  289.   } MEM_MAP;
  290.  
  291. typedef struct _RESIDUAL {
  292.   unsigned long ResidualLength;         /* Length of Residual                 */
  293.   unsigned char Version;                /* of this data structure             */
  294.   unsigned char Revision;               /* of this data structure             */
  295.   unsigned short EC;                    /* of this data structure             */
  296.   /* VPD */
  297.   VPD VitalProductData;
  298.   /* CPU */
  299.   unsigned short MaxNumCpus;            /* Max CPUs in this system            */
  300.   unsigned short ActualNumCpus;         /* ActualNumCpus < MaxNumCpus means   */
  301.                                         /* that there are unpopulated or      */
  302.                                         /* otherwise unusable cpu locations   */
  303.   PPC_CPU Cpus[MAX_CPUS];
  304.   /* Memory */
  305.   unsigned long TotalMemory;            /* Total amount of memory installed   */
  306.   unsigned long GoodMemory;             /* Total amount of good memory        */
  307.   unsigned long ActualNumMemSegs;
  308.   MEM_MAP Segs[MAX_MEM_SEGS];
  309.   unsigned long ActualNumMemories;
  310.   PPC_MEM Memories[MAX_MEMS];
  311.   /* Devices */
  312.   unsigned long ActualNumDevices;
  313.   PPC_DEVICE Devices[MAX_DEVICES];
  314.   unsigned char DevicePnPHeap[2*MAX_DEVICES*AVE_PNP_SIZE];
  315.   } RESIDUAL;
  316.  
  317.  
  318. /*
  319.  * Forward declaration - we can't include <linux/pci.h> because it
  320.  * breaks the boot loader
  321.  */
  322. struct pci_dev;
  323.  
  324. extern RESIDUAL *res;
  325. extern void print_residual_device_info(void);
  326. extern PPC_DEVICE *residual_find_device(unsigned long BusMask,
  327.                     unsigned char * DevID, int BaseType,
  328.                     int SubType, int Interface, int n);
  329. extern int residual_pcidev_irq(struct pci_dev *dev);
  330. extern void residual_irq_mask(char *irq_edge_mask_lo, char *irq_edge_mask_hi);
  331. extern unsigned int residual_isapic_addr(void);
  332. extern PnP_TAG_PACKET *PnP_find_packet(unsigned char *p, unsigned packet_tag,
  333.                        int n);
  334. extern PnP_TAG_PACKET *PnP_find_small_vendor_packet(unsigned char *p,
  335.                             unsigned packet_type,
  336.                             int n);
  337. extern PnP_TAG_PACKET *PnP_find_large_vendor_packet(unsigned char *p,
  338.                             unsigned packet_type,
  339.                             int n);
  340.  
  341. #ifdef CONFIG_PREP_RESIDUAL
  342. #define have_residual_data    (res && res->ResidualLength)
  343. #else
  344. #define have_residual_data    0
  345. #endif
  346.  
  347. #endif /* __ASSEMBLY__ */
  348. #endif  /* ndef _RESIDUAL_ */
  349.  
  350. #endif /* __KERNEL__ */
  351.