Split of architecture-dependent and -independent functions for i386,
mainly in the kernel and headers. This split based on work by
Ingmar Alting <iaalting@cs.vu.nl> done for his Minix PowerPC architecture
port.
. kernel does not program the interrupt controller directly, do any
other architecture-dependent operations, or contain assembly any more,
but uses architecture-dependent functions in arch/$(ARCH)/.
. architecture-dependent constants and types defined in arch/$(ARCH)/include.
. <ibm/portio.h> moved to <minix/portio.h>, as they have become, for now,
architecture-independent functions.
. int86, sdevio, readbios, and iopenable are now i386-specific kernel calls
and live in arch/i386/do_* now.
. i386 arch now supports even less 86 code; e.g. mpx86.s and klib86.s have
gone, and 'machine.protected' is gone (and always taken to be 1 in i386).
If 86 support is to return, it should be a new architecture.
. prototypes for the architecture-dependent functions defined in
kernel/arch/$(ARCH)/*.c but used in kernel/ are in kernel/proto.h
. /etc/make.conf included in makefiles and shell scripts that need to
know the building architecture; it defines ARCH=<arch>, currently only
i386.
. some basic per-architecture build support outside of the kernel (lib)
. in clock.c, only dequeue a process if it was ready
. fixes for new include files
files deleted:
. mpx/klib.s - only for choosing between mpx/klib86 and -386
. klib86.s - only for 86
i386-specific files files moved (or arch-dependent stuff moved) to arch/i386/:
. mpx386.s (entry point)
. klib386.s
. sconst.h
. exception.c
. protect.c
. protect.h
. i8269.c
2006-12-22 16:22:27 +01:00
|
|
|
|
|
|
|
#ifndef _I386_PROTO_H
|
|
|
|
#define _I386_PROTO_H
|
|
|
|
|
|
|
|
/* Hardware interrupt handlers. */
|
|
|
|
_PROTOTYPE( void hwint00, (void) );
|
|
|
|
_PROTOTYPE( void hwint01, (void) );
|
|
|
|
_PROTOTYPE( void hwint02, (void) );
|
|
|
|
_PROTOTYPE( void hwint03, (void) );
|
|
|
|
_PROTOTYPE( void hwint04, (void) );
|
|
|
|
_PROTOTYPE( void hwint05, (void) );
|
|
|
|
_PROTOTYPE( void hwint06, (void) );
|
|
|
|
_PROTOTYPE( void hwint07, (void) );
|
|
|
|
_PROTOTYPE( void hwint08, (void) );
|
|
|
|
_PROTOTYPE( void hwint09, (void) );
|
|
|
|
_PROTOTYPE( void hwint10, (void) );
|
|
|
|
_PROTOTYPE( void hwint11, (void) );
|
|
|
|
_PROTOTYPE( void hwint12, (void) );
|
|
|
|
_PROTOTYPE( void hwint13, (void) );
|
|
|
|
_PROTOTYPE( void hwint14, (void) );
|
|
|
|
_PROTOTYPE( void hwint15, (void) );
|
|
|
|
|
|
|
|
|
|
|
|
/* Exception handlers (real or protected mode), in numerical order. */
|
|
|
|
void _PROTOTYPE( int00, (void) ), _PROTOTYPE( divide_error, (void) );
|
|
|
|
void _PROTOTYPE( int01, (void) ), _PROTOTYPE( single_step_exception, (void) );
|
|
|
|
void _PROTOTYPE( int02, (void) ), _PROTOTYPE( nmi, (void) );
|
|
|
|
void _PROTOTYPE( int03, (void) ), _PROTOTYPE( breakpoint_exception, (void) );
|
|
|
|
void _PROTOTYPE( int04, (void) ), _PROTOTYPE( overflow, (void) );
|
|
|
|
void _PROTOTYPE( int05, (void) ), _PROTOTYPE( bounds_check, (void) );
|
|
|
|
void _PROTOTYPE( int06, (void) ), _PROTOTYPE( inval_opcode, (void) );
|
|
|
|
void _PROTOTYPE( int07, (void) ), _PROTOTYPE( copr_not_available, (void) );
|
|
|
|
void _PROTOTYPE( double_fault, (void) );
|
|
|
|
void _PROTOTYPE( copr_seg_overrun, (void) );
|
|
|
|
void _PROTOTYPE( inval_tss, (void) );
|
|
|
|
void _PROTOTYPE( segment_not_present, (void) );
|
|
|
|
void _PROTOTYPE( stack_exception, (void) );
|
|
|
|
void _PROTOTYPE( general_protection, (void) );
|
|
|
|
void _PROTOTYPE( page_fault, (void) );
|
|
|
|
void _PROTOTYPE( copr_error, (void) );
|
|
|
|
|
|
|
|
/* Software interrupt handlers, in numerical order. */
|
|
|
|
_PROTOTYPE( void trp, (void) );
|
|
|
|
_PROTOTYPE( void s_call, (void) ), _PROTOTYPE( p_s_call, (void) );
|
|
|
|
_PROTOTYPE( void level0_call, (void) );
|
|
|
|
|
2008-11-19 13:26:10 +01:00
|
|
|
/* memory.c */
|
|
|
|
_PROTOTYPE( void vir_insb, (u16_t port, struct proc *proc, u32_t vir, size_t count));
|
|
|
|
_PROTOTYPE( void vir_outsb, (u16_t port, struct proc *proc, u32_t vir, size_t count));
|
|
|
|
_PROTOTYPE( void vir_insw, (u16_t port, struct proc *proc, u32_t vir, size_t count));
|
|
|
|
_PROTOTYPE( void vir_outsw, (u16_t port, struct proc *proc, u32_t vir, size_t count));
|
|
|
|
|
|
|
|
|
2007-04-23 15:19:25 +02:00
|
|
|
/* exception.c */
|
|
|
|
_PROTOTYPE( void exception, (unsigned vec_nr, u32_t trap_errno,
|
|
|
|
u32_t old_eip, U16_t old_cs, u32_t old_eflags) );
|
|
|
|
|
Split of architecture-dependent and -independent functions for i386,
mainly in the kernel and headers. This split based on work by
Ingmar Alting <iaalting@cs.vu.nl> done for his Minix PowerPC architecture
port.
. kernel does not program the interrupt controller directly, do any
other architecture-dependent operations, or contain assembly any more,
but uses architecture-dependent functions in arch/$(ARCH)/.
. architecture-dependent constants and types defined in arch/$(ARCH)/include.
. <ibm/portio.h> moved to <minix/portio.h>, as they have become, for now,
architecture-independent functions.
. int86, sdevio, readbios, and iopenable are now i386-specific kernel calls
and live in arch/i386/do_* now.
. i386 arch now supports even less 86 code; e.g. mpx86.s and klib86.s have
gone, and 'machine.protected' is gone (and always taken to be 1 in i386).
If 86 support is to return, it should be a new architecture.
. prototypes for the architecture-dependent functions defined in
kernel/arch/$(ARCH)/*.c but used in kernel/ are in kernel/proto.h
. /etc/make.conf included in makefiles and shell scripts that need to
know the building architecture; it defines ARCH=<arch>, currently only
i386.
. some basic per-architecture build support outside of the kernel (lib)
. in clock.c, only dequeue a process if it was ready
. fixes for new include files
files deleted:
. mpx/klib.s - only for choosing between mpx/klib86 and -386
. klib86.s - only for 86
i386-specific files files moved (or arch-dependent stuff moved) to arch/i386/:
. mpx386.s (entry point)
. klib386.s
. sconst.h
. exception.c
. protect.c
. protect.h
. i8269.c
2006-12-22 16:22:27 +01:00
|
|
|
/* klib386.s */
|
|
|
|
_PROTOTYPE( void level0, (void (*func)(void)) );
|
|
|
|
_PROTOTYPE( void monitor, (void) );
|
|
|
|
_PROTOTYPE( void reset, (void) );
|
|
|
|
_PROTOTYPE( void int86, (void) );
|
|
|
|
_PROTOTYPE( unsigned long read_cr0, (void) );
|
|
|
|
_PROTOTYPE( void write_cr0, (unsigned long value) );
|
2009-04-23 17:11:16 +02:00
|
|
|
_PROTOTYPE( unsigned long read_cr4, (void) );
|
|
|
|
_PROTOTYPE( void write_cr4, (unsigned long value) );
|
Split of architecture-dependent and -independent functions for i386,
mainly in the kernel and headers. This split based on work by
Ingmar Alting <iaalting@cs.vu.nl> done for his Minix PowerPC architecture
port.
. kernel does not program the interrupt controller directly, do any
other architecture-dependent operations, or contain assembly any more,
but uses architecture-dependent functions in arch/$(ARCH)/.
. architecture-dependent constants and types defined in arch/$(ARCH)/include.
. <ibm/portio.h> moved to <minix/portio.h>, as they have become, for now,
architecture-independent functions.
. int86, sdevio, readbios, and iopenable are now i386-specific kernel calls
and live in arch/i386/do_* now.
. i386 arch now supports even less 86 code; e.g. mpx86.s and klib86.s have
gone, and 'machine.protected' is gone (and always taken to be 1 in i386).
If 86 support is to return, it should be a new architecture.
. prototypes for the architecture-dependent functions defined in
kernel/arch/$(ARCH)/*.c but used in kernel/ are in kernel/proto.h
. /etc/make.conf included in makefiles and shell scripts that need to
know the building architecture; it defines ARCH=<arch>, currently only
i386.
. some basic per-architecture build support outside of the kernel (lib)
. in clock.c, only dequeue a process if it was ready
. fixes for new include files
files deleted:
. mpx/klib.s - only for choosing between mpx/klib86 and -386
. klib86.s - only for 86
i386-specific files files moved (or arch-dependent stuff moved) to arch/i386/:
. mpx386.s (entry point)
. klib386.s
. sconst.h
. exception.c
. protect.c
. protect.h
. i8269.c
2006-12-22 16:22:27 +01:00
|
|
|
_PROTOTYPE( void write_cr3, (unsigned long value) );
|
|
|
|
_PROTOTYPE( unsigned long read_cpu_flags, (void) );
|
|
|
|
_PROTOTYPE( void phys_insb, (U16_t port, phys_bytes buf, size_t count) );
|
|
|
|
_PROTOTYPE( void phys_insw, (U16_t port, phys_bytes buf, size_t count) );
|
|
|
|
_PROTOTYPE( void phys_outsb, (U16_t port, phys_bytes buf, size_t count) );
|
|
|
|
_PROTOTYPE( void phys_outsw, (U16_t port, phys_bytes buf, size_t count) );
|
2008-11-19 13:26:10 +01:00
|
|
|
_PROTOTYPE( void i386_invlpg, (U32_t addr) );
|
Split of architecture-dependent and -independent functions for i386,
mainly in the kernel and headers. This split based on work by
Ingmar Alting <iaalting@cs.vu.nl> done for his Minix PowerPC architecture
port.
. kernel does not program the interrupt controller directly, do any
other architecture-dependent operations, or contain assembly any more,
but uses architecture-dependent functions in arch/$(ARCH)/.
. architecture-dependent constants and types defined in arch/$(ARCH)/include.
. <ibm/portio.h> moved to <minix/portio.h>, as they have become, for now,
architecture-independent functions.
. int86, sdevio, readbios, and iopenable are now i386-specific kernel calls
and live in arch/i386/do_* now.
. i386 arch now supports even less 86 code; e.g. mpx86.s and klib86.s have
gone, and 'machine.protected' is gone (and always taken to be 1 in i386).
If 86 support is to return, it should be a new architecture.
. prototypes for the architecture-dependent functions defined in
kernel/arch/$(ARCH)/*.c but used in kernel/ are in kernel/proto.h
. /etc/make.conf included in makefiles and shell scripts that need to
know the building architecture; it defines ARCH=<arch>, currently only
i386.
. some basic per-architecture build support outside of the kernel (lib)
. in clock.c, only dequeue a process if it was ready
. fixes for new include files
files deleted:
. mpx/klib.s - only for choosing between mpx/klib86 and -386
. klib86.s - only for 86
i386-specific files files moved (or arch-dependent stuff moved) to arch/i386/:
. mpx386.s (entry point)
. klib386.s
. sconst.h
. exception.c
. protect.c
. protect.h
. i8269.c
2006-12-22 16:22:27 +01:00
|
|
|
|
|
|
|
/* protect.c */
|
|
|
|
_PROTOTYPE( void prot_init, (void) );
|
|
|
|
_PROTOTYPE( void init_codeseg, (struct segdesc_s *segdp, phys_bytes base,
|
|
|
|
vir_bytes size, int privilege) );
|
|
|
|
_PROTOTYPE( void init_dataseg, (struct segdesc_s *segdp, phys_bytes base,
|
|
|
|
vir_bytes size, int privilege) );
|
|
|
|
_PROTOTYPE( void enable_iop, (struct proc *pp) );
|
|
|
|
|
2009-08-28 17:55:30 +02:00
|
|
|
/* prototype of an interrupt vector table entry */
|
|
|
|
struct gate_table_s {
|
|
|
|
_PROTOTYPE( void (*gate), (void) );
|
|
|
|
unsigned char vec_nr;
|
|
|
|
unsigned char privilege;
|
|
|
|
};
|
|
|
|
|
|
|
|
EXTERN struct gate_table_s gate_table_pic[];
|
|
|
|
|
|
|
|
/* copies an array of vectors to the IDT. The last vector must be zero filled */
|
|
|
|
_PROTOTYPE(void idt_copy_vectors, (struct gate_table_s * first));
|
|
|
|
|
Split of architecture-dependent and -independent functions for i386,
mainly in the kernel and headers. This split based on work by
Ingmar Alting <iaalting@cs.vu.nl> done for his Minix PowerPC architecture
port.
. kernel does not program the interrupt controller directly, do any
other architecture-dependent operations, or contain assembly any more,
but uses architecture-dependent functions in arch/$(ARCH)/.
. architecture-dependent constants and types defined in arch/$(ARCH)/include.
. <ibm/portio.h> moved to <minix/portio.h>, as they have become, for now,
architecture-independent functions.
. int86, sdevio, readbios, and iopenable are now i386-specific kernel calls
and live in arch/i386/do_* now.
. i386 arch now supports even less 86 code; e.g. mpx86.s and klib86.s have
gone, and 'machine.protected' is gone (and always taken to be 1 in i386).
If 86 support is to return, it should be a new architecture.
. prototypes for the architecture-dependent functions defined in
kernel/arch/$(ARCH)/*.c but used in kernel/ are in kernel/proto.h
. /etc/make.conf included in makefiles and shell scripts that need to
know the building architecture; it defines ARCH=<arch>, currently only
i386.
. some basic per-architecture build support outside of the kernel (lib)
. in clock.c, only dequeue a process if it was ready
. fixes for new include files
files deleted:
. mpx/klib.s - only for choosing between mpx/klib86 and -386
. klib86.s - only for 86
i386-specific files files moved (or arch-dependent stuff moved) to arch/i386/:
. mpx386.s (entry point)
. klib386.s
. sconst.h
. exception.c
. protect.c
. protect.h
. i8269.c
2006-12-22 16:22:27 +01:00
|
|
|
/* functions defined in architecture-independent kernel source. */
|
|
|
|
#include "../../proto.h"
|
|
|
|
|
|
|
|
#endif
|