1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __ALPHA_HWRPB_H 3*4882a593Smuzhiyun #define __ALPHA_HWRPB_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #define INIT_HWRPB ((struct hwrpb_struct *) 0x10000000) 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun /* 8*4882a593Smuzhiyun * DEC processor types for Alpha systems. Found in HWRPB. 9*4882a593Smuzhiyun * These values are architected. 10*4882a593Smuzhiyun */ 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define EV3_CPU 1 /* EV3 */ 13*4882a593Smuzhiyun #define EV4_CPU 2 /* EV4 (21064) */ 14*4882a593Smuzhiyun #define LCA4_CPU 4 /* LCA4 (21066/21068) */ 15*4882a593Smuzhiyun #define EV5_CPU 5 /* EV5 (21164) */ 16*4882a593Smuzhiyun #define EV45_CPU 6 /* EV4.5 (21064/xxx) */ 17*4882a593Smuzhiyun #define EV56_CPU 7 /* EV5.6 (21164) */ 18*4882a593Smuzhiyun #define EV6_CPU 8 /* EV6 (21264) */ 19*4882a593Smuzhiyun #define PCA56_CPU 9 /* PCA56 (21164PC) */ 20*4882a593Smuzhiyun #define PCA57_CPU 10 /* PCA57 (notyet) */ 21*4882a593Smuzhiyun #define EV67_CPU 11 /* EV67 (21264A) */ 22*4882a593Smuzhiyun #define EV68CB_CPU 12 /* EV68CB (21264C) */ 23*4882a593Smuzhiyun #define EV68AL_CPU 13 /* EV68AL (21264B) */ 24*4882a593Smuzhiyun #define EV68CX_CPU 14 /* EV68CX (21264D) */ 25*4882a593Smuzhiyun #define EV7_CPU 15 /* EV7 (21364) */ 26*4882a593Smuzhiyun #define EV79_CPU 16 /* EV79 (21364??) */ 27*4882a593Smuzhiyun #define EV69_CPU 17 /* EV69 (21264/EV69A) */ 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun /* 30*4882a593Smuzhiyun * DEC system types for Alpha systems. Found in HWRPB. 31*4882a593Smuzhiyun * These values are architected. 32*4882a593Smuzhiyun */ 33*4882a593Smuzhiyun 34*4882a593Smuzhiyun #define ST_ADU 1 /* Alpha ADU systype */ 35*4882a593Smuzhiyun #define ST_DEC_4000 2 /* Cobra systype */ 36*4882a593Smuzhiyun #define ST_DEC_7000 3 /* Ruby systype */ 37*4882a593Smuzhiyun #define ST_DEC_3000_500 4 /* Flamingo systype */ 38*4882a593Smuzhiyun #define ST_DEC_2000_300 6 /* Jensen systype */ 39*4882a593Smuzhiyun #define ST_DEC_3000_300 7 /* Pelican systype */ 40*4882a593Smuzhiyun #define ST_DEC_2100_A500 9 /* Sable systype */ 41*4882a593Smuzhiyun #define ST_DEC_AXPVME_64 10 /* AXPvme system type */ 42*4882a593Smuzhiyun #define ST_DEC_AXPPCI_33 11 /* NoName system type */ 43*4882a593Smuzhiyun #define ST_DEC_TLASER 12 /* Turbolaser systype */ 44*4882a593Smuzhiyun #define ST_DEC_2100_A50 13 /* Avanti systype */ 45*4882a593Smuzhiyun #define ST_DEC_MUSTANG 14 /* Mustang systype */ 46*4882a593Smuzhiyun #define ST_DEC_ALCOR 15 /* Alcor (EV5) systype */ 47*4882a593Smuzhiyun #define ST_DEC_1000 17 /* Mikasa systype */ 48*4882a593Smuzhiyun #define ST_DEC_EB64 18 /* EB64 systype */ 49*4882a593Smuzhiyun #define ST_DEC_EB66 19 /* EB66 systype */ 50*4882a593Smuzhiyun #define ST_DEC_EB64P 20 /* EB64+ systype */ 51*4882a593Smuzhiyun #define ST_DEC_BURNS 21 /* laptop systype */ 52*4882a593Smuzhiyun #define ST_DEC_RAWHIDE 22 /* Rawhide systype */ 53*4882a593Smuzhiyun #define ST_DEC_K2 23 /* K2 systype */ 54*4882a593Smuzhiyun #define ST_DEC_LYNX 24 /* Lynx systype */ 55*4882a593Smuzhiyun #define ST_DEC_XL 25 /* Alpha XL systype */ 56*4882a593Smuzhiyun #define ST_DEC_EB164 26 /* EB164 systype */ 57*4882a593Smuzhiyun #define ST_DEC_NORITAKE 27 /* Noritake systype */ 58*4882a593Smuzhiyun #define ST_DEC_CORTEX 28 /* Cortex systype */ 59*4882a593Smuzhiyun #define ST_DEC_MIATA 30 /* Miata systype */ 60*4882a593Smuzhiyun #define ST_DEC_XXM 31 /* XXM systype */ 61*4882a593Smuzhiyun #define ST_DEC_TAKARA 32 /* Takara systype */ 62*4882a593Smuzhiyun #define ST_DEC_YUKON 33 /* Yukon systype */ 63*4882a593Smuzhiyun #define ST_DEC_TSUNAMI 34 /* Tsunami systype */ 64*4882a593Smuzhiyun #define ST_DEC_WILDFIRE 35 /* Wildfire systype */ 65*4882a593Smuzhiyun #define ST_DEC_CUSCO 36 /* CUSCO systype */ 66*4882a593Smuzhiyun #define ST_DEC_EIGER 37 /* Eiger systype */ 67*4882a593Smuzhiyun #define ST_DEC_TITAN 38 /* Titan systype */ 68*4882a593Smuzhiyun #define ST_DEC_MARVEL 39 /* Marvel systype */ 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* UNOFFICIAL!!! */ 71*4882a593Smuzhiyun #define ST_UNOFFICIAL_BIAS 100 72*4882a593Smuzhiyun #define ST_DTI_RUFFIAN 101 /* RUFFIAN systype */ 73*4882a593Smuzhiyun 74*4882a593Smuzhiyun /* Alpha Processor, Inc. systems */ 75*4882a593Smuzhiyun #define ST_API_BIAS 200 76*4882a593Smuzhiyun #define ST_API_NAUTILUS 201 /* UP1000 systype */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun struct pcb_struct { 79*4882a593Smuzhiyun unsigned long ksp; 80*4882a593Smuzhiyun unsigned long usp; 81*4882a593Smuzhiyun unsigned long ptbr; 82*4882a593Smuzhiyun unsigned int pcc; 83*4882a593Smuzhiyun unsigned int asn; 84*4882a593Smuzhiyun unsigned long unique; 85*4882a593Smuzhiyun unsigned long flags; 86*4882a593Smuzhiyun unsigned long res1, res2; 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun 89*4882a593Smuzhiyun struct percpu_struct { 90*4882a593Smuzhiyun unsigned long hwpcb[16]; 91*4882a593Smuzhiyun unsigned long flags; 92*4882a593Smuzhiyun unsigned long pal_mem_size; 93*4882a593Smuzhiyun unsigned long pal_scratch_size; 94*4882a593Smuzhiyun unsigned long pal_mem_pa; 95*4882a593Smuzhiyun unsigned long pal_scratch_pa; 96*4882a593Smuzhiyun unsigned long pal_revision; 97*4882a593Smuzhiyun unsigned long type; 98*4882a593Smuzhiyun unsigned long variation; 99*4882a593Smuzhiyun unsigned long revision; 100*4882a593Smuzhiyun unsigned long serial_no[2]; 101*4882a593Smuzhiyun unsigned long logout_area_pa; 102*4882a593Smuzhiyun unsigned long logout_area_len; 103*4882a593Smuzhiyun unsigned long halt_PCBB; 104*4882a593Smuzhiyun unsigned long halt_PC; 105*4882a593Smuzhiyun unsigned long halt_PS; 106*4882a593Smuzhiyun unsigned long halt_arg; 107*4882a593Smuzhiyun unsigned long halt_ra; 108*4882a593Smuzhiyun unsigned long halt_pv; 109*4882a593Smuzhiyun unsigned long halt_reason; 110*4882a593Smuzhiyun unsigned long res; 111*4882a593Smuzhiyun unsigned long ipc_buffer[21]; 112*4882a593Smuzhiyun unsigned long palcode_avail[16]; 113*4882a593Smuzhiyun unsigned long compatibility; 114*4882a593Smuzhiyun unsigned long console_data_log_pa; 115*4882a593Smuzhiyun unsigned long console_data_log_length; 116*4882a593Smuzhiyun unsigned long bcache_info; 117*4882a593Smuzhiyun }; 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun struct procdesc_struct { 120*4882a593Smuzhiyun unsigned long weird_vms_stuff; 121*4882a593Smuzhiyun unsigned long address; 122*4882a593Smuzhiyun }; 123*4882a593Smuzhiyun 124*4882a593Smuzhiyun struct vf_map_struct { 125*4882a593Smuzhiyun unsigned long va; 126*4882a593Smuzhiyun unsigned long pa; 127*4882a593Smuzhiyun unsigned long count; 128*4882a593Smuzhiyun }; 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun struct crb_struct { 131*4882a593Smuzhiyun struct procdesc_struct * dispatch_va; 132*4882a593Smuzhiyun struct procdesc_struct * dispatch_pa; 133*4882a593Smuzhiyun struct procdesc_struct * fixup_va; 134*4882a593Smuzhiyun struct procdesc_struct * fixup_pa; 135*4882a593Smuzhiyun /* virtual->physical map */ 136*4882a593Smuzhiyun unsigned long map_entries; 137*4882a593Smuzhiyun unsigned long map_pages; 138*4882a593Smuzhiyun struct vf_map_struct map[1]; 139*4882a593Smuzhiyun }; 140*4882a593Smuzhiyun 141*4882a593Smuzhiyun struct memclust_struct { 142*4882a593Smuzhiyun unsigned long start_pfn; 143*4882a593Smuzhiyun unsigned long numpages; 144*4882a593Smuzhiyun unsigned long numtested; 145*4882a593Smuzhiyun unsigned long bitmap_va; 146*4882a593Smuzhiyun unsigned long bitmap_pa; 147*4882a593Smuzhiyun unsigned long bitmap_chksum; 148*4882a593Smuzhiyun unsigned long usage; 149*4882a593Smuzhiyun }; 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun struct memdesc_struct { 152*4882a593Smuzhiyun unsigned long chksum; 153*4882a593Smuzhiyun unsigned long optional_pa; 154*4882a593Smuzhiyun unsigned long numclusters; 155*4882a593Smuzhiyun struct memclust_struct cluster[0]; 156*4882a593Smuzhiyun }; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun struct dsr_struct { 159*4882a593Smuzhiyun long smm; /* SMM nubber used by LMF */ 160*4882a593Smuzhiyun unsigned long lurt_off; /* offset to LURT table */ 161*4882a593Smuzhiyun unsigned long sysname_off; /* offset to sysname char count */ 162*4882a593Smuzhiyun }; 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun struct hwrpb_struct { 165*4882a593Smuzhiyun unsigned long phys_addr; /* check: physical address of the hwrpb */ 166*4882a593Smuzhiyun unsigned long id; /* check: "HWRPB\0\0\0" */ 167*4882a593Smuzhiyun unsigned long revision; 168*4882a593Smuzhiyun unsigned long size; /* size of hwrpb */ 169*4882a593Smuzhiyun unsigned long cpuid; 170*4882a593Smuzhiyun unsigned long pagesize; /* 8192, I hope */ 171*4882a593Smuzhiyun unsigned long pa_bits; /* number of physical address bits */ 172*4882a593Smuzhiyun unsigned long max_asn; 173*4882a593Smuzhiyun unsigned char ssn[16]; /* system serial number: big bother is watching */ 174*4882a593Smuzhiyun unsigned long sys_type; 175*4882a593Smuzhiyun unsigned long sys_variation; 176*4882a593Smuzhiyun unsigned long sys_revision; 177*4882a593Smuzhiyun unsigned long intr_freq; /* interval clock frequency * 4096 */ 178*4882a593Smuzhiyun unsigned long cycle_freq; /* cycle counter frequency */ 179*4882a593Smuzhiyun unsigned long vptb; /* Virtual Page Table Base address */ 180*4882a593Smuzhiyun unsigned long res1; 181*4882a593Smuzhiyun unsigned long tbhb_offset; /* Translation Buffer Hint Block */ 182*4882a593Smuzhiyun unsigned long nr_processors; 183*4882a593Smuzhiyun unsigned long processor_size; 184*4882a593Smuzhiyun unsigned long processor_offset; 185*4882a593Smuzhiyun unsigned long ctb_nr; 186*4882a593Smuzhiyun unsigned long ctb_size; /* console terminal block size */ 187*4882a593Smuzhiyun unsigned long ctbt_offset; /* console terminal block table offset */ 188*4882a593Smuzhiyun unsigned long crb_offset; /* console callback routine block */ 189*4882a593Smuzhiyun unsigned long mddt_offset; /* memory data descriptor table */ 190*4882a593Smuzhiyun unsigned long cdb_offset; /* configuration data block (or NULL) */ 191*4882a593Smuzhiyun unsigned long frut_offset; /* FRU table (or NULL) */ 192*4882a593Smuzhiyun void (*save_terminal)(unsigned long); 193*4882a593Smuzhiyun unsigned long save_terminal_data; 194*4882a593Smuzhiyun void (*restore_terminal)(unsigned long); 195*4882a593Smuzhiyun unsigned long restore_terminal_data; 196*4882a593Smuzhiyun void (*CPU_restart)(unsigned long); 197*4882a593Smuzhiyun unsigned long CPU_restart_data; 198*4882a593Smuzhiyun unsigned long res2; 199*4882a593Smuzhiyun unsigned long res3; 200*4882a593Smuzhiyun unsigned long chksum; 201*4882a593Smuzhiyun unsigned long rxrdy; 202*4882a593Smuzhiyun unsigned long txrdy; 203*4882a593Smuzhiyun unsigned long dsr_offset; /* "Dynamic System Recognition Data Block Table" */ 204*4882a593Smuzhiyun }; 205*4882a593Smuzhiyun 206*4882a593Smuzhiyun #ifdef __KERNEL__ 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun extern struct hwrpb_struct *hwrpb; 209*4882a593Smuzhiyun 210*4882a593Smuzhiyun static inline void hwrpb_update_checksum(struct hwrpb_struct * h)211*4882a593Smuzhiyunhwrpb_update_checksum(struct hwrpb_struct *h) 212*4882a593Smuzhiyun { 213*4882a593Smuzhiyun unsigned long sum = 0, *l; 214*4882a593Smuzhiyun for (l = (unsigned long *) h; l < (unsigned long *) &h->chksum; ++l) 215*4882a593Smuzhiyun sum += *l; 216*4882a593Smuzhiyun h->chksum = sum; 217*4882a593Smuzhiyun } 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun #endif /* __KERNEL__ */ 220*4882a593Smuzhiyun 221*4882a593Smuzhiyun #endif /* __ALPHA_HWRPB_H */ 222