1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2024b246eSLinus Torvalds #ifndef __ALPHA_HWRPB_H 3024b246eSLinus Torvalds #define __ALPHA_HWRPB_H 4024b246eSLinus Torvalds 5024b246eSLinus Torvalds #define INIT_HWRPB ((struct hwrpb_struct *) 0x10000000) 6024b246eSLinus Torvalds 7024b246eSLinus Torvalds /* 8024b246eSLinus Torvalds * DEC processor types for Alpha systems. Found in HWRPB. 9024b246eSLinus Torvalds * These values are architected. 10024b246eSLinus Torvalds */ 11024b246eSLinus Torvalds 12024b246eSLinus Torvalds #define EV3_CPU 1 /* EV3 */ 13024b246eSLinus Torvalds #define EV4_CPU 2 /* EV4 (21064) */ 14024b246eSLinus Torvalds #define LCA4_CPU 4 /* LCA4 (21066/21068) */ 15024b246eSLinus Torvalds #define EV5_CPU 5 /* EV5 (21164) */ 16024b246eSLinus Torvalds #define EV45_CPU 6 /* EV4.5 (21064/xxx) */ 17024b246eSLinus Torvalds #define EV56_CPU 7 /* EV5.6 (21164) */ 18024b246eSLinus Torvalds #define EV6_CPU 8 /* EV6 (21264) */ 19024b246eSLinus Torvalds #define PCA56_CPU 9 /* PCA56 (21164PC) */ 20024b246eSLinus Torvalds #define PCA57_CPU 10 /* PCA57 (notyet) */ 21024b246eSLinus Torvalds #define EV67_CPU 11 /* EV67 (21264A) */ 22024b246eSLinus Torvalds #define EV68CB_CPU 12 /* EV68CB (21264C) */ 23024b246eSLinus Torvalds #define EV68AL_CPU 13 /* EV68AL (21264B) */ 24024b246eSLinus Torvalds #define EV68CX_CPU 14 /* EV68CX (21264D) */ 25024b246eSLinus Torvalds #define EV7_CPU 15 /* EV7 (21364) */ 26024b246eSLinus Torvalds #define EV79_CPU 16 /* EV79 (21364??) */ 27024b246eSLinus Torvalds #define EV69_CPU 17 /* EV69 (21264/EV69A) */ 28024b246eSLinus Torvalds 29024b246eSLinus Torvalds /* 30024b246eSLinus Torvalds * DEC system types for Alpha systems. Found in HWRPB. 31024b246eSLinus Torvalds * These values are architected. 32024b246eSLinus Torvalds */ 33024b246eSLinus Torvalds 34024b246eSLinus Torvalds #define ST_ADU 1 /* Alpha ADU systype */ 35024b246eSLinus Torvalds #define ST_DEC_4000 2 /* Cobra systype */ 36024b246eSLinus Torvalds #define ST_DEC_7000 3 /* Ruby systype */ 37024b246eSLinus Torvalds #define ST_DEC_3000_500 4 /* Flamingo systype */ 38024b246eSLinus Torvalds #define ST_DEC_2000_300 6 /* Jensen systype */ 39024b246eSLinus Torvalds #define ST_DEC_3000_300 7 /* Pelican systype */ 40024b246eSLinus Torvalds #define ST_DEC_2100_A500 9 /* Sable systype */ 41024b246eSLinus Torvalds #define ST_DEC_AXPVME_64 10 /* AXPvme system type */ 42024b246eSLinus Torvalds #define ST_DEC_AXPPCI_33 11 /* NoName system type */ 43024b246eSLinus Torvalds #define ST_DEC_TLASER 12 /* Turbolaser systype */ 44024b246eSLinus Torvalds #define ST_DEC_2100_A50 13 /* Avanti systype */ 45024b246eSLinus Torvalds #define ST_DEC_MUSTANG 14 /* Mustang systype */ 46024b246eSLinus Torvalds #define ST_DEC_ALCOR 15 /* Alcor (EV5) systype */ 47024b246eSLinus Torvalds #define ST_DEC_1000 17 /* Mikasa systype */ 48024b246eSLinus Torvalds #define ST_DEC_EB64 18 /* EB64 systype */ 49024b246eSLinus Torvalds #define ST_DEC_EB66 19 /* EB66 systype */ 50024b246eSLinus Torvalds #define ST_DEC_EB64P 20 /* EB64+ systype */ 51024b246eSLinus Torvalds #define ST_DEC_BURNS 21 /* laptop systype */ 52024b246eSLinus Torvalds #define ST_DEC_RAWHIDE 22 /* Rawhide systype */ 53024b246eSLinus Torvalds #define ST_DEC_K2 23 /* K2 systype */ 54024b246eSLinus Torvalds #define ST_DEC_LYNX 24 /* Lynx systype */ 55024b246eSLinus Torvalds #define ST_DEC_XL 25 /* Alpha XL systype */ 56024b246eSLinus Torvalds #define ST_DEC_EB164 26 /* EB164 systype */ 57024b246eSLinus Torvalds #define ST_DEC_NORITAKE 27 /* Noritake systype */ 58024b246eSLinus Torvalds #define ST_DEC_CORTEX 28 /* Cortex systype */ 59024b246eSLinus Torvalds #define ST_DEC_MIATA 30 /* Miata systype */ 60024b246eSLinus Torvalds #define ST_DEC_XXM 31 /* XXM systype */ 61024b246eSLinus Torvalds #define ST_DEC_TAKARA 32 /* Takara systype */ 62024b246eSLinus Torvalds #define ST_DEC_YUKON 33 /* Yukon systype */ 63024b246eSLinus Torvalds #define ST_DEC_TSUNAMI 34 /* Tsunami systype */ 64024b246eSLinus Torvalds #define ST_DEC_WILDFIRE 35 /* Wildfire systype */ 65024b246eSLinus Torvalds #define ST_DEC_CUSCO 36 /* CUSCO systype */ 66024b246eSLinus Torvalds #define ST_DEC_EIGER 37 /* Eiger systype */ 67024b246eSLinus Torvalds #define ST_DEC_TITAN 38 /* Titan systype */ 68024b246eSLinus Torvalds #define ST_DEC_MARVEL 39 /* Marvel systype */ 69024b246eSLinus Torvalds 70024b246eSLinus Torvalds /* UNOFFICIAL!!! */ 71024b246eSLinus Torvalds #define ST_UNOFFICIAL_BIAS 100 72024b246eSLinus Torvalds #define ST_DTI_RUFFIAN 101 /* RUFFIAN systype */ 73024b246eSLinus Torvalds 74024b246eSLinus Torvalds /* Alpha Processor, Inc. systems */ 75024b246eSLinus Torvalds #define ST_API_BIAS 200 76024b246eSLinus Torvalds #define ST_API_NAUTILUS 201 /* UP1000 systype */ 77024b246eSLinus Torvalds 78024b246eSLinus Torvalds struct pcb_struct { 79024b246eSLinus Torvalds unsigned long ksp; 80024b246eSLinus Torvalds unsigned long usp; 81024b246eSLinus Torvalds unsigned long ptbr; 82024b246eSLinus Torvalds unsigned int pcc; 83024b246eSLinus Torvalds unsigned int asn; 84024b246eSLinus Torvalds unsigned long unique; 85024b246eSLinus Torvalds unsigned long flags; 86024b246eSLinus Torvalds unsigned long res1, res2; 87024b246eSLinus Torvalds }; 88024b246eSLinus Torvalds 89024b246eSLinus Torvalds struct percpu_struct { 90024b246eSLinus Torvalds unsigned long hwpcb[16]; 91024b246eSLinus Torvalds unsigned long flags; 92024b246eSLinus Torvalds unsigned long pal_mem_size; 93024b246eSLinus Torvalds unsigned long pal_scratch_size; 94024b246eSLinus Torvalds unsigned long pal_mem_pa; 95024b246eSLinus Torvalds unsigned long pal_scratch_pa; 96024b246eSLinus Torvalds unsigned long pal_revision; 97024b246eSLinus Torvalds unsigned long type; 98024b246eSLinus Torvalds unsigned long variation; 99024b246eSLinus Torvalds unsigned long revision; 100024b246eSLinus Torvalds unsigned long serial_no[2]; 101024b246eSLinus Torvalds unsigned long logout_area_pa; 102024b246eSLinus Torvalds unsigned long logout_area_len; 103024b246eSLinus Torvalds unsigned long halt_PCBB; 104024b246eSLinus Torvalds unsigned long halt_PC; 105024b246eSLinus Torvalds unsigned long halt_PS; 106024b246eSLinus Torvalds unsigned long halt_arg; 107024b246eSLinus Torvalds unsigned long halt_ra; 108024b246eSLinus Torvalds unsigned long halt_pv; 109024b246eSLinus Torvalds unsigned long halt_reason; 110024b246eSLinus Torvalds unsigned long res; 111024b246eSLinus Torvalds unsigned long ipc_buffer[21]; 112024b246eSLinus Torvalds unsigned long palcode_avail[16]; 113024b246eSLinus Torvalds unsigned long compatibility; 114024b246eSLinus Torvalds unsigned long console_data_log_pa; 115024b246eSLinus Torvalds unsigned long console_data_log_length; 116024b246eSLinus Torvalds unsigned long bcache_info; 117024b246eSLinus Torvalds }; 118024b246eSLinus Torvalds 119024b246eSLinus Torvalds struct procdesc_struct { 120024b246eSLinus Torvalds unsigned long weird_vms_stuff; 121024b246eSLinus Torvalds unsigned long address; 122024b246eSLinus Torvalds }; 123024b246eSLinus Torvalds 124024b246eSLinus Torvalds struct vf_map_struct { 125024b246eSLinus Torvalds unsigned long va; 126024b246eSLinus Torvalds unsigned long pa; 127024b246eSLinus Torvalds unsigned long count; 128024b246eSLinus Torvalds }; 129024b246eSLinus Torvalds 130024b246eSLinus Torvalds struct crb_struct { 131024b246eSLinus Torvalds struct procdesc_struct * dispatch_va; 132024b246eSLinus Torvalds struct procdesc_struct * dispatch_pa; 133024b246eSLinus Torvalds struct procdesc_struct * fixup_va; 134024b246eSLinus Torvalds struct procdesc_struct * fixup_pa; 135024b246eSLinus Torvalds /* virtual->physical map */ 136024b246eSLinus Torvalds unsigned long map_entries; 137024b246eSLinus Torvalds unsigned long map_pages; 138024b246eSLinus Torvalds struct vf_map_struct map[1]; 139024b246eSLinus Torvalds }; 140024b246eSLinus Torvalds 141024b246eSLinus Torvalds struct memclust_struct { 142024b246eSLinus Torvalds unsigned long start_pfn; 143024b246eSLinus Torvalds unsigned long numpages; 144024b246eSLinus Torvalds unsigned long numtested; 145024b246eSLinus Torvalds unsigned long bitmap_va; 146024b246eSLinus Torvalds unsigned long bitmap_pa; 147024b246eSLinus Torvalds unsigned long bitmap_chksum; 148024b246eSLinus Torvalds unsigned long usage; 149024b246eSLinus Torvalds }; 150024b246eSLinus Torvalds 151024b246eSLinus Torvalds struct memdesc_struct { 152024b246eSLinus Torvalds unsigned long chksum; 153024b246eSLinus Torvalds unsigned long optional_pa; 154024b246eSLinus Torvalds unsigned long numclusters; 155*5224f790SGustavo A. R. Silva struct memclust_struct cluster[]; 156024b246eSLinus Torvalds }; 157024b246eSLinus Torvalds 158024b246eSLinus Torvalds struct dsr_struct { 159024b246eSLinus Torvalds long smm; /* SMM nubber used by LMF */ 160024b246eSLinus Torvalds unsigned long lurt_off; /* offset to LURT table */ 161024b246eSLinus Torvalds unsigned long sysname_off; /* offset to sysname char count */ 162024b246eSLinus Torvalds }; 163024b246eSLinus Torvalds 164024b246eSLinus Torvalds struct hwrpb_struct { 165024b246eSLinus Torvalds unsigned long phys_addr; /* check: physical address of the hwrpb */ 166024b246eSLinus Torvalds unsigned long id; /* check: "HWRPB\0\0\0" */ 167024b246eSLinus Torvalds unsigned long revision; 168024b246eSLinus Torvalds unsigned long size; /* size of hwrpb */ 169024b246eSLinus Torvalds unsigned long cpuid; 170024b246eSLinus Torvalds unsigned long pagesize; /* 8192, I hope */ 171024b246eSLinus Torvalds unsigned long pa_bits; /* number of physical address bits */ 172024b246eSLinus Torvalds unsigned long max_asn; 173024b246eSLinus Torvalds unsigned char ssn[16]; /* system serial number: big bother is watching */ 174024b246eSLinus Torvalds unsigned long sys_type; 175024b246eSLinus Torvalds unsigned long sys_variation; 176024b246eSLinus Torvalds unsigned long sys_revision; 177024b246eSLinus Torvalds unsigned long intr_freq; /* interval clock frequency * 4096 */ 178024b246eSLinus Torvalds unsigned long cycle_freq; /* cycle counter frequency */ 179024b246eSLinus Torvalds unsigned long vptb; /* Virtual Page Table Base address */ 180024b246eSLinus Torvalds unsigned long res1; 181024b246eSLinus Torvalds unsigned long tbhb_offset; /* Translation Buffer Hint Block */ 182024b246eSLinus Torvalds unsigned long nr_processors; 183024b246eSLinus Torvalds unsigned long processor_size; 184024b246eSLinus Torvalds unsigned long processor_offset; 185024b246eSLinus Torvalds unsigned long ctb_nr; 186024b246eSLinus Torvalds unsigned long ctb_size; /* console terminal block size */ 187024b246eSLinus Torvalds unsigned long ctbt_offset; /* console terminal block table offset */ 188024b246eSLinus Torvalds unsigned long crb_offset; /* console callback routine block */ 189024b246eSLinus Torvalds unsigned long mddt_offset; /* memory data descriptor table */ 190024b246eSLinus Torvalds unsigned long cdb_offset; /* configuration data block (or NULL) */ 191024b246eSLinus Torvalds unsigned long frut_offset; /* FRU table (or NULL) */ 192024b246eSLinus Torvalds void (*save_terminal)(unsigned long); 193024b246eSLinus Torvalds unsigned long save_terminal_data; 194024b246eSLinus Torvalds void (*restore_terminal)(unsigned long); 195024b246eSLinus Torvalds unsigned long restore_terminal_data; 196024b246eSLinus Torvalds void (*CPU_restart)(unsigned long); 197024b246eSLinus Torvalds unsigned long CPU_restart_data; 198024b246eSLinus Torvalds unsigned long res2; 199024b246eSLinus Torvalds unsigned long res3; 200024b246eSLinus Torvalds unsigned long chksum; 201024b246eSLinus Torvalds unsigned long rxrdy; 202024b246eSLinus Torvalds unsigned long txrdy; 203024b246eSLinus Torvalds unsigned long dsr_offset; /* "Dynamic System Recognition Data Block Table" */ 204024b246eSLinus Torvalds }; 205024b246eSLinus Torvalds 206024b246eSLinus Torvalds #ifdef __KERNEL__ 207024b246eSLinus Torvalds 208024b246eSLinus Torvalds extern struct hwrpb_struct *hwrpb; 209024b246eSLinus Torvalds 210024b246eSLinus Torvalds static inline void hwrpb_update_checksum(struct hwrpb_struct * h)211024b246eSLinus Torvaldshwrpb_update_checksum(struct hwrpb_struct *h) 212024b246eSLinus Torvalds { 213024b246eSLinus Torvalds unsigned long sum = 0, *l; 214024b246eSLinus Torvalds for (l = (unsigned long *) h; l < (unsigned long *) &h->chksum; ++l) 215024b246eSLinus Torvalds sum += *l; 216024b246eSLinus Torvalds h->chksum = sum; 217024b246eSLinus Torvalds } 218024b246eSLinus Torvalds 219024b246eSLinus Torvalds #endif /* __KERNEL__ */ 220024b246eSLinus Torvalds 221024b246eSLinus Torvalds #endif /* __ALPHA_HWRPB_H */ 222