svn commit: r190504 - in user/mav/ata/sys: . amd64/acpica
amd64/amd64 amd64/conf amd64/include amd64/linux32 amd64/pci
arm/conf arm/include boot/forth boot/pc98/libpc98
boot/pc98/loader cddl/contri...
Alexander Motin
mav at FreeBSD.org
Sat Mar 28 04:29:08 PDT 2009
Author: mav
Date: Sat Mar 28 11:29:07 2009
New Revision: 190504
URL: http://svn.freebsd.org/changeset/base/190504
Log:
Update to the HEAD.
Added:
user/mav/ata/sys/amd64/acpica/Makefile
- copied unchanged from r190503, head/sys/amd64/acpica/Makefile
user/mav/ata/sys/amd64/acpica/acpi_switch.S
- copied unchanged from r190503, head/sys/amd64/acpica/acpi_switch.S
user/mav/ata/sys/amd64/acpica/acpi_wakecode.S
- copied unchanged from r190503, head/sys/amd64/acpica/acpi_wakecode.S
user/mav/ata/sys/amd64/acpica/genwakecode.sh
- copied unchanged from r190503, head/sys/amd64/acpica/genwakecode.sh
user/mav/ata/sys/amd64/acpica/genwakedata.sh
- copied unchanged from r190503, head/sys/amd64/acpica/genwakedata.sh
user/mav/ata/sys/cddl/dev/dtnfsclient/
- copied from r190503, head/sys/cddl/dev/dtnfsclient/
user/mav/ata/sys/dev/ipmi/ipmi_linux.c
- copied unchanged from r190503, head/sys/dev/ipmi/ipmi_linux.c
user/mav/ata/sys/i386/cpufreq/hwpstate.c
- copied unchanged from r190503, head/sys/i386/cpufreq/hwpstate.c
user/mav/ata/sys/modules/dtrace/dtnfsclient/
- copied from r190503, head/sys/modules/dtrace/dtnfsclient/
user/mav/ata/sys/modules/ip6_mroute_mod/
- copied from r190503, head/sys/modules/ip6_mroute_mod/
user/mav/ata/sys/modules/ipmi/ipmi_linux/
- copied from r190503, head/sys/modules/ipmi/ipmi_linux/
user/mav/ata/sys/net80211/ieee80211_superg.c
- copied unchanged from r190503, head/sys/net80211/ieee80211_superg.c
user/mav/ata/sys/net80211/ieee80211_superg.h
- copied unchanged from r190503, head/sys/net80211/ieee80211_superg.h
user/mav/ata/sys/nfsclient/nfs_kdtrace.c
- copied unchanged from r190503, head/sys/nfsclient/nfs_kdtrace.c
user/mav/ata/sys/nfsclient/nfs_kdtrace.h
- copied unchanged from r190503, head/sys/nfsclient/nfs_kdtrace.h
Deleted:
user/mav/ata/sys/dev/usb/image/
user/mav/ata/sys/modules/usb/uscanner/
Modified:
user/mav/ata/sys/ (props changed)
user/mav/ata/sys/amd64/acpica/acpi_machdep.c
user/mav/ata/sys/amd64/acpica/acpi_wakeup.c
user/mav/ata/sys/amd64/amd64/amd64_mem.c
user/mav/ata/sys/amd64/amd64/apic_vector.S
user/mav/ata/sys/amd64/amd64/cpu_switch.S
user/mav/ata/sys/amd64/amd64/db_trace.c
user/mav/ata/sys/amd64/amd64/fpu.c
user/mav/ata/sys/amd64/amd64/genassym.c
user/mav/ata/sys/amd64/amd64/machdep.c
user/mav/ata/sys/amd64/amd64/mp_machdep.c
user/mav/ata/sys/amd64/amd64/pmap.c
user/mav/ata/sys/amd64/amd64/vm_machdep.c
user/mav/ata/sys/amd64/conf/GENERIC
user/mav/ata/sys/amd64/conf/NOTES
user/mav/ata/sys/amd64/include/apicvar.h
user/mav/ata/sys/amd64/include/elf.h
user/mav/ata/sys/amd64/include/pcb.h
user/mav/ata/sys/amd64/include/pmap.h
user/mav/ata/sys/amd64/include/smp.h
user/mav/ata/sys/amd64/linux32/linux.h
user/mav/ata/sys/amd64/pci/pci_cfgreg.c
user/mav/ata/sys/arm/conf/HL200
user/mav/ata/sys/arm/conf/KB920X
user/mav/ata/sys/arm/include/elf.h
user/mav/ata/sys/boot/forth/loader.conf
user/mav/ata/sys/boot/pc98/libpc98/Makefile
user/mav/ata/sys/boot/pc98/libpc98/bioscd.c
user/mav/ata/sys/boot/pc98/libpc98/biosdisk.c
user/mav/ata/sys/boot/pc98/libpc98/time.c
user/mav/ata/sys/boot/pc98/loader/Makefile
user/mav/ata/sys/boot/pc98/loader/main.c
user/mav/ata/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_dir.c
user/mav/ata/sys/compat/freebsd32/freebsd32_misc.c
user/mav/ata/sys/compat/ia32/ia32_sysvec.c
user/mav/ata/sys/compat/linprocfs/linprocfs.c
user/mav/ata/sys/compat/linux/linux_emul.h
user/mav/ata/sys/compat/linux/linux_file.c
user/mav/ata/sys/compat/linux/linux_futex.c
user/mav/ata/sys/compat/linux/linux_futex.h
user/mav/ata/sys/compat/ndis/subr_ntoskrnl.c
user/mav/ata/sys/compat/ndis/subr_usbd.c
user/mav/ata/sys/conf/NOTES
user/mav/ata/sys/conf/files
user/mav/ata/sys/conf/files.amd64
user/mav/ata/sys/conf/files.i386
user/mav/ata/sys/conf/files.pc98
user/mav/ata/sys/conf/options
user/mav/ata/sys/dev/acpica/acpi.c
user/mav/ata/sys/dev/acpica/acpi_cpu.c
user/mav/ata/sys/dev/acpica/acpi_ec.c
user/mav/ata/sys/dev/acpica/acpivar.h
user/mav/ata/sys/dev/age/if_age.c
user/mav/ata/sys/dev/age/if_agereg.h
user/mav/ata/sys/dev/agp/agp.c
user/mav/ata/sys/dev/agp/agp_amd64.c
user/mav/ata/sys/dev/agp/agp_i810.c
user/mav/ata/sys/dev/agp/agp_intel.c
user/mav/ata/sys/dev/agp/agp_via.c
user/mav/ata/sys/dev/ath/ah_osdep.c
user/mav/ata/sys/dev/ath/ath_hal/ah.h
user/mav/ata/sys/dev/ath/ath_hal/ar5210/ar5210_attach.c
user/mav/ata/sys/dev/ath/ath_hal/ar5211/ar5211_attach.c
user/mav/ata/sys/dev/ath/ath_hal/ar5212/ar5212_attach.c
user/mav/ata/sys/dev/ath/if_ath.c
user/mav/ata/sys/dev/ath/if_athvar.h
user/mav/ata/sys/dev/atkbdc/psm.c
user/mav/ata/sys/dev/bge/if_bge.c
user/mav/ata/sys/dev/bge/if_bgereg.h
user/mav/ata/sys/dev/cxgb/cxgb_main.c
user/mav/ata/sys/dev/cxgb/cxgb_offload.c
user/mav/ata/sys/dev/dc/dcphy.c
user/mav/ata/sys/dev/dc/pnphy.c
user/mav/ata/sys/dev/drm/ati_pcigart.c
user/mav/ata/sys/dev/drm/drmP.h
user/mav/ata/sys/dev/drm/drm_bufs.c
user/mav/ata/sys/dev/drm/drm_drv.c
user/mav/ata/sys/dev/drm/drm_irq.c
user/mav/ata/sys/dev/drm/drm_linux_list.h
user/mav/ata/sys/dev/drm/drm_lock.c
user/mav/ata/sys/dev/drm/drm_pciids.h
user/mav/ata/sys/dev/drm/drm_scatter.c
user/mav/ata/sys/dev/drm/drm_vm.c
user/mav/ata/sys/dev/drm/i915_dma.c
user/mav/ata/sys/dev/drm/i915_drv.c
user/mav/ata/sys/dev/drm/i915_drv.h
user/mav/ata/sys/dev/drm/i915_irq.c
user/mav/ata/sys/dev/drm/i915_reg.h
user/mav/ata/sys/dev/drm/i915_suspend.c
user/mav/ata/sys/dev/drm/mga_irq.c
user/mav/ata/sys/dev/drm/r600_cp.c
user/mav/ata/sys/dev/drm/radeon_cp.c
user/mav/ata/sys/dev/drm/radeon_irq.c
user/mav/ata/sys/dev/ed/if_ed.c
user/mav/ata/sys/dev/ed/if_ed_pccard.c
user/mav/ata/sys/dev/ed/if_ed_wd80x3.c
user/mav/ata/sys/dev/ed/if_edvar.h
user/mav/ata/sys/dev/fe/if_fe_pccard.c
user/mav/ata/sys/dev/firewire/firewire.c
user/mav/ata/sys/dev/hptiop/hptiop.h
user/mav/ata/sys/dev/ichwd/ichwd.c
user/mav/ata/sys/dev/if_ndis/if_ndis.c
user/mav/ata/sys/dev/if_ndis/if_ndis_usb.c
user/mav/ata/sys/dev/if_ndis/if_ndisvar.h
user/mav/ata/sys/dev/iwn/if_iwn.c
user/mav/ata/sys/dev/msk/if_msk.c
user/mav/ata/sys/dev/my/if_my.c
user/mav/ata/sys/dev/pccard/pccarddevs
user/mav/ata/sys/dev/pci/pci_pci.c
user/mav/ata/sys/dev/sound/pci/hda/hdac.c
user/mav/ata/sys/dev/syscons/teken/teken.c
user/mav/ata/sys/dev/syscons/teken/teken_subr.h
user/mav/ata/sys/dev/twa/tw_cl_init.c
user/mav/ata/sys/dev/twa/tw_osl.h
user/mav/ata/sys/dev/twa/tw_osl_freebsd.c
user/mav/ata/sys/dev/usb/controller/at91dci.c
user/mav/ata/sys/dev/usb/controller/at91dci_atmelarm.c
user/mav/ata/sys/dev/usb/controller/atmegadci.c
user/mav/ata/sys/dev/usb/controller/atmegadci_atmelarm.c
user/mav/ata/sys/dev/usb/controller/ehci.c
user/mav/ata/sys/dev/usb/controller/ehci.h
user/mav/ata/sys/dev/usb/controller/ehci_ixp4xx.c
user/mav/ata/sys/dev/usb/controller/ehci_mbus.c
user/mav/ata/sys/dev/usb/controller/ehci_pci.c
user/mav/ata/sys/dev/usb/controller/musb_otg.c
user/mav/ata/sys/dev/usb/controller/musb_otg_atmelarm.c
user/mav/ata/sys/dev/usb/controller/ohci.c
user/mav/ata/sys/dev/usb/controller/ohci.h
user/mav/ata/sys/dev/usb/controller/ohci_atmelarm.c
user/mav/ata/sys/dev/usb/controller/ohci_pci.c
user/mav/ata/sys/dev/usb/controller/uhci.c
user/mav/ata/sys/dev/usb/controller/uhci.h
user/mav/ata/sys/dev/usb/controller/uhci_pci.c
user/mav/ata/sys/dev/usb/controller/usb_controller.c
user/mav/ata/sys/dev/usb/controller/uss820dci.c
user/mav/ata/sys/dev/usb/controller/uss820dci_atmelarm.c
user/mav/ata/sys/dev/usb/input/uhid.c
user/mav/ata/sys/dev/usb/input/ums.c
user/mav/ata/sys/dev/usb/misc/udbp.c
user/mav/ata/sys/dev/usb/net/if_cdce.c
user/mav/ata/sys/dev/usb/serial/u3g.c
user/mav/ata/sys/dev/usb/serial/ubser.c
user/mav/ata/sys/dev/usb/serial/ucycom.c
user/mav/ata/sys/dev/usb/serial/ufoma.c
user/mav/ata/sys/dev/usb/serial/ugensa.c
user/mav/ata/sys/dev/usb/serial/ulpt.c
user/mav/ata/sys/dev/usb/serial/umct.c
user/mav/ata/sys/dev/usb/serial/umodem.c
user/mav/ata/sys/dev/usb/serial/uplcom.c
user/mav/ata/sys/dev/usb/serial/uvisor.c
user/mav/ata/sys/dev/usb/storage/umass.c
user/mav/ata/sys/dev/usb/storage/urio.c
user/mav/ata/sys/dev/usb/storage/ustorage_fs.c
user/mav/ata/sys/dev/usb/template/usb_template.c
user/mav/ata/sys/dev/usb/usb_bus.h
user/mav/ata/sys/dev/usb/usb_busdma.c
user/mav/ata/sys/dev/usb/usb_busdma.h
user/mav/ata/sys/dev/usb/usb_compat_linux.c
user/mav/ata/sys/dev/usb/usb_compat_linux.h
user/mav/ata/sys/dev/usb/usb_controller.h
user/mav/ata/sys/dev/usb/usb_core.h
user/mav/ata/sys/dev/usb/usb_debug.c
user/mav/ata/sys/dev/usb/usb_debug.h
user/mav/ata/sys/dev/usb/usb_defs.h
user/mav/ata/sys/dev/usb/usb_dev.c
user/mav/ata/sys/dev/usb/usb_dev.h
user/mav/ata/sys/dev/usb/usb_device.c
user/mav/ata/sys/dev/usb/usb_device.h
user/mav/ata/sys/dev/usb/usb_dynamic.c
user/mav/ata/sys/dev/usb/usb_generic.c
user/mav/ata/sys/dev/usb/usb_handle_request.c
user/mav/ata/sys/dev/usb/usb_hid.c
user/mav/ata/sys/dev/usb/usb_hid.h
user/mav/ata/sys/dev/usb/usb_hub.c
user/mav/ata/sys/dev/usb/usb_hub.h
user/mav/ata/sys/dev/usb/usb_lookup.c
user/mav/ata/sys/dev/usb/usb_lookup.h
user/mav/ata/sys/dev/usb/usb_mbuf.c
user/mav/ata/sys/dev/usb/usb_mbuf.h
user/mav/ata/sys/dev/usb/usb_msctest.c
user/mav/ata/sys/dev/usb/usb_process.c
user/mav/ata/sys/dev/usb/usb_process.h
user/mav/ata/sys/dev/usb/usb_request.c
user/mav/ata/sys/dev/usb/usb_request.h
user/mav/ata/sys/dev/usb/usb_sw_transfer.c
user/mav/ata/sys/dev/usb/usb_transfer.c
user/mav/ata/sys/dev/usb/usb_transfer.h
user/mav/ata/sys/dev/usb/usb_util.c
user/mav/ata/sys/dev/usb/usb_util.h
user/mav/ata/sys/dev/usb/usbdevs
user/mav/ata/sys/dev/wpi/if_wpi.c
user/mav/ata/sys/dev/wpi/if_wpireg.h
user/mav/ata/sys/dev/xen/netfront/ (props changed)
user/mav/ata/sys/dev/xen/xenpci/ (props changed)
user/mav/ata/sys/fs/nullfs/null_vnops.c
user/mav/ata/sys/geom/eli/g_eli.c
user/mav/ata/sys/geom/label/g_label.c
user/mav/ata/sys/geom/label/g_label.h
user/mav/ata/sys/geom/label/g_label_ufs.c
user/mav/ata/sys/geom/part/g_part.c
user/mav/ata/sys/geom/part/g_part_apm.c
user/mav/ata/sys/geom/part/g_part_bsd.c
user/mav/ata/sys/geom/part/g_part_ebr.c
user/mav/ata/sys/gnu/fs/xfs/FreeBSD/xfs_buf.c
user/mav/ata/sys/i386/conf/GENERIC
user/mav/ata/sys/i386/conf/NOTES
user/mav/ata/sys/i386/conf/XBOX
user/mav/ata/sys/i386/i386/i686_mem.c
user/mav/ata/sys/i386/i386/k6_mem.c
user/mav/ata/sys/i386/i386/machdep.c
user/mav/ata/sys/i386/i386/pmap.c
user/mav/ata/sys/i386/i386/vm_machdep.c
user/mav/ata/sys/i386/include/elf.h
user/mav/ata/sys/i386/include/pmap.h
user/mav/ata/sys/i386/isa/npx.c
user/mav/ata/sys/i386/pci/pci_cfgreg.c
user/mav/ata/sys/ia64/include/elf.h
user/mav/ata/sys/kern/imgact_elf.c
user/mav/ata/sys/kern/kern_environment.c
user/mav/ata/sys/kern/kern_exec.c
user/mav/ata/sys/kern/kern_jail.c
user/mav/ata/sys/kern/kern_lock.c
user/mav/ata/sys/kern/kern_mutex.c
user/mav/ata/sys/kern/kern_poll.c
user/mav/ata/sys/kern/kern_rwlock.c
user/mav/ata/sys/kern/kern_sx.c
user/mav/ata/sys/kern/kern_thread.c
user/mav/ata/sys/kern/kern_time.c
user/mav/ata/sys/kern/subr_bus.c
user/mav/ata/sys/kern/subr_lock.c
user/mav/ata/sys/kern/subr_param.c
user/mav/ata/sys/kern/subr_rtc.c
user/mav/ata/sys/kern/subr_smp.c
user/mav/ata/sys/kern/vfs_bio.c
user/mav/ata/sys/kern/vfs_cache.c
user/mav/ata/sys/kern/vfs_lookup.c
user/mav/ata/sys/kern/vfs_mount.c
user/mav/ata/sys/mips/include/elf.h
user/mav/ata/sys/modules/Makefile
user/mav/ata/sys/modules/cpufreq/Makefile
user/mav/ata/sys/modules/dtrace/Makefile
user/mav/ata/sys/modules/dtrace/dtraceall/dtraceall.c
user/mav/ata/sys/modules/ip_mroute_mod/Makefile
user/mav/ata/sys/modules/ipmi/Makefile
user/mav/ata/sys/modules/linprocfs/Makefile
user/mav/ata/sys/modules/netgraph/Makefile
user/mav/ata/sys/modules/opensolaris/Makefile
user/mav/ata/sys/modules/usb/Makefile
user/mav/ata/sys/net/if.c
user/mav/ata/sys/net/if_bridge.c
user/mav/ata/sys/net/if_loop.c
user/mav/ata/sys/net/if_tap.c
user/mav/ata/sys/net/if_var.h
user/mav/ata/sys/net80211/ieee80211.c
user/mav/ata/sys/net80211/ieee80211.h
user/mav/ata/sys/net80211/ieee80211_adhoc.c
user/mav/ata/sys/net80211/ieee80211_freebsd.h
user/mav/ata/sys/net80211/ieee80211_hostap.c
user/mav/ata/sys/net80211/ieee80211_input.c
user/mav/ata/sys/net80211/ieee80211_input.h
user/mav/ata/sys/net80211/ieee80211_ioctl.c
user/mav/ata/sys/net80211/ieee80211_node.c
user/mav/ata/sys/net80211/ieee80211_node.h
user/mav/ata/sys/net80211/ieee80211_output.c
user/mav/ata/sys/net80211/ieee80211_proto.c
user/mav/ata/sys/net80211/ieee80211_proto.h
user/mav/ata/sys/net80211/ieee80211_scan_sta.c
user/mav/ata/sys/net80211/ieee80211_sta.c
user/mav/ata/sys/net80211/ieee80211_tdma.c
user/mav/ata/sys/net80211/ieee80211_tdma.h
user/mav/ata/sys/net80211/ieee80211_var.h
user/mav/ata/sys/net80211/ieee80211_wds.c
user/mav/ata/sys/netinet/igmp.c
user/mav/ata/sys/netinet/igmp.h
user/mav/ata/sys/netinet/in.c
user/mav/ata/sys/netinet/in.h
user/mav/ata/sys/netinet/in_mcast.c
user/mav/ata/sys/netinet/in_pcb.c
user/mav/ata/sys/netinet/in_pcb.h
user/mav/ata/sys/netinet/ip_mroute.c
user/mav/ata/sys/netinet/ip_mroute.h
user/mav/ata/sys/netinet/sctp_structs.h
user/mav/ata/sys/netinet/tcp_input.c
user/mav/ata/sys/netinet/tcp_subr.c
user/mav/ata/sys/netinet/tcp_timer.c
user/mav/ata/sys/netinet/tcp_timewait.c
user/mav/ata/sys/netinet/tcp_usrreq.c
user/mav/ata/sys/netinet6/in6.c
user/mav/ata/sys/netinet6/in6_ifattach.c
user/mav/ata/sys/netinet6/in6_pcb.c
user/mav/ata/sys/netinet6/ip6_mroute.c
user/mav/ata/sys/netinet6/ip6_mroute.h
user/mav/ata/sys/netinet6/mld6.c
user/mav/ata/sys/netipsec/key.c
user/mav/ata/sys/netnatm/natm.c
user/mav/ata/sys/nfs4client/nfs4_vnops.c
user/mav/ata/sys/nfsclient/nfs.h
user/mav/ata/sys/nfsclient/nfs_bio.c
user/mav/ata/sys/nfsclient/nfs_krpc.c
user/mav/ata/sys/nfsclient/nfs_subs.c
user/mav/ata/sys/nfsclient/nfs_vnops.c
user/mav/ata/sys/nfsclient/nfsnode.h
user/mav/ata/sys/nfsserver/nfs_srvkrpc.c
user/mav/ata/sys/pc98/conf/GENERIC
user/mav/ata/sys/pc98/conf/NOTES
user/mav/ata/sys/pc98/pc98/machdep.c
user/mav/ata/sys/pci/intpm.c
user/mav/ata/sys/powerpc/conf/GENERIC
user/mav/ata/sys/powerpc/include/elf.h
user/mav/ata/sys/powerpc/powermac/ata_macio.c
user/mav/ata/sys/security/mac/mac_atalk.c
user/mav/ata/sys/security/mac/mac_audit.c
user/mav/ata/sys/security/mac/mac_cred.c
user/mav/ata/sys/security/mac/mac_framework.c
user/mav/ata/sys/security/mac/mac_inet.c
user/mav/ata/sys/security/mac/mac_inet6.c
user/mav/ata/sys/security/mac/mac_internal.h
user/mav/ata/sys/security/mac/mac_net.c
user/mav/ata/sys/security/mac/mac_pipe.c
user/mav/ata/sys/security/mac/mac_posix_sem.c
user/mav/ata/sys/security/mac/mac_posix_shm.c
user/mav/ata/sys/security/mac/mac_priv.c
user/mav/ata/sys/security/mac/mac_process.c
user/mav/ata/sys/security/mac/mac_socket.c
user/mav/ata/sys/security/mac/mac_syscalls.c
user/mav/ata/sys/security/mac/mac_system.c
user/mav/ata/sys/security/mac/mac_sysv_msg.c
user/mav/ata/sys/security/mac/mac_sysv_sem.c
user/mav/ata/sys/security/mac/mac_sysv_shm.c
user/mav/ata/sys/security/mac/mac_vfs.c
user/mav/ata/sys/security/mac_portacl/mac_portacl.c
user/mav/ata/sys/sparc64/central/central.c
user/mav/ata/sys/sparc64/conf/GENERIC
user/mav/ata/sys/sparc64/ebus/ebus.c
user/mav/ata/sys/sparc64/fhc/fhc.c
user/mav/ata/sys/sparc64/include/elf.h
user/mav/ata/sys/sparc64/include/trap.h
user/mav/ata/sys/sparc64/isa/isa.c
user/mav/ata/sys/sparc64/isa/ofw_isa.c
user/mav/ata/sys/sparc64/pci/apb.c
user/mav/ata/sys/sparc64/pci/ofw_pcib.c
user/mav/ata/sys/sparc64/pci/ofw_pcibus.c
user/mav/ata/sys/sparc64/pci/psycho.c
user/mav/ata/sys/sparc64/pci/psychovar.h
user/mav/ata/sys/sparc64/pci/schizo.c
user/mav/ata/sys/sparc64/sbus/dma_sbus.c
user/mav/ata/sys/sparc64/sbus/sbus.c
user/mav/ata/sys/sparc64/sbus/sbusvar.h
user/mav/ata/sys/sparc64/sparc64/db_disasm.c
user/mav/ata/sys/sparc64/sparc64/eeprom.c
user/mav/ata/sys/sparc64/sparc64/jbusppm.c
user/mav/ata/sys/sparc64/sparc64/mp_machdep.c
user/mav/ata/sys/sparc64/sparc64/nexus.c
user/mav/ata/sys/sparc64/sparc64/rtc.c
user/mav/ata/sys/sparc64/sparc64/sc_machdep.c
user/mav/ata/sys/sparc64/sparc64/schppm.c
user/mav/ata/sys/sparc64/sparc64/trap.c
user/mav/ata/sys/sparc64/sparc64/upa.c
user/mav/ata/sys/sun4v/conf/GENERIC
user/mav/ata/sys/sun4v/include/elf.h
user/mav/ata/sys/sun4v/include/trap.h
user/mav/ata/sys/sun4v/sun4v/trap.c
user/mav/ata/sys/sys/_pthreadtypes.h
user/mav/ata/sys/sys/aio.h
user/mav/ata/sys/sys/buf.h
user/mav/ata/sys/sys/dtrace_bsd.h
user/mav/ata/sys/sys/elf_common.h
user/mav/ata/sys/sys/imgact.h
user/mav/ata/sys/sys/jail.h
user/mav/ata/sys/sys/lock_profile.h
user/mav/ata/sys/sys/memrange.h
user/mav/ata/sys/sys/param.h
user/mav/ata/sys/sys/proc.h
user/mav/ata/sys/sys/sem.h
user/mav/ata/sys/sys/shm.h
user/mav/ata/sys/sys/smp.h
user/mav/ata/sys/sys/stat.h
user/mav/ata/sys/sys/syslog.h
user/mav/ata/sys/sys/termios.h
user/mav/ata/sys/sys/time.h
user/mav/ata/sys/sys/uio.h
user/mav/ata/sys/sys/vnode.h
user/mav/ata/sys/ufs/ffs/ffs_vfsops.c
user/mav/ata/sys/ufs/ffs/ffs_vnops.c
Copied: user/mav/ata/sys/amd64/acpica/Makefile (from r190503, head/sys/amd64/acpica/Makefile)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/mav/ata/sys/amd64/acpica/Makefile Sat Mar 28 11:29:07 2009 (r190504, copy of r190503, head/sys/amd64/acpica/Makefile)
@@ -0,0 +1,33 @@
+# $FreeBSD$
+
+# Correct path for kernel builds
+# Don't rely on the kernel's .depend file
+.ifdef MAKESRCPATH
+.PATH: ${MAKESRCPATH}
+DEPENDFILE=
+.else
+MAKESRCPATH= ${.CURDIR}
+CLEANFILES= acpi_wakecode.h acpi_wakedata.h acpi_wakecode.bin acpi_wakecode.o
+.endif
+.if ${CC} == "icc"
+CFLAGS+= -restrict
+NOSTDINC= -X
+.else
+NOSTDINC= -nostdinc
+.endif
+CFLAGS+= ${NOSTDINC} -include opt_global.h -I. -I${MAKESRCPATH}/../..
+
+all: acpi_wakecode.h acpi_wakedata.h
+
+acpi_wakecode.o: acpi_wakecode.S assym.s
+
+acpi_wakecode.bin: acpi_wakecode.o
+ objcopy -S -O binary acpi_wakecode.o acpi_wakecode.bin
+
+acpi_wakecode.h: acpi_wakecode.bin
+ sh ${MAKESRCPATH}/genwakecode.sh > acpi_wakecode.h
+
+acpi_wakedata.h: acpi_wakecode.bin
+ sh ${MAKESRCPATH}/genwakedata.sh > acpi_wakedata.h
+
+.include <bsd.prog.mk>
Modified: user/mav/ata/sys/amd64/acpica/acpi_machdep.c
==============================================================================
--- user/mav/ata/sys/amd64/acpica/acpi_machdep.c Sat Mar 28 11:01:44 2009 (r190503)
+++ user/mav/ata/sys/amd64/acpica/acpi_machdep.c Sat Mar 28 11:29:07 2009 (r190504)
@@ -31,25 +31,51 @@ __FBSDID("$FreeBSD$");
#include <sys/bus.h>
#include <sys/kernel.h>
#include <sys/module.h>
+#include <sys/sysctl.h>
#include <contrib/dev/acpica/acpi.h>
#include <dev/acpica/acpivar.h>
#include <machine/nexusvar.h>
+SYSCTL_DECL(_debug_acpi);
+
+int acpi_resume_beep;
+TUNABLE_INT("debug.acpi.resume_beep", &acpi_resume_beep);
+SYSCTL_INT(_debug_acpi, OID_AUTO, resume_beep, CTLFLAG_RW, &acpi_resume_beep,
+ 0, "Beep the PC speaker when resuming");
+
+int acpi_reset_video;
+TUNABLE_INT("hw.acpi.reset_video", &acpi_reset_video);
+
static int intr_model = ACPI_INTR_PIC;
+static struct apm_clone_data acpi_clone;
int
acpi_machdep_init(device_t dev)
{
- struct acpi_softc *sc;
+ struct acpi_softc *sc;
sc = devclass_get_softc(devclass_find("acpi"), 0);
+
+ /* Create a fake clone for /dev/acpi. */
+ STAILQ_INIT(&sc->apm_cdevs);
+ acpi_clone.cdev = sc->acpi_dev_t;
+ acpi_clone.acpi_sc = sc;
+ ACPI_LOCK(acpi);
+ STAILQ_INSERT_TAIL(&sc->apm_cdevs, &acpi_clone, entries);
+ ACPI_UNLOCK(acpi);
+ sc->acpi_clone = &acpi_clone;
acpi_install_wakeup_handler(sc);
if (intr_model != ACPI_INTR_PIC)
acpi_SetIntrModel(intr_model);
+ SYSCTL_ADD_UINT(&sc->acpi_sysctl_ctx,
+ SYSCTL_CHILDREN(sc->acpi_sysctl_tree), OID_AUTO,
+ "reset_video", CTLFLAG_RW, &acpi_reset_video, 0,
+ "Call the VESA reset BIOS vector on the resume path");
+
return (0);
}
Copied: user/mav/ata/sys/amd64/acpica/acpi_switch.S (from r190503, head/sys/amd64/acpica/acpi_switch.S)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/mav/ata/sys/amd64/acpica/acpi_switch.S Sat Mar 28 11:29:07 2009 (r190504, copy of r190503, head/sys/amd64/acpica/acpi_switch.S)
@@ -0,0 +1,177 @@
+/*-
+ * Copyright (c) 2001 Takanori Watanabe <takawata at jp.freebsd.org>
+ * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki at jp.freebsd.org>
+ * Copyright (c) 2008-2009 Jung-uk Kim <jkim at FreeBSD.org>
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ *
+ * $FreeBSD$
+ */
+
+#include <machine/asmacros.h>
+#include <machine/specialreg.h>
+
+#include "acpi_wakedata.h"
+#include "assym.s"
+
+#define WAKEUP_DECL(member) \
+ .set WAKEUP_ ## member, wakeup_ ## member - wakeup_ctx
+
+ WAKEUP_DECL(xpcb)
+ WAKEUP_DECL(gdt)
+ WAKEUP_DECL(efer)
+ WAKEUP_DECL(pat)
+ WAKEUP_DECL(star)
+ WAKEUP_DECL(lstar)
+ WAKEUP_DECL(cstar)
+ WAKEUP_DECL(sfmask)
+ WAKEUP_DECL(cpu)
+
+#define WAKEUP_CTX(member) WAKEUP_ ## member (%rdi)
+#define WAKEUP_PCB(member) PCB_ ## member(%r11)
+#define WAKEUP_XPCB(member) XPCB_ ## member(%r11)
+
+ENTRY(acpi_restorecpu)
+ /* Switch to KPML4phys. */
+ movq %rsi, %rax
+ movq %rax, %cr3
+
+ /* Restore GDT. */
+ lgdt WAKEUP_CTX(gdt)
+ jmp 1f
+1:
+
+ /* Fetch PCB. */
+ movq WAKEUP_CTX(xpcb), %r11
+
+ /* Restore segment registers. */
+ mov WAKEUP_PCB(DS), %ds
+ mov WAKEUP_PCB(ES), %es
+ mov WAKEUP_XPCB(SS), %ss
+ mov WAKEUP_PCB(FS), %fs
+ mov WAKEUP_PCB(GS), %gs
+
+ movl $MSR_FSBASE, %ecx
+ movl WAKEUP_PCB(FSBASE), %eax
+ movl 4 + WAKEUP_PCB(FSBASE), %edx
+ wrmsr
+ movl $MSR_GSBASE, %ecx
+ movl WAKEUP_PCB(GSBASE), %eax
+ movl 4 + WAKEUP_PCB(GSBASE), %edx
+ wrmsr
+ movl $MSR_KGSBASE, %ecx
+ movl WAKEUP_XPCB(KGSBASE), %eax
+ movl 4 + WAKEUP_XPCB(KGSBASE), %edx
+ wrmsr
+
+ /* Restore EFER. */
+ movl $MSR_EFER, %ecx
+ movl WAKEUP_CTX(efer), %eax
+ wrmsr
+
+ /* Restore PAT. */
+ movl $MSR_PAT, %ecx
+ movl WAKEUP_CTX(pat), %eax
+ movl 4 + WAKEUP_CTX(pat), %edx
+ wrmsr
+
+ /* Restore fast syscall stuff. */
+ movl $MSR_STAR, %ecx
+ movl WAKEUP_CTX(star), %eax
+ movl 4 + WAKEUP_CTX(star), %edx
+ wrmsr
+ movl $MSR_LSTAR, %ecx
+ movl WAKEUP_CTX(lstar), %eax
+ movl 4 + WAKEUP_CTX(lstar), %edx
+ wrmsr
+ movl $MSR_CSTAR, %ecx
+ movl WAKEUP_CTX(cstar), %eax
+ movl 4 + WAKEUP_CTX(cstar), %edx
+ wrmsr
+ movl $MSR_SF_MASK, %ecx
+ movl WAKEUP_CTX(sfmask), %eax
+ wrmsr
+
+ /* Restore CR0, CR2 and CR4. */
+ movq WAKEUP_XPCB(CR0), %rax
+ movq %rax, %cr0
+ movq WAKEUP_XPCB(CR2), %rax
+ movq %rax, %cr2
+ movq WAKEUP_XPCB(CR4), %rax
+ movq %rax, %cr4
+
+ /* Restore descriptor tables. */
+ lidt WAKEUP_XPCB(IDT)
+ lldt WAKEUP_XPCB(LDT)
+ movw WAKEUP_XPCB(TR), %ax
+ ltr %ax
+
+ /* Restore other callee saved registers. */
+ movq WAKEUP_PCB(R15), %r15
+ movq WAKEUP_PCB(R14), %r14
+ movq WAKEUP_PCB(R13), %r13
+ movq WAKEUP_PCB(R12), %r12
+ movq WAKEUP_PCB(RBP), %rbp
+ movq WAKEUP_PCB(RSP), %rsp
+ movq WAKEUP_PCB(RBX), %rbx
+
+ /* Restore debug registers. */
+ movq WAKEUP_PCB(DR0), %rax
+ movq %rax, %dr0
+ movq WAKEUP_PCB(DR1), %rax
+ movq %rax, %dr1
+ movq WAKEUP_PCB(DR2), %rax
+ movq %rax, %dr2
+ movq WAKEUP_PCB(DR3), %rax
+ movq %rax, %dr3
+ movq WAKEUP_PCB(DR6), %rax
+ movq %rax, %dr6
+ movq WAKEUP_PCB(DR7), %rax
+ movq %rax, %dr7
+
+ /* Restore return address. */
+ movq WAKEUP_PCB(RIP), %rax
+ movq %rax, (%rsp)
+
+ /* Indicate the CPU is resumed. */
+ xorl %eax, %eax
+ movl %eax, WAKEUP_CTX(cpu)
+
+ ret
+END(acpi_restorecpu)
+
+ENTRY(acpi_savecpu)
+ /* Fetch XPCB and save CPU context. */
+ movq %rdi, %r10
+ call savectx2
+ movq %r10, %r11
+
+ /* Patch caller's return address and stack pointer. */
+ movq (%rsp), %rax
+ movq %rax, WAKEUP_PCB(RIP)
+ movq %rsp, %rax
+ movq %rax, WAKEUP_PCB(RSP)
+
+ movl $1, %eax
+ ret
+END(acpi_savecpu)
Copied: user/mav/ata/sys/amd64/acpica/acpi_wakecode.S (from r190503, head/sys/amd64/acpica/acpi_wakecode.S)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/mav/ata/sys/amd64/acpica/acpi_wakecode.S Sat Mar 28 11:29:07 2009 (r190504, copy of r190503, head/sys/amd64/acpica/acpi_wakecode.S)
@@ -0,0 +1,278 @@
+/*-
+ * Copyright (c) 2001 Takanori Watanabe <takawata at jp.freebsd.org>
+ * Copyright (c) 2001 Mitsuru IWASAKI <iwasaki at jp.freebsd.org>
+ * Copyright (c) 2003 Peter Wemm
+ * Copyright (c) 2008-2009 Jung-uk Kim <jkim at FreeBSD.org>
+ * All rights reserved.
+ *
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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.
+ *
+ * $FreeBSD$
+ */
+
+#define LOCORE
+
+#include <machine/asmacros.h>
+#include <machine/specialreg.h>
+
+#include "assym.s"
+
+/*
+ * Resume entry point for real mode.
+ *
+ * If XFirmwareWakingVector is zero and FirmwareWakingVector is non-zero
+ * in FACS, the BIOS enters here in real mode after POST with CS set to
+ * (FirmwareWakingVector >> 4) and IP set to (FirmwareWakingVector & 0xf).
+ * Depending on the previous sleep state, we may need to initialize more
+ * of the system (i.e., S3 suspend-to-RAM vs. S4 suspend-to-disk).
+ *
+ * Note: If XFirmwareWakingVector is non-zero, it should disable address
+ * translation/paging and interrupts, load all segment registers with
+ * a flat 4 GB address space, and set EFLAGS.IF to zero. Currently
+ * this mode is not supported by this code.
+ */
+
+ .data /* So we can modify it */
+
+ ALIGN_TEXT
+wakeup_start:
+ .code16
+ /*
+ * Set up segment registers for real mode, a small stack for
+ * any calls we make, and clear any flags.
+ */
+ cli /* make sure no interrupts */
+ cld
+ mov %cs, %ax /* copy %cs to %ds. Remember these */
+ mov %ax, %ds /* are offsets rather than selectors */
+ mov %ax, %ss
+ movw $PAGE_SIZE - 8, %sp
+ xorw %ax, %ax
+ pushw %ax
+ popfw
+
+ /* To debug resume hangs, beep the speaker if the user requested. */
+ testb $~0, resume_beep - wakeup_start
+ jz 1f
+ movb $0, resume_beep - wakeup_start
+ movb $0xc0, %al
+ outb %al, $0x42
+ movb $0x04, %al
+ outb %al, $0x42
+ inb $0x61, %al
+ orb $0x3, %al
+ outb %al, $0x61
+1:
+
+ /* Re-initialize video BIOS if the reset_video tunable is set. */
+ testb $~0, reset_video - wakeup_start
+ jz 1f
+ movb $0, reset_video - wakeup_start
+ lcall $0xc000, $3
+
+ /* Re-start in case the previous BIOS call clobbers them. */
+ jmp wakeup_start
+1:
+
+ /*
+ * Find relocation base and patch the gdt descript and ljmp targets
+ */
+ xorl %ebx, %ebx
+ mov %cs, %bx
+ sall $4, %ebx /* %ebx is now our relocation base */
+
+ /*
+ * Load the descriptor table pointer. We'll need it when running
+ * in 16-bit protected mode.
+ */
+ lgdtl bootgdtdesc - wakeup_start
+
+ /* Enable protected mode */
+ movl $CR0_PE, %eax
+ mov %eax, %cr0
+
+ /*
+ * Now execute a far jump to turn on protected mode. This
+ * causes the segment registers to turn into selectors and causes
+ * %cs to be loaded from the gdt.
+ *
+ * The following instruction is:
+ * ljmpl $bootcode32 - bootgdt, $wakeup_32 - wakeup_start
+ * but gas cannot assemble that. And besides, we patch the targets
+ * in early startup and its a little clearer what we are patching.
+ */
+wakeup_sw32:
+ .byte 0x66 /* size override to 32 bits */
+ .byte 0xea /* opcode for far jump */
+ .long wakeup_32 - wakeup_start /* offset in segment */
+ .word bootcode32 - bootgdt /* index in gdt for 32 bit code */
+
+ /*
+ * At this point, we are running in 32 bit legacy protected mode.
+ */
+ .code32
+wakeup_32:
+
+ mov $bootdata32 - bootgdt, %eax
+ mov %ax, %ds
+
+ /* Turn on the PAE and PSE bits for when paging is enabled */
+ mov %cr4, %eax
+ orl $(CR4_PAE | CR4_PSE), %eax
+ mov %eax, %cr4
+
+ /*
+ * Enable EFER.LME so that we get long mode when all the prereqs are
+ * in place. In this case, it turns on when CR0_PG is finally enabled.
+ * Pick up a few other EFER bits that we'll use need we're here.
+ */
+ movl $MSR_EFER, %ecx
+ rdmsr
+ orl $EFER_LME | EFER_SCE, %eax
+ wrmsr
+
+ /*
+ * Point to the embedded page tables for startup. Note that this
+ * only gets accessed after we're actually in 64 bit mode, however
+ * we can only set the bottom 32 bits of %cr3 in this state. This
+ * means we are required to use a temporary page table that is below
+ * the 4GB limit. %ebx is still our relocation base. We could just
+ * subtract 3 * PAGE_SIZE, but that would be too easy.
+ */
+ leal wakeup_pagetables - wakeup_start(%ebx), %eax
+ movl (%eax), %eax
+ mov %eax, %cr3
+
+ /*
+ * Finally, switch to long bit mode by enabling paging. We have
+ * to be very careful here because all the segmentation disappears
+ * out from underneath us. The spec says we can depend on the
+ * subsequent pipelined branch to execute, but *only if* everthing
+ * is still identity mapped. If any mappings change, the pipeline
+ * will flush.
+ */
+ mov %cr0, %eax
+ orl $CR0_PG, %eax
+ mov %eax, %cr0
+
+ /*
+ * At this point paging is enabled, and we are in "compatability" mode.
+ * We do another far jump to reload %cs with the 64 bit selector.
+ * %cr3 points to a 4-level page table page.
+ * We cannot yet jump all the way to the kernel because we can only
+ * specify a 32 bit linear address. So, yet another trampoline.
+ *
+ * The following instruction is:
+ * ljmp $bootcode64 - bootgdt, $wakeup_64 - wakeup_start
+ * but gas cannot assemble that. And besides, we patch the targets
+ * in early startup and its a little clearer what we are patching.
+ */
+wakeup_sw64:
+ .byte 0xea /* opcode for far jump */
+ .long wakeup_64 - wakeup_start /* offset in segment */
+ .word bootcode64 - bootgdt /* index in gdt for 64 bit code */
+
+ /*
+ * Yeehar! We're running in 64-bit mode! We can mostly ignore our
+ * segment registers, and get on with it.
+ * Note that we are running at the correct virtual address, but with
+ * a 1:1 1GB mirrored mapping over entire address space. We had better
+ * switch to a real %cr3 promptly so that we can get to the direct map
+ * space. Remember that jmp is relative and that we've been relocated,
+ * so use an indirect jump.
+ */
+ ALIGN_TEXT
+ .code64
+wakeup_64:
+ mov $bootdata64 - bootgdt, %eax
+ mov %ax, %ds
+
+ /* Restore arguments and return. */
+ movq wakeup_ctx - wakeup_start(%rbx), %rdi
+ movq wakeup_kpml4 - wakeup_start(%rbx), %rsi
+ movq wakeup_retaddr - wakeup_start(%rbx), %rax
+ jmp *%rax
+
+ .data
+
+resume_beep:
+ .byte 0
+reset_video:
+ .byte 0
+
+ ALIGN_DATA
+bootgdt:
+ .long 0x00000000
+ .long 0x00000000
+
+bootcode64:
+ .long 0x0000ffff
+ .long 0x00af9b00
+
+bootdata64:
+ .long 0x0000ffff
+ .long 0x00af9300
+
+bootcode32:
+ .long 0x0000ffff
+ .long 0x00cf9b00
+
+bootdata32:
+ .long 0x0000ffff
+ .long 0x00cf9300
+bootgdtend:
+
+wakeup_pagetables:
+ .long 0
+
+bootgdtdesc:
+ .word bootgdtend - bootgdt /* Length */
+ .long bootgdt - wakeup_start /* Offset plus %ds << 4 */
+
+ ALIGN_DATA
+wakeup_retaddr:
+ .quad 0
+wakeup_kpml4:
+ .quad 0
+
+wakeup_ctx:
+ .quad 0
+wakeup_xpcb:
+ .quad 0
+wakeup_gdt:
+ .word 0
+ .quad 0
+wakeup_efer:
+ .quad 0
+wakeup_pat:
+ .quad 0
+wakeup_star:
+ .quad 0
+wakeup_lstar:
+ .quad 0
+wakeup_cstar:
+ .quad 0
+wakeup_sfmask:
+ .quad 0
+wakeup_cpu:
+ .long 0
+dummy:
Modified: user/mav/ata/sys/amd64/acpica/acpi_wakeup.c
==============================================================================
--- user/mav/ata/sys/amd64/acpica/acpi_wakeup.c Sat Mar 28 11:01:44 2009 (r190503)
+++ user/mav/ata/sys/amd64/acpica/acpi_wakeup.c Sat Mar 28 11:29:07 2009 (r190504)
@@ -1,6 +1,8 @@
/*-
* Copyright (c) 2001 Takanori Watanabe <takawata at jp.freebsd.org>
* Copyright (c) 2001 Mitsuru IWASAKI <iwasaki at jp.freebsd.org>
+ * Copyright (c) 2003 Peter Wemm
+ * Copyright (c) 2008-2009 Jung-uk Kim <jkim at FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -29,18 +31,408 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/bus.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/memrange.h>
+#include <sys/smp.h>
+#include <sys/types.h>
+
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
+#include <machine/intr_machdep.h>
+#include <machine/pcb.h>
+#include <machine/pmap.h>
+#include <machine/specialreg.h>
+#include <machine/vmparam.h>
+
+#ifdef SMP
+#include <machine/apicreg.h>
+#include <machine/smp.h>
+#endif
#include <contrib/dev/acpica/acpi.h>
#include <dev/acpica/acpivar.h>
+#include "acpi_wakecode.h"
+#include "acpi_wakedata.h"
+
+/* Make sure the code is less than a page and leave room for the stack. */
+CTASSERT(sizeof(wakecode) < PAGE_SIZE - 1024);
+
+#ifndef _SYS_CDEFS_H_
+#error this file needs sys/cdefs.h as a prerequisite
+#endif
+
+extern int acpi_resume_beep;
+extern int acpi_reset_video;
+
+#ifdef SMP
+extern struct xpcb *stopxpcbs;
+#else
+static struct xpcb *stopxpcbs;
+#endif
+
+int acpi_restorecpu(struct xpcb *, vm_offset_t);
+int acpi_savecpu(struct xpcb *);
+
+static void acpi_reset_tss(int cpu);
+static void acpi_alloc_wakeup_handler(void);
+static void acpi_stop_beep(void *);
+
+#ifdef SMP
+static int acpi_wakeup_ap(struct acpi_softc *, int);
+static void acpi_wakeup_cpus(struct acpi_softc *, cpumask_t);
+#endif
+
+#define WAKECODE_VADDR(sc) ((sc)->acpi_wakeaddr + (3 * PAGE_SIZE))
+#define WAKECODE_PADDR(sc) ((sc)->acpi_wakephys + (3 * PAGE_SIZE))
+#define WAKECODE_FIXUP(offset, type, val) do { \
+ type *addr; \
+ addr = (type *)(WAKECODE_VADDR(sc) + offset); \
+ *addr = val; \
+} while (0)
+
+/* Turn off bits 1&2 of the PIT, stopping the beep. */
+static void
+acpi_stop_beep(void *arg)
+{
+ outb(0x61, inb(0x61) & ~0x3);
+}
+
+#ifdef SMP
+static int
+acpi_wakeup_ap(struct acpi_softc *sc, int cpu)
+{
+ int vector = (WAKECODE_PADDR(sc) >> 12) & 0xff;
+ int apic_id = cpu_apic_ids[cpu];
+ int ms;
+
+ WAKECODE_FIXUP(wakeup_xpcb, struct xpcb *, &stopxpcbs[cpu]);
+ WAKECODE_FIXUP(wakeup_gdt, uint16_t, stopxpcbs[cpu].xpcb_gdt.rd_limit);
+ WAKECODE_FIXUP(wakeup_gdt + 2, uint64_t,
+ stopxpcbs[cpu].xpcb_gdt.rd_base);
+ WAKECODE_FIXUP(wakeup_cpu, int, cpu);
+
+ acpi_reset_tss(cpu);
+
+ /* do an INIT IPI: assert RESET */
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_ASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, apic_id);
+
+ /* wait for pending status end */
+ lapic_ipi_wait(-1);
+
+ /* do an INIT IPI: deassert RESET */
+ lapic_ipi_raw(APIC_DEST_ALLESELF | APIC_TRIGMOD_LEVEL |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_INIT, 0);
+
+ /* wait for pending status end */
+ DELAY(10000); /* wait ~10mS */
+ lapic_ipi_wait(-1);
+
+ /*
+ * next we do a STARTUP IPI: the previous INIT IPI might still be
+ * latched, (P5 bug) this 1st STARTUP would then terminate
+ * immediately, and the previously started INIT IPI would continue. OR
+ * the previous INIT IPI has already run. and this STARTUP IPI will
+ * run. OR the previous INIT IPI was ignored. and this STARTUP IPI
+ * will run.
+ */
+
+ /* do a STARTUP IPI */
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP |
+ vector, apic_id);
+ lapic_ipi_wait(-1);
+ DELAY(200); /* wait ~200uS */
+
+ /*
+ * finally we do a 2nd STARTUP IPI: this 2nd STARTUP IPI should run IF
+ * the previous STARTUP IPI was cancelled by a latched INIT IPI. OR
+ * this STARTUP IPI will be ignored, as only ONE STARTUP IPI is
+ * recognized after hardware RESET or INIT IPI.
+ */
+
+ lapic_ipi_raw(APIC_DEST_DESTFLD | APIC_TRIGMOD_EDGE |
+ APIC_LEVEL_DEASSERT | APIC_DESTMODE_PHY | APIC_DELMODE_STARTUP |
+ vector, apic_id);
+ lapic_ipi_wait(-1);
+ DELAY(200); /* wait ~200uS */
+
+ /* Wait up to 5 seconds for it to start. */
+ for (ms = 0; ms < 5000; ms++) {
+ if (*(int *)(WAKECODE_VADDR(sc) + wakeup_cpu) == 0)
+ return (1); /* return SUCCESS */
+ DELAY(1000);
+ }
+ return (0); /* return FAILURE */
+}
+
+#define WARMBOOT_TARGET 0
+#define WARMBOOT_OFF (KERNBASE + 0x0467)
+#define WARMBOOT_SEG (KERNBASE + 0x0469)
+
+#define CMOS_REG (0x70)
+#define CMOS_DATA (0x71)
+#define BIOS_RESET (0x0f)
+#define BIOS_WARM (0x0a)
+
+static void
+acpi_wakeup_cpus(struct acpi_softc *sc, cpumask_t wakeup_cpus)
+{
+ uint32_t mpbioswarmvec;
+ cpumask_t map;
+ int cpu;
+ u_char mpbiosreason;
+
+ /* save the current value of the warm-start vector */
+ mpbioswarmvec = *((uint32_t *)WARMBOOT_OFF);
+ outb(CMOS_REG, BIOS_RESET);
+ mpbiosreason = inb(CMOS_DATA);
+
+ /* setup a vector to our boot code */
+ *((volatile u_short *)WARMBOOT_OFF) = WARMBOOT_TARGET;
+ *((volatile u_short *)WARMBOOT_SEG) = WAKECODE_PADDR(sc) >> 4;
+ outb(CMOS_REG, BIOS_RESET);
+ outb(CMOS_DATA, BIOS_WARM); /* 'warm-start' */
+
+ /* Wake up each AP. */
+ for (cpu = 1; cpu < mp_ncpus; cpu++) {
+ map = 1ul << cpu;
+ if ((wakeup_cpus & map) != map)
+ continue;
+ if (acpi_wakeup_ap(sc, cpu) == 0) {
+ /* restore the warmstart vector */
+ *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec;
+ panic("acpi_wakeup: failed to resume AP #%d (PHY #%d)",
+ cpu, cpu_apic_ids[cpu]);
+ }
+ }
+
+ /* restore the warmstart vector */
+ *(uint32_t *)WARMBOOT_OFF = mpbioswarmvec;
+
+ outb(CMOS_REG, BIOS_RESET);
+ outb(CMOS_DATA, mpbiosreason);
+}
+#endif
+
+static void
+acpi_reset_tss(int cpu)
+{
+ uint32_t *tss;
+
+ /*
+ * We have to clear "task busy" bit in TSS to restore
+ * task register later. Otherwise, ltr causes GPF.
+ */
+ tss = (uint32_t *)&gdt[NGDT * cpu + GPROC0_SEL] + 1;
+ *tss &= ~((SDT_SYSBSY ^ SDT_SYSTSS) << 8);
+}
+
int
acpi_sleep_machdep(struct acpi_softc *sc, int state)
{
- return (0);
+ struct savefpu *stopfpu;
+#ifdef SMP
+ cpumask_t wakeup_cpus;
+#endif
+ register_t cr3, rf;
+ ACPI_STATUS status;
+ int ret;
+
+ ret = -1;
+
+ if (sc->acpi_wakeaddr == 0ul)
+ return (ret);
+
+#ifdef SMP
+ wakeup_cpus = PCPU_GET(other_cpus);
+#endif
+
+ AcpiSetFirmwareWakingVector(WAKECODE_PADDR(sc));
+
+ rf = intr_disable();
+ intr_suspend();
+
+ /*
+ * Temporarily switch to the kernel pmap because it provides
+ * an identity mapping (setup at boot) for the low physical
+ * memory region containing the wakeup code.
+ */
+ cr3 = rcr3();
+ load_cr3(KPML4phys);
+
+ stopfpu = &stopxpcbs[0].xpcb_pcb.pcb_save;
+ if (acpi_savecpu(&stopxpcbs[0])) {
+ fpugetregs(curthread, stopfpu);
+
+#ifdef SMP
+ if (wakeup_cpus != 0 && suspend_cpus(wakeup_cpus) == 0) {
+ device_printf(sc->acpi_dev,
+ "Failed to suspend APs: CPU mask = 0x%jx\n",
+ (uintmax_t)(wakeup_cpus & ~stopped_cpus));
+ goto out;
+ }
+#endif
+
+ WAKECODE_FIXUP(resume_beep, uint8_t, (acpi_resume_beep != 0));
+ WAKECODE_FIXUP(reset_video, uint8_t, (acpi_reset_video != 0));
+
+ WAKECODE_FIXUP(wakeup_xpcb, struct xpcb *, &stopxpcbs[0]);
+ WAKECODE_FIXUP(wakeup_gdt, uint16_t,
+ stopxpcbs[0].xpcb_gdt.rd_limit);
+ WAKECODE_FIXUP(wakeup_gdt + 2, uint64_t,
+ stopxpcbs[0].xpcb_gdt.rd_base);
+ WAKECODE_FIXUP(wakeup_cpu, int, 0);
+
+ acpi_reset_tss(0);
+
+ /* Call ACPICA to enter the desired sleep state */
+ if (state == ACPI_STATE_S4 && sc->acpi_s4bios)
+ status = AcpiEnterSleepStateS4bios();
+ else
+ status = AcpiEnterSleepState(state);
+
+ if (status != AE_OK) {
+ device_printf(sc->acpi_dev,
+ "AcpiEnterSleepState failed - %s\n",
+ AcpiFormatException(status));
+ goto out;
+ }
+
+ for (;;)
+ ia32_pause();
+ } else {
+ fpusetregs(curthread, stopfpu);
+#ifdef SMP
+ if (wakeup_cpus != 0)
+ acpi_wakeup_cpus(sc, wakeup_cpus);
+#endif
+ acpi_resync_clock(sc);
+ ret = 0;
+ }
+
+out:
+#ifdef SMP
+ if (wakeup_cpus != 0)
+ restart_cpus(wakeup_cpus);
+#endif
+
+ load_cr3(cr3);
+ intr_resume();
+ intr_restore(rf);
+
+ AcpiSetFirmwareWakingVector(0);
+
+ if (ret == 0 && mem_range_softc.mr_op != NULL &&
+ mem_range_softc.mr_op->reinit != NULL)
+ mem_range_softc.mr_op->reinit(&mem_range_softc);
+
+ /* If we beeped, turn it off after a delay. */
+ if (acpi_resume_beep)
+ timeout(acpi_stop_beep, NULL, 3 * hz);
+
+ return (ret);
+}
+
+static vm_offset_t acpi_wakeaddr;
+
+static void
+acpi_alloc_wakeup_handler(void)
+{
+ void *wakeaddr;
+
+ if (!cold)
+ return;
+
+ /*
+ * Specify the region for our wakeup code. We want it in the low 1 MB
+ * region, excluding video memory and above (0xa0000). We ask for
+ * it to be page-aligned, just to be safe.
+ */
+ wakeaddr = contigmalloc(4 * PAGE_SIZE, M_DEVBUF, M_NOWAIT, 0, 0x9ffff,
+ PAGE_SIZE, 0ul);
+ if (wakeaddr == NULL) {
+ printf("%s: can't alloc wake memory\n", __func__);
+ return;
+ }
+ stopxpcbs = malloc(mp_ncpus * sizeof(*stopxpcbs), M_DEVBUF, M_NOWAIT);
+ if (stopxpcbs == NULL) {
+ contigfree(wakeaddr, 4 * PAGE_SIZE, M_DEVBUF);
+ printf("%s: can't alloc CPU state memory\n", __func__);
+ return;
+ }
+ acpi_wakeaddr = (vm_offset_t)wakeaddr;
}
+SYSINIT(acpiwakeup, SI_SUB_KMEM, SI_ORDER_ANY, acpi_alloc_wakeup_handler, 0);
+
void
acpi_install_wakeup_handler(struct acpi_softc *sc)
{
+ uint64_t *pt4, *pt3, *pt2;
+ int i;
+
+ if (acpi_wakeaddr == 0ul)
+ return;
+
+ sc->acpi_wakeaddr = acpi_wakeaddr;
+ sc->acpi_wakephys = vtophys(acpi_wakeaddr);
+
+ bcopy(wakecode, (void *)WAKECODE_VADDR(sc), sizeof(wakecode));
+
+ /* Patch GDT base address, ljmp targets and page table base address. */
+ WAKECODE_FIXUP((bootgdtdesc + 2), uint32_t,
+ WAKECODE_PADDR(sc) + bootgdt);
+ WAKECODE_FIXUP((wakeup_sw32 + 2), uint32_t,
+ WAKECODE_PADDR(sc) + wakeup_32);
+ WAKECODE_FIXUP((wakeup_sw64 + 1), uint32_t,
+ WAKECODE_PADDR(sc) + wakeup_64);
+ WAKECODE_FIXUP(wakeup_pagetables, uint32_t, sc->acpi_wakephys);
+
+ /* Save pointers to some global data. */
+ WAKECODE_FIXUP(wakeup_retaddr, void *, acpi_restorecpu);
+ WAKECODE_FIXUP(wakeup_kpml4, uint64_t, KPML4phys);
+ WAKECODE_FIXUP(wakeup_ctx, vm_offset_t,
+ WAKECODE_VADDR(sc) + wakeup_ctx);
+ WAKECODE_FIXUP(wakeup_efer, uint64_t, rdmsr(MSR_EFER));
+ WAKECODE_FIXUP(wakeup_pat, uint64_t, rdmsr(MSR_PAT));
+ WAKECODE_FIXUP(wakeup_star, uint64_t, rdmsr(MSR_STAR));
+ WAKECODE_FIXUP(wakeup_lstar, uint64_t, rdmsr(MSR_LSTAR));
+ WAKECODE_FIXUP(wakeup_cstar, uint64_t, rdmsr(MSR_CSTAR));
+ WAKECODE_FIXUP(wakeup_sfmask, uint64_t, rdmsr(MSR_SF_MASK));
+
+ /* Build temporary page tables below realmode code. */
+ pt4 = (uint64_t *)acpi_wakeaddr;
+ pt3 = pt4 + (PAGE_SIZE) / sizeof(uint64_t);
+ pt2 = pt3 + (PAGE_SIZE) / sizeof(uint64_t);
+
+ /* Create the initial 1GB replicated page tables */
+ for (i = 0; i < 512; i++) {
+ /*
+ * Each slot of the level 4 pages points
+ * to the same level 3 page
+ */
+ pt4[i] = (uint64_t)(sc->acpi_wakephys + PAGE_SIZE);
+ pt4[i] |= PG_V | PG_RW | PG_U;
+
+ /*
+ * Each slot of the level 3 pages points
+ * to the same level 2 page
+ */
+ pt3[i] = (uint64_t)(sc->acpi_wakephys + (2 * PAGE_SIZE));
+ pt3[i] |= PG_V | PG_RW | PG_U;
+
+ /* The level 2 page slots are mapped with 2MB pages for 1GB. */
+ pt2[i] = i * (2 * 1024 * 1024);
+ pt2[i] |= PG_V | PG_RW | PG_PS | PG_U;
+ }
+
+ if (bootverbose)
+ device_printf(sc->acpi_dev, "wakeup code va %p pa %p\n",
+ (void *)sc->acpi_wakeaddr, (void *)sc->acpi_wakephys);
}
Copied: user/mav/ata/sys/amd64/acpica/genwakecode.sh (from r190503, head/sys/amd64/acpica/genwakecode.sh)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/mav/ata/sys/amd64/acpica/genwakecode.sh Sat Mar 28 11:29:07 2009 (r190504, copy of r190503, head/sys/amd64/acpica/genwakecode.sh)
@@ -0,0 +1,6 @@
+#!/bin/sh
+# $FreeBSD$
+#
+file2c -sx 'static char wakecode[] = {' '};' <acpi_wakecode.bin
+
+exit 0
Copied: user/mav/ata/sys/amd64/acpica/genwakedata.sh (from r190503, head/sys/amd64/acpica/genwakedata.sh)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/mav/ata/sys/amd64/acpica/genwakedata.sh Sat Mar 28 11:29:07 2009 (r190504, copy of r190503, head/sys/amd64/acpica/genwakedata.sh)
@@ -0,0 +1,9 @@
+#!/bin/sh
+# $FreeBSD$
+#
+nm -n --defined-only acpi_wakecode.o | while read offset dummy what
+do
+ echo "#define ${what} 0x${offset}"
+done
+
+exit 0
Modified: user/mav/ata/sys/amd64/amd64/amd64_mem.c
==============================================================================
--- user/mav/ata/sys/amd64/amd64/amd64_mem.c Sat Mar 28 11:01:44 2009 (r190503)
+++ user/mav/ata/sys/amd64/amd64/amd64_mem.c Sat Mar 28 11:29:07 2009 (r190504)
@@ -73,11 +73,13 @@ static void amd64_mrinit(struct mem_rang
static int amd64_mrset(struct mem_range_softc *sc,
struct mem_range_desc *mrd, int *arg);
static void amd64_mrAPinit(struct mem_range_softc *sc);
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-user
mailing list