PERFORCE change 78070 for review
Marcel Moolenaar
marcel at FreeBSD.org
Mon Jun 6 04:36:19 GMT 2005
http://perforce.freebsd.org/chv.cgi?CH=78070
Change 78070 by marcel at marcel_nfs on 2005/06/06 04:35:55
Submit a bunch of changes I have for a while now. This definitely
doesn't compile. Includes changes by prior integrations.
Affected files ...
.. //depot/projects/ia64/sys/boot/ia64/ski/Makefile#3 edit
.. //depot/projects/ia64/sys/boot/ia64/ski/elf_freebsd.c#2 edit
.. //depot/projects/ia64/sys/ia64/ia64/efi.c#8 edit
.. //depot/projects/ia64/sys/ia64/ia64/machdep.c#115 edit
.. //depot/projects/ia64/sys/ia64/include/bootinfo.h#10 edit
Differences ...
==== //depot/projects/ia64/sys/boot/ia64/ski/Makefile#3 (text+ko) ====
@@ -10,6 +10,7 @@
skiconsole.c skifs.c ssc.c start.S time.c vers.c
CFLAGS+= -DLOADER
+CFLAGS+= -I${.OBJDIR}
CFLAGS+= -I${.CURDIR}
CFLAGS+= -I${.CURDIR}/../../..
CFLAGS+= -I${.CURDIR}/../../efi/include
@@ -43,4 +44,8 @@
FILES= ${PROG}.help
+CLEANFILES+= machine
+beforedepend:
+ ln -s ${.CURDIR}/../../../ia64/include ${.OBJDIR}/machine
+
.include <bsd.prog.mk>
==== //depot/projects/ia64/sys/boot/ia64/ski/elf_freebsd.c#2 (text+ko) ====
@@ -36,7 +36,7 @@
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
-/*
+/*-
* Copyright (c) 1992, 1993
* The Regents of the University of California. All rights reserved.
*
@@ -71,7 +71,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/boot/ia64/ski/elf_freebsd.c,v 1.11 2004/09/24 03:53:50 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/boot/ia64/ski/elf_freebsd.c,v 1.12 2005/01/05 22:16:58 imp Exp $");
#include <stand.h>
#include <string.h>
@@ -86,9 +86,9 @@
#include "bootstrap.h"
#include "libski.h"
-#define _KERNEL
+extern uint64_t *pgtbl;
-static int elf64_exec(struct preloaded_file *amp);
+static int elf64_exec(struct preloaded_file *amp);
struct file_format ia64_elf = { elf64_loadfile, elf64_exec };
@@ -170,33 +170,56 @@
bzero(bi, sizeof(struct bootinfo));
bi_load(bi, fp);
- /*
- * Region 6 is direct mapped UC and region 7 is direct mapped
- * WC. The details of this is controlled by the Alt {I,D}TLB
- * handlers. Here we just make sure that they have the largest
- * possible page size to minimise TLB usage.
- */
- ia64_set_rr(IA64_RR_BASE(6), (6 << 8) | (28 << 2));
- ia64_set_rr(IA64_RR_BASE(7), (7 << 8) | (28 << 2));
+ if (pgtbl == NULL) {
+ /*
+ * Region 6 is direct mapped UC and region 7 is direct mapped
+ * WC. The details of this is controlled by the Alt {I,D}TLB
+ * handlers. Here we just make sure that they have the largest
+ * possible page size to minimise TLB usage.
+ */
+ ia64_set_rr(IA64_RR_BASE(6), (6 << 8) | (28 << 2));
+ ia64_set_rr(IA64_RR_BASE(7), (7 << 8) | (28 << 2));
+
+ bzero(&pte, sizeof(pte));
+ pte.pte_p = 1;
+ pte.pte_ma = PTE_MA_WB;
+ pte.pte_a = 1;
+ pte.pte_d = 1;
+ pte.pte_pl = PTE_PL_KERN;
+ pte.pte_ar = PTE_AR_RWX;
+ pte.pte_ppn = 0;
+
+ __asm __volatile("mov cr.ifa=%0" :: "r"(IA64_RR_BASE(7)));
+ __asm __volatile("mov cr.itir=%0" :: "r"(28 << 2));
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("itr.i itr[%0]=%1;;"
+ :: "r"(0), "r"(*(u_int64_t*)&pte));
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("itr.d dtr[%0]=%1;;"
+ :: "r"(0), "r"(*(u_int64_t*)&pte));
+ __asm __volatile("srlz.i;;");
+ } else {
+ ia64_set_rr(IA64_RR_BASE(5), (5 << 8) | (20 << 2) | 1);
- bzero(&pte, sizeof(pte));
- pte.pte_p = 1;
- pte.pte_ma = PTE_MA_WB;
- pte.pte_a = 1;
- pte.pte_d = 1;
- pte.pte_pl = PTE_PL_KERN;
- pte.pte_ar = PTE_AR_RWX;
- pte.pte_ppn = 0;
+ bzero(&pte, sizeof(pte));
+ pte.pte_p = 1;
+ pte.pte_ma = PTE_MA_WB;
+ pte.pte_a = 1;
+ pte.pte_d = 1;
+ pte.pte_pl = PTE_PL_KERN;
+ pte.pte_ar = PTE_AR_RWX;
+ pte.pte_ppn = pgtbl[0] >> 12;
- __asm __volatile("mov cr.ifa=%0" :: "r"(IA64_RR_BASE(7)));
- __asm __volatile("mov cr.itir=%0" :: "r"(28 << 2));
- __asm __volatile("srlz.i;;");
- __asm __volatile("itr.i itr[%0]=%1;;"
+ __asm __volatile("mov cr.ifa=%0" :: "r"(IA64_KERNELBASE));
+ __asm __volatile("mov cr.itir=%0" :: "r"(20 << 2));
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("itr.i itr[%0]=%1;;"
:: "r"(0), "r"(*(u_int64_t*)&pte));
- __asm __volatile("srlz.i;;");
- __asm __volatile("itr.d dtr[%0]=%1;;"
+ __asm __volatile("srlz.i;;");
+ __asm __volatile("itr.d dtr[%0]=%1;;"
:: "r"(0), "r"(*(u_int64_t*)&pte));
- __asm __volatile("srlz.i;;");
+ __asm __volatile("srlz.i;;");
+ }
enter_kernel(fp->f_name, hdr->e_entry, bi);
}
==== //depot/projects/ia64/sys/ia64/ia64/efi.c#8 (text+ko) ====
@@ -90,8 +90,8 @@
md = efi_md_next(md);
}
status = ia64_call_efi_physical((uint64_t)efi_runtime->rt_setvirtual,
- bootinfo.bi_memmap_size, bootinfo.bi_memdesc_size,
- bootinfo.bi_memdesc_version, bootinfo.bi_memmap, 0);
+ ia64_bi_lookup(BI_TAG_MM_SIZE), ia64_bi_lookup(BI_TAG_MMD_SIZE),
+ ia64_bi_lookup(BI_TAG_MMD_VERS), ia64_bi_lookup(BI_TAG_MM_ADDR), 0);
return ((status < 0) ? EFAULT : 0);
}
@@ -123,10 +123,12 @@
struct efi_md *
efi_md_first(void)
{
+ uint64_t pa;
- if (bootinfo.bi_memmap == 0)
+ pa = ia64_bi_lookup(BI_TAG_MM_ADDR);
+ if (pa == 0)
return (NULL);
- return ((struct efi_md *)IA64_PHYS_TO_RR7(bootinfo.bi_memmap));
+ return ((struct efi_md *)IA64_PHYS_TO_RR7(pa));
}
struct efi_md *
@@ -134,9 +136,9 @@
{
uint64_t plim;
- plim = IA64_PHYS_TO_RR7(bootinfo.bi_memmap + bootinfo.bi_memmap_size);
- md = (struct efi_md *)((uintptr_t)md + bootinfo.bi_memdesc_size);
- return ((md >= (struct efi_md *)plim) ? NULL : md);
+ plim = ia64_bi_lookup(BI_TAG_MM_ADDR) + ia64_bi_lookup(BI_TAG_MM_SIZE);
+ md = (struct efi_md *)((uintptr_t)md + ia64_bi_lookup(BI_TAG_MMD_SIZE));
+ return ((md >= (struct efi_md *)IA64_PHYS_TO_RR7(plim)) ? NULL : md);
}
void
==== //depot/projects/ia64/sys/ia64/ia64/machdep.c#115 (text+ko) ====
@@ -26,7 +26,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD: src/sys/ia64/ia64/machdep.c,v 1.193 2004/12/08 05:46:54 marcel Exp $");
+__FBSDID("$FreeBSD: src/sys/ia64/ia64/machdep.c,v 1.199 2005/04/04 21:53:54 jhb Exp $");
#include "opt_compat.h"
#include "opt_ddb.h"
@@ -34,63 +34,70 @@
#include "opt_msgbuf.h"
#include <sys/param.h>
+#include <sys/proc.h>
#include <sys/systm.h>
+#include <sys/bio.h>
+#include <sys/buf.h>
+#include <sys/bus.h>
+#include <sys/cons.h>
+#include <sys/cpu.h>
#include <sys/eventhandler.h>
+#include <sys/exec.h>
+#include <sys/imgact.h>
#include <sys/kdb.h>
-#include <sys/sysproto.h>
-#include <sys/signalvar.h>
-#include <sys/imgact.h>
#include <sys/kernel.h>
-#include <sys/proc.h>
+#include <sys/linker.h>
#include <sys/lock.h>
-#include <sys/pcpu.h>
#include <sys/malloc.h>
-#include <sys/reboot.h>
-#include <sys/bio.h>
-#include <sys/buf.h>
#include <sys/mbuf.h>
-#include <sys/vmmeter.h>
#include <sys/msgbuf.h>
-#include <sys/exec.h>
+#include <sys/pcpu.h>
+#include <sys/ptrace.h>
+#include <sys/random.h>
+#include <sys/reboot.h>
+#include <sys/signalvar.h>
+#include <sys/syscall.h>
#include <sys/sysctl.h>
+#include <sys/sysproto.h>
+#include <sys/ucontext.h>
#include <sys/uio.h>
-#include <sys/linker.h>
-#include <sys/random.h>
-#include <sys/cons.h>
#include <sys/uuid.h>
-#include <sys/syscall.h>
+#include <sys/vmmeter.h>
+#include <sys/vnode.h>
+
+#include <ddb/ddb.h>
+
#include <net/netisr.h>
+
#include <vm/vm.h>
+#include <vm/vm_extern.h>
#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
-#include <vm/vm_extern.h>
#include <vm/vm_object.h>
#include <vm/vm_pager.h>
-#include <sys/ptrace.h>
+
+#include <machine/bootinfo.h>
#include <machine/clock.h>
#include <machine/cpu.h>
-#include <machine/md_var.h>
-#include <machine/reg.h>
+#include <machine/efi.h>
+#include <machine/elf.h>
#include <machine/fpu.h>
#include <machine/mca.h>
+#include <machine/md_var.h>
+#include <machine/mutex.h>
#include <machine/pal.h>
+#include <machine/pcb.h>
+#include <machine/reg.h>
#include <machine/sal.h>
+#include <machine/sigframe.h>
#ifdef SMP
#include <machine/smp.h>
#endif
-#include <machine/bootinfo.h>
-#include <machine/mutex.h>
+#include <machine/unwind.h>
#include <machine/vmparam.h>
-#include <machine/elf.h>
-#include <ddb/ddb.h>
-#include <sys/vnode.h>
-#include <sys/ucontext.h>
-#include <machine/sigframe.h>
-#include <machine/efi.h>
-#include <machine/unwind.h>
+
#include <i386/include/specialreg.h>
-#include <machine/pcb.h>
u_int64_t processor_frequency;
u_int64_t bus_frequency;
@@ -98,7 +105,7 @@
int cold = 1;
u_int64_t pa_bootinfo;
-struct bootinfo bootinfo;
+struct bi_tagval *bootinfo;
struct pcpu early_pcpu;
extern char kstack[];
@@ -136,6 +143,7 @@
struct msgbuf *msgbufp=0;
long Maxmem = 0;
+long realmem = 0;
vm_offset_t phys_avail[100];
@@ -239,6 +247,7 @@
#endif
printf("real memory = %ld (%ld MB)\n", ia64_ptob(Maxmem),
ia64_ptob(Maxmem) / 1048576);
+ realmem = ia64_ptob(Maxmem);
/*
* Display any holes after the first chunk of extended memory.
@@ -287,6 +296,17 @@
efi_reset_system();
}
+/* Get current clock frequency for the given cpu id. */
+int
+cpu_est_clockrate(int cpu_id, uint64_t *rate)
+{
+
+ if (pcpu_find(cpu_id) == NULL || rate == NULL)
+ return (EINVAL);
+ *rate = processor_frequency;
+ return (0);
+}
+
void
cpu_halt()
{
@@ -381,6 +401,30 @@
}
void
+spinlock_enter(void)
+{
+ struct thread *td;
+
+ td = curthread;
+ if (td->td_md.md_spinlock_count == 0)
+ td->td_md.md_saved_intr = intr_disable();
+ td->td_md.md_spinlock_count++;
+ critical_enter();
+}
+
+void
+spinlock_exit(void)
+{
+ struct thread *td;
+
+ td = curthread;
+ critical_exit();
+ td->td_md.md_spinlock_count--;
+ if (td->td_md.md_spinlock_count == 0)
+ intr_restore(td->td_md.md_saved_intr);
+}
+
+void
map_pal_code(void)
{
pt_entry_t pte;
@@ -471,15 +515,28 @@
}
}
+uint64_t
+ia64_bi_lookup(uint64_t tag)
+{
+ struct bi_tagval *bi;
+
+ bi = bootinfo;
+ if (bi == NULL)
+ return (0);
+ while (bi->tag != 0 && bi->tag != tag)
+ bi = (bi->tag == BI_TAG_BI_REDIR) ? (void *)bi->val : bi + 1;
+ return (bi->val);
+}
+
void
ia64_init(void)
{
- int phys_avail_cnt;
vm_offset_t kernstart, kernend;
vm_offset_t kernstartpfn, kernendpfn, pfn0, pfn1;
char *p;
struct efi_md *md;
- int metadata_missing;
+ uint64_t val;
+ int phys_avail_cnt;
/* NO OUTPUT ALLOWED UNTIL FURTHER NOTICE */
@@ -495,15 +552,13 @@
*/
/*
- * pa_bootinfo is the physical address of the bootinfo block as
- * passed to us by the loader and set in locore.s.
+ * pa_bootinfo is the physical address of the first (tag,val)
+ * pair. This must have the magic tag and value.
*/
- bootinfo = *(struct bootinfo *)(IA64_PHYS_TO_RR7(pa_bootinfo));
-
- if (bootinfo.bi_magic != BOOTINFO_MAGIC || bootinfo.bi_version != 1) {
- bzero(&bootinfo, sizeof(bootinfo));
- bootinfo.bi_kernend = (vm_offset_t) round_page(_end);
- }
+ bootinfo = (struct bi_tagval *)(IA64_PHYS_TO_RR7(pa_bootinfo));
+ if (bootinfo->tag != BI_TAG_BI_MAGIC ||
+ bootinfo->val != BI_VAL_BI_MAGIC)
+ bootinfo = NULL;
/*
* Look for the I/O ports first - we need them for console
@@ -520,22 +575,12 @@
}
}
- metadata_missing = 0;
- if (bootinfo.bi_modulep)
- preload_metadata = (caddr_t)bootinfo.bi_modulep;
- else
- metadata_missing = 1;
- if (envmode == 1)
- kern_envp = static_env;
- else
- kern_envp = (caddr_t)bootinfo.bi_envp;
+ boothowto = ia64_bi_lookup(BI_TAG_BOOTHOW);
+ kern_envp = (envmode != 1) ? (void *)ia64_bi_lookup(BI_TAG_ENVIRON) :
+ static_env;
+ preload_metadata = (void *)ia64_bi_lookup(BI_TAG_PRELOAD);
/*
- * Look at arguments passed to us and compute boothowto.
- */
- boothowto = bootinfo.bi_boothowto;
-
- /*
* Catch case of boot_verbose set in environment.
*/
if ((p = getenv("boot_verbose")) != NULL) {
@@ -570,7 +615,7 @@
* Wire things up so we can call the firmware.
*/
map_pal_code();
- efi_boot_minimal(bootinfo.bi_systab);
+ efi_boot_minimal(ia64_bi_lookup(BI_TAG_SYSTABLE));
ia64_sal_init();
calculate_frequencies();
@@ -579,21 +624,26 @@
*/
kernstart = trunc_page(kernel_text);
#ifdef DDB
- ksym_start = bootinfo.bi_symtab;
- ksym_end = bootinfo.bi_esymtab;
- kernend = (vm_offset_t)round_page(ksym_end);
+ ksym_start = ia64_bi_lookup(BI_TAG_SSYMTAB);
+ ksym_end = ia64_bi_lookup(BI_TAG_ESYMTAB);
+ kernend = (ksym_end != 0) ? (vm_offset_t)round_page(ksym_end) :
+ (vm_offset_t)round_page(_end);
#else
kernend = (vm_offset_t)round_page(_end);
#endif
/* But if the bootstrap tells us otherwise, believe it! */
- if (bootinfo.bi_kernend)
- kernend = round_page(bootinfo.bi_kernend);
- if (metadata_missing)
+ val = ia64_bi_lookup(BI_TAG_KERNEND);
+ if (val != 0)
+ kernend = round_page(val);
+
+ if (preload_metadata == NULL)
printf("WARNING: loader(8) metadata is missing!\n");
/* Get FPSWA interface */
- fpswa_iface = (struct fpswa_iface *)IA64_PHYS_TO_RR7(bootinfo.bi_fpswa);
+ val = ia64_bi_lookup(BI_TAG_FPSWA);
+ if (val != 0)
+ fpswa_iface = (struct fpswa_iface *)IA64_PHYS_TO_RR7(val);
/* Init basic tunables, including hz */
init_param1();
@@ -781,7 +831,7 @@
ia64_get_hcdp(void)
{
- return (bootinfo.bi_hcdp);
+ return (ia64_bi_lookup(BI_TAG_HCDP));
}
void
==== //depot/projects/ia64/sys/ia64/include/bootinfo.h#10 (text+ko) ====
@@ -1,37 +1,41 @@
-/* $FreeBSD: src/sys/ia64/include/bootinfo.h,v 1.7 2004/11/28 04:34:17 marcel Exp $ */
-/*
- * Copyright (c) 1994, 1995, 1996 Carnegie-Mellon University.
+/*-
+ * Copyright (c) 2004,2005 Marcel Moolenaar
* All rights reserved.
*
- * Author: Chris G. Demetriou
- *
- * Permission to use, copy, modify and distribute this software and
- * its documentation is hereby granted, provided that both the copyright
- * notice and this permission notice appear in all copies of the
- * software, derivative works or modified versions, and any portions
- * thereof, and that both notices appear in supporting documentation.
- *
- * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
- * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND
- * FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
- *
- * Carnegie Mellon requests users of this software to return to
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
*
- * Software Distribution Coordinator or Software.Distribution at CS.CMU.EDU
- * School of Computer Science
- * Carnegie Mellon University
- * Pittsburgh PA 15213-3890
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
- * any improvements or extensions that they make and grant Carnegie the
- * rights to redistribute these changes.
+ * $FreeBSD$
*/
+#ifndef _MACHINE_BOOTINFO_H_
+#define _MACHINE_BOOTINFO_H_
+
+#ifdef LOADER_BACKWARD_COMPATIBILITY
+
struct bootinfo {
uint64_t bi_magic; /* BOOTINFO_MAGIC */
#define BOOTINFO_MAGIC 0xdeadbeeffeedface
uint64_t bi_version; /* version 1 */
- uint64_t bi_spare[5]; /* was: name of kernel */
- uint64_t bi_pgtbl; /* PA of loader page table */
+ uint64_t bi_spare[6]; /* was: name of kernel */
uint64_t bi_hcdp; /* DIG64 HCDP table */
uint64_t bi_fpswa; /* FPSWA interface */
uint64_t bi_boothowto; /* value for boothowto */
@@ -40,7 +44,7 @@
uint64_t bi_memmap_size; /* size of EFI memory map */
uint64_t bi_memdesc_size; /* sizeof EFI memory desc */
uint32_t bi_memdesc_version; /* EFI memory desc version */
- uint32_t bi_pgtblsz; /* Size of loader page table */
+ uint32_t bi_spare2;
uint64_t bi_symtab; /* start of kernel sym table */
uint64_t bi_esymtab; /* end of kernel sym table */
uint64_t bi_kernend; /* end of kernel space */
@@ -49,3 +53,43 @@
};
extern struct bootinfo bootinfo;
+
+#endif
+
+/*
+ * (tag,val) array based hand-off.
+ */
+
+struct bi_tagval {
+ uint64_t tag;
+ uint64_t val;
+};
+
+/* Non-optional tags. */
+#define BI_TAG_BI_MAGIC 0x62695f6d61676963ul /* bi_magic */
+#define BI_VAL_BI_MAGIC 0x3d46726565425344ul
+#define BI_TAG_BI_REDIR 0x62695f7265646972ul /* bi_redir */
+
+/* Tags for MI (meta) data. */
+#define BI_TAG_BOOTHOW 0x626f6f74686f7700ul /* boothow */
+#define BI_TAG_ENVIRON 0x656e7669726f6e00ul /* environ */
+#define BI_TAG_KERNEND 0x1
+#define BI_TAG_PRELOAD 0x7072656c6f616400ul /* preload */
+#define BI_TAG_SSYMTAB 0x7373796d74616200ul /* ssymtab */
+#define BI_TAG_ESYMTAB 0x6573796d74616200ul /* esymtab */
+
+/* Tags for MD (meta) data. */
+#define BI_TAG_FPSWA 0x2
+#define BI_TAG_HCDP 0x3
+#define BI_TAG_MM_ADDR 0x6d6d5f6164647200ul /* mm_addr */
+#define BI_TAG_MM_SIZE 0x6d6d5f73697a6500ul /* mm_size */
+#define BI_TAG_MMD_SIZE 0x6d6d645f73697a65ul /* mmd_size */
+#define BI_TAG_MMD_VERS 0x6d6d645f76657273ul /* mmd_vers */
+#define BI_TAG_SYSTABLE 0x4
+
+#define BI_TAG_PGTBL 0x10
+#define BI_TAG_PGTBLSZ 0x11
+
+uint64_t ia64_bi_lookup(uint64_t);
+
+#endif /* _MACHINE_BOOTINFO_H_ */
More information about the p4-projects
mailing list