svn commit: r214740 - in user/nwhitehorn/ps3: amd64/acpica
amd64/amd64 amd64/include arm/arm boot/ofw/common
boot/ofw/libofw boot/sparc64/loader
cddl/contrib/opensolaris/uts/common/fs/zfs conf dev/...
Nathan Whitehorn
nwhitehorn at FreeBSD.org
Wed Nov 3 15:22:10 UTC 2010
Author: nwhitehorn
Date: Wed Nov 3 15:22:09 2010
New Revision: 214740
URL: http://svn.freebsd.org/changeset/base/214740
Log:
IFC @ r214739
Added:
user/nwhitehorn/ps3/dev/agp/agp_apple.c
- copied unchanged from r214739, head/sys/dev/agp/agp_apple.c
user/nwhitehorn/ps3/x86/include/
- copied from r214739, head/sys/x86/include/
user/nwhitehorn/ps3/x86/x86/dump_machdep.c
- copied unchanged from r214739, head/sys/x86/x86/dump_machdep.c
user/nwhitehorn/ps3/x86/x86/mptable.c
- copied unchanged from r214739, head/sys/x86/x86/mptable.c
user/nwhitehorn/ps3/x86/x86/mptable_pci.c
- copied unchanged from r214739, head/sys/x86/x86/mptable_pci.c
user/nwhitehorn/ps3/x86/x86/nexus.c
- copied unchanged from r214739, head/sys/x86/x86/nexus.c
Deleted:
user/nwhitehorn/ps3/amd64/amd64/dump_machdep.c
user/nwhitehorn/ps3/amd64/amd64/mptable.c
user/nwhitehorn/ps3/amd64/amd64/mptable_pci.c
user/nwhitehorn/ps3/amd64/amd64/nexus.c
user/nwhitehorn/ps3/amd64/include/apicreg.h
user/nwhitehorn/ps3/amd64/include/mca.h
user/nwhitehorn/ps3/i386/i386/dump_machdep.c
user/nwhitehorn/ps3/i386/i386/mptable.c
user/nwhitehorn/ps3/i386/i386/mptable_pci.c
user/nwhitehorn/ps3/i386/i386/nexus.c
user/nwhitehorn/ps3/i386/include/apicreg.h
user/nwhitehorn/ps3/i386/include/mca.h
user/nwhitehorn/ps3/pc98/include/apicreg.h
user/nwhitehorn/ps3/pc98/include/mca.h
Modified:
user/nwhitehorn/ps3/amd64/acpica/acpi_wakeup.c
user/nwhitehorn/ps3/amd64/acpica/madt.c
user/nwhitehorn/ps3/amd64/amd64/amd64_mem.c
user/nwhitehorn/ps3/amd64/amd64/apic_vector.S
user/nwhitehorn/ps3/amd64/amd64/genassym.c
user/nwhitehorn/ps3/amd64/amd64/intr_machdep.c
user/nwhitehorn/ps3/amd64/amd64/machdep.c
user/nwhitehorn/ps3/amd64/amd64/mp_machdep.c
user/nwhitehorn/ps3/amd64/amd64/mp_watchdog.c
user/nwhitehorn/ps3/amd64/amd64/pmap.c
user/nwhitehorn/ps3/amd64/amd64/trap.c
user/nwhitehorn/ps3/amd64/include/pmap.h
user/nwhitehorn/ps3/arm/arm/elf_trampoline.c
user/nwhitehorn/ps3/boot/ofw/common/main.c
user/nwhitehorn/ps3/boot/ofw/libofw/ofw_memory.c
user/nwhitehorn/ps3/boot/ofw/libofw/ofw_net.c
user/nwhitehorn/ps3/boot/ofw/libofw/openfirm.c
user/nwhitehorn/ps3/boot/sparc64/loader/main.c
user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
user/nwhitehorn/ps3/conf/files
user/nwhitehorn/ps3/conf/files.amd64
user/nwhitehorn/ps3/conf/files.i386
user/nwhitehorn/ps3/conf/files.pc98
user/nwhitehorn/ps3/conf/files.powerpc
user/nwhitehorn/ps3/conf/kern.post.mk
user/nwhitehorn/ps3/conf/kmod.mk
user/nwhitehorn/ps3/conf/options.amd64
user/nwhitehorn/ps3/conf/options.powerpc
user/nwhitehorn/ps3/dev/acpica/acpi.c
user/nwhitehorn/ps3/dev/agp/agp.c
user/nwhitehorn/ps3/dev/alc/if_alc.c
user/nwhitehorn/ps3/dev/ata/chipsets/ata-intel.c
user/nwhitehorn/ps3/dev/bge/if_bge.c
user/nwhitehorn/ps3/dev/bge/if_bgereg.h
user/nwhitehorn/ps3/dev/e1000/e1000_82571.c
user/nwhitehorn/ps3/dev/e1000/if_em.c
user/nwhitehorn/ps3/dev/e1000/if_em.h
user/nwhitehorn/ps3/dev/e1000/if_lem.c
user/nwhitehorn/ps3/dev/e1000/if_lem.h
user/nwhitehorn/ps3/dev/mii/brgphy.c
user/nwhitehorn/ps3/dev/mii/e1000phy.c
user/nwhitehorn/ps3/dev/mii/mii_physubr.c
user/nwhitehorn/ps3/dev/mii/miidevs
user/nwhitehorn/ps3/dev/mii/miivar.h
user/nwhitehorn/ps3/dev/usb/usb_device.c
user/nwhitehorn/ps3/dev/usb/usb_hub.c
user/nwhitehorn/ps3/dev/usb/usbdevs
user/nwhitehorn/ps3/dev/usb/usbdi.h
user/nwhitehorn/ps3/dev/xen/blkback/blkback.c
user/nwhitehorn/ps3/fs/nfs/nfsclstate.h
user/nwhitehorn/ps3/fs/nfsclient/nfs_clnode.c
user/nwhitehorn/ps3/fs/nfsclient/nfs_clstate.c
user/nwhitehorn/ps3/fs/nfsclient/nfs_clvnops.c
user/nwhitehorn/ps3/geom/part/g_part.c
user/nwhitehorn/ps3/geom/part/g_part.h
user/nwhitehorn/ps3/geom/part/g_part_gpt.c
user/nwhitehorn/ps3/geom/part/g_part_if.m
user/nwhitehorn/ps3/i386/acpica/acpi_wakeup.c
user/nwhitehorn/ps3/i386/acpica/madt.c
user/nwhitehorn/ps3/i386/i386/apic_vector.s
user/nwhitehorn/ps3/i386/i386/genassym.c
user/nwhitehorn/ps3/i386/i386/intr_machdep.c
user/nwhitehorn/ps3/i386/i386/machdep.c
user/nwhitehorn/ps3/i386/i386/mp_machdep.c
user/nwhitehorn/ps3/i386/i386/mp_watchdog.c
user/nwhitehorn/ps3/i386/i386/mpboot.s
user/nwhitehorn/ps3/i386/i386/trap.c
user/nwhitehorn/ps3/i386/xen/mp_machdep.c
user/nwhitehorn/ps3/i386/xen/mptable.c
user/nwhitehorn/ps3/kern/init_main.c
user/nwhitehorn/ps3/kern/kern_clock.c
user/nwhitehorn/ps3/kern/kern_cpuset.c
user/nwhitehorn/ps3/kern/kern_timeout.c
user/nwhitehorn/ps3/kern/sched_ule.c
user/nwhitehorn/ps3/kern/subr_acl_nfs4.c
user/nwhitehorn/ps3/kern/vfs_cache.c
user/nwhitehorn/ps3/mips/cavium/octeon_ebt3000_cf.c
user/nwhitehorn/ps3/modules/Makefile
user/nwhitehorn/ps3/modules/agp/Makefile
user/nwhitehorn/ps3/net/bpf.h
user/nwhitehorn/ps3/netinet/if_ether.c
user/nwhitehorn/ps3/netipsec/ipsec.c
user/nwhitehorn/ps3/netipsec/ipsec_input.c
user/nwhitehorn/ps3/nfsclient/nfs_vfsops.c
user/nwhitehorn/ps3/pc98/include/bus.h
user/nwhitehorn/ps3/pc98/pc98/busiosubr.c
user/nwhitehorn/ps3/pc98/pc98/machdep.c
user/nwhitehorn/ps3/powerpc/aim/copyinout.c
user/nwhitehorn/ps3/powerpc/aim/mmu_oea.c
user/nwhitehorn/ps3/powerpc/aim/mmu_oea64.c
user/nwhitehorn/ps3/powerpc/aim/slb.c
user/nwhitehorn/ps3/powerpc/aim/swtch32.S
user/nwhitehorn/ps3/powerpc/aim/swtch64.S
user/nwhitehorn/ps3/powerpc/aim/trap.c
user/nwhitehorn/ps3/powerpc/aim/trap_subr32.S
user/nwhitehorn/ps3/powerpc/aim/trap_subr64.S
user/nwhitehorn/ps3/powerpc/aim/vm_machdep.c
user/nwhitehorn/ps3/powerpc/conf/GENERIC
user/nwhitehorn/ps3/powerpc/conf/GENERIC64
user/nwhitehorn/ps3/powerpc/conf/NOTES
user/nwhitehorn/ps3/powerpc/include/pcb.h
user/nwhitehorn/ps3/powerpc/include/slb.h
user/nwhitehorn/ps3/powerpc/include/sr.h
user/nwhitehorn/ps3/powerpc/powermac/cpcht.c
user/nwhitehorn/ps3/powerpc/powerpc/exec_machdep.c
user/nwhitehorn/ps3/powerpc/powerpc/genassym.c
user/nwhitehorn/ps3/sparc64/sparc64/pmap.c
user/nwhitehorn/ps3/sparc64/sparc64/tick.c
user/nwhitehorn/ps3/ufs/ufs/ufs_dirhash.c
user/nwhitehorn/ps3/vm/vm_phys.c
user/nwhitehorn/ps3/vm/vm_reserv.c
user/nwhitehorn/ps3/x86/x86/io_apic.c
user/nwhitehorn/ps3/x86/x86/local_apic.c
user/nwhitehorn/ps3/x86/x86/mca.c
user/nwhitehorn/ps3/x86/x86/msi.c
Directory Properties:
user/nwhitehorn/ps3/ (props changed)
user/nwhitehorn/ps3/amd64/include/xen/ (props changed)
user/nwhitehorn/ps3/boot/powerpc/ps3/ (props changed)
user/nwhitehorn/ps3/cddl/contrib/opensolaris/ (props changed)
user/nwhitehorn/ps3/contrib/dev/acpica/ (props changed)
user/nwhitehorn/ps3/contrib/pf/ (props changed)
user/nwhitehorn/ps3/contrib/x86emu/ (props changed)
user/nwhitehorn/ps3/dev/xen/xenpci/ (props changed)
user/nwhitehorn/ps3/powerpc/ps3/ (props changed)
Modified: user/nwhitehorn/ps3/amd64/acpica/acpi_wakeup.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/acpica/acpi_wakeup.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/acpica/acpi_wakeup.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -41,13 +41,13 @@ __FBSDID("$FreeBSD$");
#include <vm/pmap.h>
#include <machine/intr_machdep.h>
-#include <machine/mca.h>
+#include <x86/mca.h>
#include <machine/pcb.h>
#include <machine/pmap.h>
#include <machine/specialreg.h>
#ifdef SMP
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include <machine/smp.h>
#include <machine/vmparam.h>
#endif
Modified: user/nwhitehorn/ps3/amd64/acpica/madt.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/acpica/madt.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/acpica/madt.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -39,7 +39,7 @@ __FBSDID("$FreeBSD$");
#include <vm/vm.h>
#include <vm/pmap.h>
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include <machine/intr_machdep.h>
#include <machine/apicvar.h>
Modified: user/nwhitehorn/ps3/amd64/amd64/amd64_mem.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/amd64_mem.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/amd64_mem.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -35,6 +35,10 @@ __FBSDID("$FreeBSD$");
#include <sys/smp.h>
#include <sys/sysctl.h>
+#include <vm/vm.h>
+#include <vm/vm_param.h>
+#include <vm/pmap.h>
+
#include <machine/cputypes.h>
#include <machine/md_var.h>
#include <machine/specialreg.h>
@@ -527,9 +531,9 @@ static int
amd64_mrset(struct mem_range_softc *sc, struct mem_range_desc *mrd, int *arg)
{
struct mem_range_desc *targ;
- int error = 0;
+ int error, i;
- switch(*arg) {
+ switch (*arg) {
case MEMRANGE_SET_UPDATE:
/*
* Make sure that what's being asked for is even
@@ -568,6 +572,21 @@ amd64_mrset(struct mem_range_softc *sc,
return (EOPNOTSUPP);
}
+ /*
+ * Ensure that the direct map region does not contain any mappings
+ * that span MTRRs of different types. However, the fixed MTRRs can
+ * be ignored, because a large page mapping the first 1 MB of physical
+ * memory is a special case that the processor handles. The entire
+ * TLB will be invalidated by amd64_mrstore(), so pmap_demote_DMAP()
+ * needn't do it.
+ */
+ i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0;
+ mrd = sc->mr_desc + i;
+ for (; i < sc->mr_ndesc; i++, mrd++) {
+ if (mrd->mr_flags & MDF_ACTIVE)
+ pmap_demote_DMAP(mrd->mr_base, mrd->mr_len, FALSE);
+ }
+
/* Update the hardware. */
amd64_mrstore(sc);
@@ -657,6 +676,21 @@ amd64_mrinit(struct mem_range_softc *sc)
if (mrd->mr_flags & MDF_ACTIVE)
mrd->mr_flags |= MDF_FIRMWARE;
}
+
+ /*
+ * Ensure that the direct map region does not contain any mappings
+ * that span MTRRs of different types. However, the fixed MTRRs can
+ * be ignored, because a large page mapping the first 1 MB of physical
+ * memory is a special case that the processor handles. Invalidate
+ * any old TLB entries that might hold inconsistent memory type
+ * information.
+ */
+ i = (sc->mr_cap & MR686_FIXMTRR) ? MTRR_N64K + MTRR_N16K + MTRR_N4K : 0;
+ mrd = sc->mr_desc + i;
+ for (; i < sc->mr_ndesc; i++, mrd++) {
+ if (mrd->mr_flags & MDF_ACTIVE)
+ pmap_demote_DMAP(mrd->mr_base, mrd->mr_len, TRUE);
+ }
}
/*
Modified: user/nwhitehorn/ps3/amd64/amd64/apic_vector.S
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/apic_vector.S Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/apic_vector.S Wed Nov 3 15:22:09 2010 (r214740)
@@ -39,7 +39,7 @@
#include "opt_smp.h"
#include <machine/asmacros.h>
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include "assym.s"
Modified: user/nwhitehorn/ps3/amd64/amd64/genassym.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/genassym.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/genassym.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -66,7 +66,7 @@ __FBSDID("$FreeBSD$");
#include <nfs/nfsproto.h>
#include <nfsclient/nfs.h>
#include <nfsclient/nfsdiskless.h>
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include <machine/cpu.h>
#include <machine/pcb.h>
#include <machine/sigframe.h>
Modified: user/nwhitehorn/ps3/amd64/amd64/intr_machdep.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/intr_machdep.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/intr_machdep.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -458,7 +458,7 @@ intr_next_cpu(void)
/* Leave all interrupts on the BSP during boot. */
if (!assign_cpu)
- return (cpu_apic_ids[0]);
+ return (PCPU_GET(apic_id));
mtx_lock_spin(&icu_lock);
apic_id = cpu_apic_ids[current_cpu];
Modified: user/nwhitehorn/ps3/amd64/amd64/machdep.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/machdep.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/machdep.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -112,7 +112,7 @@ __FBSDID("$FreeBSD$");
#include <machine/cpu.h>
#include <machine/cputypes.h>
#include <machine/intr_machdep.h>
-#include <machine/mca.h>
+#include <x86/mca.h>
#include <machine/md_var.h>
#include <machine/metadata.h>
#include <machine/pc/bios.h>
Modified: user/nwhitehorn/ps3/amd64/amd64/mp_machdep.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/mp_machdep.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/mp_machdep.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -57,11 +57,11 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_kern.h>
#include <vm/vm_extern.h>
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include <machine/clock.h>
#include <machine/cputypes.h>
#include <machine/cpufunc.h>
-#include <machine/mca.h>
+#include <x86/mca.h>
#include <machine/md_var.h>
#include <machine/mp_watchdog.h>
#include <machine/pcb.h>
Modified: user/nwhitehorn/ps3/amd64/amd64/mp_watchdog.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/mp_watchdog.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/mp_watchdog.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -44,7 +44,7 @@
#include <sys/systm.h>
#include <machine/smp.h>
-#include <machine/apicreg.h>
+#include <x86/apicreg.h>
#include <machine/apicvar.h>
#include <machine/mp_watchdog.h>
Modified: user/nwhitehorn/ps3/amd64/amd64/pmap.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/pmap.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/pmap.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -462,7 +462,7 @@ create_pagetables(vm_paddr_t *firstaddr)
if (ndmpdp < 4) /* Minimum 4GB of dirmap */
ndmpdp = 4;
DMPDPphys = allocpages(firstaddr, NDMPML4E);
- if (TRUE || (amd_feature & AMDID_PAGE1GB) == 0)
+ if ((amd_feature & AMDID_PAGE1GB) == 0)
DMPDphys = allocpages(firstaddr, ndmpdp);
dmaplimit = (vm_paddr_t)ndmpdp << PDPSHIFT;
@@ -494,11 +494,16 @@ create_pagetables(vm_paddr_t *firstaddr)
((pdp_entry_t *)KPDPphys)[i + KPDPI] |= PG_RW | PG_V | PG_U;
}
- /* Now set up the direct map space using either 2MB or 1GB pages */
- /* Preset PG_M and PG_A because demotion expects it */
- if (TRUE || (amd_feature & AMDID_PAGE1GB) == 0) {
+ /*
+ * Now, set up the direct map region using either 2MB or 1GB pages.
+ * Later, if pmap_mapdev{_attr}() uses the direct map for non-write-
+ * back memory, pmap_change_attr() will demote any 2MB or 1GB page
+ * mappings that are partially used.
+ */
+ if ((amd_feature & AMDID_PAGE1GB) == 0) {
for (i = 0; i < NPDEPG * ndmpdp; i++) {
((pd_entry_t *)DMPDphys)[i] = (vm_paddr_t)i << PDRSHIFT;
+ /* Preset PG_M and PG_A because demotion expects it. */
((pd_entry_t *)DMPDphys)[i] |= PG_RW | PG_V | PG_PS |
PG_G | PG_M | PG_A;
}
@@ -512,6 +517,7 @@ create_pagetables(vm_paddr_t *firstaddr)
for (i = 0; i < ndmpdp; i++) {
((pdp_entry_t *)DMPDPphys)[i] =
(vm_paddr_t)i << PDPSHIFT;
+ /* Preset PG_M and PG_A because demotion expects it. */
((pdp_entry_t *)DMPDPphys)[i] |= PG_RW | PG_V | PG_PS |
PG_G | PG_M | PG_A;
}
@@ -4948,6 +4954,54 @@ pmap_change_attr_locked(vm_offset_t va,
}
/*
+ * Demotes any mapping within the direct map region that covers more than the
+ * specified range of physical addresses. This range's size must be a power
+ * of two and its starting address must be a multiple of its size. Since the
+ * demotion does not change any attributes of the mapping, a TLB invalidation
+ * is not mandatory. The caller may, however, request a TLB invalidation.
+ */
+void
+pmap_demote_DMAP(vm_paddr_t base, vm_size_t len, boolean_t invalidate)
+{
+ pdp_entry_t *pdpe;
+ pd_entry_t *pde;
+ vm_offset_t va;
+ boolean_t changed;
+
+ if (len == 0)
+ return;
+ KASSERT(powerof2(len), ("pmap_demote_DMAP: len is not a power of 2"));
+ KASSERT((base & (len - 1)) == 0,
+ ("pmap_demote_DMAP: base is not a multiple of len"));
+ if (len < NBPDP && base < dmaplimit) {
+ va = PHYS_TO_DMAP(base);
+ changed = FALSE;
+ PMAP_LOCK(kernel_pmap);
+ pdpe = pmap_pdpe(kernel_pmap, va);
+ if ((*pdpe & PG_V) == 0)
+ panic("pmap_demote_DMAP: invalid PDPE");
+ if ((*pdpe & PG_PS) != 0) {
+ if (!pmap_demote_pdpe(kernel_pmap, pdpe, va))
+ panic("pmap_demote_DMAP: PDPE failed");
+ changed = TRUE;
+ }
+ if (len < NBPDR) {
+ pde = pmap_pdpe_to_pde(pdpe, va);
+ if ((*pde & PG_V) == 0)
+ panic("pmap_demote_DMAP: invalid PDE");
+ if ((*pde & PG_PS) != 0) {
+ if (!pmap_demote_pde(kernel_pmap, pde, va))
+ panic("pmap_demote_DMAP: PDE failed");
+ changed = TRUE;
+ }
+ }
+ if (changed && invalidate)
+ pmap_invalidate_page(kernel_pmap, va);
+ PMAP_UNLOCK(kernel_pmap);
+ }
+}
+
+/*
* perform the pmap work for mincore
*/
int
Modified: user/nwhitehorn/ps3/amd64/amd64/trap.c
==============================================================================
--- user/nwhitehorn/ps3/amd64/amd64/trap.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/amd64/trap.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -83,7 +83,7 @@ __FBSDID("$FreeBSD$");
#include <machine/cpu.h>
#include <machine/intr_machdep.h>
-#include <machine/mca.h>
+#include <x86/mca.h>
#include <machine/md_var.h>
#include <machine/pcb.h>
#ifdef SMP
Modified: user/nwhitehorn/ps3/amd64/include/pmap.h
==============================================================================
--- user/nwhitehorn/ps3/amd64/include/pmap.h Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/amd64/include/pmap.h Wed Nov 3 15:22:09 2010 (r214740)
@@ -307,6 +307,7 @@ extern vm_offset_t virtual_end;
void pmap_bootstrap(vm_paddr_t *);
int pmap_change_attr(vm_offset_t, vm_size_t, int);
+void pmap_demote_DMAP(vm_paddr_t base, vm_size_t len, boolean_t invalidate);
void pmap_init_pat(void);
void pmap_kenter(vm_offset_t va, vm_paddr_t pa);
void *pmap_kenter_temporary(vm_paddr_t pa, int i);
Modified: user/nwhitehorn/ps3/arm/arm/elf_trampoline.c
==============================================================================
--- user/nwhitehorn/ps3/arm/arm/elf_trampoline.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/arm/arm/elf_trampoline.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -159,7 +159,7 @@ _startC(void)
#if defined(FLASHADDR) && defined(LOADERRAMADDR)
unsigned int pc;
- __asm __volatile("adr %0, _start\n"
+ __asm __volatile("mov %0, pc\n"
: "=r" (pc));
if ((FLASHADDR > LOADERRAMADDR && pc >= FLASHADDR) ||
(FLASHADDR < LOADERRAMADDR && pc < LOADERRAMADDR)) {
@@ -173,11 +173,13 @@ _startC(void)
*/
unsigned int target_addr;
unsigned int tmp_sp;
+ uint32_t src_addr = (uint32_t)&_start - PHYSADDR + FLASHADDR
+ + (pc - FLASHADDR - ((uint32_t)&_startC - PHYSADDR)) & 0xfffff000;
target_addr = (unsigned int)&_start - PHYSADDR + LOADERRAMADDR;
tmp_sp = target_addr + 0x100000 +
(unsigned int)&_end - (unsigned int)&_start;
- memcpy((char *)target_addr, (char *)pc,
+ memcpy((char *)target_addr, (char *)src_addr,
(unsigned int)&_end - (unsigned int)&_start);
/* Temporary set the sp and jump to the new location. */
__asm __volatile(
Modified: user/nwhitehorn/ps3/boot/ofw/common/main.c
==============================================================================
--- user/nwhitehorn/ps3/boot/ofw/common/main.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/boot/ofw/common/main.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -41,19 +41,23 @@ extern char bootprog_rev[];
extern char bootprog_date[];
extern char bootprog_maker[];
-u_int32_t acells;
+u_int32_t acells, scells;
static char bootargs[128];
#define HEAP_SIZE 0x80000
+#define OF_puts(fd, text) OF_write(fd, text, strlen(text))
+
void
init_heap(void)
{
void *base;
+ ihandle_t stdout;
if ((base = ofw_alloc_heap(HEAP_SIZE)) == (void *)0xffffffff) {
- printf("Heap memory claim failed!\n");
+ OF_getprop(chosen, "stdout", &stdout, sizeof(stdout));
+ OF_puts(stdout, "Heap memory claim failed!\n");
OF_enter();
}
@@ -64,25 +68,20 @@ uint64_t
memsize(void)
{
phandle_t memoryp;
- struct ofw_reg reg[4];
- struct ofw_reg2 reg2[8];
- int i;
- u_int64_t sz, memsz;
+ cell_t reg[24];
+ int i, sz;
+ u_int64_t memsz;
+ memsz = 0;
memoryp = OF_instance_to_package(memory);
- if (acells == 1) {
- sz = OF_getprop(memoryp, "reg", ®, sizeof(reg));
- sz /= sizeof(struct ofw_reg);
-
- for (i = 0, memsz = 0; i < sz; i++)
- memsz += reg[i].size;
- } else if (acells == 2) {
- sz = OF_getprop(memoryp, "reg", ®2, sizeof(reg2));
- sz /= sizeof(struct ofw_reg2);
+ sz = OF_getprop(memoryp, "reg", ®, sizeof(reg));
+ sz /= sizeof(reg[0]);
- for (i = 0, memsz = 0; i < sz; i++)
- memsz += reg2[i].size;
+ for (i = 0; i < sz; i += (acells + scells)) {
+ if (scells > 1)
+ memsz += (uint64_t)reg[i + acells] << 32;
+ memsz += reg[i + acells + scells - 1];
}
return (memsz);
@@ -105,13 +104,9 @@ main(int (*openfirm)(void *))
root = OF_finddevice("/");
- acells = 1;
+ scells = acells = 1;
OF_getprop(root, "#address-cells", &acells, sizeof(acells));
-
- /*
- * Set up console.
- */
- cons_probe();
+ OF_getprop(root, "#size-cells", &scells, sizeof(scells));
/*
* Initialise the heap as early as possible. Once this is done,
@@ -121,6 +116,11 @@ main(int (*openfirm)(void *))
init_heap();
/*
+ * Set up console.
+ */
+ cons_probe();
+
+ /*
* March through the device switch probing for things.
*/
for (i = 0; devsw[i] != NULL; i++)
Modified: user/nwhitehorn/ps3/boot/ofw/libofw/ofw_memory.c
==============================================================================
--- user/nwhitehorn/ps3/boot/ofw/libofw/ofw_memory.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/boot/ofw/libofw/ofw_memory.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -118,13 +118,19 @@ ofw_memmap(int acells)
void *
ofw_alloc_heap(unsigned int size)
{
- phandle_t memoryp;
- struct ofw_reg available;
+ phandle_t memoryp, root;
+ cell_t available[4];
+ cell_t acells;
+
+ root = OF_finddevice("/");
+ acells = 1;
+ OF_getprop(root, "#address-cells", &acells, sizeof(acells));
memoryp = OF_instance_to_package(memory);
- OF_getprop(memoryp, "available", &available, sizeof(available));
+ OF_getprop(memoryp, "available", available, sizeof(available));
- heap_base = OF_claim((void *)available.base, size, sizeof(register_t));
+ heap_base = OF_claim((void *)available[acells-1], size,
+ sizeof(register_t));
if (heap_base != (void *)-1) {
heap_size = size;
Modified: user/nwhitehorn/ps3/boot/ofw/libofw/ofw_net.c
==============================================================================
--- user/nwhitehorn/ps3/boot/ofw/libofw/ofw_net.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/boot/ofw/libofw/ofw_net.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -230,7 +230,10 @@ punt:
static void
ofwn_end(struct netif *nif)
{
+#ifdef BROKEN
+ /* dma-free freezes at least some Apple ethernet controllers */
OF_call_method("dma-free", netinstance, 2, 0, dmabuf, MAXPHYS);
+#endif
OF_close(netinstance);
}
Modified: user/nwhitehorn/ps3/boot/ofw/libofw/openfirm.c
==============================================================================
--- user/nwhitehorn/ps3/boot/ofw/libofw/openfirm.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/boot/ofw/libofw/openfirm.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -80,8 +80,13 @@ OF_init(int (*openfirm)(void *))
if ((chosen = OF_finddevice("/chosen")) == -1)
OF_exit();
- if (OF_getprop(chosen, "memory", &memory, sizeof(memory)) == -1)
- OF_exit();
+ if (OF_getprop(chosen, "memory", &memory, sizeof(memory)) == -1) {
+ memory = OF_open("/memory");
+ if (memory == -1)
+ memory = OF_open("/memory at 0");
+ if (memory == -1)
+ OF_exit();
+ }
if (OF_getprop(chosen, "mmu", &mmu, sizeof(mmu)) == -1)
OF_exit();
}
Modified: user/nwhitehorn/ps3/boot/sparc64/loader/main.c
==============================================================================
--- user/nwhitehorn/ps3/boot/sparc64/loader/main.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/boot/sparc64/loader/main.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -811,15 +811,15 @@ main(int (*openfirm)(void *))
archsw.arch_autoload = sparc64_autoload;
archsw.arch_maphint = sparc64_maphint;
+ if (init_heap() == (vm_offset_t)-1)
+ OF_exit();
+ setheap((void *)heapva, (void *)(heapva + HEAPSZ));
+
/*
* Probe for a console.
*/
cons_probe();
- if (init_heap() == (vm_offset_t)-1)
- panic("%s: can't claim heap", __func__);
- setheap((void *)heapva, (void *)(heapva + HEAPSZ));
-
if ((root = OF_peer(0)) == -1)
panic("%s: can't get root phandle", __func__);
OF_getprop(root, "compatible", compatible, sizeof(compatible));
Modified: user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c
==============================================================================
--- user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -192,7 +192,7 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn,
ASSERT(length <= DMU_MAX_ACCESS);
- dbuf_flags = DB_RF_CANFAIL | DB_RF_NEVERWAIT;
+ dbuf_flags = DB_RF_CANFAIL | DB_RF_NEVERWAIT | DB_RF_HAVESTRUCT;
if (flags & DMU_READ_NO_PREFETCH || length > zfetch_array_rd_sz)
dbuf_flags |= DB_RF_NOPREFETCH;
@@ -209,6 +209,7 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn,
os_dsl_dataset->ds_object,
(longlong_t)dn->dn_object, dn->dn_datablksz,
(longlong_t)offset, (longlong_t)length);
+ rw_exit(&dn->dn_struct_rwlock);
return (EIO);
}
nblks = 1;
@@ -231,9 +232,7 @@ dmu_buf_hold_array_by_dnode(dnode_t *dn,
}
/* initiate async i/o */
if (read) {
- rw_exit(&dn->dn_struct_rwlock);
(void) dbuf_read(db, zio, dbuf_flags);
- rw_enter(&dn->dn_struct_rwlock, RW_READER);
}
dbp[i] = &db->db;
}
@@ -540,7 +539,7 @@ dmu_read(objset_t *os, uint64_t object,
{
dnode_t *dn;
dmu_buf_t **dbp;
- int numbufs, i, err;
+ int numbufs, err;
err = dnode_hold(os->os, object, FTAG, &dn);
if (err)
@@ -551,7 +550,7 @@ dmu_read(objset_t *os, uint64_t object,
* block. If we ever do the tail block optimization, we will need to
* handle that here as well.
*/
- if (dn->dn_datablkshift == 0) {
+ if (dn->dn_maxblkid == 0) {
int newsz = offset > dn->dn_datablksz ? 0 :
MIN(size, dn->dn_datablksz - offset);
bzero((char *)buf + newsz, size - newsz);
@@ -560,6 +559,7 @@ dmu_read(objset_t *os, uint64_t object,
while (size > 0) {
uint64_t mylen = MIN(size, DMU_MAX_ACCESS / 2);
+ int i;
/*
* NB: we could do this block-at-a-time, but it's nice
Modified: user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -1031,6 +1031,10 @@ zfs_get_done(dmu_buf_t *db, void *vzgd)
VFS_UNLOCK_GIANT(vfslocked);
}
+#ifdef DEBUG
+static int zil_fault_io = 0;
+#endif
+
/*
* Get data to generate a TX_WRITE intent log record.
*/
@@ -1112,7 +1116,21 @@ zfs_get_data(void *arg, lr_write_t *lr,
zgd->zgd_rl = rl;
zgd->zgd_zilog = zfsvfs->z_log;
zgd->zgd_bp = &lr->lr_blkptr;
- VERIFY(0 == dmu_buf_hold(os, lr->lr_foid, boff, zgd, &db));
+#ifdef DEBUG
+ if (zil_fault_io) {
+ error = EIO;
+ zil_fault_io = 0;
+ } else {
+ error = dmu_buf_hold(os, lr->lr_foid, boff, zgd, &db);
+ }
+#else
+ error = dmu_buf_hold(os, lr->lr_foid, boff, zgd, &db);
+#endif
+ if (error != 0) {
+ kmem_free(zgd, sizeof (zgd_t));
+ goto out;
+ }
+
ASSERT(boff == db->db_offset);
lr->lr_blkoff = off - boff;
error = dmu_sync(zio, db, &lr->lr_blkptr,
Modified: user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c
==============================================================================
--- user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/cddl/contrib/opensolaris/uts/common/fs/zfs/zil.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -933,6 +933,10 @@ zil_lwb_commit(zilog_t *zilog, itx_t *it
}
error = zilog->zl_get_data(
itx->itx_private, lr, dbuf, lwb->lwb_zio);
+ if (error == EIO) {
+ txg_wait_synced(zilog->zl_dmu_pool, txg);
+ return (lwb);
+ }
if (error) {
ASSERT(error == ENOENT || error == EEXIST ||
error == EALREADY);
Modified: user/nwhitehorn/ps3/conf/files
==============================================================================
--- user/nwhitehorn/ps3/conf/files Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/files Wed Nov 3 15:22:09 2010 (r214740)
@@ -67,12 +67,12 @@ fdt_static_dtb.h optional fdt fdt_dtb_s
compile-with "sh $S/tools/fdt/make_dtbh.sh ${FDT_DTS_FILE} ." \
no-obj no-implicit-rule before-depend \
clean "fdt_static_dtb.h"
-p16v-alsa%diked.h optional snd_emu10kx pci \
+p16v-alsa%diked.h optional snd_emu10kx pci \
dependency "$S/tools/sound/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p16v-alsa.h" \
compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/sound/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p16v-alsa.h p16v-alsa%diked.h" \
no-obj no-implicit-rule before-depend \
clean "p16v-alsa%diked.h"
-p17v-alsa%diked.h optional snd_emu10kx pci \
+p17v-alsa%diked.h optional snd_emu10kx pci \
dependency "$S/tools/sound/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h" \
compile-with "CC='${CC}' AWK=${AWK} sh $S/tools/sound/emu10k1-mkalsa.sh $S/gnu/dev/sound/pci/p17v-alsa.h p17v-alsa%diked.h" \
no-obj no-implicit-rule before-depend \
@@ -83,12 +83,12 @@ feeder_eq_gen.h optional sound \
no-obj no-implicit-rule before-depend \
clean "feeder_eq_gen.h"
feeder_rate_gen.h optional sound \
- dependency "$S/tools/sound/feeder_rate_mkfilter.awk" \
+ dependency "$S/tools/sound/feeder_rate_mkfilter.awk" \
compile-with "${AWK} -f $S/tools/sound/feeder_rate_mkfilter.awk -- ${FEEDER_RATE_PRESETS} > feeder_rate_gen.h" \
no-obj no-implicit-rule before-depend \
clean "feeder_rate_gen.h"
snd_fxdiv_gen.h optional sound \
- dependency "$S/tools/sound/snd_fxdiv_gen.awk" \
+ dependency "$S/tools/sound/snd_fxdiv_gen.awk" \
compile-with "${AWK} -f $S/tools/sound/snd_fxdiv_gen.awk -- > snd_fxdiv_gen.h" \
no-obj no-implicit-rule before-depend \
clean "snd_fxdiv_gen.h"
Modified: user/nwhitehorn/ps3/conf/files.amd64
==============================================================================
--- user/nwhitehorn/ps3/conf/files.amd64 Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/files.amd64 Wed Nov 3 15:22:09 2010 (r214740)
@@ -104,7 +104,6 @@ amd64/amd64/cpu_switch.S standard
amd64/amd64/db_disasm.c optional ddb
amd64/amd64/db_interface.c optional ddb
amd64/amd64/db_trace.c optional ddb
-amd64/amd64/dump_machdep.c standard
amd64/amd64/elf_machdep.c standard
amd64/amd64/exception.S standard
amd64/amd64/fpu.c standard
@@ -122,9 +121,6 @@ amd64/amd64/minidump_machdep.c standard
amd64/amd64/mp_machdep.c optional smp
amd64/amd64/mp_watchdog.c optional mp_watchdog smp
amd64/amd64/mpboot.S optional smp
-amd64/amd64/mptable.c optional mptable
-amd64/amd64/mptable_pci.c optional mptable pci
-amd64/amd64/nexus.c standard
amd64/amd64/pmap.c standard
amd64/amd64/prof_machdep.c optional profiling-routine
amd64/amd64/sigtramp.S standard
@@ -321,7 +317,11 @@ x86/isa/isa_dma.c standard
x86/isa/nmi.c standard
x86/isa/orm.c optional isa
x86/pci/qpi.c standard
+x86/x86/dump_machdep.c standard
x86/x86/io_apic.c standard
x86/x86/local_apic.c standard
x86/x86/mca.c standard
+x86/x86/mptable.c optional mptable
+x86/x86/mptable_pci.c optional mptable pci
x86/x86/msi.c optional pci
+x86/x86/nexus.c standard
Modified: user/nwhitehorn/ps3/conf/files.i386
==============================================================================
--- user/nwhitehorn/ps3/conf/files.i386 Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/files.i386 Wed Nov 3 15:22:09 2010 (r214740)
@@ -263,7 +263,6 @@ i386/i386/busdma_machdep.c standard
i386/i386/db_disasm.c optional ddb
i386/i386/db_interface.c optional ddb
i386/i386/db_trace.c optional ddb
-i386/i386/dump_machdep.c standard
i386/i386/elan-mmcr.c optional cpu_elan | cpu_soekris
i386/i386/elf_machdep.c standard
i386/i386/exception.s optional native
@@ -290,10 +289,7 @@ i386/i386/mp_machdep.c optional native
i386/xen/mp_machdep.c optional xen smp
i386/i386/mp_watchdog.c optional mp_watchdog smp
i386/i386/mpboot.s optional smp native
-i386/i386/mptable.c optional apic native
i386/xen/mptable.c optional apic xen
-i386/i386/mptable_pci.c optional apic pci
-i386/i386/nexus.c standard
i386/i386/perfmon.c optional perfmon
i386/i386/pmap.c optional native
i386/xen/pmap.c optional xen
@@ -395,7 +391,11 @@ x86/isa/isa_dma.c optional isa
x86/isa/nmi.c standard
x86/isa/orm.c optional isa
x86/pci/qpi.c standard
+x86/x86/dump_machdep.c standard
x86/x86/io_apic.c optional apic
x86/x86/local_apic.c optional apic
x86/x86/mca.c standard
+x86/x86/mptable.c optional apic native
+x86/x86/mptable_pci.c optional apic pci
x86/x86/msi.c optional apic pci
+x86/x86/nexus.c standard
Modified: user/nwhitehorn/ps3/conf/files.pc98
==============================================================================
--- user/nwhitehorn/ps3/conf/files.pc98 Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/files.pc98 Wed Nov 3 15:22:09 2010 (r214740)
@@ -138,7 +138,6 @@ i386/i386/busdma_machdep.c standard
i386/i386/db_disasm.c optional ddb
i386/i386/db_interface.c optional ddb
i386/i386/db_trace.c optional ddb
-i386/i386/dump_machdep.c standard
i386/i386/elf_machdep.c standard
i386/i386/exception.s standard
i386/i386/gdb_machdep.c optional gdb
@@ -157,9 +156,6 @@ i386/i386/mp_clock.c optional smp
i386/i386/mp_machdep.c optional smp
i386/i386/mp_watchdog.c optional mp_watchdog smp
i386/i386/mpboot.s optional smp
-i386/i386/mptable.c optional apic
-i386/i386/mptable_pci.c optional apic pci
-i386/i386/nexus.c standard
i386/i386/perfmon.c optional perfmon
i386/i386/pmap.c standard
i386/i386/ptrace_machdep.c standard
@@ -255,7 +251,11 @@ pc98/pc98/pc98_machdep.c standard
x86/isa/atpic.c optional atpic
x86/isa/clock.c standard
x86/isa/isa.c optional isa
+x86/x86/dump_machdep.c standard
x86/x86/io_apic.c optional apic
x86/x86/local_apic.c optional apic
x86/x86/mca.c standard
+x86/x86/mptable.c optional apic
+x86/x86/mptable_pci.c optional apic pci
x86/x86/msi.c optional apic pci
+x86/x86/nexus.c standard
Modified: user/nwhitehorn/ps3/conf/files.powerpc
==============================================================================
--- user/nwhitehorn/ps3/conf/files.powerpc Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/files.powerpc Wed Nov 3 15:22:09 2010 (r214740)
@@ -22,6 +22,7 @@ dev/adb/adb_kbd.c optional adb
dev/adb/adb_mouse.c optional adb
dev/adb/adb_hb_if.m optional adb
dev/adb/adb_if.m optional adb
+dev/agp/agp_apple.c optional agp powermac
dev/cfi/cfi_bus_fdt.c optional cfi fdt
dev/fb/fb.c optional sc
dev/fdt/fdt_powerpc.c optional fdt
Modified: user/nwhitehorn/ps3/conf/kern.post.mk
==============================================================================
--- user/nwhitehorn/ps3/conf/kern.post.mk Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/kern.post.mk Wed Nov 3 15:22:09 2010 (r214740)
@@ -169,6 +169,9 @@ _ILINKS= machine
.if ${MACHINE} != ${MACHINE_CPUARCH}
_ILINKS+= ${MACHINE_CPUARCH}
.endif
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+_ILINKS+= x86
+.endif
# Ensure that the link exists without depending on it when it exists.
.for _link in ${_ILINKS}
@@ -181,8 +184,8 @@ ${_ILINKS}:
@case ${.TARGET} in \
machine) \
path=${S}/${MACHINE}/include ;; \
- ${MACHINE_CPUARCH}) \
- path=${S}/${MACHINE_CPUARCH}/include ;; \
+ *) \
+ path=${S}/${.TARGET}/include ;; \
esac ; \
${ECHO} ${.TARGET} "->" $$path ; \
ln -s $$path ${.TARGET}
Modified: user/nwhitehorn/ps3/conf/kmod.mk
==============================================================================
--- user/nwhitehorn/ps3/conf/kmod.mk Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/kmod.mk Wed Nov 3 15:22:09 2010 (r214740)
@@ -238,6 +238,9 @@ _ILINKS=@ machine
.if ${MACHINE} != ${MACHINE_CPUARCH}
_ILINKS+=${MACHINE_CPUARCH}
.endif
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+_ILINKS+=x86
+.endif
all: objwarn ${PROG}
@@ -263,12 +266,12 @@ SYSDIR= ${_dir}
${_ILINKS}:
@case ${.TARGET} in \
- ${MACHINE_CPUARCH}) \
- path=${SYSDIR}/${MACHINE_CPUARCH}/include ;; \
machine) \
path=${SYSDIR}/${MACHINE}/include ;; \
@) \
path=${SYSDIR} ;; \
+ *) \
+ path=${SYSDIR}/${.TARGET}/include ;; \
esac ; \
path=`(cd $$path && /bin/pwd)` ; \
${ECHO} ${.TARGET} "->" $$path ; \
Modified: user/nwhitehorn/ps3/conf/options.amd64
==============================================================================
--- user/nwhitehorn/ps3/conf/options.amd64 Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/options.amd64 Wed Nov 3 15:22:09 2010 (r214740)
@@ -8,6 +8,7 @@ COUNT_IPIS opt_smp.h
MAXMEM
PERFMON
PMAP_SHPGPERPROC opt_pmap.h
+MPTABLE_FORCE_HTT
MP_WATCHDOG
# Options for emulators. These should only be used at config time, so
Modified: user/nwhitehorn/ps3/conf/options.powerpc
==============================================================================
--- user/nwhitehorn/ps3/conf/options.powerpc Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/conf/options.powerpc Wed Nov 3 15:22:09 2010 (r214740)
@@ -25,3 +25,7 @@ PSIM
SC_OFWFB opt_ofwfb.h
OFWCONS_POLL_HZ opt_ofw.h
+
+# AGP debugging support
+AGP_DEBUG opt_agp.h
+
Modified: user/nwhitehorn/ps3/dev/acpica/acpi.c
==============================================================================
--- user/nwhitehorn/ps3/dev/acpica/acpi.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/dev/acpica/acpi.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -86,6 +86,11 @@ static struct cdevsw acpi_cdevsw = {
.d_name = "acpi",
};
+struct acpi_interface {
+ ACPI_STRING *data;
+ int num;
+};
+
/* Global mutex for locking access to the ACPI subsystem. */
struct mtx acpi_mutex;
@@ -163,6 +168,7 @@ static void acpi_enable_pcie(void);
#endif
static void acpi_hint_device_unit(device_t acdev, device_t child,
const char *name, int *unitp);
+static void acpi_reset_interfaces(device_t dev);
static device_method_t acpi_methods[] = {
/* Device interface */
@@ -232,6 +238,16 @@ SYSCTL_STRING(_debug_acpi, OID_AUTO, acp
acpi_ca_version, 0, "Version of Intel ACPI-CA");
/*
+ * Allow overriding _OSI methods.
+ */
+static char acpi_install_interface[256];
+TUNABLE_STR("hw.acpi.install_interface", acpi_install_interface,
+ sizeof(acpi_install_interface));
+static char acpi_remove_interface[256];
+TUNABLE_STR("hw.acpi.remove_interface", acpi_remove_interface,
+ sizeof(acpi_remove_interface));
+
+/*
* Allow override of whether methods execute in parallel or not.
* Enable this for serial behavior, which fixes "AE_ALREADY_EXISTS"
* errors for AML that really can't handle parallel method execution.
@@ -467,6 +483,9 @@ acpi_attach(device_t dev)
goto out;
}
+ /* Override OS interfaces if the user requested. */
+ acpi_reset_interfaces(dev);
+
/* Load ACPI name space. */
status = AcpiLoadTables();
if (ACPI_FAILURE(status)) {
@@ -3473,6 +3492,93 @@ acpi_debug_objects_sysctl(SYSCTL_HANDLER
}
static int
+acpi_parse_interfaces(char *str, struct acpi_interface *iface)
+{
+ char *p;
+ size_t len;
+ int i, j;
+
+ p = str;
+ while (isspace(*p) || *p == ',')
+ p++;
+ len = strlen(p);
+ if (len == 0)
+ return (0);
+ p = strdup(p, M_TEMP);
+ for (i = 0; i < len; i++)
+ if (p[i] == ',')
+ p[i] = '\0';
+ i = j = 0;
+ while (i < len)
+ if (isspace(p[i]) || p[i] == '\0')
+ i++;
+ else {
+ i += strlen(p + i) + 1;
+ j++;
+ }
+ if (j == 0) {
+ free(p, M_TEMP);
+ return (0);
+ }
+ iface->data = malloc(sizeof(*iface->data) * j, M_TEMP, M_WAITOK);
+ iface->num = j;
+ i = j = 0;
+ while (i < len)
+ if (isspace(p[i]) || p[i] == '\0')
+ i++;
+ else {
+ iface->data[j] = p + i;
+ i += strlen(p + i) + 1;
+ j++;
+ }
+
+ return (j);
+}
+
+static void
+acpi_free_interfaces(struct acpi_interface *iface)
+{
+
+ free(iface->data[0], M_TEMP);
+ free(iface->data, M_TEMP);
+}
+
+static void
+acpi_reset_interfaces(device_t dev)
+{
+ struct acpi_interface list;
+ ACPI_STATUS status;
+ int i;
+
+ if (acpi_parse_interfaces(acpi_install_interface, &list) > 0) {
+ for (i = 0; i < list.num; i++) {
+ status = AcpiInstallInterface(list.data[i]);
+ if (ACPI_FAILURE(status))
+ device_printf(dev,
+ "failed to install _OSI(\"%s\"): %s\n",
+ list.data[i], AcpiFormatException(status));
+ else if (bootverbose)
+ device_printf(dev, "installed _OSI(\"%s\")\n",
+ list.data[i]);
+ }
+ acpi_free_interfaces(&list);
+ }
+ if (acpi_parse_interfaces(acpi_remove_interface, &list) > 0) {
+ for (i = 0; i < list.num; i++) {
+ status = AcpiRemoveInterface(list.data[i]);
+ if (ACPI_FAILURE(status))
+ device_printf(dev,
+ "failed to remove _OSI(\"%s\"): %s\n",
+ list.data[i], AcpiFormatException(status));
+ else if (bootverbose)
+ device_printf(dev, "removed _OSI(\"%s\")\n",
+ list.data[i]);
+ }
+ acpi_free_interfaces(&list);
+ }
+}
+
+static int
acpi_pm_func(u_long cmd, void *arg, ...)
{
int state, acpi_state;
Modified: user/nwhitehorn/ps3/dev/agp/agp.c
==============================================================================
--- user/nwhitehorn/ps3/dev/agp/agp.c Wed Nov 3 15:15:48 2010 (r214739)
+++ user/nwhitehorn/ps3/dev/agp/agp.c Wed Nov 3 15:22:09 2010 (r214740)
@@ -219,13 +219,16 @@ agp_generic_attach(device_t dev)
* Find and map the aperture, RF_SHAREABLE for DRM but not RF_ACTIVE
* because the kernel doesn't need to map it.
*/
- if (sc->as_aperture_rid == 0)
- sc->as_aperture_rid = AGP_APBASE;
- sc->as_aperture = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
- &sc->as_aperture_rid, RF_SHAREABLE);
- if (!sc->as_aperture)
- return ENOMEM;
+ if (sc->as_aperture_rid != -1) {
+ if (sc->as_aperture_rid == 0)
+ sc->as_aperture_rid = AGP_APBASE;
+
+ sc->as_aperture = bus_alloc_resource_any(dev, SYS_RES_MEMORY,
+ &sc->as_aperture_rid, RF_SHAREABLE);
+ if (!sc->as_aperture)
+ return ENOMEM;
+ }
/*
* Work out an upper bound for agp memory allocation. This
@@ -272,8 +275,9 @@ agp_free_res(device_t dev)
{
struct agp_softc *sc = device_get_softc(dev);
- bus_release_resource(dev, SYS_RES_MEMORY, sc->as_aperture_rid,
- sc->as_aperture);
+ if (sc->as_aperture != NULL)
+ bus_release_resource(dev, SYS_RES_MEMORY, sc->as_aperture_rid,
+ sc->as_aperture);
mtx_destroy(&sc->as_lock);
agp_flush_cache();
}
@@ -729,7 +733,10 @@ agp_info_user(device_t dev, agp_info *in
info->bridge_id = pci_get_devid(dev);
info->agp_mode =
pci_read_config(dev, agp_find_caps(dev) + AGP_STATUS, 4);
- info->aper_base = rman_get_start(sc->as_aperture);
+ if (sc->as_aperture)
+ info->aper_base = rman_get_start(sc->as_aperture);
+ else
+ info->aper_base = 0;
info->aper_size = AGP_GET_APERTURE(dev) >> 20;
info->pg_total = info->pg_system = sc->as_maxmem >> AGP_PAGE_SHIFT;
info->pg_used = sc->as_allocated >> AGP_PAGE_SHIFT;
@@ -876,6 +883,8 @@ agp_mmap(struct cdev *kdev, vm_ooffset_t
if (offset > AGP_GET_APERTURE(dev))
return -1;
+ if (sc->as_aperture == NULL)
+ return -1;
*paddr = rman_get_start(sc->as_aperture) + offset;
return 0;
}
@@ -917,8 +926,11 @@ agp_get_info(device_t dev, struct agp_in
info->ai_mode =
pci_read_config(dev, agp_find_caps(dev) + AGP_STATUS, 4);
- info->ai_aperture_base = rman_get_start(sc->as_aperture);
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list