1993-08-21 22:24:24 +00:00
|
|
|
# This file tells config what files go into building a kernel,
|
|
|
|
# files marked standard are always included.
|
1993-06-12 14:58:17 +00:00
|
|
|
#
|
Mega-commit for Linux emulator update.. This has been stress tested under
netscape-2.0 for Linux running all the Java stuff. The scrollbars are now
working, at least on my machine. (whew! :-)
I'm uncomfortable with the size of this commit, but it's too
inter-dependant to easily seperate out.
The main changes:
COMPAT_LINUX is *GONE*. Most of the code has been moved out of the i386
machine dependent section into the linux emulator itself. The int 0x80
syscall code was almost identical to the lcall 7,0 code and a minor tweak
allows them to both be used with the same C code. All kernels can now
just modload the lkm and it'll DTRT without having to rebuild the kernel
first. Like IBCS2, you can statically compile it in with "options LINUX".
A pile of new syscalls implemented, including getdents(), llseek(),
readv(), writev(), msync(), personality(). The Linux-ELF libraries want
to use some of these.
linux_select() now obeys Linux semantics, ie: returns the time remaining
of the timeout value rather than leaving it the original value.
Quite a few bugs removed, including incorrect arguments being used in
syscalls.. eg: mixups between passing the sigset as an int, vs passing
it as a pointer and doing a copyin(), missing return values, unhandled
cases, SIOC* ioctls, etc.
The build for the code has changed. i386/conf/files now knows how
to build linux_genassym and generate linux_assym.h on the fly.
Supporting changes elsewhere in the kernel:
The user-mode signal trampoline has moved from the U area to immediately
below the top of the stack (below PS_STRINGS). This allows the different
binary emulations to have their own signal trampoline code (which gets rid
of the hardwired syscall 103 (sigreturn on BSD, syslog on Linux)) and so
that the emulator can provide the exact "struct sigcontext *" argument to
the program's signal handlers.
The sigstack's "ss_flags" now uses SS_DISABLE and SS_ONSTACK flags, which
have the same values as the re-used SA_DISABLE and SA_ONSTACK which are
intended for sigaction only. This enables the support of a SA_RESETHAND
flag to sigaction to implement the gross SYSV and Linux SA_ONESHOT signal
semantics where the signal handler is reset when it's triggered.
makesyscalls.sh no longer appends the struct sysentvec on the end of the
generated init_sysent.c code. It's a lot saner to have it in a seperate
file rather than trying to update the structure inside the awk script. :-)
At exec time, the dozen bytes or so of signal trampoline code are copied
to the top of the user's stack, rather than obtaining the trampoline code
the old way by getting a clone of the parent's user area. This allows
Linux and native binaries to freely exec each other without getting
trampolines mixed up.
1996-03-02 19:38:20 +00:00
|
|
|
#
|
2019-08-12 22:58:56 +00:00
|
|
|
|
|
|
|
# common files stuff between i386 and amd64
|
|
|
|
include "conf/files.x86"
|
|
|
|
|
1997-06-01 20:25:55 +00:00
|
|
|
# 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.
|
|
|
|
#
|
2015-06-10 15:53:39 +00:00
|
|
|
cddl/dev/dtrace/i386/dtrace_asm.S optional dtrace compile-with "${DTRACE_S}"
|
|
|
|
cddl/dev/dtrace/i386/dtrace_subr.c optional dtrace compile-with "${DTRACE_C}"
|
2010-07-23 11:00:46 +00:00
|
|
|
crypto/aesni/aeskeys_i386.S optional aesni
|
2020-05-11 21:34:29 +00:00
|
|
|
crypto/des/arch/i386/des_enc.S optional netsmb
|
2021-11-02 11:53:22 +00:00
|
|
|
crypto/openssl/i386/aesni-x86.S optional ossl
|
2021-03-03 23:17:43 +00:00
|
|
|
crypto/openssl/i386/chacha-x86.S optional ossl
|
2021-03-03 23:17:29 +00:00
|
|
|
crypto/openssl/i386/poly1305-x86.S optional ossl
|
2020-10-20 17:50:18 +00:00
|
|
|
crypto/openssl/i386/sha1-586.S optional ossl
|
|
|
|
crypto/openssl/i386/sha256-586.S optional ossl
|
|
|
|
crypto/openssl/i386/sha512-586.S optional ossl
|
2009-01-23 17:48:18 +00:00
|
|
|
dev/agp/agp_ali.c optional agp
|
|
|
|
dev/agp/agp_amd.c optional agp
|
|
|
|
dev/agp/agp_amd64.c optional agp
|
|
|
|
dev/agp/agp_ati.c optional agp
|
|
|
|
dev/agp/agp_i810.c optional agp
|
|
|
|
dev/agp/agp_intel.c optional agp
|
2007-11-12 21:51:38 +00:00
|
|
|
dev/agp/agp_nvidia.c optional agp
|
2009-01-23 17:48:18 +00:00
|
|
|
dev/agp/agp_sis.c optional agp
|
|
|
|
dev/agp/agp_via.c optional agp
|
2011-05-15 14:01:23 +00:00
|
|
|
dev/glxiic/glxiic.c optional glxiic
|
2008-08-09 14:52:31 +00:00
|
|
|
dev/glxsb/glxsb.c optional glxsb
|
|
|
|
dev/glxsb/glxsb_hash.c optional glxsb
|
2016-06-06 05:55:37 +00:00
|
|
|
dev/hyperv/vmbus/i386/hyperv_machdep.c optional hyperv
|
2006-05-17 21:25:23 +00:00
|
|
|
dev/le/if_le_isa.c optional le isa
|
2017-03-30 15:05:10 +00:00
|
|
|
dev/nctgpio/nctgpio.c optional nctgpio
|
2006-06-26 23:41:07 +00:00
|
|
|
dev/nfe/if_nfe.c optional nfe pci
|
2015-10-13 17:22:23 +00:00
|
|
|
dev/ntb/if_ntb/if_ntb.c optional if_ntb
|
2017-08-30 21:16:32 +00:00
|
|
|
dev/ntb/ntb_transport.c optional ntb_transport | if_ntb
|
2019-07-02 05:25:18 +00:00
|
|
|
dev/ntb/ntb.c optional ntb | ntb_transport | if_ntb | ntb_hw_amd | ntb_hw_intel | ntb_hw_plx | ntb_hw
|
|
|
|
dev/ntb/ntb_if.m optional ntb | ntb_transport | if_ntb | ntb_hw_amd | ntb_hw_intel | ntb_hw_plx | ntb_hw
|
|
|
|
dev/ntb/ntb_hw/ntb_hw_amd.c optional ntb_hw_amd | ntb_hw
|
2017-09-01 19:15:53 +00:00
|
|
|
dev/ntb/ntb_hw/ntb_hw_intel.c optional ntb_hw_intel | ntb_hw
|
|
|
|
dev/ntb/ntb_hw/ntb_hw_plx.c optional ntb_hw_plx | ntb_hw
|
2019-08-16 20:14:37 +00:00
|
|
|
dev/ntb/test/ntb_tool.c optional ntb_tool
|
2019-08-13 15:50:47 +00:00
|
|
|
dev/nvram/nvram.c optional nvram isa
|
2021-05-19 15:27:42 +00:00
|
|
|
dev/ofw/ofw_pcib.c optional fdt pci
|
2005-10-28 15:58:19 +00:00
|
|
|
dev/pcf/pcf_isa.c optional pcf
|
random(4): Fix RANDOM_LOADABLE build
I introduced an obvious compiler error in r346282, so this change fixes
that.
Unfortunately, RANDOM_LOADABLE isn't covered by our existing tinderbox, and
it seems like there were existing latent linking problems. I believe these
were introduced on accident in r338324 during reduction of the boolean
expression(s) adjacent to randomdev.c and hash.c. It seems the
RANDOM_LOADABLE build breakage has gone unnoticed for nine months.
This change correctly annotates randomdev.c and hash.c with !random_loadable
to match the pre-r338324 logic; and additionally updates the HWRNG drivers
in MD 'files.*', which depend on random_device symbols, with
!random_loadable (it is invalid for the kernel to depend on symbols from a
module).
(The expression for both randomdev.c and hash.c was the same, prior to
r338324: "optional random random_yarrow | random !random_yarrow
!random_loadable". I.e., "random && (yarrow || !loadable)." When Yarrow
was removed ("yarrow := False"), the expression was incorrectly reduced to
"optional random" when it should have retained "random && !loadable".)
Additionally, I discovered that virtio_random was missing a MODULE_DEPEND on
random_device, which breaks kld load/link of the driver on RANDOM_LOADABLE
kernels. Address that issue as well.
PR: 238223
Reported by: Eir Nym <eirnym AT gmail.com>
Reviewed by: delphij, markm
Approved by: secteam(delphij)
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D20466
2019-06-01 01:22:21 +00:00
|
|
|
dev/random/ivy.c optional rdrand_rng !random_loadable
|
|
|
|
dev/random/nehemiah.c optional padlock_rng !random_loadable
|
2008-09-10 18:36:58 +00:00
|
|
|
dev/sbni/if_sbni.c optional sbni
|
|
|
|
dev/sbni/if_sbni_isa.c optional sbni isa
|
|
|
|
dev/sbni/if_sbni_pci.c optional sbni pci
|
2005-11-11 09:57:32 +00:00
|
|
|
dev/speaker/spkr.c optional speaker
|
add superio driver
The goal of this driver is consolidate information about SuperIO chips
and to provide for peaceful coexistence of drivers that need to access
SuperIO configuration registers.
While SuperIO chips can host various functions most of them are
discoverable and accessible without any knowledge of the SuperIO.
Examples are: keyboard and mouse controllers, UARTs, floppy disk
controllers. SuperIO-s also provide non-standard functions such as
GPIO, watchdog timers and hardware monitoring. Such functions do
require drivers with a knowledge of a specific SuperIO.
At this time the driver supports a number of ITE and Nuvoton (fka
Winbond) SuperIO chips.
There is a single driver for all devices. So, I have not done the usual
split between the hardware driver and the bus functionality. Although,
superio does act as a bus for devices that represent known non-standard
functions of a SuperIO chip. The bus provides enumeration of child
devices based on the hardcoded knowledge of such functions. The
knowledge as extracted from datasheets and other drivers.
As there is a single driver, I have not defined a kobj interface for it.
So, its interface is currently made of simple functions.
I think that we can the flexibility (and complications) when we actually
need it.
I am planning to convert nctgpio and wbwd to superio bus very soon.
Also, I am working on itwd driver (watchdog in ITE SuperIO-s).
Additionally, there is ithwm driver based on the reverted sensors
import, but I am not sure how to integrate it given that we still lack
any sensors interface.
Discussed with: imp, jhb
MFC after: 7 weeks
Differential Revision: https://reviews.freebsd.org/D8175
2019-07-01 17:05:41 +00:00
|
|
|
dev/superio/superio.c optional superio isa
|
2009-09-21 07:08:20 +00:00
|
|
|
dev/syscons/scvesactl.c optional sc vga vesa
|
2005-01-04 06:07:25 +00:00
|
|
|
dev/syscons/scvgarndr.c optional sc vga
|
2010-08-12 00:16:18 +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
|
2021-09-03 00:58:02 +00:00
|
|
|
dev/vmd/vmd.c optional vmd
|
2009-06-23 13:17:25 +00:00
|
|
|
dev/acpi_support/acpi_wmi_if.m standard
|
2012-03-06 18:44:52 +00:00
|
|
|
dev/wbwd/wbwd.c optional wbwd
|
2023-01-03 15:16:36 +00:00
|
|
|
dev/wdatwd/wdatwd.c optional wdatwd
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/acpica/acpi_machdep.c optional acpi
|
2021-09-12 19:24:33 +00:00
|
|
|
i386/acpica/acpi_wakeup.c optional acpi
|
2010-11-12 20:55:14 +00:00
|
|
|
acpi_wakecode.o optional acpi \
|
2018-03-20 17:58:51 +00:00
|
|
|
dependency "$S/i386/acpica/acpi_wakecode.S assym.inc" \
|
2010-11-12 20:55:14 +00:00
|
|
|
compile-with "${NORMAL_S}" \
|
2001-07-20 06:07:34 +00:00
|
|
|
no-obj no-implicit-rule before-depend \
|
2010-11-12 20:55:14 +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-11-12 20:55:14 +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" \
|
|
|
|
compile-with '${NM} -n --defined-only acpi_wakecode.o | while read offset dummy what; do echo "#define $${what} 0x$${offset}"; done > ${.TARGET}' \
|
|
|
|
no-obj no-implicit-rule before-depend \
|
|
|
|
clean "acpi_wakedata.h"
|
2001-07-20 06:07:34 +00:00
|
|
|
#
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/bios/smapi.c optional smapi
|
|
|
|
i386/bios/smapi_bios.S optional smapi
|
2022-07-24 23:14:20 +00:00
|
|
|
#i386/i386/apic_vector.S optional apic
|
2015-04-30 15:48:48 +00:00
|
|
|
i386/i386/bios.c standard
|
2022-07-24 23:14:20 +00:00
|
|
|
i386/i386/bioscall.S standard
|
2005-12-07 21:30:47 +00:00
|
|
|
i386/i386/bpf_jit_machdep.c optional bpf_jitter
|
i386 4/4G split.
The change makes the user and kernel address spaces on i386
independent, giving each almost the full 4G of usable virtual addresses
except for one PDE at top used for trampoline and per-CPU trampoline
stacks, and system structures that must be always mapped, namely IDT,
GDT, common TSS and LDT, and process-private TSS and LDT if allocated.
By using 1:1 mapping for the kernel text and data, it appeared
possible to eliminate assembler part of the locore.S which bootstraps
initial page table and KPTmap. The code is rewritten in C and moved
into the pmap_cold(). The comment in vmparam.h explains the KVA
layout.
There is no PCID mechanism available in protected mode, so each
kernel/user switch forth and back completely flushes the TLB, except
for the trampoline PTD region. The TLB invalidations for userspace
becomes trivial, because IPI handlers switch page tables. On the other
hand, context switches no longer need to reload %cr3.
copyout(9) was rewritten to use vm_fault_quick_hold(). An issue for
new copyout(9) is compatibility with wiring user buffers around sysctl
handlers. This explains two kind of locks for copyout ptes and
accounting of the vslock() calls. The vm_fault_quick_hold() AKA slow
path, is only tried after the 'fast path' failed, which temporary
changes mapping to the userspace and copies the data to/from small
per-cpu buffer in the trampoline. If a page fault occurs during the
copy, it is short-circuit by exception.s to not even reach C code.
The change was motivated by the need to implement the Meltdown
mitigation, but instead of KPTI the full split is done. The i386
architecture already shows the sizing problems, in particular, it is
impossible to link clang and lld with debugging. I expect that the
issues due to the virtual address space limits would only exaggerate
and the split gives more liveness to the platform.
Tested by: pho
Discussed with: bde
Sponsored by: The FreeBSD Foundation
MFC after: 1 month
Differential revision: https://reviews.freebsd.org/D14633
2018-04-13 20:30:49 +00:00
|
|
|
i386/i386/copyout.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/db_disasm.c optional ddb
|
|
|
|
i386/i386/db_interface.c optional ddb
|
|
|
|
i386/i386/db_trace.c optional ddb
|
2021-10-04 01:29:26 +00:00
|
|
|
i386/i386/exec_machdep.c standard
|
2005-11-27 21:41:58 +00:00
|
|
|
i386/i386/elan-mmcr.c optional cpu_elan | cpu_soekris
|
1998-10-09 23:08:14 +00:00
|
|
|
i386/i386/elf_machdep.c standard
|
2022-07-24 23:14:20 +00:00
|
|
|
i386/i386/exception.S standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/gdb_machdep.c optional gdb
|
|
|
|
i386/i386/geode.c optional cpu_geode
|
2021-11-24 18:19:44 +00:00
|
|
|
i386/i386/in_cksum_machdep.c optional inet | inet6
|
1997-03-22 18:54:54 +00:00
|
|
|
i386/i386/initcpu.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/io.c optional io
|
|
|
|
i386/i386/k6_mem.c optional mem
|
2022-07-24 23:14:20 +00:00
|
|
|
i386/i386/locore.S standard no-obj
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/longrun.c optional cpu_enable_longrun
|
1994-08-30 17:18:34 +00:00
|
|
|
i386/i386/machdep.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/mem.c optional mem
|
2006-04-21 04:28:43 +00:00
|
|
|
i386/i386/minidump_machdep.c standard
|
i386: Merge PAE and non-PAE pmaps into same kernel.
Effectively all i386 kernels now have two pmaps compiled in: one
managing PAE pagetables, and another non-PAE. The implementation is
selected at cold time depending on the CPU features. The vm_paddr_t is
always 64bit now. As result, nx bit can be used on all capable CPUs.
Option PAE only affects the bus_addr_t: it is still 32bit for non-PAE
configs, for drivers compatibility. Kernel layout, esp. max kernel
address, low memory PDEs and max user address (same as trampoline
start) are now same for PAE and for non-PAE regardless of the type of
page tables used.
Non-PAE kernel (when using PAE pagetables) can handle physical memory
up to 24G now, larger memory requires re-tuning the KVA consumers and
instead the code caps the maximum at 24G. Unfortunately, a lot of
drivers do not use busdma(9) properly so by default even 4G barrier is
not easy. There are two tunables added: hw.above4g_allow and
hw.above24g_allow, the first one is kept enabled for now to evaluate
the status on HEAD, second is only for dev use.
i386 now creates three freelists if there is any memory above 4G, to
allow proper bounce pages allocation. Also, VM_KMEM_SIZE_SCALE changed
from 3 to 1.
The PAE_TABLES kernel config option is retired.
In collaboarion with: pho
Discussed with: emaste
Reviewed by: markj
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D18894
2019-01-30 02:07:13 +00:00
|
|
|
i386/i386/minidump_machdep_pae.c standard
|
|
|
|
i386/i386/minidump_machdep_nopae.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/mp_clock.c optional smp
|
2015-04-30 15:48:48 +00:00
|
|
|
i386/i386/mp_machdep.c optional smp
|
2022-07-24 23:14:20 +00:00
|
|
|
i386/i386/mpboot.S optional smp
|
2017-12-30 11:33:04 +00:00
|
|
|
i386/i386/npx.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/i386/perfmon.c optional perfmon
|
i386: Merge PAE and non-PAE pmaps into same kernel.
Effectively all i386 kernels now have two pmaps compiled in: one
managing PAE pagetables, and another non-PAE. The implementation is
selected at cold time depending on the CPU features. The vm_paddr_t is
always 64bit now. As result, nx bit can be used on all capable CPUs.
Option PAE only affects the bus_addr_t: it is still 32bit for non-PAE
configs, for drivers compatibility. Kernel layout, esp. max kernel
address, low memory PDEs and max user address (same as trampoline
start) are now same for PAE and for non-PAE regardless of the type of
page tables used.
Non-PAE kernel (when using PAE pagetables) can handle physical memory
up to 24G now, larger memory requires re-tuning the KVA consumers and
instead the code caps the maximum at 24G. Unfortunately, a lot of
drivers do not use busdma(9) properly so by default even 4G barrier is
not easy. There are two tunables added: hw.above4g_allow and
hw.above24g_allow, the first one is kept enabled for now to evaluate
the status on HEAD, second is only for dev use.
i386 now creates three freelists if there is any memory above 4G, to
allow proper bounce pages allocation. Also, VM_KMEM_SIZE_SCALE changed
from 3 to 1.
The PAE_TABLES kernel config option is retired.
In collaboarion with: pho
Discussed with: emaste
Reviewed by: markj
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential revision: https://reviews.freebsd.org/D18894
2019-01-30 02:07:13 +00:00
|
|
|
i386/i386/pmap_base.c standard
|
|
|
|
i386/i386/pmap_nopae.c standard
|
|
|
|
i386/i386/pmap_pae.c standard
|
2005-05-31 09:43:04 +00:00
|
|
|
i386/i386/ptrace_machdep.c standard
|
2022-07-24 23:14:20 +00:00
|
|
|
i386/i386/sigtramp.S standard
|
|
|
|
i386/i386/support.S standard
|
|
|
|
i386/i386/swtch.S standard
|
1993-06-12 14:58:17 +00:00
|
|
|
i386/i386/sys_machdep.c standard
|
|
|
|
i386/i386/trap.c standard
|
2004-03-21 20:28:36 +00:00
|
|
|
i386/i386/uio_machdep.c standard
|
1999-06-01 18:18:39 +00:00
|
|
|
i386/i386/vm86.c standard
|
1999-06-29 16:14:20 +00:00
|
|
|
i386/i386/vm_machdep.c standard
|
2005-01-04 06:07:25 +00:00
|
|
|
i386/pci/pci_cfgreg.c optional pci
|
2012-09-12 19:36:54 +00:00
|
|
|
i386/pci/pci_pir.c optional pci
|
2005-01-04 06:07:25 +00:00
|
|
|
isa/syscons_isa.c optional sc
|
|
|
|
isa/vga_isa.c optional vga
|
|
|
|
kern/imgact_aout.c optional compat_aout
|
2014-08-05 09:44:10 +00:00
|
|
|
kern/subr_sfbuf.c standard
|
1995-12-26 13:58:31 +00:00
|
|
|
libkern/divdi3.c standard
|
2023-07-01 19:22:44 +00:00
|
|
|
libkern/divmoddi4.c standard
|
2018-09-27 14:05:44 +00:00
|
|
|
libkern/memcmp.c standard
|
2007-04-06 11:29:52 +00:00
|
|
|
libkern/memset.c standard
|
1995-12-26 13:58:31 +00:00
|
|
|
libkern/moddi3.c standard
|
|
|
|
libkern/qdivrem.c standard
|
2021-02-08 17:01:48 +00:00
|
|
|
libkern/strlen.c standard
|
2000-12-01 09:54:17 +00:00
|
|
|
libkern/ucmpdi2.c standard
|
1995-12-26 13:58:31 +00:00
|
|
|
libkern/udivdi3.c standard
|
2023-07-01 19:22:44 +00:00
|
|
|
libkern/udivmoddi4.c standard
|
1995-12-26 13:58:31 +00:00
|
|
|
libkern/umoddi3.c standard
|
2009-09-22 07:10:23 +00:00
|
|
|
#
|
2015-04-30 17:49:35 +00:00
|
|
|
# x86 real mode BIOS support, 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
|
2019-08-14 20:57:54 +00:00
|
|
|
# Common files where we currently configure the system differently, but perhaps shouldn't
|
|
|
|
# config(8) doesn't have a way to force standard options, so we've been inconsistent
|
|
|
|
# about marking non-optional things 'standard'.
|
2010-11-08 20:57:02 +00:00
|
|
|
x86/acpica/madt.c optional acpi apic
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/cpufreq/smist.c optional cpufreq
|
2012-09-12 19:36:54 +00:00
|
|
|
x86/isa/atpic.c optional atpic
|
2015-04-30 15:48:48 +00:00
|
|
|
x86/isa/elcr.c optional atpic | apic
|
2010-02-25 14:13:39 +00:00
|
|
|
x86/isa/isa.c optional isa
|
|
|
|
x86/isa/isa_dma.c optional isa
|
2010-06-08 17:51:21 +00:00
|
|
|
x86/x86/io_apic.c optional apic
|
|
|
|
x86/x86/local_apic.c optional apic
|
2015-04-30 15:48:48 +00:00
|
|
|
x86/x86/mptable.c optional apic
|
|
|
|
x86/x86/mptable_pci.c optional apic pci
|
2010-06-08 18:36:03 +00:00
|
|
|
x86/x86/msi.c optional apic pci
|
x86: Speed up clock calibration
Prior to this commit, the TSC and local APIC frequencies were calibrated
at boot time by measuring the clocks before and after a one-second sleep.
This was simple and effective, but had the disadvantage of *requiring a
one-second sleep*.
Rather than making two clock measurements (before and after sleeping) we
now perform many measurements; and rather than simply subtracting the
starting count from the ending count, we calculate a best-fit regression
between the target clock and the reference clock (for which the current
best available timecounter is used). While we do this, we keep track
of an estimate of the uncertainty in the regression slope (aka. the ratio
of clock speeds), and stop measuring when we believe the uncertainty is
less than 1 PPM.
In order to avoid the risk of aliasing resulting from the data-gathering
loop synchronizing with (a multiple of) the frequency of the reference
clock, we add some additional spinning depending upon the iteration number.
For numerical stability and simplicity of implementation, we make use of
floating-point arithmetic for the statistical calculations.
On the author's Dell laptop, this reduces the time spent in calibration
from 2000 ms to 29 ms; on an EC2 c5.xlarge instance, it is reduced from
2000 ms to 2.5 ms.
Reviewed by: bde (previous version), kib
MFC after: 1 month
Sponsored by: https://www.patreon.com/cperciva
Differential Revision: https://reviews.freebsd.org/D33802
2022-01-10 01:22:20 +00:00
|
|
|
# Clock calibration subroutine; uses floating-point arithmetic
|
|
|
|
subr_clockcalib.o standard \
|
|
|
|
dependency "$S/kern/subr_clockcalib.c" \
|
|
|
|
compile-with "${CC} -c ${CFLAGS:C/^-O2$/-O3/:N-nostdinc} ${WERROR} -m80387 ${.IMPSRC}" \
|
|
|
|
no-implicit-rule \
|
|
|
|
clean "subr_clockcalib.o"
|