freebsd-dev/sys/amd64/include
Peter Wemm 37b087a645 Clean up some low level bootstrap code:
- stop using the evil 'struct trapframe' argument for mi_startup()
  (formerly main()).  There are much better ways of doing it.
- do not use prepare_usermode() - setregs() in execve() will do it
  all for us as long as the p_md.md_regs pointer is set.  (which is
  now done in machdep.c rather than init_main.c.  The Alpha port did it
  this way all along and is much cleaner).
- collect all the magic %cr0 etc register settings into one place and
  have the AP's call that instead of using magic numbers (!!) that keep
  changing over and over again.
- Make it safe to call kthread_create() earlier, including during the
  device probe sequence.  It doesn't need the callback mechanism that
  NetBSD's version uses.
- kthreads created this way are root-less as they exist before the root
  filesystem is mounted.  init(1) is set up so that it aquires the root
  pointers prior to running.  If other kthreads want filesystem acccess
  we can make this code more generic.
- set all threads start times once we have decided what time it is.
- init uses a trampoline rather than the evil prepare_usermode() hack.
- kern_descrip.c has a couple of tweaks to deal with forking when there
  is no rootdir or cwd etc.
- adjust the early SYSINIT() sequence so that a few prereqisites are in
  place. eg: make sure the run queue is initialized before doing forks.

With this, the USB code can easily create a kthread to do the device
tree discovery.  (I have tested it, it works nicely).

There are still some open issues before this is truely useful.
- tsleep() does not like working before the clock is running.  It
  sort-of tries to spin wait, but it can do more useful things now.
- stopping a kthread in kld code at unload time is "interesting" but
  we have a solution for that.

The Alpha code needs no changes for this.  It already uses pretty much the
same strategies, but a little cleaner.
2000-08-11 09:05:12 +00:00
..
pc Some more i386-only BIOS-friendliness: 2000-04-16 20:48:33 +00:00
apicreg.h Optimize two cases in the MP locking code. First, it is not necessary 1999-11-19 16:49:30 +00:00
asm.h Fixed the profiling version ALTENTRY(). Again. The previous version 2000-01-25 09:01:55 +00:00
asmacros.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
atomic.h When using _asm{} in GCC, one must specify the operand's size if one 2000-05-10 01:15:55 +00:00
bus_amd64.h Fixed syntax errors and style bugs in previous commit. The syntax 2000-06-14 18:48:39 +00:00
bus_at386.h Fixed syntax errors and style bugs in previous commit. The syntax 2000-06-14 18:48:39 +00:00
bus_dma.h Fixed syntax errors and style bugs in previous commit. The syntax 2000-06-14 18:48:39 +00:00
bus_memio.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
bus_pio.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
bus.h Added indirect pio into the bus space stuff for the NEC PC-98. bus.h 2000-03-29 03:15:22 +00:00
clock.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
cpu.h Clean up some low level bootstrap code: 2000-08-11 09:05:12 +00:00
cpufunc.h Fix an __asm operand constraint which broke the -O3 and -O0 builds. 2000-02-21 13:06:50 +00:00
cputypes.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
db_machdep.h Fix style bug: order includes 1999-10-04 13:55:35 +00:00
elf.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
exec.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
float.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
floatingpoint.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
fpu.h Change the default FPU control word so that exceptions for new 2000-03-10 17:56:33 +00:00
frame.h sigset_t change (part 3 of 5) 1999-09-29 15:06:27 +00:00
ieeefp.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
md_var.h Clean up some low level bootstrap code: 2000-08-11 09:05:12 +00:00
mptable.h Clean up some low level bootstrap code: 2000-08-11 09:05:12 +00:00
npx.h Change the default FPU control word so that exceptions for new 2000-03-10 17:56:33 +00:00
pcb_ext.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
pcb.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
pci_cfgreg.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
pcpu.h Commit major SMP cleanups and move the BGL (big giant lock) in the 2000-03-28 07:16:37 +00:00
pmap.h Back out the previous change to the queue(3) interface. 2000-05-26 02:09:24 +00:00
proc.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
profile.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
psl.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
ptrace.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
reg.h Document the support in the kernel for hardware debug registers on the 2000-02-12 18:33:54 +00:00
reloc.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
resource.h * Implement bus_set/get/delete_resource for pci. 1999-10-14 21:38:33 +00:00
segments.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
setjmp.h sigset_t change (part 3 of 5) 1999-09-29 15:06:27 +00:00
sigframe.h Fix type of sf_addr. 1999-12-04 10:40:24 +00:00
signal.h Reserve space for FPU state in struct sigcontext. Fix some style bugs 1999-11-12 13:52:11 +00:00
smp.h Be more verbose when changing APIC ID on an IO APIC. 2000-08-06 00:04:03 +00:00
specialreg.h Add the CR4 values for P3 SIMD enabling support. FXSR tells the cpu that 1999-09-10 15:51:44 +00:00
sysarch.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
trap.h Exchange numerical values for FPE_INTDIV and FPE_INTOVF, so that they 2000-03-20 10:22:19 +00:00
tss.h Change #ifdef KERNEL to #ifdef _KERNEL in the public headers. "KERNEL" 1999-12-29 04:46:21 +00:00
ucontext.h Add a per-signal flag to mark handlers registered with osigaction, so we 1999-10-11 20:33:17 +00:00
varargs.h $Id$ -> $FreeBSD$ 1999-08-28 01:08:13 +00:00
vmparam.h Make sysv-style shared memory tuneable params fully runtime adjustable 2000-03-30 07:17:05 +00:00