Date: Mon, 4 Apr 2011 03:41:19 +0000 (UTC) From: Marcel Moolenaar <marcel@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r220315 - in projects/altix/sys: amd64/conf amd64/ia32 amd64/linux32 arm/conf arm/econa boot/common boot/ia64/common boot/ia64/efi boot/ia64/ski boot/pc98/loader boot/sparc64/loader com... Message-ID: <201104040341.p343fJwP069787@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: marcel Date: Mon Apr 4 03:41:18 2011 New Revision: 220315 URL: http://svn.freebsd.org/changeset/base/220315 Log: Merge svn+ssh://svn.freebsd.org/base/head@220314 Added: projects/altix/sys/dev/ath/if_ath_ahb.c - copied unchanged from r220314, head/sys/dev/ath/if_ath_ahb.c projects/altix/sys/dev/nvram2env/ - copied from r220314, head/sys/dev/nvram2env/ projects/altix/sys/kern/kern_racct.c - copied unchanged from r220314, head/sys/kern/kern_racct.c projects/altix/sys/kern/kern_rctl.c - copied unchanged from r220314, head/sys/kern/kern_rctl.c projects/altix/sys/mips/conf/AR91XX_BASE - copied unchanged from r220314, head/sys/mips/conf/AR91XX_BASE projects/altix/sys/mips/conf/AR91XX_BASE.hints - copied unchanged from r220314, head/sys/mips/conf/AR91XX_BASE.hints projects/altix/sys/mips/conf/RT305X - copied unchanged from r220314, head/sys/mips/conf/RT305X projects/altix/sys/mips/conf/RT305X.hints - copied unchanged from r220314, head/sys/mips/conf/RT305X.hints projects/altix/sys/mips/conf/TP-WN1043ND - copied unchanged from r220314, head/sys/mips/conf/TP-WN1043ND projects/altix/sys/mips/conf/TP-WN1043ND.hints - copied unchanged from r220314, head/sys/mips/conf/TP-WN1043ND.hints projects/altix/sys/mips/rt305x/ - copied from r220314, head/sys/mips/rt305x/ projects/altix/sys/modules/ath_ahb/ - copied from r220314, head/sys/modules/ath_ahb/ projects/altix/sys/modules/ath_pci/ - copied from r220314, head/sys/modules/ath_pci/ projects/altix/sys/modules/cxgbe/if_cxgbe/ - copied from r220314, head/sys/modules/cxgbe/if_cxgbe/ projects/altix/sys/sys/racct.h - copied unchanged from r220314, head/sys/sys/racct.h projects/altix/sys/sys/rctl.h - copied unchanged from r220314, head/sys/sys/rctl.h Replaced: projects/altix/sys/modules/cxgbe/Makefile - copied unchanged from r220314, head/sys/modules/cxgbe/Makefile Modified: projects/altix/sys/amd64/conf/GENERIC projects/altix/sys/amd64/ia32/ia32_misc.c projects/altix/sys/amd64/ia32/ia32_signal.c projects/altix/sys/amd64/ia32/ia32_sigtramp.S projects/altix/sys/amd64/ia32/ia32_syscall.c projects/altix/sys/amd64/linux32/linux.h projects/altix/sys/arm/conf/AVILA projects/altix/sys/arm/conf/CAMBRIA projects/altix/sys/arm/econa/ehci_ebus.c projects/altix/sys/boot/common/bootstrap.h projects/altix/sys/boot/common/load_elf.c projects/altix/sys/boot/common/load_elf_obj.c projects/altix/sys/boot/common/module.c projects/altix/sys/boot/ia64/common/copy.c projects/altix/sys/boot/ia64/common/exec.c projects/altix/sys/boot/ia64/common/libia64.h projects/altix/sys/boot/ia64/efi/main.c projects/altix/sys/boot/ia64/ski/efi_stub.c projects/altix/sys/boot/ia64/ski/main.c projects/altix/sys/boot/ia64/ski/skimd.c projects/altix/sys/boot/pc98/loader/main.c projects/altix/sys/boot/sparc64/loader/main.c projects/altix/sys/compat/freebsd32/freebsd32.h projects/altix/sys/compat/freebsd32/freebsd32_ioctl.c projects/altix/sys/compat/freebsd32/freebsd32_ioctl.h projects/altix/sys/compat/freebsd32/freebsd32_misc.c projects/altix/sys/compat/freebsd32/freebsd32_proto.h projects/altix/sys/compat/freebsd32/freebsd32_syscall.h projects/altix/sys/compat/freebsd32/freebsd32_syscalls.c projects/altix/sys/compat/freebsd32/freebsd32_sysent.c projects/altix/sys/compat/freebsd32/freebsd32_systrace_args.c projects/altix/sys/compat/freebsd32/syscalls.master projects/altix/sys/compat/ia32/ia32_genassym.c projects/altix/sys/compat/ia32/ia32_signal.h projects/altix/sys/compat/ia32/ia32_sysvec.c projects/altix/sys/compat/ia32/ia32_util.h projects/altix/sys/compat/linux/linux_socket.c projects/altix/sys/conf/NOTES projects/altix/sys/conf/files projects/altix/sys/conf/files.mips projects/altix/sys/conf/options projects/altix/sys/dev/age/if_age.c projects/altix/sys/dev/ath/ath_hal/ah.c projects/altix/sys/dev/ath/ath_hal/ah_internal.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar2133.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416.h projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_interrupts.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_recv.c projects/altix/sys/dev/ath/ath_hal/ar5416/ar5416_reset.c projects/altix/sys/dev/ath/ath_hal/ar9001/ar9160.ini projects/altix/sys/dev/ath/if_ath.c projects/altix/sys/dev/ath/if_ath_pci.c projects/altix/sys/dev/ath/if_ath_sysctl.c projects/altix/sys/dev/ath/if_athioctl.h projects/altix/sys/dev/bxe/if_bxe.c projects/altix/sys/dev/bxe/if_bxe.h projects/altix/sys/dev/cxgbe/common/common.h projects/altix/sys/dev/cxgbe/common/t4fw_interface.h projects/altix/sys/dev/cxgbe/t4_main.c projects/altix/sys/dev/e1000/if_em.c projects/altix/sys/dev/e1000/if_em.h projects/altix/sys/dev/pci/pci.c projects/altix/sys/dev/pci/pci_user.c projects/altix/sys/dev/pci/pcireg.h projects/altix/sys/dev/pci/pcivar.h projects/altix/sys/dev/streams/streams.c projects/altix/sys/dev/usb/controller/ehci_ixp4xx.c projects/altix/sys/dev/usb/controller/ehci_mv.c projects/altix/sys/dev/usb/controller/ehci_pci.c projects/altix/sys/dev/usb/usb_generic.c projects/altix/sys/dev/usb/usb_pf.c projects/altix/sys/dev/usb/usb_pf.h projects/altix/sys/dev/usb/usb_transfer.c projects/altix/sys/dev/usb/usbdi.h projects/altix/sys/dev/usb/wlan/if_run.c projects/altix/sys/fs/nfsclient/nfs_clcomsubs.c projects/altix/sys/fs/nfsclient/nfs_clrpcops.c projects/altix/sys/geom/eli/g_eli.c projects/altix/sys/geom/gate/g_gate.c projects/altix/sys/geom/nop/g_nop.c projects/altix/sys/geom/raid/g_raid.c projects/altix/sys/geom/raid/md_intel.c projects/altix/sys/geom/raid/md_jmicron.c projects/altix/sys/geom/raid/md_nvidia.c projects/altix/sys/geom/raid/md_promise.c projects/altix/sys/geom/raid/md_sii.c projects/altix/sys/geom/raid/tr_raid1.c projects/altix/sys/geom/raid/tr_raid1e.c projects/altix/sys/i386/conf/GENERIC projects/altix/sys/i386/conf/PAE projects/altix/sys/i386/linux/linux.h projects/altix/sys/ia64/ia32/ia32_misc.c projects/altix/sys/ia64/ia32/ia32_signal.c projects/altix/sys/ia64/include/bootinfo.h projects/altix/sys/isa/pnp.c projects/altix/sys/kern/imgact_aout.c projects/altix/sys/kern/init_main.c projects/altix/sys/kern/init_sysent.c projects/altix/sys/kern/kern_descrip.c projects/altix/sys/kern/kern_event.c projects/altix/sys/kern/kern_exit.c projects/altix/sys/kern/kern_fork.c projects/altix/sys/kern/kern_jail.c projects/altix/sys/kern/kern_linker.c projects/altix/sys/kern/kern_loginclass.c projects/altix/sys/kern/kern_prot.c projects/altix/sys/kern/kern_resource.c projects/altix/sys/kern/kern_thr.c projects/altix/sys/kern/sched_4bsd.c projects/altix/sys/kern/sched_ule.c projects/altix/sys/kern/sys_pipe.c projects/altix/sys/kern/syscalls.c projects/altix/sys/kern/syscalls.master projects/altix/sys/kern/systrace_args.c projects/altix/sys/kern/tty_pts.c projects/altix/sys/kern/uipc_mqueue.c projects/altix/sys/kern/uipc_sem.c projects/altix/sys/kern/uipc_shm.c projects/altix/sys/kern/uipc_syscalls.c projects/altix/sys/kern/vfs_syscalls.c projects/altix/sys/mips/atheros/ar71xx_ehci.c projects/altix/sys/mips/atheros/ar724x_chip.c projects/altix/sys/mips/atheros/ar724xreg.h projects/altix/sys/mips/atheros/if_arge.c projects/altix/sys/mips/conf/AR71XX projects/altix/sys/mips/conf/IDT projects/altix/sys/mips/conf/OCTEON1 projects/altix/sys/mips/conf/SENTRY5 projects/altix/sys/mips/rmi/xls_ehci.c projects/altix/sys/modules/Makefile projects/altix/sys/modules/ath/Makefile projects/altix/sys/modules/ipfw/Makefile projects/altix/sys/netinet/ipfw/ip_dn_glue.c projects/altix/sys/netinet/ipfw/ip_dummynet.c projects/altix/sys/netinet/ipfw/ip_fw2.c projects/altix/sys/netinet/tcp_input.c projects/altix/sys/netipsec/ipsec.h projects/altix/sys/netipsec/ipsec_output.c projects/altix/sys/netipsec/key.c projects/altix/sys/netipsec/key.h projects/altix/sys/netipsec/xform.h projects/altix/sys/netipsec/xform_ah.c projects/altix/sys/netipsec/xform_esp.c projects/altix/sys/netipsec/xform_ipcomp.c projects/altix/sys/opencrypto/cryptodev.c projects/altix/sys/pc98/conf/GENERIC projects/altix/sys/sparc64/conf/GENERIC projects/altix/sys/sparc64/pci/psycho.c projects/altix/sys/sparc64/pci/psychovar.h projects/altix/sys/sys/filedesc.h projects/altix/sys/sys/jail.h projects/altix/sys/sys/kernel.h projects/altix/sys/sys/loginclass.h projects/altix/sys/sys/param.h projects/altix/sys/sys/priv.h projects/altix/sys/sys/proc.h projects/altix/sys/sys/resourcevar.h projects/altix/sys/sys/syscall.h projects/altix/sys/sys/syscall.mk projects/altix/sys/sys/syscallsubr.h projects/altix/sys/sys/sysproto.h projects/altix/sys/tools/fw_stub.awk projects/altix/sys/ufs/ffs/ffs_softdep.c Directory Properties: projects/altix/lib/libstand/ (props changed) projects/altix/sys/ (props changed) projects/altix/sys/amd64/include/xen/ (props changed) projects/altix/sys/boot/i386/efi/ (props changed) projects/altix/sys/boot/ia64/efi/ (props changed) projects/altix/sys/boot/ia64/ski/ (props changed) projects/altix/sys/boot/powerpc/boot1.chrp/ (props changed) projects/altix/sys/boot/powerpc/ofw/ (props changed) projects/altix/sys/cddl/contrib/opensolaris/ (props changed) projects/altix/sys/conf/ (props changed) projects/altix/sys/contrib/dev/acpica/ (props changed) projects/altix/sys/contrib/octeon-sdk/ (props changed) projects/altix/sys/contrib/pf/ (props changed) projects/altix/sys/contrib/x86emu/ (props changed) projects/altix/sys/kern/subr_busdma.c (props changed) Modified: projects/altix/sys/amd64/conf/GENERIC ============================================================================== --- projects/altix/sys/amd64/conf/GENERIC Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/conf/GENERIC Mon Apr 4 03:41:18 2011 (r220315) @@ -257,7 +257,8 @@ device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support device wlan_amrr # AMRR transmit rate control algorithm device an # Aironet 4500/4800 802.11 wireless NICs. -device ath # Atheros pci/cardbus NIC's +device ath # Atheros NIC's +device ath_pci # Atheros pci/cardbus glue device ath_hal # pci/cardbus chip support options AH_SUPPORT_AR5416 # enable AR5416 tx/rx descriptors device ath_rate_sample # SampleRate tx rate control for ath Modified: projects/altix/sys/amd64/ia32/ia32_misc.c ============================================================================== --- projects/altix/sys/amd64/ia32/ia32_misc.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/ia32/ia32_misc.c Mon Apr 4 03:41:18 2011 (r220315) @@ -69,3 +69,14 @@ freebsd32_sysarch(struct thread *td, str return (sysarch(td, &uap1)); } } + +#ifdef COMPAT_43 +int +ofreebsd32_getpagesize(struct thread *td, + struct ofreebsd32_getpagesize_args *uap) +{ + + td->td_retval[0] = IA32_PAGE_SIZE; + return (0); +} +#endif Modified: projects/altix/sys/amd64/ia32/ia32_signal.c ============================================================================== --- projects/altix/sys/amd64/ia32/ia32_signal.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/ia32/ia32_signal.c Mon Apr 4 03:41:18 2011 (r220315) @@ -300,6 +300,109 @@ freebsd32_swapcontext(struct thread *td, * frame pointer, it returns to the user * specified pc, psl. */ + +#ifdef COMPAT_43 +static void +ia32_osendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) +{ + struct ia32_sigframe3 sf, *fp; + struct proc *p; + struct thread *td; + struct sigacts *psp; + struct trapframe *regs; + int sig; + int oonstack; + + td = curthread; + p = td->td_proc; + PROC_LOCK_ASSERT(p, MA_OWNED); + sig = ksi->ksi_signo; + psp = p->p_sigacts; + mtx_assert(&psp->ps_mtx, MA_OWNED); + regs = td->td_frame; + oonstack = sigonstack(regs->tf_rsp); + + /* Allocate space for the signal handler context. */ + if ((td->td_pflags & TDP_ALTSTACK) && !oonstack && + SIGISMEMBER(psp->ps_sigonstack, sig)) { + fp = (struct ia32_sigframe3 *)(td->td_sigstk.ss_sp + + td->td_sigstk.ss_size - sizeof(sf)); + td->td_sigstk.ss_flags |= SS_ONSTACK; + } else + fp = (struct ia32_sigframe3 *)regs->tf_rsp - 1; + + /* Translate the signal if appropriate. */ + if (p->p_sysent->sv_sigtbl && sig <= p->p_sysent->sv_sigsize) + sig = p->p_sysent->sv_sigtbl[_SIG_IDX(sig)]; + + /* Build the argument list for the signal handler. */ + sf.sf_signum = sig; + sf.sf_scp = (register_t)&fp->sf_siginfo.si_sc; + if (SIGISMEMBER(psp->ps_siginfo, sig)) { + /* Signal handler installed with SA_SIGINFO. */ + sf.sf_arg2 = (register_t)&fp->sf_siginfo; + sf.sf_siginfo.si_signo = sig; + sf.sf_siginfo.si_code = ksi->ksi_code; + sf.sf_ah = (uintptr_t)catcher; + } else { + /* Old FreeBSD-style arguments. */ + sf.sf_arg2 = ksi->ksi_code; + sf.sf_addr = (register_t)ksi->ksi_addr; + sf.sf_ah = (uintptr_t)catcher; + } + mtx_unlock(&psp->ps_mtx); + PROC_UNLOCK(p); + + /* Save most if not all of trap frame. */ + sf.sf_siginfo.si_sc.sc_eax = regs->tf_rax; + sf.sf_siginfo.si_sc.sc_ebx = regs->tf_rbx; + sf.sf_siginfo.si_sc.sc_ecx = regs->tf_rcx; + sf.sf_siginfo.si_sc.sc_edx = regs->tf_rdx; + sf.sf_siginfo.si_sc.sc_esi = regs->tf_rsi; + sf.sf_siginfo.si_sc.sc_edi = regs->tf_rdi; + sf.sf_siginfo.si_sc.sc_cs = regs->tf_cs; + sf.sf_siginfo.si_sc.sc_ds = regs->tf_ds; + sf.sf_siginfo.si_sc.sc_ss = regs->tf_ss; + sf.sf_siginfo.si_sc.sc_es = regs->tf_es; + sf.sf_siginfo.si_sc.sc_fs = regs->tf_fs; + sf.sf_siginfo.si_sc.sc_gs = regs->tf_gs; + sf.sf_siginfo.si_sc.sc_isp = regs->tf_rsp; + + /* Build the signal context to be used by osigreturn(). */ + sf.sf_siginfo.si_sc.sc_onstack = (oonstack) ? 1 : 0; + SIG2OSIG(*mask, sf.sf_siginfo.si_sc.sc_mask); + sf.sf_siginfo.si_sc.sc_esp = regs->tf_rsp; + sf.sf_siginfo.si_sc.sc_ebp = regs->tf_rbp; + sf.sf_siginfo.si_sc.sc_eip = regs->tf_rip; + sf.sf_siginfo.si_sc.sc_eflags = regs->tf_rflags; + sf.sf_siginfo.si_sc.sc_trapno = regs->tf_trapno; + sf.sf_siginfo.si_sc.sc_err = regs->tf_err; + + /* + * Copy the sigframe out to the user's stack. + */ + if (copyout(&sf, fp, sizeof(*fp)) != 0) { +#ifdef DEBUG + printf("process %ld has trashed its stack\n", (long)p->p_pid); +#endif + PROC_LOCK(p); + sigexit(td, SIGILL); + } + + regs->tf_rsp = (uintptr_t)fp; + regs->tf_rip = p->p_sysent->sv_psstrings - sz_ia32_osigcode; + regs->tf_rflags &= ~(PSL_T | PSL_D); + regs->tf_cs = _ucode32sel; + regs->tf_ds = _udatasel; + regs->tf_es = _udatasel; + regs->tf_fs = _udatasel; + regs->tf_ss = _udatasel; + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); + PROC_LOCK(p); + mtx_lock(&psp->ps_mtx); +} +#endif + #ifdef COMPAT_FREEBSD4 static void freebsd4_ia32_sendsig(sig_t catcher, ksiginfo_t *ksi, sigset_t *mask) @@ -441,6 +544,12 @@ ia32_sendsig(sig_t catcher, ksiginfo_t * return; } #endif +#ifdef COMPAT_43 + if (SIGISMEMBER(psp->ps_osigset, sig)) { + ia32_osendsig(catcher, ksi, mask); + return; + } +#endif mtx_assert(&psp->ps_mtx, MA_OWNED); regs = td->td_frame; oonstack = sigonstack(regs->tf_rsp); @@ -547,6 +656,64 @@ ia32_sendsig(sig_t catcher, ksiginfo_t * * make sure that the user has not modified the * state to gain improper privileges. */ + +#ifdef COMPAT_43 +int +ofreebsd32_sigreturn(struct thread *td, struct ofreebsd32_sigreturn_args *uap) +{ + struct ia32_sigcontext3 sc, *scp; + struct trapframe *regs; + int eflags, error; + ksiginfo_t ksi; + + regs = td->td_frame; + error = copyin(uap->sigcntxp, &sc, sizeof(sc)); + if (error != 0) + return (error); + scp = ≻ + eflags = scp->sc_eflags; + if (!EFL_SECURE(eflags & ~PSL_RF, regs->tf_rflags & ~PSL_RF)) { + return (EINVAL); + } + if (!CS_SECURE(scp->sc_cs)) { + ksiginfo_init_trap(&ksi); + ksi.ksi_signo = SIGBUS; + ksi.ksi_code = BUS_OBJERR; + ksi.ksi_trapno = T_PROTFLT; + ksi.ksi_addr = (void *)regs->tf_rip; + trapsignal(td, &ksi); + return (EINVAL); + } + regs->tf_ds = scp->sc_ds; + regs->tf_es = scp->sc_es; + regs->tf_fs = scp->sc_fs; + regs->tf_gs = scp->sc_gs; + + regs->tf_rax = scp->sc_eax; + regs->tf_rbx = scp->sc_ebx; + regs->tf_rcx = scp->sc_ecx; + regs->tf_rdx = scp->sc_edx; + regs->tf_rsi = scp->sc_esi; + regs->tf_rdi = scp->sc_edi; + regs->tf_cs = scp->sc_cs; + regs->tf_ss = scp->sc_ss; + regs->tf_rbp = scp->sc_ebp; + regs->tf_rsp = scp->sc_esp; + regs->tf_rip = scp->sc_eip; + regs->tf_rflags = eflags; + + if (scp->sc_onstack & 1) + td->td_sigstk.ss_flags |= SS_ONSTACK; + else + td->td_sigstk.ss_flags &= ~SS_ONSTACK; + + kern_sigprocmask(td, SIG_SETMASK, (sigset_t *)&scp->sc_mask, NULL, + SIGPROCMASK_OLD); + set_pcb_flags(td->td_pcb, PCB_FULL_IRET); + return (EJUSTRETURN); +} +#endif + #ifdef COMPAT_FREEBSD4 /* * MPSAFE @@ -734,6 +901,9 @@ ia32_setregs(struct thread *td, struct i user_ldt_free(td); else mtx_unlock(&dt_lock); +#ifdef COMPAT_43 + setup_lcall_gate(); +#endif pcb->pcb_fsbase = 0; pcb->pcb_gsbase = 0; Modified: projects/altix/sys/amd64/ia32/ia32_sigtramp.S ============================================================================== --- projects/altix/sys/amd64/ia32/ia32_sigtramp.S Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/ia32/ia32_sigtramp.S Mon Apr 4 03:41:18 2011 (r220315) @@ -66,6 +66,35 @@ freebsd4_ia32_sigcode: jmp 1b #endif +#ifdef COMPAT_43 + ALIGN_TEXT +ia32_osigcode: + calll *IA32_SIGF_HANDLER(%esp)/* call signal handler */ + leal IA32_SIGF_SC(%esp),%eax /* get sigcontext */ + pushl %eax + movl $103,%eax /* 3.x SYS_sigreturn */ + pushl %eax /* junk to fake return addr. */ + int $0x80 /* enter kernel with args */ +1: + jmp 1b + + + ALIGN_TEXT +lcall_tramp: + pushl %ebp + movl %esp,%ebp + pushl 0x24(%ebp) /* arg 6 */ + pushl 0x20(%ebp) + pushl 0x1c(%ebp) + pushl 0x18(%ebp) + pushl 0x14(%ebp) + pushl 0x10(%ebp) /* arg 1 */ + pushl 0xc(%ebp) /* gap */ + int $0x80 + leave + lretl +#endif + ALIGN_TEXT esigcode: @@ -78,3 +107,11 @@ sz_ia32_sigcode: sz_freebsd4_ia32_sigcode: .long esigcode-freebsd4_ia32_sigcode #endif +#ifdef COMPAT_43 + .globl sz_ia32_osigcode +sz_ia32_osigcode: + .long esigcode-ia32_osigcode + .globl sz_lcall_tramp +sz_lcall_tramp: + .long esigcode-lcall_tramp +#endif Modified: projects/altix/sys/amd64/ia32/ia32_syscall.c ============================================================================== --- projects/altix/sys/amd64/ia32/ia32_syscall.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/ia32/ia32_syscall.c Mon Apr 4 03:41:18 2011 (r220315) @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); */ #include "opt_clock.h" +#include "opt_compat.h" #include "opt_cpu.h" #include "opt_isa.h" @@ -78,7 +79,17 @@ __FBSDID("$FreeBSD$"); #include <machine/intr_machdep.h> #include <machine/md_var.h> +#include <compat/freebsd32/freebsd32_signal.h> #include <compat/freebsd32/freebsd32_util.h> +#include <compat/ia32/ia32_signal.h> +#include <machine/psl.h> +#include <machine/segments.h> +#include <machine/specialreg.h> +#include <machine/sysarch.h> +#include <machine/frame.h> +#include <machine/md_var.h> +#include <machine/pcb.h> +#include <machine/cpufunc.h> #define IDTVEC(name) __CONCAT(X,name) @@ -198,3 +209,45 @@ ia32_syscall_disable(void *dummy) SYSINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_enable, NULL); SYSUNINIT(ia32_syscall, SI_SUB_EXEC, SI_ORDER_ANY, ia32_syscall_disable, NULL); + +#ifdef COMPAT_43 +int +setup_lcall_gate(void) +{ + struct i386_ldt_args uap; + struct user_segment_descriptor descs[2]; + struct gate_descriptor *ssd; + uint32_t lcall_addr; + int error; + + bzero(&uap, sizeof(uap)); + uap.start = 0; + uap.num = 2; + + /* + * This is the easiest way to cut the space for system + * descriptor in ldt. Manually adjust the descriptor type to + * the call gate later. + */ + bzero(&descs[0], sizeof(descs)); + descs[0].sd_type = SDT_SYSNULL; + descs[1].sd_type = SDT_SYSNULL; + error = amd64_set_ldt(curthread, &uap, descs); + if (error != 0) + return (error); + + lcall_addr = curproc->p_sysent->sv_psstrings - sz_lcall_tramp; + mtx_lock(&dt_lock); + ssd = (struct gate_descriptor *)(curproc->p_md.md_ldt->ldt_base); + bzero(ssd, sizeof(*ssd)); + ssd->gd_looffset = lcall_addr; + ssd->gd_hioffset = lcall_addr >> 16; + ssd->gd_selector = _ucode32sel; + ssd->gd_type = SDT_SYSCGT; + ssd->gd_dpl = SEL_UPL; + ssd->gd_p = 1; + mtx_unlock(&dt_lock); + + return (0); +} +#endif Modified: projects/altix/sys/amd64/linux32/linux.h ============================================================================== --- projects/altix/sys/amd64/linux32/linux.h Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/amd64/linux32/linux.h Mon Apr 4 03:41:18 2011 (r220315) @@ -695,7 +695,6 @@ union l_semun { #define LINUX_SO_NO_CHECK 11 #define LINUX_SO_PRIORITY 12 #define LINUX_SO_LINGER 13 -#define LINUX_SO_PASSCRED 16 #define LINUX_SO_PEERCRED 17 #define LINUX_SO_RCVLOWAT 18 #define LINUX_SO_SNDLOWAT 19 Modified: projects/altix/sys/arm/conf/AVILA ============================================================================== --- projects/altix/sys/arm/conf/AVILA Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/arm/conf/AVILA Mon Apr 4 03:41:18 2011 (r220315) @@ -120,7 +120,8 @@ device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support device wlan_xauth -device ath # Atheros pci/cardbus NIC's +device ath # Atheros NIC's +device ath_pci # Atheros pci/cardbus glue options ATH_DEBUG options ATH_DIAGAPI #options ATH_TX99_DIAG Modified: projects/altix/sys/arm/conf/CAMBRIA ============================================================================== --- projects/altix/sys/arm/conf/CAMBRIA Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/arm/conf/CAMBRIA Mon Apr 4 03:41:18 2011 (r220315) @@ -123,7 +123,8 @@ device wlan_ccmp # 802.11 CCMP support device wlan_tkip # 802.11 TKIP support device wlan_xauth -device ath # Atheros pci/cardbus NIC's +device ath # Atheros NIC's +device ath_pci # Atheros pci/cardbus glue options ATH_DEBUG options ATH_DIAGAPI #options ATH_TX99_DIAG Modified: projects/altix/sys/arm/econa/ehci_ebus.c ============================================================================== --- projects/altix/sys/arm/econa/ehci_ebus.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/arm/econa/ehci_ebus.c Mon Apr 4 03:41:18 2011 (r220315) @@ -241,7 +241,7 @@ ehci_ebus_detach(device_t self) * disable interrupts that might have been switched on in ehci_init */ if (sc->sc_io_res) { - EWRITE4(sc, EHCI_USBINTR, 0); + EOWRITE4(sc, EHCI_USBINTR, 0); EWRITE4(sc, USB_BRIDGE_INTR_MASK, 0); } if (sc->sc_irq_res && sc->sc_intr_hdl) { Modified: projects/altix/sys/boot/common/bootstrap.h ============================================================================== --- projects/altix/sys/boot/common/bootstrap.h Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/common/bootstrap.h Mon Apr 4 03:41:18 2011 (r220315) @@ -296,8 +296,24 @@ struct arch_switch /* Perform ISA byte port I/O (only for systems with ISA) */ int (*arch_isainb)(int port); void (*arch_isaoutb)(int port, int value); - /* Pass in initial kernel memory size */ - void (*arch_maphint)(vm_offset_t va, size_t len); + + /* + * Interface to adjust the load address according to the "object" + * being loaded. + */ + uint64_t (*arch_loadaddr)(u_int type, void *data, uint64_t addr); +#define LOAD_ELF 1 /* data points to the ELF header. */ +#define LOAD_RAW 2 /* data points to the file name. */ + + /* + * Interface to inform MD code about a loaded (ELF) segment. This + * can be used to flush caches and/or set up translations. + */ +#ifdef __elfN + void (*arch_loadseg)(Elf_Ehdr *eh, Elf_Phdr *ph, uint64_t delta); +#else + void (*arch_loadseg)(void *eh, void *ph, uint64_t delta); +#endif }; extern struct arch_switch archsw; Modified: projects/altix/sys/boot/common/load_elf.c ============================================================================== --- projects/altix/sys/boot/common/load_elf.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/common/load_elf.c Mon Apr 4 03:41:18 2011 (r220315) @@ -97,7 +97,6 @@ __elfN(loadfile)(char *filename, u_int64 struct elf_file ef; Elf_Ehdr *ehdr; int err; - u_int pad; ssize_t bytes_read; fp = NULL; @@ -157,12 +156,6 @@ __elfN(loadfile)(char *filename, u_int64 /* Looks OK, got ahead */ ef.kernel = 0; - /* Page-align the load address */ - pad = (u_int)dest & PAGE_MASK; - if (pad != 0) { - pad = PAGE_SIZE - pad; - dest += pad; - } } else if (ehdr->e_type == ET_EXEC) { /* Looks like a kernel */ if (kfp != NULL) { @@ -173,7 +166,7 @@ __elfN(loadfile)(char *filename, u_int64 /* * Calculate destination address based on kernel entrypoint */ - dest = ehdr->e_entry; + dest = (ehdr->e_entry & ~PAGE_MASK); if (dest == 0) { printf("elf" __XSTRING(__ELF_WORD_SIZE) "_loadfile: not a kernel (maybe static binary?)\n"); err = EPERM; @@ -186,6 +179,11 @@ __elfN(loadfile)(char *filename, u_int64 goto oerr; } + if (archsw.arch_loadaddr != NULL) + dest = archsw.arch_loadaddr(LOAD_ELF, ehdr, dest); + else + dest = roundup(dest, PAGE_SIZE); + /* * Ok, we think we should handle this. */ @@ -202,7 +200,7 @@ __elfN(loadfile)(char *filename, u_int64 #ifdef ELF_VERBOSE if (ef.kernel) - printf("%s entry at 0x%jx\n", filename, (uintmax_t)dest); + printf("%s entry at 0x%jx\n", filename, (uintmax_t)ehdr->e_entry); #else printf("%s ", filename); #endif @@ -362,6 +360,9 @@ __elfN(loadimage)(struct preloaded_file printf("\n"); #endif + if (archsw.arch_loadseg != NULL) + archsw.arch_loadseg(ehdr, phdr + i, off); + if (firstaddr == 0 || firstaddr > (phdr[i].p_vaddr + off)) firstaddr = phdr[i].p_vaddr + off; if (lastaddr == 0 || lastaddr < (phdr[i].p_vaddr + off + phdr[i].p_memsz)) Modified: projects/altix/sys/boot/common/load_elf_obj.c ============================================================================== --- projects/altix/sys/boot/common/load_elf_obj.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/common/load_elf_obj.c Mon Apr 4 03:41:18 2011 (r220315) @@ -144,8 +144,10 @@ __elfN(obj_loadfile)(char *filename, u_i goto oerr; } - /* Page-align the load address */ - dest = roundup(dest, PAGE_SIZE); + if (archsw.arch_loadaddr != NULL) + dest = archsw.arch_loadaddr(LOAD_ELF, hdr, dest); + else + dest = roundup(dest, PAGE_SIZE); /* * Ok, we think we should handle this. Modified: projects/altix/sys/boot/common/module.c ============================================================================== --- projects/altix/sys/boot/common/module.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/common/module.c Mon Apr 4 03:41:18 2011 (r220315) @@ -275,6 +275,9 @@ file_load(char *filename, vm_offset_t de int error; int i; + if (archsw.arch_loadaddr != NULL) + dest = archsw.arch_loadaddr(LOAD_RAW, filename, dest); + error = EFTYPE; for (i = 0, fp = NULL; file_formats[i] && fp == NULL; i++) { error = (file_formats[i]->l_load)(filename, loadaddr, &fp); @@ -352,9 +355,6 @@ file_loadraw(char *type, char *name) char *cp; int fd, got; vm_offset_t laddr; -#ifdef PC98 - struct stat st; -#endif /* We can't load first */ if ((file_findfile(NULL, NULL)) == NULL) { @@ -369,20 +369,15 @@ file_loadraw(char *type, char *name) return(CMD_ERROR); } name = cp; - + if ((fd = open(name, O_RDONLY)) < 0) { sprintf(command_errbuf, "can't open '%s': %s", name, strerror(errno)); free(name); return(CMD_ERROR); } -#ifdef PC98 - /* We cannot use 15M-16M area on pc98. */ - if (loadaddr < 0x1000000 && - fstat(fd, &st) == 0 && - (st.st_size == -1 || loadaddr + st.st_size > 0xf00000)) - loadaddr = 0x1000000; -#endif + if (archsw.arch_loadaddr != NULL) + loadaddr = archsw.arch_loadaddr(LOAD_RAW, name, loadaddr); laddr = loadaddr; for (;;) { @@ -489,14 +484,6 @@ mod_loadkld(const char *kldname, int arg ; do { -#ifdef PC98 - /* We cannot use 15M-16M area on pc98. */ - struct stat st; - if (loadaddr < 0x1000000 && - stat(filename, &st) == 0 && - (st.st_size == -1 || loadaddr + st.st_size > 0xf00000)) - loadaddr = 0x1000000; -#endif err = file_load(filename, loadaddr, &fp); if (err) break; Modified: projects/altix/sys/boot/ia64/common/copy.c ============================================================================== --- projects/altix/sys/boot/ia64/common/copy.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/common/copy.c Mon Apr 4 03:41:18 2011 (r220315) @@ -28,10 +28,12 @@ __FBSDID("$FreeBSD$"); #include <stand.h> -#include <ia64/include/vmparam.h> +#include <machine/param.h> #include "libia64.h" +u_int ia64_legacy_kernel; + uint64_t *ia64_pgtbl; uint32_t ia64_pgtblsz; @@ -80,8 +82,8 @@ pgtbl_extend(u_int idx) return (0); } -static void * -va2pa(vm_offset_t va, size_t *len) +void * +ia64_va2pa(vm_offset_t va, size_t *len) { uint64_t pa; u_int idx, ofs; @@ -89,6 +91,7 @@ va2pa(vm_offset_t va, size_t *len) /* Backward compatibility. */ if (va >= IA64_RR_BASE(7)) { + ia64_legacy_kernel = 1; pa = IA64_RR_MASK(va); return ((void *)pa); } @@ -98,6 +101,8 @@ va2pa(vm_offset_t va, size_t *len) goto fail; } + ia64_legacy_kernel = 0; + idx = (va - IA64_PBVM_BASE) >> IA64_PBVM_PAGE_SHIFT; if (idx >= (ia64_pgtblsz >> 3)) { error = pgtbl_extend(idx); @@ -138,7 +143,7 @@ ia64_copyin(const void *src, vm_offset_t res = 0; while (len > 0) { sz = len; - pa = va2pa(va, &sz); + pa = ia64_va2pa(va, &sz); if (sz == 0) break; bcopy(src, pa, sz); @@ -159,7 +164,7 @@ ia64_copyout(vm_offset_t va, void *dst, res = 0; while (len > 0) { sz = len; - pa = va2pa(va, &sz); + pa = ia64_va2pa(va, &sz); if (sz == 0) break; bcopy(pa, dst, sz); @@ -170,6 +175,19 @@ ia64_copyout(vm_offset_t va, void *dst, return (res); } +uint64_t +ia64_loadaddr(u_int type, void *data, uint64_t addr) +{ + uint64_t align; + + /* + * Align ELF objects at PBVM page boundaries. Align all other + * objects at cache line boundaries for good measure. + */ + align = (type == LOAD_ELF) ? IA64_PBVM_PAGE_SIZE : CACHE_LINE_SIZE; + return ((addr + align - 1) & ~(align - 1)); +} + ssize_t ia64_readin(int fd, vm_offset_t va, size_t len) { @@ -180,7 +198,7 @@ ia64_readin(int fd, vm_offset_t va, size res = 0; while (len > 0) { sz = len; - pa = va2pa(va, &sz); + pa = ia64_va2pa(va, &sz); if (sz == 0) break; s = read(fd, pa, sz); Modified: projects/altix/sys/boot/ia64/common/exec.c ============================================================================== --- projects/altix/sys/boot/ia64/common/exec.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/common/exec.c Mon Apr 4 03:41:18 2011 (r220315) @@ -36,13 +36,20 @@ __FBSDID("$FreeBSD$"); #include <machine/ia64_cpu.h> #include <machine/pte.h> -#include <ia64/include/vmparam.h> - #include <efi.h> #include <efilib.h> #include "libia64.h" +static u_int itr_idx = 0; +static u_int dtr_idx = 0; + +static vm_offset_t ia64_text_start; +static size_t ia64_text_size; + +static vm_offset_t ia64_data_start; +static size_t ia64_data_size; + static int elf64_exec(struct preloaded_file *amp); static int elf64_obj_exec(struct preloaded_file *amp); @@ -61,6 +68,26 @@ struct file_format *file_formats[] = { NULL }; +static u_int +sz2shft(vm_offset_t ofs, vm_size_t sz) +{ + vm_size_t s; + u_int shft; + + shft = 12; /* Start with 4K */ + s = 1 << shft; + while (s < sz) { + shft++; + s <<= 1; + } + do { + shft--; + s >>= 1; + } while (ofs & (s - 1)); + + return (shft); +} + /* * Entered with psr.ic and psr.i both zero. */ @@ -84,49 +111,43 @@ enter_kernel(uint64_t start, struct boot /* NOTREACHED */ } -static void -mmu_wire(vm_offset_t va, vm_paddr_t pa, vm_size_t sz, u_int acc) +static u_int +mmu_wire(vm_offset_t va, vm_paddr_t pa, u_int pgshft, u_int acc) { - static u_int iidx = 0, didx = 0; pt_entry_t pte; - u_int shft; /* Round up to the smallest possible page size. */ - if (sz < 4096) - sz = 4096; - /* Determine the exponent (base 2). */ - shft = 0; - while (sz > 1) { - shft++; - sz >>= 1; - } + if (pgshft < 12) + pgshft = 12; /* Truncate to the largest possible page size (256MB). */ - if (shft > 28) - shft = 28; + if (pgshft > 28) + pgshft = 28; /* Round down to a valid (mappable) page size. */ - if (shft > 14 && (shft & 1) != 0) - shft--; + if (pgshft > 14 && (pgshft & 1) != 0) + pgshft--; pte = PTE_PRESENT | PTE_MA_WB | PTE_ACCESSED | PTE_DIRTY | PTE_PL_KERN | (acc & PTE_AR_MASK) | (pa & PTE_PPN_MASK); __asm __volatile("mov cr.ifa=%0" :: "r"(va)); - __asm __volatile("mov cr.itir=%0" :: "r"(shft << 2)); + __asm __volatile("mov cr.itir=%0" :: "r"(pgshft << 2)); __asm __volatile("srlz.d;;"); - __asm __volatile("ptr.d %0,%1" :: "r"(va), "r"(shft << 2)); + __asm __volatile("ptr.d %0,%1" :: "r"(va), "r"(pgshft << 2)); __asm __volatile("srlz.d;;"); - __asm __volatile("itr.d dtr[%0]=%1" :: "r"(didx), "r"(pte)); + __asm __volatile("itr.d dtr[%0]=%1" :: "r"(dtr_idx), "r"(pte)); __asm __volatile("srlz.d;;"); - didx++; + dtr_idx++; - if (acc == PTE_AR_RWX) { - __asm __volatile("ptr.i %0,%1;;" :: "r"(va), "r"(shft << 2)); + if (acc == PTE_AR_RWX || acc == PTE_AR_RX) { + __asm __volatile("ptr.i %0,%1;;" :: "r"(va), "r"(pgshft << 2)); __asm __volatile("srlz.i;;"); - __asm __volatile("itr.i itr[%0]=%1;;" :: "r"(iidx), "r"(pte)); + __asm __volatile("itr.i itr[%0]=%1;;" :: "r"(itr_idx), "r"(pte)); __asm __volatile("srlz.i;;"); - iidx++; + itr_idx++; } + + return (pgshft); } static void @@ -143,28 +164,43 @@ mmu_setup_legacy(uint64_t entry) ia64_set_rr(IA64_RR_BASE(7), (7 << 8) | (28 << 2)); __asm __volatile("srlz.i;;"); - mmu_wire(entry, IA64_RR_MASK(entry), 1UL << 28, PTE_AR_RWX); + mmu_wire(entry, IA64_RR_MASK(entry), 28, PTE_AR_RWX); } static void -mmu_setup_paged(vm_offset_t pbvm_top) +mmu_setup_paged(struct bootinfo *bi) { - vm_size_t sz; + void *pa; + size_t sz; + u_int shft; ia64_set_rr(IA64_RR_BASE(IA64_PBVM_RR), (IA64_PBVM_RR << 8) | (IA64_PBVM_PAGE_SHIFT << 2)); __asm __volatile("srlz.i;;"); /* Wire the PBVM page table. */ - mmu_wire(IA64_PBVM_PGTBL, (uintptr_t)ia64_pgtbl, ia64_pgtblsz, - PTE_AR_RW); + mmu_wire(IA64_PBVM_PGTBL, (uintptr_t)ia64_pgtbl, + sz2shft(IA64_PBVM_PGTBL, ia64_pgtblsz), PTE_AR_RW); - /* Wire as much of the PBVM we can. This must be a power of 2. */ - sz = pbvm_top - IA64_PBVM_BASE; - sz = (sz + IA64_PBVM_PAGE_MASK) & ~IA64_PBVM_PAGE_MASK; - while (sz & (sz - 1)) - sz -= IA64_PBVM_PAGE_SIZE; - mmu_wire(IA64_PBVM_BASE, ia64_pgtbl[0], sz, PTE_AR_RWX); + /* Wire as much of the text segment as we can. */ + sz = ia64_text_size; /* XXX */ + pa = ia64_va2pa(ia64_text_start, &ia64_text_size); + ia64_text_size = sz; /* XXX */ + shft = sz2shft(ia64_text_start, ia64_text_size); + shft = mmu_wire(ia64_text_start, (uintptr_t)pa, shft, PTE_AR_RX); + ia64_copyin(&shft, (uintptr_t)&bi->bi_text_mapped, 4); + + /* Wire as much of the data segment as well. */ + sz = ia64_data_size; /* XXX */ + pa = ia64_va2pa(ia64_data_start, &ia64_data_size); + ia64_data_size = sz; /* XXX */ + shft = sz2shft(ia64_data_start, ia64_data_size); + shft = mmu_wire(ia64_data_start, (uintptr_t)pa, shft, PTE_AR_RW); + ia64_copyin(&shft, (uintptr_t)&bi->bi_data_mapped, 4); + + /* Update the bootinfo with the number of TRs used. */ + ia64_copyin(&itr_idx, (uintptr_t)&bi->bi_itr_used, 4); + ia64_copyin(&dtr_idx, (uintptr_t)&bi->bi_dtr_used, 4); } static int @@ -196,7 +232,7 @@ elf64_exec(struct preloaded_file *fp) if (IS_LEGACY_KERNEL()) mmu_setup_legacy(hdr->e_entry); else - mmu_setup_paged((uintptr_t)(bi + 1)); + mmu_setup_paged(bi); enter_kernel(hdr->e_entry, bi); /* NOTREACHED */ @@ -211,3 +247,20 @@ elf64_obj_exec(struct preloaded_file *fp fp->f_name); return (ENOSYS); } + +void +ia64_loadseg(Elf_Ehdr *eh, Elf_Phdr *ph, uint64_t delta) +{ + + if (eh->e_type != ET_EXEC) + return; + + if (ph->p_flags & PF_X) { + ia64_text_start = ph->p_vaddr + delta; + ia64_text_size = ph->p_memsz; + } else { + ia64_data_start = ph->p_vaddr + delta; + ia64_data_size = ph->p_memsz; + } +} + Modified: projects/altix/sys/boot/ia64/common/libia64.h ============================================================================== --- projects/altix/sys/boot/ia64/common/libia64.h Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/common/libia64.h Mon Apr 4 03:41:18 2011 (r220315) @@ -31,9 +31,9 @@ #include <bootstrap.h> #include <ia64/include/bootinfo.h> -#include <ia64/include/vmparam.h> +#include <machine/vmparam.h> -#define IS_LEGACY_KERNEL() (ia64_pgtbl == NULL || ia64_pgtblsz == 0) +#define IS_LEGACY_KERNEL() (ia64_legacy_kernel) /* * Portability functions provided by the loader @@ -48,15 +48,24 @@ int ia64_platform_enter(const char *); * Functions and variables provided by the ia64 common code * and shared by all loader implementations. */ +extern u_int ia64_legacy_kernel; + extern uint64_t *ia64_pgtbl; extern uint32_t ia64_pgtblsz; int ia64_autoload(void); int ia64_bootinfo(struct preloaded_file *, struct bootinfo **); +uint64_t ia64_loadaddr(u_int, void *, uint64_t); +#ifdef __elfN +void ia64_loadseg(Elf_Ehdr *, Elf_Phdr *, uint64_t); +#else +void ia64_loadseg(void *, void *, uint64_t); +#endif ssize_t ia64_copyin(const void *, vm_offset_t, size_t); ssize_t ia64_copyout(vm_offset_t, void *, size_t); ssize_t ia64_readin(int, vm_offset_t, size_t); +void *ia64_va2pa(vm_offset_t, size_t *); char *ia64_fmtdev(struct devdesc *); int ia64_getdev(void **, const char *, const char **); Modified: projects/altix/sys/boot/ia64/efi/main.c ============================================================================== --- projects/altix/sys/boot/ia64/efi/main.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/efi/main.c Mon Apr 4 03:41:18 2011 (r220315) @@ -196,9 +196,11 @@ main(int argc, CHAR16 *argv[]) setenv("LINES", "24", 1); /* optional */ archsw.arch_autoload = ia64_autoload; - archsw.arch_getdev = ia64_getdev; archsw.arch_copyin = ia64_copyin; archsw.arch_copyout = ia64_copyout; + archsw.arch_getdev = ia64_getdev; + archsw.arch_loadaddr = ia64_loadaddr; + archsw.arch_loadseg = ia64_loadseg; archsw.arch_readin = ia64_readin; interact(); /* doesn't return */ Modified: projects/altix/sys/boot/ia64/ski/efi_stub.c ============================================================================== --- projects/altix/sys/boot/ia64/ski/efi_stub.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/ski/efi_stub.c Mon Apr 4 03:41:18 2011 (r220315) @@ -28,8 +28,8 @@ __FBSDID("$FreeBSD$"); #include <sys/types.h> +#include <machine/bootinfo.h> #include <machine/efi.h> -#include <ia64/include/bootinfo.h> #include <stand.h> #include "libski.h" @@ -223,39 +223,37 @@ ResetSystem(enum efi_reset type, efi_sta void efi_stub_init(struct bootinfo *bi) { - struct efi_md *memp; + static struct efi_md memmap[4]; /* Describe the SKI memory map. */ - bi->bi_memmap = (u_int64_t)(bi + 1); - bi->bi_memmap_size = 4 * sizeof(struct efi_md); + bi->bi_memmap = (uintptr_t)(void *)memmap; + bi->bi_memmap_size = sizeof(memmap); bi->bi_memdesc_size = sizeof(struct efi_md); bi->bi_memdesc_version = 1; - memp = (struct efi_md *)bi->bi_memmap; - - memp[0].md_type = EFI_MD_TYPE_PALCODE; - memp[0].md_phys = 0x100000; - memp[0].md_virt = NULL; - memp[0].md_pages = (4L*1024*1024)>>12; - memp[0].md_attr = EFI_MD_ATTR_WB | EFI_MD_ATTR_RT; - - memp[1].md_type = EFI_MD_TYPE_FREE; - memp[1].md_phys = 5L*1024*1024; - memp[1].md_virt = NULL; - memp[1].md_pages = (128L*1024*1024)>>12; - memp[1].md_attr = EFI_MD_ATTR_WB; - - memp[2].md_type = EFI_MD_TYPE_FREE; - memp[2].md_phys = 4L*1024*1024*1024; - memp[2].md_virt = NULL; - memp[2].md_pages = (64L*1024*1024)>>12; - memp[2].md_attr = EFI_MD_ATTR_WB; - - memp[3].md_type = EFI_MD_TYPE_IOPORT; - memp[3].md_phys = 0xffffc000000; - memp[3].md_virt = NULL; - memp[3].md_pages = (64L*1024*1024)>>12; - memp[3].md_attr = EFI_MD_ATTR_UC; + memmap[0].md_type = EFI_MD_TYPE_PALCODE; + memmap[0].md_phys = 0x100000; + memmap[0].md_virt = NULL; + memmap[0].md_pages = (1L*1024*1024)>>12; + memmap[0].md_attr = EFI_MD_ATTR_WB | EFI_MD_ATTR_RT; + + memmap[1].md_type = EFI_MD_TYPE_FREE; + memmap[1].md_phys = 4L*1024*1024; + memmap[1].md_virt = NULL; + memmap[1].md_pages = (128L*1024*1024)>>12; + memmap[1].md_attr = EFI_MD_ATTR_WB; + + memmap[2].md_type = EFI_MD_TYPE_FREE; + memmap[2].md_phys = 4L*1024*1024*1024; + memmap[2].md_virt = NULL; + memmap[2].md_pages = (64L*1024*1024)>>12; + memmap[2].md_attr = EFI_MD_ATTR_WB; + + memmap[3].md_type = EFI_MD_TYPE_IOPORT; + memmap[3].md_phys = 0xffffc000000; + memmap[3].md_virt = NULL; + memmap[3].md_pages = (64L*1024*1024)>>12; + memmap[3].md_attr = EFI_MD_ATTR_UC; bi->bi_systab = (u_int64_t)&efi_systab; } Modified: projects/altix/sys/boot/ia64/ski/main.c ============================================================================== --- projects/altix/sys/boot/ia64/ski/main.c Mon Apr 4 02:57:19 2011 (r220314) +++ projects/altix/sys/boot/ia64/ski/main.c Mon Apr 4 03:41:18 2011 (r220315) @@ -97,11 +97,13 @@ ski_main(void) env_nounset); setenv("LINES", "24", 1); /* optional */ *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104040341.p343fJwP069787>