2002-06-30 08:05:21 +00:00
|
|
|
# This file tells config what files go into building a kernel,
|
|
|
|
# files marked standard are always included.
|
|
|
|
#
|
|
|
|
# $FreeBSD$
|
|
|
|
#
|
|
|
|
# The long compile-with and dependency lines are required because of
|
|
|
|
# limitations in config: backslash-newline doesn't work in strings, and
|
|
|
|
# dependency lines other than the first are silently ignored.
|
|
|
|
#
|
2004-08-16 07:55:06 +00:00
|
|
|
#
|
|
|
|
linux32_genassym.o optional compat_linux32 \
|
|
|
|
dependency "$S/amd64/linux32/linux32_genassym.c" \
|
|
|
|
compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \
|
|
|
|
no-obj no-implicit-rule \
|
|
|
|
clean "linux32_genassym.o"
|
|
|
|
#
|
|
|
|
linux32_assym.h optional compat_linux32 \
|
|
|
|
dependency "$S/kern/genassym.sh linux32_genassym.o" \
|
|
|
|
compile-with "sh $S/kern/genassym.sh linux32_genassym.o > ${.TARGET}" \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "linux32_assym.h"
|
|
|
|
#
|
2015-05-24 15:28:17 +00:00
|
|
|
linux32_locore.o optional compat_linux32 \
|
|
|
|
dependency "linux32_assym.h $S/amd64/linux32/linux32_locore.s" \
|
|
|
|
compile-with "${CC} -x assembler-with-cpp -DLOCORE -m32 -shared -s -pipe -I. -I$S -Werror -Wall -fno-common -nostdinc -nostdlib -Wl,-T$S/amd64/linux32/linux32_vdso.lds.s -Wl,-soname=linux32_vdso.so,--eh-frame-hdr,-fPIC,-warn-common ${.IMPSRC} -o ${.TARGET}" \
|
|
|
|
no-obj no-implicit-rule \
|
|
|
|
clean "linux32_locore.o"
|
|
|
|
#
|
|
|
|
linux32_vdso.so optional compat_linux32 \
|
|
|
|
dependency "linux32_locore.o" \
|
|
|
|
compile-with "${OBJCOPY} --input binary --output elf64-x86-64-freebsd --binary-architecture i386 linux32_locore.o ${.TARGET}" \
|
|
|
|
no-implicit-rule \
|
|
|
|
clean "linux32_vdso.so"
|
|
|
|
#
|
2003-11-17 08:58:16 +00:00
|
|
|
ia32_genassym.o standard \
|
2003-08-23 00:58:33 +00:00
|
|
|
dependency "$S/compat/ia32/ia32_genassym.c" \
|
2003-05-14 04:10:49 +00:00
|
|
|
compile-with "${CC} ${CFLAGS:N-fno-common} -c ${.IMPSRC}" \
|
|
|
|
no-obj no-implicit-rule \
|
|
|
|
clean "ia32_genassym.o"
|
|
|
|
#
|
2003-11-17 08:58:16 +00:00
|
|
|
ia32_assym.h standard \
|
2003-05-14 04:10:49 +00:00
|
|
|
dependency "$S/kern/genassym.sh ia32_genassym.o" \
|
2004-12-21 02:08:14 +00:00
|
|
|
compile-with "env NM='${NM}' sh $S/kern/genassym.sh ia32_genassym.o > ${.TARGET}" \
|
2003-05-14 04:10:49 +00:00
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "ia32_assym.h"
|
|
|
|
#
|
2004-03-03 09:37:44 +00:00
|
|
|
font.h optional sc_dflt_font \
|
|
|
|
compile-with "uudecode < /usr/share/syscons/fonts/${SC_DFLT_FONT}-8x16.fnt && file2c 'static u_char dflt_font_16[16*256] = {' '};' < ${SC_DFLT_FONT}-8x16 > font.h && uudecode < /usr/share/syscons/fonts/${SC_DFLT_FONT}-8x14.fnt && file2c 'static u_char dflt_font_14[14*256] = {' '};' < ${SC_DFLT_FONT}-8x14 >> font.h && uudecode < /usr/share/syscons/fonts/${SC_DFLT_FONT}-8x8.fnt && file2c 'static u_char dflt_font_8[8*256] = {' '};' < ${SC_DFLT_FONT}-8x8 >> font.h" \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "font.h ${SC_DFLT_FONT}-8x14 ${SC_DFLT_FONT}-8x16 ${SC_DFLT_FONT}-8x8"
|
|
|
|
#
|
|
|
|
atkbdmap.h optional atkbd_dflt_keymap \
|
|
|
|
compile-with "/usr/sbin/kbdcontrol -L ${ATKBD_DFLT_KEYMAP} | sed -e 's/^static keymap_t.* = /static keymap_t key_map = /' -e 's/^static accentmap_t.* = /static accentmap_t accent_map = /' > atkbdmap.h" \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "atkbdmap.h"
|
|
|
|
#
|
|
|
|
ukbdmap.h optional ukbd_dflt_keymap \
|
|
|
|
compile-with "/usr/sbin/kbdcontrol -L ${UKBD_DFLT_KEYMAP} | sed -e 's/^static keymap_t.* = /static keymap_t key_map = /' -e 's/^static accentmap_t.* = /static accentmap_t accent_map = /' > ukbdmap.h" \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "ukbdmap.h"
|
|
|
|
#
|
2011-12-28 23:26:58 +00:00
|
|
|
hpt27xx_lib.o optional hpt27xx \
|
|
|
|
dependency "$S/dev/hpt27xx/amd64-elf.hpt27xx_lib.o.uu" \
|
|
|
|
compile-with "uudecode < $S/dev/hpt27xx/amd64-elf.hpt27xx_lib.o.uu" \
|
|
|
|
no-implicit-rule
|
2013-07-06 07:49:41 +00:00
|
|
|
#
|
2005-09-08 03:29:18 +00:00
|
|
|
hptmvraid.o optional hptmv \
|
|
|
|
dependency "$S/dev/hptmv/amd64-elf.raid.o.uu" \
|
|
|
|
compile-with "uudecode < $S/dev/hptmv/amd64-elf.raid.o.uu" \
|
|
|
|
no-implicit-rule
|
2013-07-06 07:49:41 +00:00
|
|
|
#
|
|
|
|
hptnr_lib.o optional hptnr \
|
|
|
|
dependency "$S/dev/hptnr/amd64-elf.hptnr_lib.o.uu" \
|
|
|
|
compile-with "uudecode < $S/dev/hptnr/amd64-elf.hptnr_lib.o.uu" \
|
|
|
|
no-implicit-rule
|
|
|
|
#
|
2007-12-15 00:56:17 +00:00
|
|
|
hptrr_lib.o optional hptrr \
|
|
|
|
dependency "$S/dev/hptrr/amd64-elf.hptrr_lib.o.uu" \
|
|
|
|
compile-with "uudecode < $S/dev/hptrr/amd64-elf.hptrr_lib.o.uu" \
|
|
|
|
no-implicit-rule
|
|
|
|
#
|
2003-05-31 06:47:05 +00:00
|
|
|
amd64/acpica/acpi_machdep.c optional acpi
|
2010-07-12 21:08:35 +00:00
|
|
|
acpi_wakecode.o optional acpi \
|
|
|
|
dependency "$S/amd64/acpica/acpi_wakecode.S assym.s" \
|
|
|
|
compile-with "${NORMAL_S}" \
|
2009-03-17 00:48:11 +00:00
|
|
|
no-obj no-implicit-rule before-depend \
|
2010-07-12 21:08:35 +00:00
|
|
|
clean "acpi_wakecode.o"
|
|
|
|
acpi_wakecode.bin optional acpi \
|
|
|
|
dependency "acpi_wakecode.o" \
|
2012-09-12 13:58:18 +00:00
|
|
|
compile-with "${OBJCOPY} -S -O binary acpi_wakecode.o ${.TARGET}" \
|
2010-07-12 21:08:35 +00:00
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "acpi_wakecode.bin"
|
|
|
|
acpi_wakecode.h optional acpi \
|
|
|
|
dependency "acpi_wakecode.bin" \
|
|
|
|
compile-with "file2c -sx 'static char wakecode[] = {' '};' < acpi_wakecode.bin > ${.TARGET}" \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "acpi_wakecode.h"
|
|
|
|
acpi_wakedata.h optional acpi \
|
|
|
|
dependency "acpi_wakecode.o" \
|
2010-10-14 23:31:58 +00:00
|
|
|
compile-with '${NM} -n --defined-only acpi_wakecode.o | while read offset dummy what; do echo "#define $${what} 0x$${offset}"; done > ${.TARGET}' \
|
2010-07-12 21:08:35 +00:00
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "acpi_wakedata.h"
|
2009-03-17 00:48:11 +00:00
|
|
|
#
|
2004-09-28 07:29:54 +00:00
|
|
|
amd64/amd64/amd64_mem.c optional mem
|
2004-05-24 12:08:56 +00:00
|
|
|
#amd64/amd64/apic_vector.S standard
|
2003-11-17 08:58:16 +00:00
|
|
|
amd64/amd64/atomic.c standard
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/autoconf.c standard
|
2004-09-24 01:08:34 +00:00
|
|
|
amd64/amd64/bios.c standard
|
2005-12-07 21:30:47 +00:00
|
|
|
amd64/amd64/bpf_jit_machdep.c optional bpf_jitter
|
2003-05-03 03:30:29 +00:00
|
|
|
amd64/amd64/cpu_switch.S standard
|
2003-05-30 01:03:43 +00:00
|
|
|
amd64/amd64/db_disasm.c optional ddb
|
|
|
|
amd64/amd64/db_interface.c optional ddb
|
|
|
|
amd64/amd64/db_trace.c optional ddb
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/elf_machdep.c standard
|
2003-05-03 00:19:42 +00:00
|
|
|
amd64/amd64/exception.S standard
|
2003-11-17 08:58:16 +00:00
|
|
|
amd64/amd64/fpu.c standard
|
2004-07-10 23:31:17 +00:00
|
|
|
amd64/amd64/gdb_machdep.c optional gdb
|
2011-04-20 12:58:30 +00:00
|
|
|
amd64/amd64/in_cksum.c optional inet | inet6
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/initcpu.c standard
|
2004-08-01 11:40:54 +00:00
|
|
|
amd64/amd64/io.c optional io
|
2003-05-03 00:19:42 +00:00
|
|
|
amd64/amd64/locore.S standard no-obj
|
2014-03-11 10:07:01 +00:00
|
|
|
amd64/amd64/xen-locore.S optional xenhvm
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/machdep.c standard
|
2004-08-01 11:40:54 +00:00
|
|
|
amd64/amd64/mem.c optional mem
|
Introduce minidumps. Full physical memory crash dumps are still available
via the debug.minidump sysctl and tunable.
Traditional dumps store all physical memory. This was once a good thing
when machines had a maximum of 64M of ram and 1GB of kvm. These days,
machines often have many gigabytes of ram and a smaller amount of kvm.
libkvm+kgdb don't have a way to access physical ram that is not mapped
into kvm at the time of the crash dump, so the extra ram being dumped
is mostly wasted.
Minidumps invert the process. Instead of dumping physical memory in
in order to guarantee that all of kvm's backing is dumped, minidumps
instead dump only memory that is actively mapped into kvm.
amd64 has a direct map region that things like UMA use. Obviously we
cannot dump all of the direct map region because that is effectively
an old style all-physical-memory dump. Instead, introduce a bitmap
and two helper routines (dump_add_page(pa) and dump_drop_page(pa)) that
allow certain critical direct map pages to be included in the dump.
uma_machdep.c's allocator is the intended consumer.
Dumps are a custom format. At the very beginning of the file is a header,
then a copy of the message buffer, then the bitmap of pages present in
the dump, then the final level of the kvm page table trees (2MB mappings
are expanded into a 4K page mappings), then the sparse physical pages
according to the bitmap. libkvm can now conveniently access the kvm
page table entries.
Booting my test 8GB machine, forcing it into ddb and forcing a dump
leads to a 48MB minidump. While this is a best case, I expect minidumps
to be in the 100MB-500MB range. Obviously, never larger than physical
memory of course.
minidumps are on by default. It would want be necessary to turn them off
if it was necessary to debug corrupt kernel page table management as that
would mess up minidumps as well.
Both minidumps and regular dumps are supported on the same machine.
2006-04-21 04:24:50 +00:00
|
|
|
amd64/amd64/minidump_machdep.c standard
|
2003-11-17 08:58:16 +00:00
|
|
|
amd64/amd64/mp_machdep.c optional smp
|
2004-08-30 23:33:33 +00:00
|
|
|
amd64/amd64/mp_watchdog.c optional mp_watchdog smp
|
2003-11-17 08:58:16 +00:00
|
|
|
amd64/amd64/mpboot.S optional smp
|
2007-12-09 21:00:36 +00:00
|
|
|
amd64/amd64/pmap.c standard
|
2004-05-24 09:55:02 +00:00
|
|
|
amd64/amd64/prof_machdep.c optional profiling-routine
|
Add support for the extended FPU states on amd64, both for native
64bit and 32bit ABIs. As a side-effect, it enables AVX on capable
CPUs.
In particular:
- Query the CPU support for XSAVE, list of the supported extensions
and the required size of FPU save area. The hw.use_xsave tunable is
provided for disabling XSAVE, and hw.xsave_mask may be used to
select the enabled extensions.
- Remove the FPU save area from PCB and dynamically allocate the
(run-time sized) user save area on the top of the kernel stack,
right above the PCB. Reorganize the thread0 PCB initialization to
postpone it after BSP is queried for save area size.
- The dumppcb, stoppcbs and susppcbs now do not carry the FPU state as
well. FPU state is only useful for suspend, where it is saved in
dynamically allocated suspfpusave area.
- Use XSAVE and XRSTOR to save/restore FPU state, if supported and
enabled.
- Define new mcontext_t flag _MC_HASFPXSTATE, indicating that
mcontext_t has a valid pointer to out-of-struct extended FPU
state. Signal handlers are supplied with stack-allocated fpu
state. The sigreturn(2) and setcontext(2) syscall honour the flag,
allowing the signal handlers to inspect and manipilate extended
state in the interrupted context.
- The getcontext(2) never returns extended state, since there is no
place in the fixed-sized mcontext_t to place variable-sized save
area. And, since mcontext_t is embedded into ucontext_t, makes it
impossible to fix in a reasonable way. Instead of extending
getcontext(2) syscall, provide a sysarch(2) facility to query
extended FPU state.
- Add ptrace(2) support for getting and setting extended state; while
there, implement missed PT_I386_{GET,SET}XMMREGS for 32bit binaries.
- Change fpu_kern KPI to not expose struct fpu_kern_ctx layout to
consumers, making it opaque. Internally, struct fpu_kern_ctx now
contains a space for the extended state. Convert in-kernel consumers
of fpu_kern KPI both on i386 and amd64.
First version of the support for AVX was submitted by Tim Bird
<tim.bird am sony com> on behalf of Sony. This version was written
from scratch.
Tested by: pho (previous version), Yamagi Burmeister <lists yamagi org>
MFC after: 1 month
2012-01-21 17:45:27 +00:00
|
|
|
amd64/amd64/ptrace_machdep.c standard
|
2003-05-03 00:19:42 +00:00
|
|
|
amd64/amd64/sigtramp.S standard
|
Break out stack(9) from ddb(4):
- Introduce per-architecture stack_machdep.c to hold stack_save(9).
- Introduce per-architecture machine/stack.h to capture any common
definitions required between db_trace.c and stack_machdep.c.
- Add new kernel option "options STACK"; we will build in stack(9) if it is
defined, or also if "options DDB" is defined to provide compatibility
with existing users of stack(9).
Add new stack_save_td(9) function, which allows the capture of a stacktrace
of another thread rather than the current thread, which the existing
stack_save(9) was limited to. It requires that the thread be neither
swapped out nor running, which is the responsibility of the consumer to
enforce.
Update stack(9) man page.
Build tested: amd64, arm, i386, ia64, powerpc, sparc64, sun4v
Runtime tested: amd64 (rwatson), arm (cognet), i386 (rwatson)
2007-12-02 20:40:35 +00:00
|
|
|
amd64/amd64/stack_machdep.c optional ddb | stack
|
2003-05-03 00:19:42 +00:00
|
|
|
amd64/amd64/support.S standard
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/sys_machdep.c standard
|
|
|
|
amd64/amd64/trap.c standard
|
2004-03-20 19:36:29 +00:00
|
|
|
amd64/amd64/uio_machdep.c standard
|
2003-10-14 05:51:31 +00:00
|
|
|
amd64/amd64/uma_machdep.c standard
|
2003-05-01 02:59:24 +00:00
|
|
|
amd64/amd64/vm_machdep.c standard
|
2003-11-17 08:58:16 +00:00
|
|
|
amd64/pci/pci_cfgreg.c optional pci
|
2012-03-27 21:23:56 +00:00
|
|
|
cddl/contrib/opensolaris/common/atomic/amd64/opensolaris_atomic.S optional zfs compile-with "${ZFS_S}"
|
2010-07-23 11:00:46 +00:00
|
|
|
crypto/aesni/aeskeys_amd64.S optional aesni
|
|
|
|
crypto/aesni/aesni.c optional aesni
|
2014-12-12 19:56:36 +00:00
|
|
|
aesni_ghash.o optional aesni \
|
|
|
|
dependency "$S/crypto/aesni/aesni_ghash.c" \
|
2015-01-30 18:17:17 +00:00
|
|
|
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${NO_WCAST_QUAL} ${PROF} -mmmx -msse -msse4 -maes -mpclmul ${.IMPSRC}" \
|
2014-12-12 19:56:36 +00:00
|
|
|
no-implicit-rule \
|
|
|
|
clean "aesni_ghash.o"
|
2013-09-03 18:31:23 +00:00
|
|
|
aesni_wrap.o optional aesni \
|
|
|
|
dependency "$S/crypto/aesni/aesni_wrap.c" \
|
2015-01-30 18:17:17 +00:00
|
|
|
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} ${NO_WCAST_QUAL} ${PROF} -mmmx -msse -msse4 -maes ${.IMPSRC}" \
|
2013-09-03 18:31:23 +00:00
|
|
|
no-implicit-rule \
|
|
|
|
clean "aesni_wrap.o"
|
2012-09-12 19:36:54 +00:00
|
|
|
crypto/blowfish/bf_enc.c optional crypto | ipsec
|
2013-06-28 21:00:08 +00:00
|
|
|
crypto/des/des_enc.c optional crypto | ipsec | netsmb
|
2009-01-12 19:23:46 +00:00
|
|
|
crypto/via/padlock.c optional padlock
|
|
|
|
crypto/via/padlock_cipher.c optional padlock
|
|
|
|
crypto/via/padlock_hash.c optional padlock
|
2004-12-21 02:07:38 +00:00
|
|
|
dev/acpica/acpi_if.m standard
|
2015-04-28 16:51:48 +00:00
|
|
|
dev/acpica/acpi_hpet.c optional acpi
|
2009-06-23 13:17:25 +00:00
|
|
|
dev/acpi_support/acpi_wmi_if.m standard
|
2009-01-23 17:48:18 +00:00
|
|
|
dev/agp/agp_amd64.c optional agp
|
|
|
|
dev/agp/agp_i810.c optional agp
|
|
|
|
dev/agp/agp_via.c optional agp
|
2009-11-30 11:44:03 +00:00
|
|
|
dev/amdsbwd/amdsbwd.c optional amdsbwd
|
2009-03-13 16:08:08 +00:00
|
|
|
dev/amdtemp/amdtemp.c optional amdtemp
|
2005-04-01 19:32:12 +00:00
|
|
|
dev/arcmsr/arcmsr.c optional arcmsr pci
|
2007-11-07 20:08:15 +00:00
|
|
|
dev/asmc/asmc.c optional asmc isa
|
2005-06-10 20:56:38 +00:00
|
|
|
dev/atkbdc/atkbd.c optional atkbd atkbdc
|
|
|
|
dev/atkbdc/atkbd_atkbdc.c optional atkbd atkbdc
|
|
|
|
dev/atkbdc/atkbdc.c optional atkbdc
|
|
|
|
dev/atkbdc/atkbdc_isa.c optional atkbdc isa
|
|
|
|
dev/atkbdc/atkbdc_subr.c optional atkbdc
|
|
|
|
dev/atkbdc/psm.c optional psm atkbdc
|
2013-09-20 20:18:49 +00:00
|
|
|
dev/bxe/bxe.c optional bxe pci
|
|
|
|
dev/bxe/bxe_stats.c optional bxe pci
|
|
|
|
dev/bxe/bxe_debug.c optional bxe pci
|
|
|
|
dev/bxe/ecore_sp.c optional bxe pci
|
|
|
|
dev/bxe/bxe_elink.c optional bxe pci
|
|
|
|
dev/bxe/57710_init_values.c optional bxe pci
|
|
|
|
dev/bxe/57711_init_values.c optional bxe pci
|
|
|
|
dev/bxe/57712_init_values.c optional bxe pci
|
2007-08-15 19:26:03 +00:00
|
|
|
dev/coretemp/coretemp.c optional coretemp
|
2008-08-08 16:26:53 +00:00
|
|
|
dev/cpuctl/cpuctl.c optional cpuctl
|
2009-09-21 07:08:20 +00:00
|
|
|
dev/dpms/dpms.c optional dpms
|
2005-07-21 21:55:11 +00:00
|
|
|
# There are no systems with isa slots, so all ed isa entries should go..
|
|
|
|
dev/ed/if_ed_3c503.c optional ed isa ed_3c503
|
|
|
|
dev/ed/if_ed_isa.c optional ed isa
|
|
|
|
dev/ed/if_ed_wd80x3.c optional ed isa
|
|
|
|
dev/ed/if_ed_hpp.c optional ed isa ed_hpp
|
|
|
|
dev/ed/if_ed_sic.c optional ed isa ed_sic
|
2005-11-27 21:41:58 +00:00
|
|
|
dev/fb/fb.c optional fb | vga
|
2009-09-21 07:05:48 +00:00
|
|
|
dev/fb/s3_pci.c optional s3pci
|
2009-09-21 07:08:20 +00:00
|
|
|
dev/fb/vesa.c optional vga vesa
|
2003-05-01 02:59:24 +00:00
|
|
|
dev/fb/vga.c optional vga
|
2005-06-30 05:33:26 +00:00
|
|
|
dev/ichwd/ichwd.c optional ichwd
|
Add support for Windows/x86-64 binaries to Project Evil.
Ville-Pertti Keinonen (will at exomi dot comohmygodnospampleasekthx)
deserves a big thanks for submitting initial patches to make it
work. I have mangled his contributions appropriately.
The main gotcha with Windows/x86-64 is that Microsoft uses a different
calling convention than everyone else. The standard ABI requires using
6 registers for argument passing, with other arguments on the stack.
Microsoft uses only 4 registers, and requires the caller to leave room
on the stack for the register arguments incase the callee needs to
spill them. Unlike x86, where Microsoft uses a mix of _cdecl, _stdcall
and _fastcall, all routines on Windows/x86-64 uses the same convention.
This unfortunately means that all the functions we export to the
driver require an intermediate translation wrapper. Similarly, we have
to wrap all calls back into the driver binary itself.
The original patches provided macros to wrap every single routine at
compile time, providing a secondary jump table with a customized
wrapper for each exported routine. I decided to use a different approach:
the call wrapper for each function is created from a template at
runtime, and the routine to jump to is patched into the wrapper as
it is created. The subr_pe module has been modified to patch in the
wrapped function instead of the original. (On x86, the wrapping
routine is a no-op.)
There are some minor API differences that had to be accounted for:
- KeAcquireSpinLock() is a real function on amd64, not a macro wrapper
around KfAcquireSpinLock()
- NdisFreeBuffer() is actually IoFreeMdl(). I had to change the whole
NDIS_BUFFER API a bit to accomodate this.
Bugs fixed along the way:
- IoAllocateMdl() always returned NULL
- kern_windrv.c:windrv_unload() wasn't releasing private driver object
extensions correctly (found thanks to memguard)
This has only been tested with the driver for the Broadcom 802.11g
chipset, which was the only Windows/x86-64 driver I could find.
2005-02-16 05:41:18 +00:00
|
|
|
dev/if_ndis/if_ndis.c optional ndis
|
|
|
|
dev/if_ndis/if_ndis_pccard.c optional ndis pccard
|
2005-11-27 21:41:58 +00:00
|
|
|
dev/if_ndis/if_ndis_pci.c optional ndis cardbus | ndis pci
|
Throw the switch on the new driver generation/loading mechanism. From
here on in, if_ndis.ko will be pre-built as a module, and can be built
into a static kernel (though it's not part of GENERIC). Drivers are
created using the new ndisgen(8) script, which uses ndiscvt(8) under
the covers, along with a few other tools. The result is a driver module
that can be kldloaded into the kernel.
A driver with foo.inf and foo.sys files will be converted into
foo_sys.ko (and foo_sys.o, for those who want/need to make static
kernels). This module contains all of the necessary info from the
.INF file and the driver binary image, converted into an ELF module.
You can kldload this module (or add it to /boot/loader.conf) to have
it loaded automatically. Any required firmware files can be bundled
into the module as well (or converted/loaded separately).
Also, add a workaround for a problem in NdisMSleep(). During system
bootstrap (cold == 1), msleep() always returns 0 without actually
sleeping. The Intel 2200BG driver uses NdisMSleep() to wait for
the NIC's firmware to come to life, and fails to load if NdisMSleep()
doesn't actually delay. As a workaround, if msleep() (and hence
ndis_thsuspend()) returns 0, use a hard DELAY() to sleep instead).
This is not really the right thing to do, but we can't really do much
else. At the very least, this makes the Intel driver happy.
There are probably other drivers that fail in this way during bootstrap.
Unfortunately, the only workaround for those is to avoid pre-loading
them and kldload them once the system is running instead.
2005-04-24 20:21:22 +00:00
|
|
|
dev/if_ndis/if_ndis_usb.c optional ndis usb
|
2004-08-01 11:40:54 +00:00
|
|
|
dev/io/iodev.c optional io
|
2006-02-13 17:56:24 +00:00
|
|
|
dev/ipmi/ipmi.c optional ipmi
|
2006-09-22 22:11:29 +00:00
|
|
|
dev/ipmi/ipmi_acpi.c optional ipmi acpi
|
|
|
|
dev/ipmi/ipmi_isa.c optional ipmi isa
|
|
|
|
dev/ipmi/ipmi_kcs.c optional ipmi
|
|
|
|
dev/ipmi/ipmi_smic.c optional ipmi
|
|
|
|
dev/ipmi/ipmi_smbus.c optional ipmi smbus
|
|
|
|
dev/ipmi/ipmi_smbios.c optional ipmi
|
|
|
|
dev/ipmi/ipmi_ssif.c optional ipmi smbus
|
2006-02-13 17:56:24 +00:00
|
|
|
dev/ipmi/ipmi_pci.c optional ipmi pci
|
2009-03-26 20:23:21 +00:00
|
|
|
dev/ipmi/ipmi_linux.c optional ipmi compat_linux32
|
2014-09-23 08:33:03 +00:00
|
|
|
dev/ixl/if_ixl.c optional ixl pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/if_ixlv.c optional ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/ixlvc.c optional ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/ixl_txrx.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_osdep.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_lan_hmc.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_hmc.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_common.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_nvm.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
|
|
|
dev/ixl/i40e_adminq.c optional ixl pci | ixlv pci \
|
|
|
|
compile-with "${NORMAL_C} -I$S/dev/ixl"
|
2004-07-09 05:05:13 +00:00
|
|
|
dev/fdc/fdc.c optional fdc
|
2004-07-15 16:43:52 +00:00
|
|
|
dev/fdc/fdc_acpi.c optional fdc
|
2004-07-07 22:29:33 +00:00
|
|
|
dev/fdc/fdc_isa.c optional fdc isa
|
|
|
|
dev/fdc/fdc_pccard.c optional fdc pccard
|
2013-05-21 03:05:49 +00:00
|
|
|
dev/fdt/fdt_x86.c optional fdt
|
2013-07-06 07:49:41 +00:00
|
|
|
dev/hpt27xx/hpt27xx_os_bsd.c optional hpt27xx
|
|
|
|
dev/hpt27xx/hpt27xx_osm_bsd.c optional hpt27xx
|
2011-12-28 23:26:58 +00:00
|
|
|
dev/hpt27xx/hpt27xx_config.c optional hpt27xx
|
2005-09-08 03:29:18 +00:00
|
|
|
dev/hptmv/entry.c optional hptmv
|
|
|
|
dev/hptmv/mv.c optional hptmv
|
|
|
|
dev/hptmv/gui_lib.c optional hptmv
|
|
|
|
dev/hptmv/hptproc.c optional hptmv
|
|
|
|
dev/hptmv/ioctl.c optional hptmv
|
2013-07-06 07:49:41 +00:00
|
|
|
dev/hptnr/hptnr_os_bsd.c optional hptnr
|
|
|
|
dev/hptnr/hptnr_osm_bsd.c optional hptnr
|
|
|
|
dev/hptnr/hptnr_config.c optional hptnr
|
2007-12-15 00:56:17 +00:00
|
|
|
dev/hptrr/hptrr_os_bsd.c optional hptrr
|
|
|
|
dev/hptrr/hptrr_osm_bsd.c optional hptrr
|
|
|
|
dev/hptrr/hptrr_config.c optional hptrr
|
2005-04-29 02:40:16 +00:00
|
|
|
dev/hwpmc/hwpmc_amd.c optional hwpmc
|
2008-11-09 17:37:54 +00:00
|
|
|
dev/hwpmc/hwpmc_intel.c optional hwpmc
|
- Add support for PMCs in Intel CPUs of Family 6, model 0xE (Core Solo
and Core Duo), models 0xF (Core2), model 0x17 (Core2Extreme) and
model 0x1C (Atom).
In these CPUs, the actual numbers, kinds and widths of PMCs present
need to queried at run time. Support for specific "architectural"
events also needs to be queried at run time.
Model 0xE CPUs support programmable PMCs, subsequent CPUs
additionally support "fixed-function" counters.
- Use event names that are close to vendor documentation, taking in
account that:
- events with identical semantics on two or more CPUs in this family
can have differing names in vendor documentation,
- identical vendor event names may map to differing events across
CPUs,
- each type of CPU supports a different subset of measurable
events.
Fixed-function and programmable counters both use the same vendor
names for events. The use of a class name prefix ("iaf-" or
"iap-" respectively) permits these to be distinguished.
- In libpmc, refactor pmc_name_of_event() into a public interface
and an internal helper function, for use by log handling code.
- Minor code tweaks: staticize a global, freshen a few comments.
Tested by: gnn
2008-11-27 09:00:47 +00:00
|
|
|
dev/hwpmc/hwpmc_core.c optional hwpmc
|
2010-04-02 13:23:49 +00:00
|
|
|
dev/hwpmc/hwpmc_uncore.c optional hwpmc
|
2005-06-09 19:45:09 +00:00
|
|
|
dev/hwpmc/hwpmc_piv.c optional hwpmc
|
2008-11-09 17:37:54 +00:00
|
|
|
dev/hwpmc/hwpmc_tsc.c optional hwpmc
|
2005-06-09 19:45:09 +00:00
|
|
|
dev/hwpmc/hwpmc_x86.c optional hwpmc
|
2013-07-19 05:32:58 +00:00
|
|
|
dev/hyperv/netvsc/hv_net_vsc.c optional hyperv
|
|
|
|
dev/hyperv/netvsc/hv_netvsc_drv_freebsd.c optional hyperv
|
|
|
|
dev/hyperv/netvsc/hv_rndis_filter.c optional hyperv
|
|
|
|
dev/hyperv/stordisengage/hv_ata_pci_disengage.c optional hyperv
|
|
|
|
dev/hyperv/storvsc/hv_storvsc_drv_freebsd.c optional hyperv
|
2014-09-13 02:15:31 +00:00
|
|
|
dev/hyperv/utilities/hv_kvp.c optional hyperv
|
2013-07-19 05:32:58 +00:00
|
|
|
dev/hyperv/utilities/hv_util.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_channel.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_channel_mgmt.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_connection.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_hv.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_ring_buffer.c optional hyperv
|
|
|
|
dev/hyperv/vmbus/hv_vmbus_drv_freebsd.c optional hyperv
|
2013-12-05 22:38:53 +00:00
|
|
|
dev/kbd/kbd.c optional atkbd | sc | ukbd | vt
|
2006-06-26 23:41:07 +00:00
|
|
|
dev/nfe/if_nfe.c optional nfe pci
|
2013-04-29 22:48:53 +00:00
|
|
|
dev/ntb/if_ntb/if_ntb.c optional if_ntb
|
|
|
|
dev/ntb/ntb_hw/ntb_hw.c optional if_ntb ntb_hw
|
2012-09-17 19:26:33 +00:00
|
|
|
dev/nvd/nvd.c optional nvd nvme
|
|
|
|
dev/nvme/nvme.c optional nvme
|
|
|
|
dev/nvme/nvme_ctrlr.c optional nvme
|
|
|
|
dev/nvme/nvme_ctrlr_cmd.c optional nvme
|
|
|
|
dev/nvme/nvme_ns.c optional nvme
|
|
|
|
dev/nvme/nvme_ns_cmd.c optional nvme
|
|
|
|
dev/nvme/nvme_qpair.c optional nvme
|
|
|
|
dev/nvme/nvme_sysctl.c optional nvme
|
|
|
|
dev/nvme/nvme_test.c optional nvme
|
2013-07-19 21:40:57 +00:00
|
|
|
dev/nvme/nvme_util.c optional nvme
|
2007-10-26 03:23:54 +00:00
|
|
|
dev/nvram/nvram.c optional nvram isa
|
2013-10-06 22:45:02 +00:00
|
|
|
dev/random/ivy.c optional rdrand_rng
|
|
|
|
dev/random/nehemiah.c optional padlock_rng
|
2013-06-25 17:50:22 +00:00
|
|
|
dev/qlxge/qls_dbg.c optional qlxge pci
|
|
|
|
dev/qlxge/qls_dump.c optional qlxge pci
|
|
|
|
dev/qlxge/qls_hw.c optional qlxge pci
|
|
|
|
dev/qlxge/qls_ioctl.c optional qlxge pci
|
|
|
|
dev/qlxge/qls_isr.c optional qlxge pci
|
|
|
|
dev/qlxge/qls_os.c optional qlxge pci
|
2011-11-03 21:20:22 +00:00
|
|
|
dev/qlxgb/qla_dbg.c optional qlxgb pci
|
|
|
|
dev/qlxgb/qla_hw.c optional qlxgb pci
|
|
|
|
dev/qlxgb/qla_ioctl.c optional qlxgb pci
|
|
|
|
dev/qlxgb/qla_isr.c optional qlxgb pci
|
|
|
|
dev/qlxgb/qla_misc.c optional qlxgb pci
|
|
|
|
dev/qlxgb/qla_os.c optional qlxgb pci
|
2013-05-15 17:03:09 +00:00
|
|
|
dev/qlxgbe/ql_dbg.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_hw.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_ioctl.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_isr.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_misc.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_os.c optional qlxgbe pci
|
|
|
|
dev/qlxgbe/ql_reset.c optional qlxgbe pci
|
2011-11-28 18:51:40 +00:00
|
|
|
dev/sfxge/common/efx_bootcfg.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_ev.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_filter.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_intr.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_mac.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_mcdi.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_mon.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_nic.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_nvram.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_phy.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_port.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_rx.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_sram.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_tx.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_vpd.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/efx_wol.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_mac.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_mon.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_nic.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_nvram.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_phy.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_sram.c optional sfxge inet pci
|
|
|
|
dev/sfxge/common/siena_vpd.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_dma.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_ev.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_intr.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_mcdi.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_port.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_rx.c optional sfxge inet pci
|
|
|
|
dev/sfxge/sfxge_tx.c optional sfxge inet pci
|
2003-11-17 08:58:16 +00:00
|
|
|
dev/sio/sio.c optional sio
|
|
|
|
dev/sio/sio_isa.c optional sio isa
|
2006-07-29 18:38:54 +00:00
|
|
|
dev/sio/sio_pccard.c optional sio pccard
|
|
|
|
dev/sio/sio_pci.c optional sio pci
|
|
|
|
dev/sio/sio_puc.c optional sio puc
|
2005-11-11 09:57:32 +00:00
|
|
|
dev/speaker/spkr.c optional speaker
|
2003-11-17 08:58:16 +00:00
|
|
|
dev/syscons/apm/apm_saver.c optional apm_saver apm
|
Replace syscons terminal renderer by a new renderer that uses libteken.
Some time ago I started working on a library called libteken, which is
terminal emulator. It does not buffer any screen contents, but only
keeps terminal state, such as cursor position, attributes, etc. It
should implement all escape sequences that are implemented by the
cons25 terminal emulator, but also a fair amount of sequences that are
present in VT100 and xterm.
A lot of random notes, which could be of interest to users/developers:
- Even though I'm leaving the terminal type set to `cons25', users can
do experiments with placing `xterm-color' in /etc/ttys. Because we
only implement a subset of features of xterm, this may cause
artifacts. We should consider extending libteken, because in my
opinion xterm is the way to go. Some missing features:
- Keypad application mode (DECKPAM)
- Character sets (SCS)
- libteken is filled with a fair amount of assertions, but unfortunately
we cannot go into the debugger anymore if we fail them. I've done
development of this library almost entirely in userspace. In
sys/dev/syscons/teken there are two applications that can be helpful
when debugging the code:
- teken_demo: a terminal emulator that can be started from a regular
xterm that emulates a terminal using libteken. This application can
be very useful to debug any rendering issues.
- teken_stress: a stress testing application that emulates random
terminal output. libteken has literally survived multiple terabytes
of random input.
- libteken also includes support for UTF-8, but unfortunately our input
layer and font renderer don't support this. If users want to
experiment with UTF-8 support, they can enable `TEKEN_UTF8' in
teken.h. If you recompile your kernel or the teken_demo application,
you can hold some nice experiments.
- I've left PC98 the way it is right now. The PC98 platform has a custom
syscons renderer, which supports some form of localised input. Maybe
we should port PC98 to libteken by the time syscons supports UTF-8?
- I've removed the `dumb' terminal emulator. It has been broken for
years. It hasn't survived the `struct proc' -> `struct thread'
conversion.
- To prevent confusion among people that want to hack on libteken:
unlike syscons, the state machines that parse the escape sequences are
machine generated. This means that if you want to add new escape
sequences, you have to add an entry to the `sequences' file. This will
cause new entries to be added to `teken_state.h'.
- Any rendering artifacts that didn't occur prior to this commit are by
accident. They should be reported to me, so I can fix them.
Discussed on: current@, hackers@
Discussed with: philip (at 25C3)
2009-01-01 13:26:53 +00:00
|
|
|
dev/syscons/scterm-teken.c optional sc
|
2009-09-21 07:08:20 +00:00
|
|
|
dev/syscons/scvesactl.c optional sc vga vesa
|
2003-05-01 02:59:24 +00:00
|
|
|
dev/syscons/scvgarndr.c optional sc vga
|
|
|
|
dev/syscons/scvtb.c optional sc
|
2010-09-19 14:40:37 +00:00
|
|
|
dev/tpm/tpm.c optional tpm
|
|
|
|
dev/tpm/tpm_acpi.c optional tpm acpi
|
|
|
|
dev/tpm/tpm_isa.c optional tpm isa
|
2012-04-11 02:42:01 +00:00
|
|
|
dev/uart/uart_cpu_x86.c optional uart
|
2011-12-12 09:50:33 +00:00
|
|
|
dev/viawd/viawd.c optional viawd
|
2013-08-23 20:47:16 +00:00
|
|
|
dev/vmware/vmxnet3/if_vmx.c optional vmx
|
2012-03-06 18:44:52 +00:00
|
|
|
dev/wbwd/wbwd.c optional wbwd
|
2007-11-08 22:09:37 +00:00
|
|
|
dev/wpi/if_wpi.c optional wpi
|
2014-12-09 18:03:25 +00:00
|
|
|
dev/xen/pci/xen_acpi_pci.c optional xenhvm
|
|
|
|
dev/xen/pci/xen_pci.c optional xenhvm
|
2012-01-31 19:38:18 +00:00
|
|
|
dev/isci/isci.c optional isci
|
|
|
|
dev/isci/isci_controller.c optional isci
|
|
|
|
dev/isci/isci_domain.c optional isci
|
|
|
|
dev/isci/isci_interrupt.c optional isci
|
|
|
|
dev/isci/isci_io_request.c optional isci
|
|
|
|
dev/isci/isci_logger.c optional isci
|
|
|
|
dev/isci/isci_oem_parameters.c optional isci
|
|
|
|
dev/isci/isci_remote_device.c optional isci
|
|
|
|
dev/isci/isci_sysctl.c optional isci
|
|
|
|
dev/isci/isci_task_request.c optional isci
|
|
|
|
dev/isci/isci_timer.c optional isci
|
|
|
|
dev/isci/scil/sati.c optional isci
|
|
|
|
dev/isci/scil/sati_abort_task_set.c optional isci
|
|
|
|
dev/isci/scil/sati_atapi.c optional isci
|
|
|
|
dev/isci/scil/sati_device.c optional isci
|
|
|
|
dev/isci/scil/sati_inquiry.c optional isci
|
|
|
|
dev/isci/scil/sati_log_sense.c optional isci
|
|
|
|
dev/isci/scil/sati_lun_reset.c optional isci
|
|
|
|
dev/isci/scil/sati_mode_pages.c optional isci
|
|
|
|
dev/isci/scil/sati_mode_select.c optional isci
|
|
|
|
dev/isci/scil/sati_mode_sense.c optional isci
|
|
|
|
dev/isci/scil/sati_mode_sense_10.c optional isci
|
|
|
|
dev/isci/scil/sati_mode_sense_6.c optional isci
|
|
|
|
dev/isci/scil/sati_move.c optional isci
|
|
|
|
dev/isci/scil/sati_passthrough.c optional isci
|
|
|
|
dev/isci/scil/sati_read.c optional isci
|
|
|
|
dev/isci/scil/sati_read_buffer.c optional isci
|
|
|
|
dev/isci/scil/sati_read_capacity.c optional isci
|
|
|
|
dev/isci/scil/sati_reassign_blocks.c optional isci
|
|
|
|
dev/isci/scil/sati_report_luns.c optional isci
|
|
|
|
dev/isci/scil/sati_request_sense.c optional isci
|
|
|
|
dev/isci/scil/sati_start_stop_unit.c optional isci
|
|
|
|
dev/isci/scil/sati_synchronize_cache.c optional isci
|
|
|
|
dev/isci/scil/sati_test_unit_ready.c optional isci
|
|
|
|
dev/isci/scil/sati_unmap.c optional isci
|
|
|
|
dev/isci/scil/sati_util.c optional isci
|
|
|
|
dev/isci/scil/sati_verify.c optional isci
|
|
|
|
dev/isci/scil/sati_write.c optional isci
|
|
|
|
dev/isci/scil/sati_write_and_verify.c optional isci
|
|
|
|
dev/isci/scil/sati_write_buffer.c optional isci
|
|
|
|
dev/isci/scil/sati_write_long.c optional isci
|
|
|
|
dev/isci/scil/sci_abstract_list.c optional isci
|
|
|
|
dev/isci/scil/sci_base_controller.c optional isci
|
|
|
|
dev/isci/scil/sci_base_domain.c optional isci
|
|
|
|
dev/isci/scil/sci_base_iterator.c optional isci
|
|
|
|
dev/isci/scil/sci_base_library.c optional isci
|
|
|
|
dev/isci/scil/sci_base_logger.c optional isci
|
|
|
|
dev/isci/scil/sci_base_memory_descriptor_list.c optional isci
|
|
|
|
dev/isci/scil/sci_base_memory_descriptor_list_decorator.c optional isci
|
|
|
|
dev/isci/scil/sci_base_object.c optional isci
|
|
|
|
dev/isci/scil/sci_base_observer.c optional isci
|
|
|
|
dev/isci/scil/sci_base_phy.c optional isci
|
|
|
|
dev/isci/scil/sci_base_port.c optional isci
|
|
|
|
dev/isci/scil/sci_base_remote_device.c optional isci
|
|
|
|
dev/isci/scil/sci_base_request.c optional isci
|
|
|
|
dev/isci/scil/sci_base_state_machine.c optional isci
|
|
|
|
dev/isci/scil/sci_base_state_machine_logger.c optional isci
|
|
|
|
dev/isci/scil/sci_base_state_machine_observer.c optional isci
|
|
|
|
dev/isci/scil/sci_base_subject.c optional isci
|
|
|
|
dev/isci/scil/sci_util.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_controller.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_library.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_pci.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_phy.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_port.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_port_configuration_agent.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_remote_node_context.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_remote_node_table.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_request.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_sgpio.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_smp_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_smp_request.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_ssp_request.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_stp_packet_request.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_stp_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_stp_request.c optional isci
|
|
|
|
dev/isci/scil/scic_sds_unsolicited_frame_control.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_controller.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_controller_state_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_controller_states.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_domain.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_domain_state_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_domain_states.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_high_priority_request_queue.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_internal_io_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_io_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_io_request_state_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_io_request_states.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_library.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_ready_substate_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_ready_substates.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_starting_substate_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_starting_substates.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_state_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_remote_device_states.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_smp_activity_clear_affiliation.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_smp_io_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_smp_phy.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_smp_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_stp_io_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_stp_remote_device.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_stp_task_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_task_request.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_task_request_state_handlers.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_task_request_states.c optional isci
|
|
|
|
dev/isci/scil/scif_sas_timer.c optional isci
|
2003-05-01 02:59:24 +00:00
|
|
|
isa/syscons_isa.c optional sc
|
|
|
|
isa/vga_isa.c optional vga
|
2010-07-14 18:43:27 +00:00
|
|
|
kern/kern_clocksource.c standard
|
2004-05-16 20:11:38 +00:00
|
|
|
kern/link_elf_obj.c standard
|
2003-11-17 08:58:16 +00:00
|
|
|
#
|
|
|
|
# IA32 binary support
|
|
|
|
#
|
2010-03-11 14:49:06 +00:00
|
|
|
#amd64/ia32/ia32_exception.S optional compat_freebsd32
|
|
|
|
amd64/ia32/ia32_reg.c optional compat_freebsd32
|
|
|
|
amd64/ia32/ia32_signal.c optional compat_freebsd32
|
|
|
|
amd64/ia32/ia32_sigtramp.S optional compat_freebsd32
|
|
|
|
amd64/ia32/ia32_syscall.c optional compat_freebsd32
|
|
|
|
amd64/ia32/ia32_misc.c optional compat_freebsd32
|
|
|
|
compat/ia32/ia32_sysvec.c optional compat_freebsd32
|
2006-05-07 18:12:18 +00:00
|
|
|
compat/linprocfs/linprocfs.c optional linprocfs
|
2006-05-09 22:27:01 +00:00
|
|
|
compat/linsysfs/linsysfs.c optional linsysfs
|
2004-08-16 07:55:06 +00:00
|
|
|
#
|
|
|
|
# Linux/i386 binary support
|
|
|
|
#
|
|
|
|
amd64/linux32/linux32_dummy.c optional compat_linux32
|
|
|
|
amd64/linux32/linux32_machdep.c optional compat_linux32
|
2007-05-23 15:45:52 +00:00
|
|
|
amd64/linux32/linux32_support.s optional compat_linux32 \
|
|
|
|
dependency "linux32_assym.h"
|
2004-08-16 07:55:06 +00:00
|
|
|
amd64/linux32/linux32_sysent.c optional compat_linux32
|
|
|
|
amd64/linux32/linux32_sysvec.c optional compat_linux32
|
2007-05-23 08:33:06 +00:00
|
|
|
compat/linux/linux_emul.c optional compat_linux32
|
2004-08-16 07:55:06 +00:00
|
|
|
compat/linux/linux_file.c optional compat_linux32
|
2011-02-12 18:17:12 +00:00
|
|
|
compat/linux/linux_fork.c optional compat_linux32
|
Add the linux 2.6.x stuff (not used by default!):
- TLS - complete
- pid/tid mangling - complete
- thread area - complete
- futexes - complete with issues
- clone() extension - complete with some possible minor issues
- mq*/timer*/clock* stuff - complete but untested and the mq* stuff is
disabled when not build as part of the kernel with native FreeBSD mq*
support (module support for this will come later)
Tested with:
- linux-firefox - works, tested
- linux-opera - works, tested
- linux-realplay - doesnt work, issue with futexes
- linux-skype - doesnt work, issue with futexes
- linux-rt2-demo - works, tested
- linux-acroread - doesnt work, unknown reason (coredump) and sometimes
issue with futexes
- various unix utilities in linux-base-gentoo3 and linux-base-fc4:
everything tried worked
On amd64 not everything is supported like on i386, the catchup is planned for
later when the remaining bugs in the new functions are fixed.
To test this new stuff, you have to run
sysctl compat.linux.osrelease=2.6.16
to switch back use
sysctl compat.linux.osrelease=2.4.2
Don't switch while running a linux program, strange things may or may not
happen.
Sponsored by: Google SoC 2006
Submitted by: rdivacky
Some suggestions/help by: jhb, kib, manu@NetBSD.org, netchild
2006-08-15 12:54:30 +00:00
|
|
|
compat/linux/linux_futex.c optional compat_linux32
|
2004-08-16 07:55:06 +00:00
|
|
|
compat/linux/linux_getcwd.c optional compat_linux32
|
|
|
|
compat/linux/linux_ioctl.c optional compat_linux32
|
|
|
|
compat/linux/linux_ipc.c optional compat_linux32
|
|
|
|
compat/linux/linux_mib.c optional compat_linux32
|
|
|
|
compat/linux/linux_misc.c optional compat_linux32
|
|
|
|
compat/linux/linux_signal.c optional compat_linux32
|
|
|
|
compat/linux/linux_socket.c optional compat_linux32
|
|
|
|
compat/linux/linux_stats.c optional compat_linux32
|
|
|
|
compat/linux/linux_sysctl.c optional compat_linux32
|
Add the linux 2.6.x stuff (not used by default!):
- TLS - complete
- pid/tid mangling - complete
- thread area - complete
- futexes - complete with issues
- clone() extension - complete with some possible minor issues
- mq*/timer*/clock* stuff - complete but untested and the mq* stuff is
disabled when not build as part of the kernel with native FreeBSD mq*
support (module support for this will come later)
Tested with:
- linux-firefox - works, tested
- linux-opera - works, tested
- linux-realplay - doesnt work, issue with futexes
- linux-skype - doesnt work, issue with futexes
- linux-rt2-demo - works, tested
- linux-acroread - doesnt work, unknown reason (coredump) and sometimes
issue with futexes
- various unix utilities in linux-base-gentoo3 and linux-base-fc4:
everything tried worked
On amd64 not everything is supported like on i386, the catchup is planned for
later when the remaining bugs in the new functions are fixed.
To test this new stuff, you have to run
sysctl compat.linux.osrelease=2.6.16
to switch back use
sysctl compat.linux.osrelease=2.4.2
Don't switch while running a linux program, strange things may or may not
happen.
Sponsored by: Google SoC 2006
Submitted by: rdivacky
Some suggestions/help by: jhb, kib, manu@NetBSD.org, netchild
2006-08-15 12:54:30 +00:00
|
|
|
compat/linux/linux_time.c optional compat_linux32
|
2014-09-18 08:36:45 +00:00
|
|
|
compat/linux/linux_timer.c optional compat_linux32
|
2004-08-16 07:55:06 +00:00
|
|
|
compat/linux/linux_uid16.c optional compat_linux32
|
|
|
|
compat/linux/linux_util.c optional compat_linux32
|
2015-05-24 15:28:17 +00:00
|
|
|
compat/linux/linux_vdso.c optional compat_linux32
|
2015-05-24 15:51:18 +00:00
|
|
|
compat/linux/linux_common.c optional compat_linux32
|
2015-05-24 16:41:39 +00:00
|
|
|
compat/linux/linux_event.c optional compat_linux32
|
2006-01-24 21:13:50 +00:00
|
|
|
dev/amr/amr_linux.c optional compat_linux32 amr
|
2006-05-18 23:30:48 +00:00
|
|
|
dev/mfi/mfi_linux.c optional compat_linux32 mfi
|
Add support for Windows/x86-64 binaries to Project Evil.
Ville-Pertti Keinonen (will at exomi dot comohmygodnospampleasekthx)
deserves a big thanks for submitting initial patches to make it
work. I have mangled his contributions appropriately.
The main gotcha with Windows/x86-64 is that Microsoft uses a different
calling convention than everyone else. The standard ABI requires using
6 registers for argument passing, with other arguments on the stack.
Microsoft uses only 4 registers, and requires the caller to leave room
on the stack for the register arguments incase the callee needs to
spill them. Unlike x86, where Microsoft uses a mix of _cdecl, _stdcall
and _fastcall, all routines on Windows/x86-64 uses the same convention.
This unfortunately means that all the functions we export to the
driver require an intermediate translation wrapper. Similarly, we have
to wrap all calls back into the driver binary itself.
The original patches provided macros to wrap every single routine at
compile time, providing a secondary jump table with a customized
wrapper for each exported routine. I decided to use a different approach:
the call wrapper for each function is created from a template at
runtime, and the routine to jump to is patched into the wrapper as
it is created. The subr_pe module has been modified to patch in the
wrapped function instead of the original. (On x86, the wrapping
routine is a no-op.)
There are some minor API differences that had to be accounted for:
- KeAcquireSpinLock() is a real function on amd64, not a macro wrapper
around KfAcquireSpinLock()
- NdisFreeBuffer() is actually IoFreeMdl(). I had to change the whole
NDIS_BUFFER API a bit to accomodate this.
Bugs fixed along the way:
- IoAllocateMdl() always returned NULL
- kern_windrv.c:windrv_unload() wasn't releasing private driver object
extensions correctly (found thanks to memguard)
This has only been tested with the driver for the Broadcom 802.11g
chipset, which was the only Windows/x86-64 driver I could find.
2005-02-16 05:41:18 +00:00
|
|
|
#
|
|
|
|
# Windows NDIS driver support
|
|
|
|
#
|
|
|
|
compat/ndis/kern_ndis.c optional ndisapi pci
|
|
|
|
compat/ndis/kern_windrv.c optional ndisapi pci
|
|
|
|
compat/ndis/subr_hal.c optional ndisapi pci
|
|
|
|
compat/ndis/subr_ndis.c optional ndisapi pci
|
|
|
|
compat/ndis/subr_ntoskrnl.c optional ndisapi pci
|
|
|
|
compat/ndis/subr_pe.c optional ndisapi pci
|
- Correct one aspect of the driver_object/device_object/IRP framework:
when we create a PDO, the driver_object associated with it is that
of the parent driver, not the driver we're trying to attach. For
example, if we attach a PCI device, the PDO we pass to the NdisAddDevice()
function should contain a pointer to fake_pci_driver, not to the NDIS
driver itself. For PCI or PCMCIA devices this doesn't matter because
the child never needs to talk to the parent bus driver, but for USB,
the child needs to be able to send IRPs to the parent USB bus driver, and
for that to work the parent USB bus driver has to be hung off the PDO.
This involves modifying windrv_lookup() so that we can search for
bus drivers by name, if necessary. Our fake bus drivers attach themselves
as "PCI Bus," "PCCARD Bus" and "USB Bus," so we can search for them
using those names.
The individual attachment stubs now create and attach PDOs to the
parent bus drivers instead of hanging them off the NDIS driver's
object, and in if_ndis.c, we now search for the correct driver
object depending on the bus type, and use that to find the correct PDO.
With this fix, I can get my sample USB ethernet driver to deliver
an IRP to my fake parent USB bus driver's dispatch routines.
- Add stub modules for USB support: subr_usbd.c, usbd_var.h and
if_ndis_usb.c. The subr_usbd.c module is hooked up the build
but currently doesn't do very much. It provides the stub USB
parent driver object and a dispatch routine for
IRM_MJ_INTERNAL_DEVICE_CONTROL. The only exported function at
the moment is USBD_GetUSBDIVersion(). The if_ndis_usb.c stub
compiles, but is not hooked up to the build yet. I'm putting
these here so I can keep them under source code control as I
flesh them out.
2005-02-24 21:49:14 +00:00
|
|
|
compat/ndis/subr_usbd.c optional ndisapi pci
|
Add support for Windows/x86-64 binaries to Project Evil.
Ville-Pertti Keinonen (will at exomi dot comohmygodnospampleasekthx)
deserves a big thanks for submitting initial patches to make it
work. I have mangled his contributions appropriately.
The main gotcha with Windows/x86-64 is that Microsoft uses a different
calling convention than everyone else. The standard ABI requires using
6 registers for argument passing, with other arguments on the stack.
Microsoft uses only 4 registers, and requires the caller to leave room
on the stack for the register arguments incase the callee needs to
spill them. Unlike x86, where Microsoft uses a mix of _cdecl, _stdcall
and _fastcall, all routines on Windows/x86-64 uses the same convention.
This unfortunately means that all the functions we export to the
driver require an intermediate translation wrapper. Similarly, we have
to wrap all calls back into the driver binary itself.
The original patches provided macros to wrap every single routine at
compile time, providing a secondary jump table with a customized
wrapper for each exported routine. I decided to use a different approach:
the call wrapper for each function is created from a template at
runtime, and the routine to jump to is patched into the wrapper as
it is created. The subr_pe module has been modified to patch in the
wrapped function instead of the original. (On x86, the wrapping
routine is a no-op.)
There are some minor API differences that had to be accounted for:
- KeAcquireSpinLock() is a real function on amd64, not a macro wrapper
around KfAcquireSpinLock()
- NdisFreeBuffer() is actually IoFreeMdl(). I had to change the whole
NDIS_BUFFER API a bit to accomodate this.
Bugs fixed along the way:
- IoAllocateMdl() always returned NULL
- kern_windrv.c:windrv_unload() wasn't releasing private driver object
extensions correctly (found thanks to memguard)
This has only been tested with the driver for the Broadcom 802.11g
chipset, which was the only Windows/x86-64 driver I could find.
2005-02-16 05:41:18 +00:00
|
|
|
compat/ndis/winx64_wrap.S optional ndisapi pci
|
2007-04-06 04:51:50 +00:00
|
|
|
#
|
2009-02-28 16:21:25 +00:00
|
|
|
libkern/memmove.c standard
|
2007-04-06 04:51:50 +00:00
|
|
|
libkern/memset.c standard
|
2009-09-22 07:10:23 +00:00
|
|
|
#
|
2015-04-30 17:49:35 +00:00
|
|
|
# x86 real mode BIOS emulator, required by dpms/pci/vesa
|
2009-09-22 07:10:23 +00:00
|
|
|
#
|
2015-04-30 17:49:35 +00:00
|
|
|
compat/x86bios/x86bios.c optional x86bios | dpms | pci | vesa
|
|
|
|
contrib/x86emu/x86emu.c optional x86bios | dpms | pci | vesa
|
2010-02-25 14:13:39 +00:00
|
|
|
#
|
2011-05-14 18:37:24 +00:00
|
|
|
# bvm console
|
|
|
|
#
|
|
|
|
dev/bvm/bvm_console.c optional bvmconsole
|
|
|
|
dev/bvm/bvm_dbg.c optional bvmdebug
|
2011-05-14 20:35:01 +00:00
|
|
|
#
|
2010-02-25 14:13:39 +00:00
|
|
|
# x86 shared code between IA32, AMD64 and PC98 architectures
|
|
|
|
#
|
2010-11-09 00:27:18 +00:00
|
|
|
x86/acpica/OsdEnvironment.c optional acpi
|
2010-11-10 01:29:56 +00:00
|
|
|
x86/acpica/acpi_apm.c optional acpi
|
2012-06-10 02:38:51 +00:00
|
|
|
x86/acpica/acpi_wakeup.c optional acpi
|
2010-11-08 20:57:02 +00:00
|
|
|
x86/acpica/madt.c optional acpi
|
2010-07-27 20:40:46 +00:00
|
|
|
x86/acpica/srat.c optional acpi
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/bios/smbios.c optional smbios
|
|
|
|
x86/bios/vpd.c optional vpd
|
|
|
|
x86/cpufreq/powernow.c optional cpufreq
|
|
|
|
x86/cpufreq/est.c optional cpufreq
|
|
|
|
x86/cpufreq/hwpstate.c optional cpufreq
|
|
|
|
x86/cpufreq/p4tcc.c optional cpufreq
|
Import the driver for VT-d DMAR hardware, as specified in the revision
1.3 of Intelб╝ Virtualization Technology for Directed I/O Architecture
Specification. The Extended Context and PASIDs from the rev. 2.2 are
not supported, but I am not aware of any released hardware which
implements them. Code does not use queued invalidation, see comments
for the reason, and does not provide interrupt remapping services.
Code implements the management of the guest address space per domain
and allows to establish and tear down arbitrary mappings, but not
partial unmapping. The superpages are created as needed, but not
promoted. Faults are recorded, fault records could be obtained
programmatically, and printed on the console.
Implement the busdma(9) using DMARs. This busdma backend avoids
bouncing and provides security against misbehaving hardware and driver
bad programming, preventing leaks and corruption of the memory by wild
DMA accesses.
By default, the implementation is compiled into amd64 GENERIC kernel
but disabled; to enable, set hw.dmar.enable=1 loader tunable. Code is
written to work on i386, but testing there was low priority, and
driver is not enabled in GENERIC. Even with the DMAR turned on,
individual devices could be directed to use the bounce busdma with the
hw.busdma.pci<domain>:<bus>:<device>:<function>.bounce=1 tunable. If
DMARs are capable of the pass-through translations, it is used,
otherwise, an identity-mapping page table is constructed.
The driver was tested on Xeon 5400/5500 chipset legacy machine,
Haswell desktop and E5 SandyBridge dual-socket boxes, with ahci(4),
ata(4), bce(4), ehci(4), mfi(4), uhci(4), xhci(4) devices. It also
works with em(4) and igb(4), but there some fixes are needed for
drivers, which are not committed yet. Intel GPUs do not work with
DMAR (yet).
Many thanks to John Baldwin, who explained me the newbus integration;
Peter Holm, who did all testing and helped me to discover and
understand several incredible bugs; and to Jim Harris for the access
to the EDS and BWG and for listening when I have to explain my
findings to somebody.
Sponsored by: The FreeBSD Foundation
MFC after: 1 month
2013-10-28 13:33:29 +00:00
|
|
|
x86/iommu/busdma_dmar.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_ctx.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_drv.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_fault.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_gas.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_idpgtbl.c optional acpi acpi_dmar pci
|
Use VT-d interrupt remapping block (IR) to perform FSB messages
translation. In particular, despite IO-APICs only take 8bit apic id,
IR translation structures accept 32bit APIC Id, which allows x2APIC
mode to function properly. Extend msi_cpu of struct msi_intrsrc and
io_cpu of ioapic_intsrc to full int from one byte.
KPI of IR is isolated into the x86/iommu/iommu_intrmap.h, to avoid
bringing all dmar headers into interrupt code. The non-PCI(e) devices
which generate message interrupts on FSB require special handling. The
HPET FSB interrupts are remapped, while DMAR interrupts are not.
For each msi and ioapic interrupt source, the iommu cookie is added,
which is in fact index of the IRE (interrupt remap entry) in the IR
table. Cookie is made at the source allocation time, and then used at
the map time to fill both IRE and device registers. The MSI
address/data registers and IO-APIC redirection registers are
programmed with the special values which are recognized by IR and used
to restore the IRE index, to find proper delivery mode and target.
Map all MSI interrupts in the block when msi_map() is called.
Since an interrupt source setup and dismantle code are done in the
non-sleepable context, flushing interrupt entries cache in the IR
hardware, which is done async and ideally waits for the interrupt,
requires busy-wait for queue to drain. The dmar_qi_wait_for_seq() is
modified to take a boolean argument requesting busy-wait for the
written sequence number instead of waiting for interrupt.
Some interrupts are configured before IR is initialized, e.g. ACPI
SCI. Add intr_reprogram() function to reprogram all already
configured interrupts, and call it immediately before an IR unit is
enabled. There is still a small window after the IO-APIC redirection
entry is reprogrammed with cookie but before the unit is enabled, but
to fix this properly, IR must be started much earlier.
Add workarounds for 5500 and X58 northbridges, some revisions of which
have severe flaws in handling IR. Use the same identification methods
as employed by Linux.
Review: https://reviews.freebsd.org/D1892
Reviewed by: neel
Discussed with: jhb
Tested by: glebius, pho (previous versions)
Sponsored by: The FreeBSD Foundation
MFC after: 3 weeks
2015-03-19 13:57:47 +00:00
|
|
|
x86/iommu/intel_intrmap.c optional acpi acpi_dmar pci
|
2013-11-01 17:38:52 +00:00
|
|
|
x86/iommu/intel_qi.c optional acpi acpi_dmar pci
|
Import the driver for VT-d DMAR hardware, as specified in the revision
1.3 of Intelб╝ Virtualization Technology for Directed I/O Architecture
Specification. The Extended Context and PASIDs from the rev. 2.2 are
not supported, but I am not aware of any released hardware which
implements them. Code does not use queued invalidation, see comments
for the reason, and does not provide interrupt remapping services.
Code implements the management of the guest address space per domain
and allows to establish and tear down arbitrary mappings, but not
partial unmapping. The superpages are created as needed, but not
promoted. Faults are recorded, fault records could be obtained
programmatically, and printed on the console.
Implement the busdma(9) using DMARs. This busdma backend avoids
bouncing and provides security against misbehaving hardware and driver
bad programming, preventing leaks and corruption of the memory by wild
DMA accesses.
By default, the implementation is compiled into amd64 GENERIC kernel
but disabled; to enable, set hw.dmar.enable=1 loader tunable. Code is
written to work on i386, but testing there was low priority, and
driver is not enabled in GENERIC. Even with the DMAR turned on,
individual devices could be directed to use the bounce busdma with the
hw.busdma.pci<domain>:<bus>:<device>:<function>.bounce=1 tunable. If
DMARs are capable of the pass-through translations, it is used,
otherwise, an identity-mapping page table is constructed.
The driver was tested on Xeon 5400/5500 chipset legacy machine,
Haswell desktop and E5 SandyBridge dual-socket boxes, with ahci(4),
ata(4), bce(4), ehci(4), mfi(4), uhci(4), xhci(4) devices. It also
works with em(4) and igb(4), but there some fixes are needed for
drivers, which are not committed yet. Intel GPUs do not work with
DMAR (yet).
Many thanks to John Baldwin, who explained me the newbus integration;
Peter Holm, who did all testing and helped me to discover and
understand several incredible bugs; and to Jim Harris for the access
to the EDS and BWG and for listening when I have to explain my
findings to somebody.
Sponsored by: The FreeBSD Foundation
MFC after: 1 month
2013-10-28 13:33:29 +00:00
|
|
|
x86/iommu/intel_quirks.c optional acpi acpi_dmar pci
|
|
|
|
x86/iommu/intel_utils.c optional acpi acpi_dmar pci
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/isa/atpic.c optional atpic isa
|
2010-02-25 15:00:27 +00:00
|
|
|
x86/isa/atrtc.c standard
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/isa/clock.c standard
|
2012-03-09 19:42:48 +00:00
|
|
|
x86/isa/elcr.c optional atpic isa | mptable
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/isa/isa.c standard
|
|
|
|
x86/isa/isa_dma.c standard
|
|
|
|
x86/isa/nmi.c standard
|
|
|
|
x86/isa/orm.c optional isa
|
2011-06-22 21:04:13 +00:00
|
|
|
x86/pci/pci_bus.c optional pci
|
|
|
|
x86/pci/qpi.c optional pci
|
2013-10-27 22:05:10 +00:00
|
|
|
x86/x86/busdma_bounce.c standard
|
2010-12-09 06:41:50 +00:00
|
|
|
x86/x86/busdma_machdep.c standard
|
2015-04-22 12:32:14 +00:00
|
|
|
x86/x86/cpu_machdep.c standard
|
2010-10-26 12:46:26 +00:00
|
|
|
x86/x86/dump_machdep.c standard
|
2013-05-21 03:05:49 +00:00
|
|
|
x86/x86/fdt_machdep.c optional fdt
|
2014-09-04 14:26:25 +00:00
|
|
|
x86/x86/identcpu.c standard
|
2012-03-09 20:43:29 +00:00
|
|
|
x86/x86/intr_machdep.c standard
|
2010-06-08 17:51:21 +00:00
|
|
|
x86/x86/io_apic.c standard
|
2012-03-30 19:10:14 +00:00
|
|
|
x86/x86/legacy.c standard
|
2010-06-08 17:51:21 +00:00
|
|
|
x86/x86/local_apic.c standard
|
2010-06-08 18:04:07 +00:00
|
|
|
x86/x86/mca.c standard
|
2010-10-28 07:58:06 +00:00
|
|
|
x86/x86/mptable.c optional mptable
|
|
|
|
x86/x86/mptable_pci.c optional mptable pci
|
2015-04-24 16:20:56 +00:00
|
|
|
x86/x86/mp_x86.c optional smp
|
2010-06-08 18:36:03 +00:00
|
|
|
x86/x86/msi.c optional pci
|
2010-10-28 16:31:39 +00:00
|
|
|
x86/x86/nexus.c standard
|
2015-02-04 08:26:43 +00:00
|
|
|
x86/x86/pvclock.c standard
|
2010-12-08 00:09:24 +00:00
|
|
|
x86/x86/tsc.c standard
|
2014-03-11 10:20:42 +00:00
|
|
|
x86/x86/delay.c standard
|
Implement vector callback for PVHVM and unify event channel implementations
Re-structure Xen HVM support so that:
- Xen is detected and hypercalls can be performed very
early in system startup.
- Xen interrupt services are implemented using FreeBSD's native
interrupt delivery infrastructure.
- the Xen interrupt service implementation is shared between PV
and HVM guests.
- Xen interrupt handlers can optionally use a filter handler
in order to avoid the overhead of dispatch to an interrupt
thread.
- interrupt load can be distributed among all available CPUs.
- the overhead of accessing the emulated local and I/O apics
on HVM is removed for event channel port events.
- a similar optimization can eventually, and fairly easily,
be used to optimize MSI.
Early Xen detection, HVM refactoring, PVHVM interrupt infrastructure,
and misc Xen cleanups:
Sponsored by: Spectra Logic Corporation
Unification of PV & HVM interrupt infrastructure, bug fixes,
and misc Xen cleanups:
Submitted by: Roger Pau Monné
Sponsored by: Citrix Systems R&D
sys/x86/x86/local_apic.c:
sys/amd64/include/apicvar.h:
sys/i386/include/apicvar.h:
sys/amd64/amd64/apic_vector.S:
sys/i386/i386/apic_vector.s:
sys/amd64/amd64/machdep.c:
sys/i386/i386/machdep.c:
sys/i386/xen/exception.s:
sys/x86/include/segments.h:
Reserve IDT vector 0x93 for the Xen event channel upcall
interrupt handler. On Hypervisors that support the direct
vector callback feature, we can request that this vector be
called directly by an injected HVM interrupt event, instead
of a simulated PCI interrupt on the Xen platform PCI device.
This avoids all of the overhead of dealing with the emulated
I/O APIC and local APIC. It also means that the Hypervisor
can inject these events on any CPU, allowing upcalls for
different ports to be handled in parallel.
sys/amd64/amd64/mp_machdep.c:
sys/i386/i386/mp_machdep.c:
Map Xen per-vcpu area during AP startup.
sys/amd64/include/intr_machdep.h:
sys/i386/include/intr_machdep.h:
Increase the FreeBSD IRQ vector table to include space
for event channel interrupt sources.
sys/amd64/include/pcpu.h:
sys/i386/include/pcpu.h:
Remove Xen HVM per-cpu variable data. These fields are now
allocated via the dynamic per-cpu scheme. See xen_intr.c
for details.
sys/amd64/include/xen/hypercall.h:
sys/dev/xen/blkback/blkback.c:
sys/i386/include/xen/xenvar.h:
sys/i386/xen/clock.c:
sys/i386/xen/xen_machdep.c:
sys/xen/gnttab.c:
Prefer FreeBSD primatives to Linux ones in Xen support code.
sys/amd64/include/xen/xen-os.h:
sys/i386/include/xen/xen-os.h:
sys/xen/xen-os.h:
sys/dev/xen/balloon/balloon.c:
sys/dev/xen/blkback/blkback.c:
sys/dev/xen/blkfront/blkfront.c:
sys/dev/xen/console/xencons_ring.c:
sys/dev/xen/control/control.c:
sys/dev/xen/netback/netback.c:
sys/dev/xen/netfront/netfront.c:
sys/dev/xen/xenpci/xenpci.c:
sys/i386/i386/machdep.c:
sys/i386/include/pmap.h:
sys/i386/include/xen/xenfunc.h:
sys/i386/isa/npx.c:
sys/i386/xen/clock.c:
sys/i386/xen/mp_machdep.c:
sys/i386/xen/mptable.c:
sys/i386/xen/xen_clock_util.c:
sys/i386/xen/xen_machdep.c:
sys/i386/xen/xen_rtc.c:
sys/xen/evtchn/evtchn_dev.c:
sys/xen/features.c:
sys/xen/gnttab.c:
sys/xen/gnttab.h:
sys/xen/hvm.h:
sys/xen/xenbus/xenbus.c:
sys/xen/xenbus/xenbus_if.m:
sys/xen/xenbus/xenbusb_front.c:
sys/xen/xenbus/xenbusvar.h:
sys/xen/xenstore/xenstore.c:
sys/xen/xenstore/xenstore_dev.c:
sys/xen/xenstore/xenstorevar.h:
Pull common Xen OS support functions/settings into xen/xen-os.h.
sys/amd64/include/xen/xen-os.h:
sys/i386/include/xen/xen-os.h:
sys/xen/xen-os.h:
Remove constants, macros, and functions unused in FreeBSD's Xen
support.
sys/xen/xen-os.h:
sys/i386/xen/xen_machdep.c:
sys/x86/xen/hvm.c:
Introduce new functions xen_domain(), xen_pv_domain(), and
xen_hvm_domain(). These are used in favor of #ifdefs so that
FreeBSD can dynamically detect and adapt to the presence of
a hypervisor. The goal is to have an HVM optimized GENERIC,
but more is necessary before this is possible.
sys/amd64/amd64/machdep.c:
sys/dev/xen/xenpci/xenpcivar.h:
sys/dev/xen/xenpci/xenpci.c:
sys/x86/xen/hvm.c:
sys/sys/kernel.h:
Refactor magic ioport, Hypercall table and Hypervisor shared
information page setup, and move it to a dedicated HVM support
module.
HVM mode initialization is now triggered during the
SI_SUB_HYPERVISOR phase of system startup. This currently
occurs just after the kernel VM is fully setup which is
just enough infrastructure to allow the hypercall table
and shared info page to be properly mapped.
sys/xen/hvm.h:
sys/x86/xen/hvm.c:
Add definitions and a method for configuring Hypervisor event
delievery via a direct vector callback.
sys/amd64/include/xen/xen-os.h:
sys/x86/xen/hvm.c:
sys/conf/files:
sys/conf/files.amd64:
sys/conf/files.i386:
Adjust kernel build to reflect the refactoring of early
Xen startup code and Xen interrupt services.
sys/dev/xen/blkback/blkback.c:
sys/dev/xen/blkfront/blkfront.c:
sys/dev/xen/blkfront/block.h:
sys/dev/xen/control/control.c:
sys/dev/xen/evtchn/evtchn_dev.c:
sys/dev/xen/netback/netback.c:
sys/dev/xen/netfront/netfront.c:
sys/xen/xenstore/xenstore.c:
sys/xen/evtchn/evtchn_dev.c:
sys/dev/xen/console/console.c:
sys/dev/xen/console/xencons_ring.c
Adjust drivers to use new xen_intr_*() API.
sys/dev/xen/blkback/blkback.c:
Since blkback defers all event handling to a taskqueue,
convert this task queue to a "fast" taskqueue, and schedule
it via an interrupt filter. This avoids an unnecessary
ithread context switch.
sys/xen/xenstore/xenstore.c:
The xenstore driver is MPSAFE. Indicate as much when
registering its interrupt handler.
sys/xen/xenbus/xenbus.c:
sys/xen/xenbus/xenbusvar.h:
Remove unused event channel APIs.
sys/xen/evtchn.h:
Remove all kernel Xen interrupt service API definitions
from this file. It is now only used for structure and
ioctl definitions related to the event channel userland
device driver.
Update the definitions in this file to match those from
NetBSD. Implementing this interface will be necessary for
Dom0 support.
sys/xen/evtchn/evtchnvar.h:
Add a header file for implemenation internal APIs related
to managing event channels event delivery. This is used
to allow, for example, the event channel userland device
driver to access low-level routines that typical kernel
consumers of event channel services should never access.
sys/xen/interface/event_channel.h:
sys/xen/xen_intr.h:
Standardize on the evtchn_port_t type for referring to
an event channel port id. In order to prevent low-level
event channel APIs from leaking to kernel consumers who
should not have access to this data, the type is defined
twice: Once in the Xen provided event_channel.h, and again
in xen/xen_intr.h. The double declaration is protected by
__XEN_EVTCHN_PORT_DEFINED__ to ensure it is never declared
twice within a given compilation unit.
sys/xen/xen_intr.h:
sys/xen/evtchn/evtchn.c:
sys/x86/xen/xen_intr.c:
sys/dev/xen/xenpci/evtchn.c:
sys/dev/xen/xenpci/xenpcivar.h:
New implementation of Xen interrupt services. This is
similar in many respects to the i386 PV implementation with
the exception that events for bound to event channel ports
(i.e. not IPI, virtual IRQ, or physical IRQ) are further
optimized to avoid mask/unmask operations that aren't
necessary for these edge triggered events.
Stubs exist for supporting physical IRQ binding, but will
need additional work before this implementation can be
fully shared between PV and HVM.
sys/amd64/amd64/mp_machdep.c:
sys/i386/i386/mp_machdep.c:
sys/i386/xen/mp_machdep.c
sys/x86/xen/hvm.c:
Add support for placing vcpu_info into an arbritary memory
page instead of using HYPERVISOR_shared_info->vcpu_info.
This allows the creation of domains with more than 32 vcpus.
sys/i386/i386/machdep.c:
sys/i386/xen/clock.c:
sys/i386/xen/xen_machdep.c:
sys/i386/xen/exception.s:
Add support for new event channle implementation.
2013-08-29 19:52:18 +00:00
|
|
|
x86/xen/hvm.c optional xenhvm
|
2015-04-30 15:48:48 +00:00
|
|
|
x86/xen/xen_intr.c optional xenhvm
|
2014-03-11 10:07:01 +00:00
|
|
|
x86/xen/pv.c optional xenhvm
|
2014-03-11 10:25:08 +00:00
|
|
|
x86/xen/pvcpu_enum.c optional xenhvm
|
2014-06-16 08:43:45 +00:00
|
|
|
x86/xen/xen_apic.c optional xenhvm
|
2014-06-16 08:44:33 +00:00
|
|
|
x86/xen/xenpv.c optional xenhvm
|
2014-06-16 08:45:51 +00:00
|
|
|
x86/xen/xen_nexus.c optional xenhvm
|
2014-09-30 16:46:45 +00:00
|
|
|
x86/xen/xen_msi.c optional xenhvm
|
2014-12-09 18:03:25 +00:00
|
|
|
x86/xen/xen_pci_bus.c optional xenhvm
|