rpb.h revision 8012
1298SN/A/* 22188SN/ACopyright 1990 Hewlett-Packard Development Company, L.P. 3298SN/A 4298SN/APermission is hereby granted, free of charge, to any person obtaining a copy of 5298SN/Athis software and associated documentation files (the "Software"), to deal in 6298SN/Athe Software without restriction, including without limitation the rights to 7298SN/Ause, copy, modify, merge, publish, distribute, sublicense, and/or sell copies 8298SN/Aof the Software, and to permit persons to whom the Software is furnished to do 9298SN/Aso, subject to the following conditions: 10298SN/A 11298SN/AThe above copyright notice and this permission notice shall be included in all 12298SN/Acopies or substantial portions of the Software. 13298SN/A 14298SN/ATHE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15298SN/AIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16298SN/AFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17298SN/AAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18298SN/ALIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19298SN/AOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 20298SN/ASOFTWARE. 21298SN/A*/ 22298SN/A 23298SN/A/* 24298SN/A * "@(#)rpb.h 9.2 (ULTRIX/OSF) 10/30/91" 25298SN/A */ 26298SN/A/* 272665Ssaidi@eecs.umich.edu * Defines for the architected startup addresses. 282665Ssaidi@eecs.umich.edu */ 29298SN/A 30298SN/A#define HWRPB_ADDR 0x10000000 /* 256 MB */ 311642SN/A#define BOOT_ADDR 0x20000000 /* 512 MB */ 32954SN/A#define PGTBL_ADDR 0x40000000 /* 1 GB */ 33956SN/A 34956SN/A/* 354078Sbinkertn@umich.edu * Values for the "haltcode" field in the per-cpu portion of the HWRPB 36299SN/A * 37299SN/A * Bit defines for the "sysvar" field in the HWRPB. 385529Snate@binkert.org * Each platform has different values for SYSBOARD and IOBOARD bits. 392170SN/A */ 403089Ssaidi@eecs.umich.edu#define HALT_PWRUP 0 /* power up */ 411717SN/A#define HALT_OPR 1 /* operator issued halt cmd */ 422680Sktlim@umich.edu#define HALT_KSTK 2 /* kernel stack not valid */ 432313SN/A#define HALT_SCBB 3 /* invalid SCBB */ 445529Snate@binkert.org#define HALT_PTBR 4 /* invalid PTBR */ 453565Sgblack@eecs.umich.edu#define HALT_EXE 5 /* kernel executed halt instruction */ 46298SN/A#define HALT_DBLE 6 /* double error abort */ 475606Snate@binkert.org 48298SN/A/* 49695SN/A * Bit defines for the "state" field in the per-cpu portion of the HWRPB 50695SN/A */ 51954SN/A#define STATE_BIP 0x00000001 /* bootstrap in progress */ 521052SN/A#define STATE_RC 0x00000002 /* restart capable */ 535780Ssteve.reinhardt@amd.com#define STATE_PA 0x00000004 /* processor available to OS */ 542080SN/A#define STATE_PP 0x00000008 /* processor present */ 555780Ssteve.reinhardt@amd.com#define STATE_OH 0x00000010 /* operator halted */ 56298SN/A#define STATE_CV 0x00000020 /* context valid */ 57299SN/A#define STATE_PV 0x00000040 /* PALcode valid */ 581052SN/A#define STATE_PMV 0x00000080 /* PALcode memory valid */ 59729SN/A#define STATE_PL 0x00000100 /* PALcode loaded */ 602107SN/A#define STATE_HALT_MASK 0x00ff0000 /* Mask for Halt Requested field */ 61298SN/A#define STATE_DEFAULT 0x00000000 /* Default (no specific action) */ 625504Snate@binkert.org#define STATE_SVRS_TERM 0x00010000 /* SAVE_TERM/RESTORE_TERM Exit */ 635504Snate@binkert.org#define STATE_COLD_BOOT 0x00020000 /* Cold Bootstrap Requested */ 645780Ssteve.reinhardt@amd.com#define STATE_WARM_BOOT 0x00030000 /* Warm Bootstrap Requested */ 655780Ssteve.reinhardt@amd.com#define STATE_HALT 0x00040000 /* Remain halted (no restart) */ 665504Snate@binkert.org 675504Snate@binkert.org 68298SN/A#define SV_PF_RSVD 0x00000000 /* RESERVED */ 695504Snate@binkert.org#define SV_RESERVED 0x00000000 /* All STS bits; zero for backward compat. */ 705504Snate@binkert.org#define SV_MPCAP 0x00000001 /* MP capable */ 715504Snate@binkert.org#define SV_PF_UNITED 0x00000020 /* United */ 725504Snate@binkert.org#define SV_PF_SEPARATE 0x00000040 /* Separate */ 735504Snate@binkert.org#define SV_PF_FULLBB 0x00000060 /* Full battery backup */ 745504Snate@binkert.org#define SV_POWERFAIL 0x000000e0 /* Powerfail implementation */ 755504Snate@binkert.org#define SV_PF_RESTART 0x00000100 /* Powerfail restart */ 765529Snate@binkert.org 775504Snate@binkert.org#define SV_GRAPHICS 0x00000200 /* Embedded graphics processor */ 785504Snate@binkert.org 795504Snate@binkert.org#define SV_STS_MASK 0x0000fc00 /* STS bits - system and I/O board */ 805504Snate@binkert.org#define SV_SANDPIPER 0x00000400 /* others define system platforms. */ 815504Snate@binkert.org#define SV_FLAMINGO 0x00000800 /* STS BIT SETTINGS */ 825504Snate@binkert.org#define SV_HOTPINK 0x00000c00 /* STS BIT SETTINGS */ 835504Snate@binkert.org#define SV_FLAMINGOPLUS 0x00001000 /* STS BIT SETTINGS */ 845504Snate@binkert.org#define SV_ULTRA 0x00001400 /* STS BIT SETTINGS */ 855504Snate@binkert.org#define SV_SANDPLUS 0x00001800 /* STS BIT SETTINGS */ 865504Snate@binkert.org#define SV_SANDPIPER45 0x00001c00 /* STS BIT SETTINGS */ 875504Snate@binkert.org#define SV_FLAMINGO45 0x00002000 /* STS BIT SETTINGS */ 885504Snate@binkert.org 895529Snate@binkert.org#define SV_SABLE 0x00000400 /* STS BIT SETTINGS */ 905504Snate@binkert.org 915504Snate@binkert.org#define SV_KN20AA 0x00000400 /* STS BIT SETTINGS */ 925504Snate@binkert.org 935504Snate@binkert.org/* 945504Snate@binkert.org * Values for the "console type" field in the CTB portion of the HWRPB 955504Snate@binkert.org */ 965606Snate@binkert.org#define CONS_NONE 0 /* no console present */ 975504Snate@binkert.org#define CONS_SRVC 1 /* console is service processor */ 985504Snate@binkert.org#define CONS_DZ 2 /* console is dz/dl VT device */ 995504Snate@binkert.org#define CONS_GRPH 3 /* cons is graphics dev w/ dz/dl keybd*/ 1005504Snate@binkert.org#define CONS_REM 4 /* cons is remote, protocal enet/MOP */ 1015504Snate@binkert.org 1025504Snate@binkert.org/* 1035504Snate@binkert.org * PALcode variants that we're interested in. 1045504Snate@binkert.org * Used as indices into the "palrev_avail" array in the per-cpu portion 1055504Snate@binkert.org * of the HWRPB. 1065504Snate@binkert.org */ 1075504Snate@binkert.org#define PALvar_reserved 0 1085504Snate@binkert.org#define PALvar_OpenVMS 1 1095529Snate@binkert.org#define PALvar_OSF1 2 1105504Snate@binkert.org 1115504Snate@binkert.org#include <sys/types.h> 1125504Snate@binkert.org/* 1135504Snate@binkert.org * The Alpha restart parameter block, which is a page or 2 in low memory 1145504Snate@binkert.org */ 1155504Snate@binkert.orgstruct rpb { 1165606Snate@binkert.org struct rpb *rpb_selfref; /* 000: physical self-reference */ 1175504Snate@binkert.org long rpb_string; /* 008: contains string "HWRPB" */ 1185504Snate@binkert.org long rpb_vers; /* 010: HWRPB version number */ 1195504Snate@binkert.org u_long rpb_size; /* 018: bytes in RPB perCPU CTB CRB MEMDSC */ 1205504Snate@binkert.org u_long rpb_cpuid; /* 020: primary cpu id */ 1215504Snate@binkert.org u_long rpb_pagesize; /* 028: page size in bytes */ 1225504Snate@binkert.org u_long rpb_addrbits; /* 030: number of phys addr bits */ 1235504Snate@binkert.org u_long rpb_maxasn; /* 038: max valid ASN */ 1245504Snate@binkert.org char rpb_ssn[16]; /* 040: system serial num: 10 ascii chars */ 1255504Snate@binkert.org u_long rpb_systype; /* 050: system type */ 1265504Snate@binkert.org long rpb_sysvar; /* 058: system variation */ 1275504Snate@binkert.org long rpb_sysrev; /* 060: system revision */ 1285504Snate@binkert.org u_long rpb_clock; /* 068: scaled interval clock intr freq */ 1295504Snate@binkert.org u_long rpb_counter; /* 070: cycle counter frequency */ 1305504Snate@binkert.org u_long rpb_vptb; /* 078: virtual page table base */ 1315504Snate@binkert.org long rpb_res1; /* 080: reserved */ 1325780Ssteve.reinhardt@amd.com u_long rpb_trans_off; /* 088: offset to translation buffer hint */ 1335780Ssteve.reinhardt@amd.com u_long rpb_numprocs; /* 090: number of processor slots */ 1345741Snate@binkert.org u_long rpb_slotsize; /* 098: per-cpu slot size */ 1355741Snate@binkert.org u_long rpb_percpu_off; /* 0A0: offset to per_cpu slots */ 1365741Snate@binkert.org u_long rpb_num_ctb; /* 0A8: number of CTBs */ 1375741Snate@binkert.org u_long rpb_ctb_size; /* 0B0: bytes in largest CTB */ 1385741Snate@binkert.org u_long rpb_ctb_off; /* 0B8: offset to CTB (cons term block) */ 1395741Snate@binkert.org u_long rpb_crb_off; /* 0C0: offset to CRB (cons routine block) */ 1405504Snate@binkert.org u_long rpb_mdt_off; /* 0C8: offset to memory descriptor table */ 1415808Snate@binkert.org u_long rpb_config_off; /* 0D0: offset to config data block */ 1425808Snate@binkert.org u_long rpb_fru_off; /* 0D8: offset to FRU table */ 1435808Snate@binkert.org void (*rpb_saveterm)(); /* 0E0: virt addr of save term routine */ 1445808Snate@binkert.org long rpb_saveterm_pv; /* 0E8: proc value for save term routine */ 1455808Snate@binkert.org void (*rpb_rstrterm)(); /* 0F0: virt addr of restore term routine */ 1465808Snate@binkert.org long rpb_rstrterm_pv; /* 0F8: proc value for restore term routine */ 1475808Snate@binkert.org void (*rpb_restart)(); /* 100: virt addr of CPU restart routine */ 1485808Snate@binkert.org long rpb_restart_pv; /* 108: proc value for CPU restart routine */ 1495808Snate@binkert.org long rpb_software; /* 110: used to determine presence of kdebug */ 1505504Snate@binkert.org long rpb_hardware; /* 118: reserved for hardware */ 1515504Snate@binkert.org long rpb_checksum; /* 120: checksum of prior entries in rpb */ 1525504Snate@binkert.org long rpb_rxrdy; /* 128: receive ready bitmask */ 1535606Snate@binkert.org long rpb_txrdy; /* 130: transmit ready bitmask */ 1545606Snate@binkert.org u_long rpb_dsr_off; /* 138: Dynamic System Recog. offset */ 1555504Snate@binkert.org}; 1565504Snate@binkert.org 1575780Ssteve.reinhardt@amd.com#define rpb_kdebug rpb_software 1585780Ssteve.reinhardt@amd.com 1595504Snate@binkert.org#define OSF_HWRPB_ADDR ((vm_offset_t)(-1L << 23)) 1605504Snate@binkert.org 1615504Snate@binkert.org/* 1625504Snate@binkert.org * This is the format for the boot/restart HWPCB. It must match the 1635504Snate@binkert.org * initial fields of the pcb structure as defined in pcb.h, but must 1645504Snate@binkert.org * additionally contain the appropriate amount of padding to line up 165711SN/A * with formats used by other palcode types. 166711SN/A */ 1675504Snate@binkert.orgstruct bootpcb { 1685504Snate@binkert.org long rpb_ksp; /* 000: kernel stack pointer */ 169310SN/A long rpb_usp; /* 008: user stack pointer */ 1705504Snate@binkert.org long rpb_ptbr; /* 010: page table base register */ 1715504Snate@binkert.org int rpb_cc; /* 018: cycle counter */ 1723373Sstever@eecs.umich.edu int rpb_asn; /* 01C: address space number */ 1735504Snate@binkert.org long rpb_proc_uniq; /* 020: proc/thread unique value */ 1745504Snate@binkert.org long rpb_fen; /* 028: floating point enable */ 1755504Snate@binkert.org long rpb_palscr[2]; /* 030: pal scratch area */ 1765504Snate@binkert.org long rpb_pcbpad[8]; /* 040: padding for fixed size */ 1775504Snate@binkert.org}; 1785504Snate@binkert.org 1795504Snate@binkert.org/* 1805504Snate@binkert.org * Inter-Console Communications Buffer 1815504Snate@binkert.org * Used for the primary processor to communcate with the console 1825504Snate@binkert.org * of secondary processors. 1835504Snate@binkert.org */ 1845504Snate@binkert.orgstruct iccb { 1855504Snate@binkert.org u_int iccb_rxlen; /* receive length in bytes */ 1865504Snate@binkert.org u_int iccb_txlen; /* transmit length in bytes */ 1875504Snate@binkert.org char iccb_rxbuf[80]; /* receive buffer */ 1885504Snate@binkert.org char iccb_txbuf[80]; /* transmit buffer */ 1895504Snate@binkert.org}; 1905504Snate@binkert.org 1915504Snate@binkert.org/* 1925504Snate@binkert.org * The per-cpu portion of the Alpha HWRPB. 1935504Snate@binkert.org * Note that the main portion of the HWRPB is of variable size, 1945504Snate@binkert.org * hence this must be a separate structure. 1955504Snate@binkert.org * 1965504Snate@binkert.org */ 1975504Snate@binkert.orgstruct rpb_percpu { 1985504Snate@binkert.org struct bootpcb rpb_pcb; /* 000: boot/restart HWPCB */ 1995504Snate@binkert.org long rpb_state; /* 080: per-cpu state bits */ 2005504Snate@binkert.org long rpb_palmem; /* 088: palcode memory length */ 2015504Snate@binkert.org long rpb_palscratch; /* 090: palcode scratch length */ 2025504Snate@binkert.org long rpb_palmem_addr; /* 098: phys addr of palcode mem space */ 2035504Snate@binkert.org long rpb_palscratch_addr; /* 0A0: phys addr of palcode scratch space */ 2045504Snate@binkert.org long rpb_palrev; /* 0A8: PALcode rev required */ 2055504Snate@binkert.org long rpb_proctype; /* 0B0: processor type */ 2065504Snate@binkert.org long rpb_procvar; /* 0B8: processor variation */ 2075504Snate@binkert.org long rpb_procrev; /* 0C0: processor revision */ 2085780Ssteve.reinhardt@amd.com char rpb_procsn[16]; /* 0C8: proc serial num: 10 ascii chars */ 2095780Ssteve.reinhardt@amd.com long rpb_logout; /* 0D8: phys addr of logout area */ 2105780Ssteve.reinhardt@amd.com long rpb_logout_len; /* 0E0: length in bytes of logout area */ 2115780Ssteve.reinhardt@amd.com long rpb_haltpb; /* 0E8: halt pcb base */ 2125780Ssteve.reinhardt@amd.com long rpb_haltpc; /* 0F0: halt pc */ 2135780Ssteve.reinhardt@amd.com long rpb_haltps; /* 0F8: halt ps */ 2145780Ssteve.reinhardt@amd.com long rpb_haltal; /* 100: halt arg list (R25) */ 2155780Ssteve.reinhardt@amd.com long rpb_haltra; /* 108: halt return address (R26) */ 2165780Ssteve.reinhardt@amd.com long rpb_haltpv; /* 110: halt procedure value (R27) */ 2175780Ssteve.reinhardt@amd.com long rpb_haltcode; /* 118: reason for halt */ 2185780Ssteve.reinhardt@amd.com long rpb_software; /* 120: for software */ 2195780Ssteve.reinhardt@amd.com struct iccb rpb_iccb; /* 128: inter-console communications buffer */ 2205780Ssteve.reinhardt@amd.com long rpb_palrev_avail[16];/* 1D0: PALcode revs available */ 2215780Ssteve.reinhardt@amd.com long rpb_pcrsvd[6]; /* 250: reserved for arch use */ 2225780Ssteve.reinhardt@amd.com/* the dump stack grows from the end of the rpb page not to reach here */ 2235504Snate@binkert.org}; 2245504Snate@binkert.org 2255529Snate@binkert.org/* The firmware revision is in the (unused) first entry of palrevs available */ 2265504Snate@binkert.org#define rpb_firmrev rpb_palrev_avail[0] 2275504Snate@binkert.org 2285504Snate@binkert.org/* 2295504Snate@binkert.org * The memory cluster descriptor. 2305504Snate@binkert.org */ 2315504Snate@binkert.orgstruct rpb_cluster { 2325504Snate@binkert.org long rpb_pfn; /* 000: starting PFN of this cluster */ 2335504Snate@binkert.org long rpb_pfncount; /* 008: count of PFNs in this cluster */ 2345504Snate@binkert.org long rpb_pfntested; /* 010: count of tested PFNs in cluster */ 2355504Snate@binkert.org long rpb_va; /* 018: va of bitmap */ 2365504Snate@binkert.org long rpb_pa; /* 020: pa of bitmap */ 2375504Snate@binkert.org long rpb_checksum; /* 028: checksum of bitmap */ 2385529Snate@binkert.org long rpb_usage; /* 030: usage of cluster */ 2395504Snate@binkert.org}; 2405504Snate@binkert.org#define CLUSTER_USAGE_OS ((long)0) 2415504Snate@binkert.org#define CLUSTER_USAGE_PAL ((long)1) 2425504Snate@binkert.org#define CLUSTER_USAGE_NVRAM ((long)2) 2435504Snate@binkert.org 2445504Snate@binkert.org/* 2455504Snate@binkert.org * The "memory descriptor table" portion of the HWRPB. 2465504Snate@binkert.org * Note that the main portion of the HWRPB is of variable size and there is a 2475504Snate@binkert.org * variable number of per-cpu slots, hence this must be a separate structure. 2485504Snate@binkert.org * Also note that the memory descriptor table contains a fixed portion plus 2495504Snate@binkert.org * a variable number of "memory cluster descriptors" (one for each "cluster" 2505504Snate@binkert.org * of memory). 2515529Snate@binkert.org */ 2525504Snate@binkert.orgstruct rpb_mdt { 2535504Snate@binkert.org long rpb_checksum; /* 000: checksum of entire mem desc table */ 2545504Snate@binkert.org long rpb_impaddr; /* 008: PA of implementation dep info */ 2555504Snate@binkert.org long rpb_numcl; /* 010: number of clusters */ 2565504Snate@binkert.org struct rpb_cluster rpb_cluster[1]; /* first instance of a cluster */ 2575504Snate@binkert.org}; 2585504Snate@binkert.org 2595504Snate@binkert.org/* 2605504Snate@binkert.org * The "Console Terminal Block" portion of the HWRPB, for serial line 2615504Snate@binkert.org * UART console device. 2625504Snate@binkert.org */ 2635504Snate@binkert.orgstruct ctb_tt { 2645529Snate@binkert.org long ctb_type; /* 000: console type */ 2655504Snate@binkert.org long ctb_unit; /* 008: console unit */ 2665504Snate@binkert.org long ctb_resv; /* 010: reserved */ 2675504Snate@binkert.org long ctb_length; /* 018: byte length of device dep */ 2685504Snate@binkert.org /* portion */ 2695504Snate@binkert.org long ctb_csr; /* 020: CSR Address */ 2705606Snate@binkert.org long ctb_tivec; /* 028: <63>=tie; interrupt vector */ 2715606Snate@binkert.org long ctb_rivec; /* 030: <63>=rie; interrupt vector */ 2725504Snate@binkert.org long ctb_baud; /* 038: baud rate */ 2735504Snate@binkert.org long ctb_put_sts; /* 040: PUTS callback extended status */ 2745780Ssteve.reinhardt@amd.com long ctb_get_sts; /* 048: GETS callback extended status */ 2755780Ssteve.reinhardt@amd.com long ctb_rsvd[1]; /* 050: reserved for console use */ 2765504Snate@binkert.org}; 2775504Snate@binkert.org 2785504Snate@binkert.org/* 2795504Snate@binkert.org * The "Console Terminal Block" portion of the HWRPB. 2805504Snate@binkert.org */ 2815504Snate@binkert.orgstruct rpb_ctb { 282310SN/A long rpb_type; /* 000: console type */ 283299SN/A long rpb_unit; /* 008: console unit */ 2845504Snate@binkert.org long rpb_resv; /* 010: reserved */ 2852188SN/A long rpb_length; /* 018: byte length of device dep portion */ 2865504Snate@binkert.org long rpb_first; /* 000: first field of device dep portion */ 2875504Snate@binkert.org}; 2885504Snate@binkert.org 2892235SN/A/* 2905504Snate@binkert.org * The physical/virtual map for the console routine block. 2915504Snate@binkert.org */ 2923368Sstever@eecs.umich.edustruct rpb_map { 2935504Snate@binkert.org long rpb_virt; /* virtual address for map entry */ 2945504Snate@binkert.org long rpb_phys; /* phys address for map entry */ 2955504Snate@binkert.org long rpb_pgcount; /* page count for map entry */ 2965504Snate@binkert.org}; 2975504Snate@binkert.org 2985504Snate@binkert.org/* 2993368Sstever@eecs.umich.edu * The "Console Routine Block" portion of the HWRPB. 3005504Snate@binkert.org * Note: the "offsets" are all relative to the start of the HWRPB (HWRPB_ADDR). 3015504Snate@binkert.org */ 3025504Snate@binkert.orgstruct rpb_crb { 3032188SN/A long rpb_va_disp; /* va of call-back dispatch rtn */ 3042188SN/A long rpb_pa_disp; /* pa of call-back dispatch rtn */ 3055504Snate@binkert.org long rpb_va_fixup; /* va of call-back fixup rtn */ 3065504Snate@binkert.org long rpb_pa_fixup; /* pa of call-back fixup rtn */ 3075504Snate@binkert.org long rpb_num; /* number of entries in phys/virt map */ 3085504Snate@binkert.org long rpb_mapped_pages; /* Number of pages to be mapped */ 3095504Snate@binkert.org struct rpb_map rpb_map[1]; /* first instance of a map entry */ 3102188SN/A}; 3115780Ssteve.reinhardt@amd.com 3125780Ssteve.reinhardt@amd.com/* 3135504Snate@binkert.org * These macros define where within the HWRPB the CTB and CRB are located. 3145504Snate@binkert.org */ 3155504Snate@binkert.org#define CTB_SETUP ((struct rpb_ctb *) ((long)hwrpb_addr + \ 3165504Snate@binkert.org (long)(hwrpb_addr->rpb_ctb_off))) 3175504Snate@binkert.org#define CRB_SETUP ((struct rpb_crb *) ((long)hwrpb_addr + \ 3182235SN/A (long)(hwrpb_addr->rpb_crb_off))) 3195504Snate@binkert.org 3205504Snate@binkert.org/* 3215504Snate@binkert.org * The "Dynamic System Recognition" portion of the HWRPB. 3225504Snate@binkert.org * It is used to obtain the platform specific data need to allow 3235504Snate@binkert.org * the platform define the platform name, the platform SMM and LURT 3243368Sstever@eecs.umich.edu * data for software licensing 3255504Snate@binkert.org */ 326struct rpb_dsr { 327 long rpb_smm; /* SMM nubber used by LMF */ 328 u_long rpb_lurt_off; /* offset to LURT table */ 329 u_long rpb_sysname_off; /* offset to sysname char count */ 330 int lurt[10]; /* XXM has one LURT entry */ 331}; 332