Age | Commit message (Collapse) | Author |
|
This change replaces the historical page allocator with a buddy allocator
implemented in vm/vm_page.c. This allocator allows easy contiguous allocations
and also manages memory inside segments. In a future change, these segments
will be used to service requests with special constraints, such as "usable
for 16-bits DMA" or "must be part of the direct physical mapping".
* Makefrag.am (libkernel_a_SOURCES): Add vm/vm_page.c.
* i386/Makefrag.am (libkernel_a_SOURCES): Add i386/i386at/biosmem.{c,h}.
* i386/i386/vm_param.h: Include kern/macros.h.
(VM_PAGE_DMA_LIMIT, VM_PAGE_MAX_SEGS, VM_PAGE_DMA32_LIMIT,
VM_PAGE_DIRECTMAP_LIMIT, VM_PAGE_HIGHMEM_LIMIT, VM_PAGE_SEG_DMA,
VM_PAGE_SEG_DMA32, VM_PAGE_SEG_DIRECTMAP, VM_PAGE_SEG_HIGHMEM): New macros.
* i386/i386at/model_dep.c: Include i386at/biosmem.h.
(avail_next, avail_remaining): Remove variables.
(mem_size_init): Remove function.
(i386at_init): Initialize and use the biosmem module for early physical
memory management.
(pmap_free_pages): Return phys_last_addr instead of avail_remaining.
(init_alloc_aligned): Turn into a wrapper for biosmem_bootalloc.
(pmap_grab_page): Directly call init_alloc_aligned instead of pmap_next_page.
* i386/include/mach/i386/vm_types.h (phys_addr_t): New type.
* kern/bootstrap.c (free_bootstrap_pages): New function.
(bootstrap_create): Call free_bootstrap_pages instead of vm_page_create.
* kern/cpu_number.h (CPU_L1_SIZE): New macro.
* kern/slab.h: Include kern/cpu_number.h.
(CPU_L1_SIZE): Remove macro, moved to kern/cpu_number.h.
* kern/startup.c (setup_main): Change the value of machine_info.memory_size.
* linux/dev/glue/glue.h (alloc_contig_mem, free_contig_mem): Update prototypes.
* linux/dev/glue/kmem.c (linux_kmem_init): Don't use defunct page queue.
* linux/dev/init/main.c (linux_init): Don't free unused memory.
(alloc_contig_mem, free_contig_mem): Turn into wrappers for the vm_page
allocator.
* linux/pcmcia-cs/glue/ds.c (PAGE_SHIFT): Don't undefine.
* vm/pmap.h (pmap_startup, pmap_next_page): Remove prototypes.
* vm/vm_fault.c (vm_fault_page): Update calls to vm_page_convert.
* vm/vm_init.c (vm_mem_init): Call vm_page_info_all.
* vm/vm_object.c (vm_object_page_map): Update call to vm_page_init.
* vm/vm_page.h (vm_page_queue_free): Remove variable declaration.
(vm_page_create, vm_page_release_fictitious, vm_page_release): Remove
declarations.
(vm_page_convert, vm_page_init): Update prototypes.
(vm_page_grab_contig, vm_page_free_contig): New prototypes.
* vm/vm_resident.c (vm_page_template, vm_page_queue_free,
vm_page_big_pagenum): Remove variables.
(vm_page_bootstrap): Update and call vm_page_setup.
(pmap_steal_memory): Update and call vm_page_bootalloc.
(pmap_startup, vm_page_create, vm_page_grab_contiguous_pages): Remove functions.
(vm_page_init_template, vm_page_grab_contig,
vm_page_free_contig): New functions.
(vm_page_init): Update and call vm_page_init_template.
(vm_page_release_fictitious): Make static.
(vm_page_more_fictitious): Update call to vm_page_init.
(vm_page_convert): Rewrite to comply with vm_page.
(vm_page_grab): Update and call vm_page_alloc_pa.
(vm_page_release): Update and call vm_page_free_pa.
|
|
* i386/i386at/biosmem.c: New file.
* i386/i386at/biosmem.h: Likewise.
|
|
* i386/i386at/elf.h: New file.
|
|
* i386/i386at/lpr.c (lpropen): Fix assignment to t_addr.
|
|
* i386/Makefrag.am: Remove disk.h.
* i386/i386at/disk.h: Remove unnused definitions.
* i386/include/mach/i386/disk.h: Remove.
* linux/dev/glue/block.c (device_get_status): Remove V_GETPARMS case.
|
|
* i386/i386at/lpr.c (lprprobe): Fix checking unit against NLPR.
|
|
Linux does this to be extra careful with some BIOSes which apparently
spuriously write between 4k and 64k.
* i386/i386at/model_dep.c (RESERVED_BIOS): New macro.
(avail_next, mem_size_init, init_alloc_aligned): Use RESERVED_BIOS instead
of hardcoded 0x1000.
|
|
* i386/i386at/kd.c (kdstart): Moved escape sequence handling to new
kd_putc_esc function.
(kd_putc_esc): New function with logic from kdstart.
(kdcnputc): Call kd_putc_esc rather than kd_putc to allow for ANSI
escape codes.
* i386/i386at/kd.h (kd_putc_esc): New function.
|
|
* i386/i386at/immc.c (immc_cnputc): Fix line wrapping.
|
|
Improve the immediate console to the point that it can be enabled and
display e.g. assertion failures from very early on (i.e. from
`c_boot_entry').
* device/cons.h (romgetc, romputc): New declarations.
* i386/configfrag.ac: Add configuration variable.
* i386/i386at/conf.c (dev_name_list): Add entry.
* i386/i386at/cons_conf.c (constab): Add entry.
* i386/i386at/immc.c: Add missing includes.
(immc_cnprobe, immc_cninit, immc_cngetc, immc_romputc): New functions.
(immc_cnputc): Fix signature, use virtual addresses.
* i386/i386at/immc.h: New file.
* i386/i386at/kd.c: Use `#if ENABLE_IMMEDIATE_CONSOLE'.
* i386/i386at/kd.h (kd_setpos): Add missing declaration.
* i386/i386at/model_dep.c (c_boot_entry): Install immediate console as
early boot console.
|
|
* i386/i386at/model_dep.c (rebootflag): Explain flag.
|
|
* i386/i386at/rtc.c (rtcget, rtcput): Make functions take an rtc_st
structure which it casts to char * itself.
|
|
* i386/i386at/kd_event.c: Call printf_once instead of recoding it.
* i386/i386at/kd_mouse.c: Likewise.
|
|
* i386/i386at/kd_event.c (kbd_enqueue): Print "queue full" warning only
once.
* i386/i386at/kd_mouse.c (mouse_enqueue): Likewise.
|
|
Signed-off-by: Stefan Weil <sw@weilnetz.de>
|
|
* ddb/db_elf.c: New file.
* ddb/db_elf.h: Likewise.
* Makefrag.am (libkernel_a_SOURCES): Add db_elf.{c,h}.
* ddb/db_sym.c (dummy_db_sym_init): New stub db_sym_init function.
(db_sym_switch): Add ELF functions.
* ddb/db_sym.h (SYMTAB_ELF): New macro.
(elf_db_sym_init): New declaration.
* i386/i386at/model_dep.c (c_boot_entry): Get ELF section header
information from the multiboot structure, and call elf_db_sym_init.
|
|
* i386/i386at/com.c (comintr): Fix computation of '@'.
|
|
* i386/i386at/com.c (comintr): Use 'A'-1 instead of '@'.
|
|
* i386/i386at/com.c (comintr): Invoke the debugger if ctrl-alt-d is
pressed.
* i386/i386at/com.h (kdb_kintr): Add declaration.
|
|
* i386/i386at/acpi.c (grub_machine_acpi_get_rsdpv2): Drop debugging
prints.
|
|
Since we need it to access some BIOS information, e.g. at ACPI shutdown. When
the kernel VM is not starting at 0, there is already nothing mapped there in
user tasks, anyway.
* i386/i386at/model_dep.c (machine_init) [VM_MIN_KERNEL_ADDRESS != 0]:
Do not call pmap_unmap_page_zero.
* i386/intel/pmap.c (pmap_unmap_page_zero): Warn that unmapping page
zero may break some BIOS functions.
|
|
|
|
This is a mostly verbatim copy of acpihalt.c from GRUB2 with a little
bit of glue code.
* i386/Makefrag.am (libkernel_a_SOURCES): Add the new files.
* i386/grub/acpi.h: Verbatim copy from GRUB2.
* i386/grub/compiler.h: Likewise.
* i386/grub/cpu/io.h: Likewise.
* i386/grub/cpu/time.h: Likewise.
* i386/grub/cpu/types.h: Likewise.
* i386/grub/err.h: Likewise.
* i386/grub/misc.h: Likewise.
* i386/grub/mm.h: Likewise.
* i386/grub/symbol.h: Likewise.
* i386/grub/time.h: Likewise.
* i386/grub/types.h: Likewise.
* i386/i386at/acpi.c: Likewise.
* i386/i386at/acpihalt.c: Likewise.
(grub_acpi_halt): Map physical addresses.
* i386/i386at/acpihalt.h: New file.
* i386/grub/glue.h: Some glue macros.
* i386/grub/i18n.h: Stub out i18n.
* i386/i386at/grub_glue.c: Some glue code.
* i386/i386at/model_dep.c (halt_all_cpus): Use grub_acpi_halt.
|
|
As a convenience for the nice people using our debugger, remap some
keys to the readline-like shortcuts supported by dde.
* i386/i386at/kd.c (kdcnmaygetc): Remap some keys.
|
|
* i386/i386at/kd.c (key_map): Remove superfluous newlines so that
every entry fits into one line. This way line numbers can be used as
an index into the map.
|
|
* ddb/db_command.c (db_command_table): Add "halt" command.
* i386/i386/db_interface.h (db_halt_cpu): New declaration.
* i386/i386at/model_dep.c (db_halt_cpu): New function.
|
|
Convert from K&R style function definitions to ANSI style
function definitions.
* ddb/db_access.c: Convert function prototypes from K&R to ANSI.
* ddb/db_aout.c: Likewise.
* ddb/db_break.c: Likewise.
* ddb/db_command.c: Likewise.
* ddb/db_cond.c: Likewise.
* ddb/db_examine.c: Likewise.
* ddb/db_expr.c: Likewise.
* ddb/db_ext_symtab.c: Likewise.
* ddb/db_input.c: Likewise.
* ddb/db_lex.c: Likewise.
* ddb/db_macro.c: Likewise.
* ddb/db_mp.c: Likewise.
* ddb/db_output.c: Likewise.
* ddb/db_print.c: Likewise.
* ddb/db_run.c: Likewise.
* ddb/db_sym.c: Likewise.
* ddb/db_task_thread.c: Likewise.
* ddb/db_trap.c: Likewise.
* ddb/db_variables.c: Likewise.
* ddb/db_watch.c: Likewise.
* device/blkio.c: Likewise.
* device/chario.c: Likewise.
* device/dev_lookup.c: Likewise.
* device/dev_name.c: Likewise.
* device/dev_pager.c: Likewise.
* device/ds_routines.c: Likewise.
* device/net_io.c: Likewise.
* device/subrs.c: Likewise.
* i386/i386/db_interface.c: Likewise.
* i386/i386/fpu.c: Likewise.
* i386/i386/io_map.c: Likewise.
* i386/i386/loose_ends.c: Likewise.
* i386/i386/mp_desc.c: Likewise.
* i386/i386/pcb.c: Likewise.
* i386/i386/phys.c: Likewise.
* i386/i386/trap.c: Likewise.
* i386/i386/user_ldt.c: Likewise.
* i386/i386at/com.c: Likewise.
* i386/i386at/kd.c: Likewise.
* i386/i386at/kd_event.c: Likewise.
* i386/i386at/kd_mouse.c: Likewise.
* i386/i386at/kd_queue.c: Likewise.
* i386/i386at/lpr.c: Likewise.
* i386/i386at/model_dep.c: Likewise.
* i386/i386at/rtc.c: Likewise.
* i386/intel/pmap.c: Likewise.
* i386/intel/read_fault.c: Likewise.
* ipc/ipc_entry.c: Likewise.
* ipc/ipc_hash.c: Likewise.
* ipc/ipc_kmsg.c: Likewise.
* ipc/ipc_marequest.c: Likewise.
* ipc/ipc_mqueue.c: Likewise.
* ipc/ipc_notify.c: Likewise.
* ipc/ipc_port.c: Likewise.
* ipc/ipc_right.c: Likewise.
* ipc/mach_debug.c: Likewise.
* ipc/mach_msg.c: Likewise.
* ipc/mach_port.c: Likewise.
* ipc/mach_rpc.c: Likewise.
* kern/act.c: Likewise.
* kern/exception.c: Likewise.
* kern/ipc_mig.c: Likewise.
* kern/ipc_tt.c: Likewise.
* kern/lock_mon.c: Likewise.
* kern/mach_clock.c: Likewise.
* kern/machine.c: Likewise.
* kern/printf.c: Likewise.
* kern/priority.c: Likewise.
* kern/startup.c: Likewise.
* kern/syscall_emulation.c: Likewise.
* kern/syscall_subr.c: Likewise.
* kern/thread_swap.c: Likewise.
* kern/time_stamp.c: Likewise.
* kern/timer.c: Likewise.
* kern/xpr.c: Likewise.
* vm/memory_object.c: Likewise.
* vm/vm_debug.c: Likewise.
* vm/vm_external.c: Likewise.
* vm/vm_fault.c: Likewise.
* vm/vm_kern.c: Likewise.
* vm/vm_map.c: Likewise.
* vm/vm_pageout.c: Likewise.
* vm/vm_user.c: Likewise.
|
|
* device/conf.h: Include <sys/types.h>, <mach/port.h>, <mach/vm_prot.h>.
Predefine struct io_req, io_req_t and io_return_t.
(dev_ops): Add explicit prototypes for d_open, d_close, d_read, d_write,
d_getstat, d_setstat, d_mmap, d_port_death.
(nulldev_open, nulldev_close, nulldev_read, nulldev_write,
nulldev_getstat, nulldev_setstat, nulldev_portdeath): Add prototypes.
(nomap): Fix prototype.
* device/dev_name.c (nulldev_open, nulldev_close, nulldev_read,
nulldev_write, nulldev_getstat, nulldev_setstat, nulldev_portdeath): New
functions.
(nomap): Fix prototype.
* device/ds_routines.c (dev_close): Pass 0 as flag parameter.
* device/kmsg.c (kmsgclose): Drop return value.
* device/kmsg.h (kmsgclose): Fix prototype.
* i386/i386at/com.c (comopen): Fix prototype.
(comclose): Fix prototype, drop return value.
(comread, comwrite): Fix prototype.
* i386/i386at/com.h (comopen, comclose, comread, comwrite): Fix
prototype.
* i386/i386at/conf.c (dev_ops): Use nulldev_open, nulldev_close,
nulldev_read, nulldev_write, nulldev_getstat, nulldev_setstat,
nulldev_portdeath where appropriate.
* i386/i386at/kd.c (kdclose, kdread, kdwrite, kdmmap): Fix prototype.
* i386/i386at/kd.h (kdclose, kdread, kdwrite, kdmmap): Likewise.
* i386/i386at/kd_event.c (kbdopen): Likewise.
* i386/i386at/kd_event.h (kbdopen): Likewise.
* i386/i386at/kd_mouse.c (mouseopen): Likewise.
* i386/i386at/kd_mouse.h (mouseopen): Likewise.
* i386/i386at/lpr.c (lpropen, lprclose, lprread, lprwrite): Likewise.
* i386/i386at/lpr.h (lpropen, lprclose, lprread, lprwrite): Likewise.
* i386/i386at/mem.c (memmmap): Likewise.
* i386/i386at/mem.h (memmmap): Likewise.
* i386/i386at/model_dep.c (timemmap): Likewise.
* i386/i386at/model_dep.h (timemmap): Likewise.
* kern/mach_clock.c (timeopen, timeclose): Likewise.
* kern/mach_clock.h: Include <sys/types.h>, predefine struct io_req and
io_req_t.
(timeopen, timeclose): Fix prototype.
|
|
CGA and MONO cards are more than hard to find nowadays, and some buggy BIOSes
claim running them nowadays...
* i386/i386at/kd.c (kd_xga_init): Do not handle CGA and MONO cases any
more, which thus default to EGA/VGA.
|
|
* i386/i386at/kd.c (kd_xga_init): Use CM_EGA_VGA behavior as default
case for unknown values of CMOS data.
|
|
Found by Coverity
* i386/i386at/com.c (comstart): Make `nch' an int. When `getc' returns
-1, just return.
|
|
Found by Coverity.
* i386/i386at/com.c (comopen): On com_reprobe() returning success, check
for `isai' again.
|
|
* i386/i386at/kd.c (kdintr, kd_senddata, kd_sendcmd, kd_getgata,
kd_cmdreg_read, kd_cmdreg_write, kd_mouse_drain): Move semi colon of
empty while loops on a single line to make it more visible.
|
|
* i386/i386at/kd_mouse.c (mouseopen): Fix typo.
|
|
Found by Coverity
* i386/i386at/kd_mouse.c (mouseopen): Add missing break.
|
|
* i386/i386at/kd.c (kd_xga_init): Add start, stop variables, read them
from CRT registers, make sure the cursor is enabled and is not reduced
to 0, and write them back to CRT registers.
* i386/i386at/kd.h (C_START, C_STOP): New macros.
|
|
* i386/i386at/kd_event.h: Add missing includes.
|
|
|
|
Thanks Marin Ramesa and Richard Braun for investigating.
* i386/i386at/kd.c (kdintr): Make `char_idx' and `max' unsigned.
(kdstate2idx): Make function take and return unsigned ints for the state.
* i386/i386at/kd.h (kdstate2idx): Likewise.
|
|
* i386/i386/ast_check.c (init_ast_check, cause_ast_check): Define return type.
* i386/i386/pic.c (intnull, prtnull): Define argument types.
* i386/i386at/com.c (compr_addr): Likewise.
(compr): Likewise.
(compr_addr): Fix printf format.
* i386/i386at/kd.c (kd_cmdreg_write, kd_kbd_magic): Define argument types.
* i386/i386at/kd_mouse.c (init_mouse_hw): Likewise.
* ipc/mach_port.c (sact_count): Define return type.
* ipc/mach_rpc.c (mach_port_rpc_sig): Define argument types.
* kern/act.c (dump_act): Define return type.
* kern/lock_mon.c (simple_lock, simple_lock_try, simple_unlock, lip, lock_info_sort, lock_info_clear, print_lock_info): Define return type.
(time_lock): Define return type and argument type.
* kern/timer.c (time_trap_uexit): Define argument type.
|
|
|
|
* i386/i386at/kd_mouse.c (kd_mouse_open) (kdintr): Remove forward declaration.
|
|
* i386/i386at/kd.c (kdinit) (kd_xga_init): Remove forward declaration.
* i386/i386at/kd.h (kd_xga_init): Add prototype.
|
|
Variable off is already an unsigned int.
* i386/i386at/kd.c (kdmmap) (off): Remove unnecessary cast.
|
|
* i386/i386at/kd.c (kd_getdata, state2leds, kdstart, kdstop): Remove forward declarations.
* i386/i386at/kd.h (kd_getdata, state2leds, kdstart, kdstop): Add prototypes.
Include device/tty.h.
|
|
Addresses were cast to (void *). Pointers uncasted.
* device/ds_routines.c (ds_read_done) (memset) (start_sent): Cast to (void *) instead to (char *). Argument is an address.
(ds_read_done) (memset) (end_data): Likewise.
* i386/i386/pcb.c (thread_getstatus) (memcpy) (pm): Don't cast. Argument is a pointer.
(thread_getstatus) (memcpy) (iopb): Likewise.
* i386/i386at/immc.c (immc_cnputc) (memmove): Cast first argument to (void *). Argument is an address.
(immc_cnputc) (memmove): Cast second argument to (void *). Argument is an address.
(immc_cnputc) (memset): Cast first argument to (void *). Argument is an address.
* i386/i386at/model_dep.c (i386at_init) (memcpy) (phystokv): Cast to (void *) instead to (char *). Argument is an address.
* i386/intel/pmap.c (pmap_init) (memset) (addr): Likewise.
* ipc/mach_debug.c (mach_port_space_info) (memset) (table_addr + size_used): Likewise.
(mach_port_space_info) (memset) (tree_addr + size_used): Likewise.
* kern/host.c (host_processor_sets) (memcpy) (newaddr): Likewise.
(host_processor_sets) (memcpy) (addr): Likewise.
* kern/xpr.c (xprbootstrap) (memset) (addr): Likewise.
* vm/vm_debug.c (mach_vm_object_pages) (memset) (addr + size_used): Likewise.
|
|
* i386/i386at/kd_event.c (X_kdb_enter_init, X_kdb_exit_init): Cast first arguments to (unsigned int *).
|
|
This fixes the implicit declarations in kern/machine.c and kern/debug.c.
* i386/i386/model_dep.h (halt_cpu, halt_all_cpus): Add prototypes.
* i386/i386at/model_dep.h (halt_cpu, halt_all_cpus): Remove prototypes.
|
|
Struct uio is nowhere defined and in device/buf.h the string uio is defined
as io_req. Remove all declarations of uio structure and use io_req_t instead
of it.
* device/buf.h (uio, io_req): Remove definition.
* i386/i386at/kd.c: Remove comment.
(kdread): Use io_req_t.
(kdwrite): Likewise.
* i386/i386at/kd.h (kdread, kdwrite): Use io_req_t as argument type.
|
|
* i386/i386at/lpr.c (lprprobe): Modify argument types.
* i386/i386at/lpr.h (lprprobe): Likewise.
|