1*36fd90dcSjsg /* $OpenBSD: pdc.h,v 1.37 2021/03/11 11:16:57 jsg Exp $ */ 29c0b8818Smickey 39c0b8818Smickey /* 49c0b8818Smickey * Copyright (c) 1990 mt Xinu, Inc. All rights reserved. 59c0b8818Smickey * Copyright (c) 1990,1991,1992,1994 University of Utah. All rights reserved. 69c0b8818Smickey * 79c0b8818Smickey * Permission to use, copy, modify and distribute this software is hereby 89c0b8818Smickey * granted provided that (1) source code retains these copyright, permission, 99c0b8818Smickey * and disclaimer notices, and (2) redistributions including binaries 109c0b8818Smickey * reproduce the notices in supporting documentation, and (3) all advertising 119c0b8818Smickey * materials mentioning features or use of this software display the following 129c0b8818Smickey * acknowledgement: ``This product includes software developed by the 139c0b8818Smickey * Computer Systems Laboratory at the University of Utah.'' 149c0b8818Smickey * 159c0b8818Smickey * Copyright (c) 1990 mt Xinu, Inc. 169c0b8818Smickey * This file may be freely distributed in any form as long as 179c0b8818Smickey * this copyright notice is included. 189c0b8818Smickey * MTXINU, THE UNIVERSITY OF UTAH, AND CSL PROVIDE THIS SOFTWARE ``AS 199c0b8818Smickey * IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 209c0b8818Smickey * WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND 219c0b8818Smickey * FITNESS FOR A PARTICULAR PURPOSE. 229c0b8818Smickey * 239c0b8818Smickey * CSL requests users of this software to return to csl-dist@cs.utah.edu any 249c0b8818Smickey * improvements that they make and grant CSL redistribution rights. 259c0b8818Smickey * 269c0b8818Smickey * Utah $Hdr: pdc.h 1.12 94/12/14$ 27b79994e1Smickey * Author: Jeff Forys (CSS), Dave Slattengren (mtXinu) 289c0b8818Smickey */ 299c0b8818Smickey 30cddff70fSmickey #ifndef _MACHINE_PDC_H_ 31cddff70fSmickey #define _MACHINE_PDC_H_ 329c0b8818Smickey 339c0b8818Smickey /* 349c0b8818Smickey * Definitions for interaction with "Processor Dependent Code", 359c0b8818Smickey * which is a set of ROM routines used to provide information to the OS. 369c0b8818Smickey * Also includes definitions for the layout of "Page Zero" memory when 379c0b8818Smickey * boot code is invoked. 389c0b8818Smickey * 399c0b8818Smickey * Glossary: 409c0b8818Smickey * PDC: Processor Dependent Code (ROM or copy of ROM). 419c0b8818Smickey * IODC: I/O Dependent Code (module-type dependent code). 429c0b8818Smickey * IPL: Boot program (loaded into memory from boot device). 439c0b8818Smickey * HPA: Hard Physical Address (hardwired address). 449c0b8818Smickey * SPA: Soft Physical Address (reconfigurable address). 45c325d8d3Smickey * 46c325d8d3Smickey * 47c325d8d3Smickey * 48c325d8d3Smickey * 49c325d8d3Smickey * Definitions for talking to IODC (I/O Dependent Code). 50c325d8d3Smickey * 51c325d8d3Smickey * The PDC is used to load I/O Dependent Code from a particular module. 52c325d8d3Smickey * I/O Dependent Code is module-type dependent software which provides 53c325d8d3Smickey * a uniform way to identify, initialize, and access a module (and in 54c325d8d3Smickey * some cases, their devices). 559c0b8818Smickey */ 569c0b8818Smickey 579c0b8818Smickey /* 589c0b8818Smickey * Our Initial Memory Module is laid out as follows. 599c0b8818Smickey * 609c0b8818Smickey * 0x000 +--------------------+ 619c0b8818Smickey * | Page Zero (iomod.h)| 629c0b8818Smickey * 0x800 +--------------------+ 639c0b8818Smickey * | | 649c0b8818Smickey * | | 659c0b8818Smickey * | PDC | 669c0b8818Smickey * | | 679c0b8818Smickey * | | 689c0b8818Smickey * MEM_FREE +--------------------+ 699c0b8818Smickey * | | 709c0b8818Smickey * | Console IODC | 719c0b8818Smickey * | | 722706414aSmickey * MEM_FREE+64k +--------------------+ 739c0b8818Smickey * | | 749c0b8818Smickey * | Boot Device IODC | 759c0b8818Smickey * | | 769c0b8818Smickey * IPL_START +--------------------+ 779c0b8818Smickey * | | 789c0b8818Smickey * | IPL Code or Kernel | 799c0b8818Smickey * | | 809c0b8818Smickey * +--------------------+ 819c0b8818Smickey * 829c0b8818Smickey * Restrictions: 839c0b8818Smickey * MEM_FREE (pagezero.mem_free) can be no greater than 32K. 849c0b8818Smickey * The PDC may use up to MEM_FREE + 32K (for Console & Boot IODC). 859c0b8818Smickey * IPL_START must be less than or equal to 64K. 869c0b8818Smickey * 879c0b8818Smickey * The IPL (boot) Code is immediately relocated to RELOC (check 88c325d8d3Smickey * "../stand/Makefile") to make way for the Kernel. 899c0b8818Smickey */ 909c0b8818Smickey 912706414aSmickey #define IODC_MAXSIZE (16 * 4 * 1024) /* maximum size of IODC */ 9249ee3cc5Smickey #define IODC_MINIOSIZ 64 /* minimum buffer size for IODC call */ 9349ee3cc5Smickey #define IODC_MAXIOSIZ (64 * 1024) /* maximum buffer size for IODC call */ 94d64e9ed6Smickey #define IODC_IOSIZ (16 * 1024) 959c0b8818Smickey 96fee2a480Sderaadt #define PDC_ALIGNMENT __attribute__ ((__aligned__(64))) 97184e2458Sderaadt #define PDC_STACKSIZE (4 * PAGE_SIZE) 989c0b8818Smickey 999c0b8818Smickey /* 100c325d8d3Smickey * The PDC Entry Points and their arguments... 1019c0b8818Smickey */ 1029c0b8818Smickey 1039c0b8818Smickey #define PDC_POW_FAIL 1 /* prepare for power failure */ 1049c0b8818Smickey #define PDC_POW_FAIL_DFLT 0 1059c0b8818Smickey 1069c0b8818Smickey #define PDC_CHASSIS 2 /* update chassis display (see below) */ 1079c0b8818Smickey #define PDC_CHASSIS_DISP 0 /* update display */ 1089c0b8818Smickey #define PDC_CHASSIS_WARN 1 /* return warnings */ 1099c0b8818Smickey #define PDC_CHASSIS_ALL 2 /* update display & return warnings */ 1109b92c7dfSkettenis #define PDC_CHASSIS_INFO 128 /* return led/lcd info */ 1119c0b8818Smickey 1129c0b8818Smickey #define PDC_PIM 3 /* access Processor Internal Memory */ 1139c0b8818Smickey #define PDC_PIM_HPMC 0 /* read High Pri Mach Chk data */ 1149c0b8818Smickey #define PDC_PIM_SIZE 1 /* return size */ 1159c0b8818Smickey #define PDC_PIM_LPMC 2 /* read Low Pri Mach Chk data */ 1169c0b8818Smickey #define PDC_PIM_SBD 3 /* read soft boot data */ 1179c0b8818Smickey #define PDC_PIM_TOC 4 /* read TOC data (used to use HPMC) */ 1189c0b8818Smickey 1199c0b8818Smickey #define PDC_MODEL 4 /* processor model number info */ 1209c0b8818Smickey #define PDC_MODEL_INFO 0 /* processor model number info */ 1219c0b8818Smickey #define PDC_MODEL_BOOTID 1 /* set BOOT_ID of processor */ 1229c0b8818Smickey #define PDC_MODEL_COMP 2 /* return component version numbers */ 1239c0b8818Smickey #define PDC_MODEL_MODEL 3 /* return system model information */ 1249c0b8818Smickey #define PDC_MODEL_ENSPEC 4 /* enable product-specific instrs */ 1259c0b8818Smickey #define PDC_MODEL_DISPEC 5 /* disable product-specific instrs */ 12649ee3cc5Smickey #define PDC_MODEL_CPUID 6 /* return CPU versions */ 127*36fd90dcSjsg #define PDC_MODEL_CPBALITIES 7 /* return capabilities */ 12831aa52bdSmickey #define PDC_MODEL_GETBOOTOPTS 8 /* return boot test options */ 12931aa52bdSmickey #define PDC_MODEL_SETBOOTOPTS 9 /* set boot test options */ 1309c0b8818Smickey 1319c0b8818Smickey #define PDC_CACHE 5 /* return cache and TLB params */ 13241f0735cSmickey #define PDC_CACHE_DFLT 0 /* return parameters */ 13341f0735cSmickey #define PDC_CACHE_SETCS 1 /* set coherence state */ 13441f0735cSmickey #define PDC_CACHE_GETSPIDB 2 /* get space-id bits */ 1359c0b8818Smickey 1369c0b8818Smickey #define PDC_HPA 6 /* return HPA of processor */ 1379c0b8818Smickey #define PDC_HPA_DFLT 0 13849ee3cc5Smickey #define PDC_HPA_MODULES 1 1399c0b8818Smickey 1409c0b8818Smickey #define PDC_COPROC 7 /* return co-processor configuration */ 1419c0b8818Smickey #define PDC_COPROC_DFLT 0 1429c0b8818Smickey 1439c0b8818Smickey #define PDC_IODC 8 /* talk to IODC */ 1449c0b8818Smickey #define PDC_IODC_READ 0 /* read IODC entry point */ 145c325d8d3Smickey #define IODC_DATA 0 /* get first 16 bytes from mod IODC */ 146c325d8d3Smickey #define IODC_INIT 3 /* initialize (see options below) */ 147c325d8d3Smickey #define IODC_INIT_FIRST 2 /* find first device on module */ 148c325d8d3Smickey #define IODC_INIT_NEXT 3 /* find subsequent devices on module */ 149c325d8d3Smickey #define IODC_INIT_ALL 4 /* initialize module and device */ 150c325d8d3Smickey #define IODC_INIT_DEV 5 /* initialize device */ 151c325d8d3Smickey #define IODC_INIT_MOD 6 /* initialize module */ 152c325d8d3Smickey #define IODC_INIT_MSG 9 /* return error message(s) */ 153c325d8d3Smickey #define IODC_INIT_STR 20 /* find device w/ spec in string */ 154c325d8d3Smickey #define IODC_IO 4 /* perform I/O (see options below) */ 155c325d8d3Smickey #define IODC_IO_READ 0 /* read from boot device */ 156c325d8d3Smickey #define IODC_IO_WRITE 1 /* write to boot device */ 157c325d8d3Smickey #define IODC_IO_CONSIN 2 /* read from console */ 158c325d8d3Smickey #define IODC_IO_CONSOUT 3 /* write to conosle */ 159c325d8d3Smickey #define IODC_IO_CLOSE 4 /* close device */ 160c325d8d3Smickey #define IODC_IO_MSG 9 /* return error message(s) */ 161c325d8d3Smickey #define IODC_SPA 5 /* get extended SPA information */ 162c325d8d3Smickey #define IODC_SPA_DFLT 0 /* return SPA information */ 163c325d8d3Smickey #define IODC_TEST 8 /* perform self tests */ 164c325d8d3Smickey #define IODC_TEST_INFO 0 /* return test information */ 165c325d8d3Smickey #define IODC_TEST_STEP 1 /* execute a particular test */ 166c325d8d3Smickey #define IODC_TEST_TEST 2 /* describe a test section */ 167c325d8d3Smickey #define IODC_TEST_MSG 9 /* return error message(s) */ 1689c0b8818Smickey #define PDC_IODC_NINIT 2 /* non-destructive init */ 1699c0b8818Smickey #define PDC_IODC_DINIT 3 /* destructive init */ 1709c0b8818Smickey #define PDC_IODC_MEMERR 4 /* check for memory errors */ 171c325d8d3Smickey #define PDC_IODC_IMEMMASTER 5 /* interlieved memory master ID */ 1729c0b8818Smickey 1739c0b8818Smickey #define PDC_TOD 9 /* access time-of-day clock */ 1749c0b8818Smickey #define PDC_TOD_READ 0 /* read TOD clock */ 1759c0b8818Smickey #define PDC_TOD_WRITE 1 /* write TOD clock */ 1769c0b8818Smickey #define PDC_TOD_ITIMER 2 /* calibrate Interval Timer (CR16) */ 1779c0b8818Smickey 1789c0b8818Smickey #define PDC_STABLE 10 /* access Stable Storage (SS) */ 1799c0b8818Smickey #define PDC_STABLE_READ 0 /* read SS */ 1809c0b8818Smickey #define PDC_STABLE_WRITE 1 /* write SS */ 1819c0b8818Smickey #define PDC_STABLE_SIZE 2 /* return size of SS */ 1829c0b8818Smickey #define PDC_STABLE_VRFY 3 /* verify contents of SS */ 1839c0b8818Smickey #define PDC_STABLE_INIT 4 /* initialize SS */ 1849c0b8818Smickey 1859c0b8818Smickey #define PDC_NVM 11 /* access Non-Volatile Memory (NVM) */ 1869c0b8818Smickey #define PDC_NVM_READ 0 /* read NVM */ 1879c0b8818Smickey #define PDC_NVM_WRITE 1 /* write NVM */ 1889c0b8818Smickey #define PDC_NVM_SIZE 2 /* return size of NVM */ 1899c0b8818Smickey #define PDC_NVM_VRFY 3 /* verify contents of NVM */ 1909c0b8818Smickey #define PDC_NVM_INIT 4 /* initialize NVM */ 1919c0b8818Smickey 1929c0b8818Smickey #define PDC_ADD_VALID 12 /* check address for validity */ 1939c0b8818Smickey #define PDC_ADD_VALID_DFLT 0 1949c0b8818Smickey 1959c0b8818Smickey #define PDC_BUS_BAD 13 /* verify Error Detection Circuitry (EDC) */ 1969c0b8818Smickey #define PDC_BUS_BAD_DLFT 0 1979c0b8818Smickey 1989c0b8818Smickey #define PDC_DEBUG 14 /* return address of PDC debugger */ 1999c0b8818Smickey #define PDC_DEBUG_DFLT 0 2009c0b8818Smickey 2019c0b8818Smickey #define PDC_INSTR 15 /* return instr that invokes PDCE_CHECK */ 2029c0b8818Smickey #define PDC_INSTR_DFLT 0 2039c0b8818Smickey 2049c0b8818Smickey #define PDC_PROC 16 /* stop currently executing processor */ 20531aa52bdSmickey #define PDC_PROC_STOP 0 20631aa52bdSmickey #define PDC_PROC_RENDEZVOUS 1 2079c0b8818Smickey 2089c0b8818Smickey #define PDC_CONF 17 /* (de)configure a module */ 2099c0b8818Smickey #define PDC_CONF_DECONF 0 /* deconfigure module */ 2109c0b8818Smickey #define PDC_CONF_RECONF 1 /* reconfigure module */ 211*36fd90dcSjsg #define PDC_CONF_INFO 2 /* get config information */ 2129c0b8818Smickey 2139c0b8818Smickey #define PDC_BLOCK_TLB 18 /* Manage Block TLB entries (BTLB) */ 2149c0b8818Smickey #define PDC_BTLB_DEFAULT 0 /* Return BTLB configuration info */ 2159c0b8818Smickey #define PDC_BTLB_INSERT 1 /* Insert a BTLB entry */ 2169c0b8818Smickey #define PDC_BTLB_PURGE 2 /* Purge a BTLB entry */ 2179c0b8818Smickey #define PDC_BTLB_PURGE_ALL 3 /* Purge all BTLB entries */ 2189c0b8818Smickey 2199c0b8818Smickey #define PDC_TLB 19 /* Manage Hardware TLB handling */ 2209c0b8818Smickey #define PDC_TLB_INFO 0 /* Return HW-TLB configuration info */ 2219c0b8818Smickey #define PDC_TLB_CONFIG 1 /* Set HW-TLB pdir base and size */ 2229c0b8818Smickey 2239c0b8818Smickey #define PDC_TLB_CURRPDE 1 /* cr28 points to current pde on miss */ 2249c0b8818Smickey #define PDC_TLB_RESERVD 3 /* reserved */ 2259c0b8818Smickey #define PDC_TLB_NEXTPDE 5 /* cr28 points to next pde on miss */ 2269c0b8818Smickey #define PDC_TLB_WORD3 7 /* cr28 is word 3 of 16 byte pde */ 2279c0b8818Smickey 22849ee3cc5Smickey #define PDC_PSW 21 /* manage default values of configurable psw bits */ 22949ee3cc5Smickey #define PDC_PSW_GETMASK 0 /* get mask */ 23049ee3cc5Smickey #define PDC_PSW_DEFAULTS 1 /* get default bits values */ 23149ee3cc5Smickey #define PDC_PSW_SETDEFAULTS 2 /* set default bits values */ 23249ee3cc5Smickey 2332706414aSmickey #define PDC_SYSMAP 22 /* map system modules */ 2342706414aSmickey #define PDC_SYSMAP_FIND 0 /* find module by index */ 235797a06ecSmickey #define PDC_SYSMAP_ADDR 1 /* fetch list of addresses */ 236797a06ecSmickey #define PDC_SYSMAP_HPA 2 /* get hpa from devpath */ 2372706414aSmickey 238c325d8d3Smickey #define PDC_SOFT_POWER 23 /* support for soft power switch */ 239c325d8d3Smickey #define PDC_SOFT_POWER_INFO 0 /* get info about soft power switch */ 240c325d8d3Smickey #define PDC_SOFT_POWER_ENABLE 1 /* enable/disable soft power switch */ 241c325d8d3Smickey 2426d6f4087Smickey #define PDC_PAT_CELL 64 /* cell operations */ 2436d6f4087Smickey #define PDC_PAT_CELL_GETID 0 /* get cell id number */ 2446d6f4087Smickey #define PDC_PAT_CELL_GETINFO 1 /* get cell info */ 2456d6f4087Smickey #define PDC_PAT_CELL_MODULE 2 /* get module info */ 2466d6f4087Smickey #define PDC_PAT_IOVIEW 0 2476d6f4087Smickey #define PDC_PAT_PAVIEW 1 2486d6f4087Smickey 2496d6f4087Smickey #define PDC_PAT_CHASSIS 65 /* chassis log ops */ 2506d6f4087Smickey #define PDC_PAT_CHASSIS_WRITE 0 2516d6f4087Smickey #define PDC_PAT_CHASSIS_READ 1 2526d6f4087Smickey 2536d6f4087Smickey #define PDC_PAT_CPU 67 2546d6f4087Smickey 2556d6f4087Smickey #define PDC_PAT_EVENT 68 2566d6f4087Smickey 2576d6f4087Smickey #define PDC_PAT_HPMC 70 2586d6f4087Smickey 2599fd363f1Smickey #define PDC_PAT_IO 71 /* online services for IO modules */ 2609fd363f1Smickey #define PDC_PAT_IO_GET_PCI_RTSZ 15 2619fd363f1Smickey #define PDC_PAT_IO_GET_PCI_RT 16 2629fd363f1Smickey 2636d6f4087Smickey #define PDC_PAT_MEM 72 2646d6f4087Smickey 2656d6f4087Smickey #define PDC_PAT_NVRAM 73 2666d6f4087Smickey 2676d6f4087Smickey #define PDC_PAT_PROTDOM 74 2686d6f4087Smickey 2699c0b8818Smickey #define PDC_MEMMAP 128 /* hp700: return page information */ 2709c0b8818Smickey #define PDC_MEMMAP_HPA 0 /* map module # to HPA */ 2719c0b8818Smickey 272c325d8d3Smickey #define PDC_EEPROM 129 /* Hversion dependent */ 273c325d8d3Smickey #define PDC_EEPROM_READ_WORD 0 274c325d8d3Smickey #define PDC_EEPROM_WRITE_WORD 1 275c325d8d3Smickey #define PDC_EEPROM_READ_BYTE 2 276c325d8d3Smickey #define PDC_EEPROM_WRITE_BYTE 3 277c325d8d3Smickey 27875bc4546Skettenis #define PDC_IO 135 27975bc4546Skettenis #define PDC_IO_READ_AND_CLEAR_ERRORS 0 28075bc4546Skettenis #define PDC_IO_RESET 1 28175bc4546Skettenis #define PDC_IO_RESET_DEVICES 2 28275bc4546Skettenis 2835231817eSkettenis #define PDC_BROADCAST_RESET 136 2845231817eSkettenis #define PDC_DO_RESET 0 2855231817eSkettenis #define PDC_DO_FIRM_TEST_RESET 1 2865231817eSkettenis #define PDC_BR_RECONFIGURATION 2 2875231817eSkettenis 288c325d8d3Smickey #define PDC_LAN_STATION_ID 138 /* Hversion dependent mechanism for */ 289c325d8d3Smickey #define PDC_LAN_STATION_ID_READ 0 /* getting the lan station address */ 290c325d8d3Smickey 2919fd363f1Smickey #define PDC_PCI_INDEX 147 /* PCI rt access */ 2929fd363f1Smickey #define PDC_PCI_GET_INT_TBL_SZ 13 2939fd363f1Smickey #define PDC_PCI_GET_INT_TBL 14 2949fd363f1Smickey 295c325d8d3Smickey #define PDC_ERR_OK 0 /* operation complete */ 296c325d8d3Smickey #define PDC_ERR_WARNING 3 /* OK, but warning */ 297c325d8d3Smickey #define PDC_ERR_NOPROC -1 /* no such procedure */ 298c325d8d3Smickey #define PDC_ERR_NOPT -2 /* no such option */ 299c325d8d3Smickey #define PDC_ERR_COMPL -3 /* unable to complete w/o error */ 300c325d8d3Smickey #define PDC_ERR_EOD -9 /* end of device list */ 301c325d8d3Smickey #define PDC_ERR_INVAL -10 /* invalid argument */ 302c325d8d3Smickey #define PDC_ERR_PFAIL -12 /* aborted by powerfail */ 3039c0b8818Smickey 3045e254c8eSmickey #if !defined(_LOCORE) 3055e254c8eSmickey 3065e254c8eSmickey struct iomod; 3075e254c8eSmickey 308c4071fd1Smillert typedef int (*pdcio_t)(int, int, ...); 3096d6f4087Smickey typedef int (*iodcio_t)(u_int, int, ...); 3109c0b8818Smickey 3119c0b8818Smickey /* 3129c0b8818Smickey * Commonly used PDC calls and the structures they return. 3139c0b8818Smickey */ 3149c0b8818Smickey 31531aa52bdSmickey /* 31631aa52bdSmickey * Device path specifications used by PDC. 31731aa52bdSmickey */ 31831aa52bdSmickey struct device_path { 31931aa52bdSmickey u_char dp_flags; /* see bit definitions below */ 32031aa52bdSmickey char dp_bc[6]; /* Bus Converter routing info to a specific */ 32131aa52bdSmickey /* I/O adaptor (< 0 means none, > 63 resvd) */ 32231aa52bdSmickey u_char dp_mod; /* fixed field of specified module */ 32331aa52bdSmickey int dp_layers[6]; /* device-specific info (ctlr #, unit # ...) */ 3249c0b8818Smickey }; 3259c0b8818Smickey 3269c0b8818Smickey struct pdc_model { /* PDC_MODEL */ 3279c0b8818Smickey u_int hvers; /* hardware version */ 32849ee3cc5Smickey u_int rev : 4; /* zero for all native processors */ 32949ee3cc5Smickey u_int model : 20; /* 4 for all native processors */ 33049ee3cc5Smickey u_int sh : 1; /* shadow registers are present */ 33149ee3cc5Smickey u_int reserved : 2; /* reserved */ 33249ee3cc5Smickey u_int mc : 1; /* module category (A - 0, B - 1) */ 33349ee3cc5Smickey u_int reserved1 : 2; /* reserved */ 33449ee3cc5Smickey u_int pa_lvl : 2; /* PA-RISC level */ 3359c0b8818Smickey u_int hw_id; /* unique processor hardware identifier */ 3369c0b8818Smickey u_int boot_id; /* same as hw_id */ 3379c0b8818Smickey u_int sw_id; /* software security and licensing */ 338cddff70fSmickey u_int sw_cap; /* OS capabilities of processor */ 3399c0b8818Smickey u_int arch_rev; /* architecture revision */ 3409c0b8818Smickey u_int pot_key; /* potential key */ 3419c0b8818Smickey u_int curr_key; /* current key */ 3429c0b8818Smickey int filler1; 343cddff70fSmickey u_int filler2[22]; 3449c0b8818Smickey }; 3459c0b8818Smickey 34631aa52bdSmickey struct pdc_cpuid { /* PDC_MODEL_CPUID */ 34749ee3cc5Smickey u_int reserved : 20; 34849ee3cc5Smickey u_int version : 7; /* CPU version */ 34949ee3cc5Smickey u_int revision : 5; /* CPU revision */ 35049ee3cc5Smickey u_int filler[31]; 35149ee3cc5Smickey }; 35249ee3cc5Smickey 35331aa52bdSmickey struct pdc_getbootopts { /* PDC_MODEL_GETBOOTOPTS */ 35431aa52bdSmickey u_int cur_test; /* current enabled tests */ 35531aa52bdSmickey u_int sup_test; /* supported tests */ 35631aa52bdSmickey u_int def_test; /* default enabled tests */ 35731aa52bdSmickey u_int filler[29]; 35831aa52bdSmickey }; 35931aa52bdSmickey 3609c0b8818Smickey struct cache_cf { /* PDC_CACHE (for "struct pdc_cache") */ 36131aa52bdSmickey u_int cc_alias: 4, /* virtual address aliasing boundary */ 3629c0b8818Smickey cc_block: 4, /* used to determine most efficient stride */ 3639c0b8818Smickey cc_line : 3, /* max data written by store (16-byte mults) */ 3649c0b8818Smickey cc_resv1: 2, /* (reserved) */ 3659c0b8818Smickey cc_wt : 1, /* D-cache: write-to = 0, write-through = 1 */ 3669c0b8818Smickey cc_sh : 2, /* separate I and D = 0, shared I and D = 1 */ 3679c0b8818Smickey cc_cst : 3, /* D-cache: incoherent = 0, coherent = 1 */ 368ffbbb3dbSmickey cc_resv2:11, /* (reserved) */ 369ffbbb3dbSmickey cc_hvers: 2; /* H-VERSION dependent */ 3709c0b8818Smickey }; 3719c0b8818Smickey 3729c0b8818Smickey struct tlb_cf { /* PDC_CACHE (for "struct pdc_cache") */ 3739c0b8818Smickey u_int tc_resv1:12, /* (reserved) */ 3749c0b8818Smickey tc_sh : 2, /* separate I and D = 0, shared I and D = 1 */ 3759c0b8818Smickey tc_hvers: 1, /* H-VERSION dependent */ 3769c0b8818Smickey tc_page : 1, /* 2K page size = 0, 4k page size = 1 */ 3779c0b8818Smickey tc_cst : 3, /* incoherent = 0, coherent = 1 */ 3789c0b8818Smickey tc_resv2: 5, /* (reserved) */ 3799c0b8818Smickey tc_assoc: 8; /* associativity of TLB */ 3809c0b8818Smickey }; 3819c0b8818Smickey 3829c0b8818Smickey struct pdc_cache { /* PDC_CACHE */ 3839c0b8818Smickey /* Instruction cache */ 3849c0b8818Smickey u_int ic_size; /* size of I-cache (in bytes) */ 3859c0b8818Smickey struct cache_cf ic_conf;/* cache configuration (see above) */ 3869c0b8818Smickey u_int ic_base; /* start addr of I-cache (for FICE flush) */ 3879c0b8818Smickey u_int ic_stride; /* addr incr per i_count iteration (flush) */ 3889c0b8818Smickey u_int ic_count; /* number of i_loop iterations (flush) */ 3899c0b8818Smickey u_int ic_loop; /* number of FICE's per addr stride (flush) */ 3909c0b8818Smickey /* Data cache */ 3919c0b8818Smickey u_int dc_size; /* size of D-cache (in bytes) */ 3929c0b8818Smickey struct cache_cf dc_conf;/* cache configuration (see above) */ 3939c0b8818Smickey u_int dc_base; /* start addr of D-cache (for FDCE flush) */ 3949c0b8818Smickey u_int dc_stride; /* addr incr per d_count iteration (flush) */ 3959c0b8818Smickey u_int dc_count; /* number of d_loop iterations (flush) */ 3969c0b8818Smickey u_int dc_loop; /* number of FDCE's per addr stride (flush) */ 3979c0b8818Smickey /* Instruction TLB */ 3989c0b8818Smickey u_int it_size; /* number of entries in I-TLB */ 3999c0b8818Smickey struct tlb_cf it_conf; /* I-TLB configuration (see above) */ 4009c0b8818Smickey u_int it_sp_base; /* start space of I-TLB (for PITLBE flush) */ 4019c0b8818Smickey u_int it_sp_stride; /* space incr per sp_count iteration (flush) */ 4029c0b8818Smickey u_int it_sp_count; /* number of off_count iterations (flush) */ 4039c0b8818Smickey u_int it_off_base; /* start offset of I-TLB (for PITLBE flush) */ 4049c0b8818Smickey u_int it_off_stride; /* offset incr per off_count iteration (flush)*/ 4059c0b8818Smickey u_int it_off_count; /* number of it_loop iterations/space (flush) */ 4069c0b8818Smickey u_int it_loop; /* number of PITLBE's per off_stride (flush) */ 4079c0b8818Smickey /* Data TLB */ 4089c0b8818Smickey u_int dt_size; /* number of entries in D-TLB */ 4099c0b8818Smickey struct tlb_cf dt_conf; /* D-TLB configuration (see above) */ 4109c0b8818Smickey u_int dt_sp_base; /* start space of D-TLB (for PDTLBE flush) */ 4119c0b8818Smickey u_int dt_sp_stride; /* space incr per sp_count iteration (flush) */ 4129c0b8818Smickey u_int dt_sp_count; /* number of off_count iterations (flush) */ 4139c0b8818Smickey u_int dt_off_base; /* start offset of D-TLB (for PDTLBE flush) */ 4149c0b8818Smickey u_int dt_off_stride; /* offset incr per off_count iteration (flush)*/ 4159c0b8818Smickey u_int dt_off_count; /* number of dt_loop iterations/space (flush) */ 4169c0b8818Smickey u_int dt_loop; /* number of PDTLBE's per off_stride (flush) */ 417cddff70fSmickey u_int filler[2]; 4189c0b8818Smickey }; 4199c0b8818Smickey 420d7e0e986Smickey struct pdc_spidb { /* PDC_CACHE, PDC_CACHE_GETSPIDB */ 421d7e0e986Smickey u_int spidR1 : 4; 422d7e0e986Smickey u_int spidbits : 12; 423d7e0e986Smickey u_int spidR2 : 16; 424d7e0e986Smickey u_int filler[31]; 425d7e0e986Smickey }; 426d7e0e986Smickey 42741f0735cSmickey struct pdc_cst { 42841f0735cSmickey u_int cstR1 : 16; 42941f0735cSmickey u_int cst : 3; 43041f0735cSmickey u_int cstR2 : 13; 43141f0735cSmickey }; 43241f0735cSmickey 433d7e0e986Smickey struct pdc_coherence { /* PDC_CACHE, PDC_CACHE_SETCS */ 43441f0735cSmickey struct pdc_cst ia; 43541f0735cSmickey #define ia_cst ia.cst 43641f0735cSmickey struct pdc_cst da; 43741f0735cSmickey #define da_cst da.cst 43841f0735cSmickey struct pdc_cst ita; 43941f0735cSmickey #define ita_cst ita.cst 44041f0735cSmickey struct pdc_cst dta; 44141f0735cSmickey #define dta_cst dta.cst 44241f0735cSmickey u_int filler[28]; 44341f0735cSmickey }; 44441f0735cSmickey 4459c0b8818Smickey struct pdc_hpa { /* PDC_HPA */ 4466d6f4087Smickey u_int hpa; /* HPA of processor */ 4479c0b8818Smickey int filler1; 448cddff70fSmickey u_int filler2[30]; 4499c0b8818Smickey }; 4509c0b8818Smickey 4519c0b8818Smickey struct pdc_coproc { /* PDC_COPROC */ 4529c0b8818Smickey u_int ccr_enable; /* same format as CCR (CR 10) */ 453cddff70fSmickey u_int ccr_present; /* which co-proc's are present (bitset) */ 454c7c57f00Smickey u_int pad[15]; 455c7c57f00Smickey u_int fpu_revision; 456a89ddb47Smickey u_int fpu_model; 457c7c57f00Smickey u_int filler2[13]; 4589c0b8818Smickey }; 4599c0b8818Smickey 4609c0b8818Smickey struct pdc_tod { /* PDC_TOD, PDC_TOD_READ */ 4619c0b8818Smickey u_int sec; /* elapsed time since 00:00:00 GMT, 1/1/70 */ 4629c0b8818Smickey u_int usec; /* accurate to microseconds */ 463cddff70fSmickey u_int filler2[30]; 4649c0b8818Smickey }; 4659c0b8818Smickey 46631aa52bdSmickey struct pdc_itimer { /* PDC_TOD_ITIMER */ 46731aa52bdSmickey u_int calib0; /* double giving itmr freq */ 46831aa52bdSmickey u_int calib1; 46931aa52bdSmickey u_int tod_acc; /* TOD accuracy in 1e-9 part */ 47031aa52bdSmickey u_int cr_acc; /* itmr accuracy in 1e-9 parts */ 47131aa52bdSmickey u_int filler[28]; 47231aa52bdSmickey }; 47331aa52bdSmickey 47431aa52bdSmickey struct pdc_nvm { /* PDC_NVM */ 47531aa52bdSmickey u_int hv[9]; /* 0x00: HV dependent */ 47631aa52bdSmickey struct device_path bootpath; /* 0x24: boot path */ 47731aa52bdSmickey u_int isl_ver; /* 0x44: ISL revision */ 47831aa52bdSmickey u_int timestamp; /* 0x48: timestamp */ 47931aa52bdSmickey u_int lif_ue[12]; /* 0x4c: LIF utility entries */ 48031aa52bdSmickey u_int eptr; /* 0x7c: entry pointer */ 48131aa52bdSmickey u_int os_panic[32]; /* 0x80: OS panic info */ 48231aa52bdSmickey }; 48331aa52bdSmickey 4849c0b8818Smickey struct pdc_instr { /* PDC_INSTR */ 4859c0b8818Smickey u_int instr; /* instruction that invokes PDC mchk entry pt */ 4869c0b8818Smickey int filler1; 487cddff70fSmickey u_int filler2[30]; 4889c0b8818Smickey }; 4899c0b8818Smickey 4909c0b8818Smickey struct pdc_iodc_read { /* PDC_IODC, PDC_IODC_READ */ 4919c0b8818Smickey int size; /* number of bytes in selected entry point */ 4929c0b8818Smickey int filler1; 493cddff70fSmickey u_int filler2[30]; 4949c0b8818Smickey }; 4959c0b8818Smickey 4969c0b8818Smickey struct pdc_iodc_minit { /* PDC_IODC, PDC_IODC_NINIT or PDC_IODC_DINIT */ 4979c0b8818Smickey u_int stat; /* HPA.io_status style error returns */ 4989c0b8818Smickey u_int max_spa; /* size of SPA (in bytes) > max_mem+map_mem */ 4999c0b8818Smickey u_int max_mem; /* size of "implemented" memory (in bytes) */ 500af18ceffSjmc u_int map_mem; /* size of "mappable-only" memory (in bytes) */ 501cddff70fSmickey u_int filler[28]; 5029c0b8818Smickey }; 5039c0b8818Smickey 5049c0b8818Smickey struct btlb_info { /* for "struct pdc_btlb" (PDC_BTLB) */ 5059c0b8818Smickey u_int resv0: 8, /* (reserved) */ 5069c0b8818Smickey num_i: 8, /* Number of instruction slots */ 5079c0b8818Smickey num_d: 8, /* Number of data slots */ 5089c0b8818Smickey num_c: 8; /* Number of combined slots */ 5099c0b8818Smickey }; 5109c0b8818Smickey 5119c0b8818Smickey struct pdc_btlb { /* PDC_BLOCK_TLB */ 5129c0b8818Smickey u_int min_size; /* Min size in pages */ 5139c0b8818Smickey u_int max_size; /* Max size in pages */ 5149c0b8818Smickey struct btlb_info finfo; /* Fixed range info */ 5159c0b8818Smickey struct btlb_info vinfo; /* Variable range info */ 5169c0b8818Smickey u_int filler[28]; 5179c0b8818Smickey }; 5189c0b8818Smickey 5199c0b8818Smickey struct pdc_hwtlb { /* PDC_TLB */ 5209c0b8818Smickey u_int min_size; /* What do these mean? */ 5219c0b8818Smickey u_int max_size; 5229c0b8818Smickey u_int filler[30]; 5239c0b8818Smickey }; 5249c0b8818Smickey 5250c7cde72Smickey struct pdc_power_info { /* PDC_SOFT_POWER_INFO */ 5260c7cde72Smickey u_int addr; /* power register address */ 5270c7cde72Smickey u_int filler[30]; 5280c7cde72Smickey }; 5290c7cde72Smickey 5302706414aSmickey struct pdc_sysmap_find { /* PDC_SYSMAP_FIND */ 5312706414aSmickey u_int hpa; 5322706414aSmickey u_int size; /* pages */ 5332706414aSmickey u_int naddrs; 5342706414aSmickey u_int filler[29]; 5352706414aSmickey }; 5362706414aSmickey 5372706414aSmickey struct pdc_sysmap_addrs { /* PDC_SYSMAP_ADDR */ 5382706414aSmickey u_int hpa; 5392706414aSmickey u_int size; /* pages */ 5402706414aSmickey u_int filler[30]; 5412706414aSmickey }; 5422706414aSmickey 543797a06ecSmickey struct pdc_sysmap_hpa { /* PDC_SYSMAP_HPA */ 544797a06ecSmickey u_int hpa; 545797a06ecSmickey u_int size; 546797a06ecSmickey u_int naddrs; 547797a06ecSmickey u_int mod; 548797a06ecSmickey u_int filler[28]; 549797a06ecSmickey }; 550797a06ecSmickey 5516d6f4087Smickey struct pdc_pat_cell_id { /* PDC_PAT_CELL_GETID */ 5526d6f4087Smickey u_long id; /* cell id */ 5536d6f4087Smickey u_long loc; /* cell location */ 5546d6f4087Smickey u_long filler[14]; 5556d6f4087Smickey }; 5566d6f4087Smickey 5576d6f4087Smickey struct pdc_pat_cell_module { /* PDC_PAT_CELL_MODULE */ 5586d6f4087Smickey u_long chpa; /* config space HPA */ 5596d6f4087Smickey u_long info; /* module info */ 5606d6f4087Smickey #define PDC_PAT_CELL_MODTYPE(t) (((t) >> 56) & 0xff) 5616d6f4087Smickey #define PDC_PAT_CELL_MODDVI(t) (((t) >> 48) & 0xff) 5626d6f4087Smickey #define PDC_PAT_CELL_MODIOC(t) (((t) >> 40) & 0xff) 5636d6f4087Smickey #define PDC_PAT_CELL_MODSIZE(t) (((t) & 0xffffff) << PAGE_SHIFT) 5646d6f4087Smickey u_long loc; /* module location */ 5656d6f4087Smickey struct device_path dp; /* module path */ 5666d6f4087Smickey u_long pad[508]; /* cell module gedoens */ 5676d6f4087Smickey }; 5686d6f4087Smickey 5699fd363f1Smickey struct pdc_pat_io_num { /* PDC_PAT_IO */ 5709fd363f1Smickey u_int num; 5719fd363f1Smickey u_int filler[31]; 5729fd363f1Smickey }; 5739fd363f1Smickey 574bae729d6Smickey struct pdc_pat_pci_rt { /* PDC_PAT_IO_GET_PCI_RT */ 575bae729d6Smickey u_int8_t type; /* 0x8b */ 576bae729d6Smickey u_int8_t len; 577bae729d6Smickey u_int8_t itype; /* 0 -- vectored int */ 578bae729d6Smickey u_int8_t trigger; /* polarity/level */ 579bae729d6Smickey u_int8_t pin; /* PCI pin number */ 580bae729d6Smickey u_int8_t bus; 581bae729d6Smickey u_int8_t seg; /* reserved */ 582bae729d6Smickey u_int8_t line; 583bae729d6Smickey u_int64_t addr; /* io sapic address */ 584bae729d6Smickey }; 585bae729d6Smickey 5869c0b8818Smickey struct pdc_memmap { /* PDC_MEMMAP */ 5879c0b8818Smickey u_int hpa; /* HPA for module */ 5889c0b8818Smickey u_int morepages; /* additional IO pages */ 589cddff70fSmickey u_int filler[30]; 5909c0b8818Smickey }; 5919c0b8818Smickey 59267a4eabcSmickey struct pdc_lan_station_id { /* PDC_LAN_STATION_ID */ 59367a4eabcSmickey u_int8_t addr[6]; 59467a4eabcSmickey u_int8_t filler1[2]; 59567a4eabcSmickey u_int filler2[30]; 59667a4eabcSmickey }; 59767a4eabcSmickey 5989c0b8818Smickey /* 5999c0b8818Smickey * The PDC_CHASSIS is a strange bird. The format for updating the display 6009c0b8818Smickey * is as follows: 6019c0b8818Smickey * 6029c0b8818Smickey * 0 11 12 14 15 16 19 20 23 24 27 28 31 6039c0b8818Smickey * +-------+----------+-------+--------+--------+--------+--------+ 6049c0b8818Smickey * | R | OS State | Blank | Hex1 | Hex2 | Hex3 | Hex4 | 6059c0b8818Smickey * +-------+----------+-------+--------+--------+--------+--------+ 6069c0b8818Smickey * 6079c0b8818Smickey * Unfortunately, someone forgot to tell the hardware designers that 6089c0b8818Smickey * there was supposed to be a hex display somewhere. The result is, 6099c0b8818Smickey * you can only toggle 5 LED's and the fault light. 6109c0b8818Smickey * 6119c0b8818Smickey * Interesting values for Hex1-Hex4 and the resulting LED displays: 6129c0b8818Smickey * 6139c0b8818Smickey * FnFF CnFF: 6149c0b8818Smickey * 0 - - - - - Counts in binary from 0x0 - 0xF 6159c0b8818Smickey * 2 o - - - - for corresponding values of `n'. 6169c0b8818Smickey * 4 o o - - - 6179c0b8818Smickey * 6 o o o - - 6189c0b8818Smickey * 8 o o o o - 6199c0b8818Smickey * A o o o o o 6209c0b8818Smickey * 6219c0b8818Smickey * If the "Blank" bit is set, the display should be made blank. 6229c0b8818Smickey * The values for "OS State" are defined below. 6239c0b8818Smickey */ 6249c0b8818Smickey 6259c0b8818Smickey #define PDC_CHASSIS_BAR 0xF0FF /* create a bar graph with LEDs */ 6269c0b8818Smickey #define PDC_CHASSIS_CNT 0xC0FF /* count with LEDs */ 6279c0b8818Smickey 6289c0b8818Smickey #define PDC_OSTAT(os) (((os) & 0x7) << 17) 6299c0b8818Smickey #define PDC_OSTAT_OFF 0x0 /* all off */ 6309c0b8818Smickey #define PDC_OSTAT_FAULT 0x1 /* the red LED of death */ 6319c0b8818Smickey #define PDC_OSTAT_TEST 0x2 /* self test */ 6329c0b8818Smickey #define PDC_OSTAT_BOOT 0x3 /* boot program running */ 6339c0b8818Smickey #define PDC_OSTAT_SHUT 0x4 /* shutdown in progress */ 6349c0b8818Smickey #define PDC_OSTAT_WARN 0x5 /* battery dying, etc */ 6359c0b8818Smickey #define PDC_OSTAT_RUN 0x6 /* OS running */ 6369c0b8818Smickey #define PDC_OSTAT_ON 0x7 /* all on */ 6379c0b8818Smickey 6389b92c7dfSkettenis struct pdc_chassis_info { 6399b92c7dfSkettenis u_int size; 6409b92c7dfSkettenis u_int max_size; 6419b92c7dfSkettenis u_int filler[30]; 6429b92c7dfSkettenis }; 6439b92c7dfSkettenis 6449b92c7dfSkettenis struct pdc_chassis_lcd { 6459b92c7dfSkettenis u_int model : 16, 6469b92c7dfSkettenis width : 16; 6479b92c7dfSkettenis u_int cmd_addr; 6489b92c7dfSkettenis u_int data_addr; 6499b92c7dfSkettenis u_int delay; 6509b92c7dfSkettenis u_int8_t line[2]; 6519b92c7dfSkettenis u_int8_t enabled; 6529b92c7dfSkettenis u_int8_t heartbeat[3]; 6539b92c7dfSkettenis u_int8_t disk[3]; 6549b92c7dfSkettenis u_int filler[25]; 6559b92c7dfSkettenis }; 6569b92c7dfSkettenis 6579c0b8818Smickey /* dp_flags */ 65859dac803Smickey #define PZF_AUTOBOOT 0x80 /* These two are PDC flags for how to locate */ 65959dac803Smickey #define PZF_AUTOSEARCH 0x40 /* the "boot device" */ 66059dac803Smickey #define PZF_TIMER 0x0f /* power of 2 # secs "boot timer" (0 == dflt) */ 66159dac803Smickey #define PZF_BITS "\020\010autoboot\07autosearch" 6629c0b8818Smickey 6634c76c0d7Smiod /* macros to decode serial parameters out of dp_layers */ 6644c76c0d7Smiod #define PZL_BITS(l) (((l) & 0x03) + 5) 6654c76c0d7Smiod #define PZL_PARITY(l) (((l) & 0x18) >> 3) 6664c76c0d7Smiod #define PZL_SPEED(l) (((l) & 0x3c0) >> 6) 6674c76c0d7Smiod #define PZL_ENCODE(bits, parity, speed) \ 6684c76c0d7Smiod (((bits) - 5) & 0x03) | (((parity) & 0x3) << 3) | \ 66951622cc7Smiod (((speed) & 0x0f) << 6) 6704c76c0d7Smiod 6719c0b8818Smickey /* 6729c0b8818Smickey * A processors Stable Storage is accessed through the PDC. There are 6739c0b8818Smickey * at least 96 bytes of stable storage (the device path information may 6749c0b8818Smickey * or may not exist). However, as far as I know, processors provide at 6759c0b8818Smickey * least 192 bytes of stable storage. 6769c0b8818Smickey */ 6779c0b8818Smickey struct stable_storage { 6789c0b8818Smickey struct device_path ss_pri_boot; /* (see above) */ 6799c0b8818Smickey char ss_filenames[32]; 6809c0b8818Smickey u_short ss_os_version; /* 0 == none, 1 == HP-UX, 2 == MPE-XL */ 6819c0b8818Smickey char ss_os[22]; /* OS-dependant information */ 6829c0b8818Smickey char ss_pdc[7]; /* reserved */ 6839c0b8818Smickey char ss_fast_size; /* how much memory to test. 0xf == all, or */ 6849c0b8818Smickey /* else it's (256KB << ss_fast_size) */ 6859c0b8818Smickey struct device_path ss_console; 6869c0b8818Smickey struct device_path ss_alt_boot; 6879c0b8818Smickey struct device_path ss_keyboard; 6889c0b8818Smickey }; 6899c0b8818Smickey 6909c0b8818Smickey /* 6919c0b8818Smickey * Recoverable error indications provided to boot code by the PDC. 6929c0b8818Smickey * Any non-zero value indicates error. 6939c0b8818Smickey */ 6949c0b8818Smickey struct boot_err { 6959c0b8818Smickey u_int be_resv : 10, /* (reserved) */ 6969c0b8818Smickey be_fixed : 6, /* module that produced error */ 6979c0b8818Smickey be_chas : 16; /* error code (interpret as 4 hex digits) */ 6989c0b8818Smickey }; 6999c0b8818Smickey 70049ee3cc5Smickey #define HPBE_HBOOT_CORRECTABLE 0 /* hard-boot corrctable error */ 70149ee3cc5Smickey #define HPBE_HBOOT_UNCORRECTBL 1 /* hard-boot uncorrectable error */ 70249ee3cc5Smickey #define HPBE_SBOOT_CORRECTABLE 2 /* soft-boot correctable error */ 70349ee3cc5Smickey #define HPBE_SBOOT_UNCORRECTBL 3 /* soft-boot uncorrectable error */ 70449ee3cc5Smickey #define HPBE_ETEST_MODUNUSABLE 4 /* ENTRY_TEST err: module's unusable */ 70549ee3cc5Smickey #define HPBE_ETEST_MODDEGRADED 5 /* ENTRY_TEST err: module in degraded mode */ 70649ee3cc5Smickey 7079c0b8818Smickey 7089c0b8818Smickey /* 7099c0b8818Smickey * The PDC uses the following structure to completely define an I/O 7109c0b8818Smickey * module and the interface to its IODC. 7119c0b8818Smickey */ 712c325d8d3Smickey typedef 7139c0b8818Smickey struct pz_device { 7149c0b8818Smickey struct device_path pz_dp; 7159c0b8818Smickey #define pz_flags pz_dp.dp_flags 7169c0b8818Smickey #define pz_bc pz_dp.dp_bc 7179c0b8818Smickey #define pz_mod pz_dp.dp_mod 7189c0b8818Smickey #define pz_layers pz_dp.dp_layers 7196d6f4087Smickey u_int pz_hpa; /* HPA base address of device */ 7206d6f4087Smickey u_int pz_spa; /* SPA base address (zero if no SPA exists) */ 7216d6f4087Smickey u_int pz_iodc_io; /* entry point of device's driver routines */ 7229c0b8818Smickey short pz_resv; /* (reserved) */ 7239c0b8818Smickey u_short pz_class; /* (see below) */ 724c325d8d3Smickey } pz_device_t; 7259c0b8818Smickey 7269c0b8818Smickey /* pz_class */ 7279c0b8818Smickey #define PCL_NULL 0 /* illegal */ 7289c0b8818Smickey #define PCL_RANDOM 1 /* random access (disk) */ 7299c0b8818Smickey #define PCL_SEQU 2 /* sequential access (tape) */ 7309c0b8818Smickey #define PCL_DUPLEX 7 /* full-duplex point-to-point (RS-232, Net) */ 7319c0b8818Smickey #define PCL_KEYBD 8 /* half-duplex input (HIL Keyboard) */ 7329c0b8818Smickey #define PCL_DISPL 9 /* half-duplex ouptput (display) */ 733150a2c64Smickey #define PCL_FC 10 /* fibre channel access media */ 734c325d8d3Smickey #define PCL_CLASS_MASK 0xf /* XXX class mask */ 735c325d8d3Smickey #define PCL_NET_MASK 0x1000 /* mask for bootp/tftp device */ 736c325d8d3Smickey 737c325d8d3Smickey /* 738c325d8d3Smickey * The following structure defines what a particular IODC returns when 739c325d8d3Smickey * given the IODC_DATA argument. 740c325d8d3Smickey */ 741c325d8d3Smickey struct iodc_data { 742c325d8d3Smickey u_int iodc_model: 8, /* hardware model number */ 743c325d8d3Smickey iodc_revision:8, /* software revision */ 744c325d8d3Smickey iodc_spa_io: 1, /* 0:memory, 1:device */ 745c325d8d3Smickey iodc_spa_pack:1, /* 1:packed multiplexor */ 746c325d8d3Smickey iodc_spa_enb:1, /* 1:has an spa */ 747c325d8d3Smickey iodc_spa_shift:5, /* power of two # bytes in SPA space */ 748c325d8d3Smickey iodc_more: 1, /* iodc_data is: 0:8-byte, 1:16-byte */ 749cddff70fSmickey iodc_word: 1, /* iodc_data is: 0:byte, 1:word */ 750c325d8d3Smickey iodc_pf: 1, /* 1:supports powerfail */ 751c325d8d3Smickey iodc_type: 5; /* see below */ 752c325d8d3Smickey u_int iodc_sv_rev: 4, /* software version revision number */ 753c325d8d3Smickey iodc_sv_model:20, /* software interface model # */ 754c325d8d3Smickey iodc_sv_opt: 8; /* type-specific options */ 755c325d8d3Smickey u_char iodc_rev; /* revision number of IODC code */ 756c325d8d3Smickey u_char iodc_dep; /* module-dependent information */ 757c325d8d3Smickey u_char iodc_rsv[2]; /* reserved */ 758c325d8d3Smickey u_short iodc_cksum; /* 16-bit checksum of whole IODC */ 759c325d8d3Smickey u_short iodc_length; /* number of entry points in IODC */ 760c325d8d3Smickey /* IODC entry points follow... */ 761c325d8d3Smickey }; 7629c0b8818Smickey 7635e254c8eSmickey extern pdcio_t pdc; 7649c0b8818Smickey 7650a473651Smickey #ifdef _KERNEL 7660a473651Smickey struct consdev; 7670a473651Smickey 768c325d8d3Smickey extern int kernelmapped; 769c325d8d3Smickey 770c4071fd1Smillert void pdc_init(void); 771c4071fd1Smillert int pdc_call(iodcio_t, int, ...); 772c325d8d3Smickey 773c4071fd1Smillert void pdccnprobe(struct consdev *); 774c4071fd1Smillert void pdccninit(struct consdev *); 775c4071fd1Smillert int pdccngetc(dev_t); 776c4071fd1Smillert void pdccnputc(dev_t, int); 777c4071fd1Smillert void pdccnpollc(dev_t, int); 7780a473651Smickey #endif 7790a473651Smickey 7805e254c8eSmickey #endif /* !(_LOCORE) */ 7819c0b8818Smickey 782cddff70fSmickey #endif /* _MACHINE_PDC_H_ */ 783