diff options
Diffstat (limited to 'i386')
-rw-r--r-- | i386/i386/ast_check.c | 1 | ||||
-rw-r--r-- | i386/i386/db_disasm.c | 1 | ||||
-rw-r--r-- | i386/i386/db_interface.h | 13 | ||||
-rw-r--r-- | i386/i386/db_trace.c | 155 | ||||
-rw-r--r-- | i386/i386/model_dep.h | 5 | ||||
-rw-r--r-- | i386/i386at/acpi_parse_apic.c | 2 | ||||
-rw-r--r-- | i386/i386at/autoconf.c | 16 | ||||
-rw-r--r-- | i386/i386at/autoconf.h | 4 | ||||
-rw-r--r-- | i386/i386at/com.c | 24 | ||||
-rw-r--r-- | i386/i386at/com.h | 2 | ||||
-rw-r--r-- | i386/i386at/int_init.c | 1 | ||||
-rw-r--r-- | i386/i386at/kd.c | 94 | ||||
-rw-r--r-- | i386/i386at/kd_mouse.c | 8 | ||||
-rw-r--r-- | i386/i386at/lpr.c | 6 | ||||
-rw-r--r-- | i386/i386at/model_dep.c | 5 |
15 files changed, 71 insertions, 266 deletions
diff --git a/i386/i386/ast_check.c b/i386/i386/ast_check.c index 36c665b2..5121abf1 100644 --- a/i386/i386/ast_check.c +++ b/i386/i386/ast_check.c @@ -32,6 +32,7 @@ * Initial i386 implementation does nothing. */ +#include <kern/ast.h> #include <kern/processor.h> /* diff --git a/i386/i386/db_disasm.c b/i386/i386/db_disasm.c index 9271e08c..c1f577e9 100644 --- a/i386/i386/db_disasm.c +++ b/i386/i386/db_disasm.c @@ -33,6 +33,7 @@ #include <machine/db_machdep.h> #include <ddb/db_access.h> +#include <ddb/db_examine.h> #include <ddb/db_output.h> #include <ddb/db_sym.h> diff --git a/i386/i386/db_interface.h b/i386/i386/db_interface.h index f0a748f9..69a277ae 100644 --- a/i386/i386/db_interface.h +++ b/i386/i386/db_interface.h @@ -32,6 +32,10 @@ extern boolean_t kdb_trap ( int code, struct i386_saved_state *regs); +struct int_regs; + +extern void kdb_kentry(struct int_regs *int_regs); + extern boolean_t db_read_bytes ( vm_offset_t addr, int size, @@ -111,6 +115,15 @@ db_i386_reg_value( int flag, struct db_var_aux_param *ap); +void feep(void); + +/* + * Put a debugging character on the screen. + * LOC=0 means put it in the bottom right corner, LOC=1 means put it + * one column to the left, etc. + */ +void kd_debug_put(int loc, char c); + #endif extern void db_get_debug_state( diff --git a/i386/i386/db_trace.c b/i386/i386/db_trace.c index 5eebc727..99cb8c48 100644 --- a/i386/i386/db_trace.c +++ b/i386/i386/db_trace.c @@ -558,159 +558,4 @@ db_i386_stack_trace( } } -#define CTHREADS_SUPPORT 1 - -#if CTHREADS_SUPPORT - -static thread_t -db_find_kthread( - vm_offset_t ustack_base, - vm_size_t ustack_top, - task_t task) -{ - thread_t thread; - if (task == TASK_NULL) - task = db_current_task(); - - queue_iterate(&task->thread_list, thread, thread_t, thread_list) { - vm_offset_t usp = thread->pcb->iss.uesp/*ebp works*/; - if (usp >= ustack_base && usp < ustack_top) - return thread; - } - return THREAD_NULL; -} - -static void db_cproc_state( - int state, - char s[4]) -{ - if (state == 0) { - *s++ = 'R'; - } else { - if (state & 1) *s++ = 'S'; - if (state & 2) *s++ = 'B'; - if (state & 4) *s++ = 'C'; - } - *s = 0; -} - -/* offsets in a cproc structure */ -/* TODO: longs? */ -const int db_cproc_next_offset = 0 * 4; -const int db_cproc_incarnation_offset = 1 * 4; -const int db_cproc_list_offset = 2 * 4; -const int db_cproc_wait_offset = 3 * 4; -const int db_cproc_context_offset = 5 * 4; -const int db_cproc_state_offset = 7 * 4; -const int db_cproc_stack_base_offset = 10 * 4 + sizeof(mach_msg_header_t); -const int db_cproc_stack_size_offset = 11 * 4 + sizeof(mach_msg_header_t); - -/* offsets in a cproc_switch context structure */ -const int db_cprocsw_framep_offset = 3 * 4; -const int db_cprocsw_pc_offset = 4 * 4; - -#include <machine/setjmp.h> - -extern jmp_buf_t *db_recover; - -static void db_trace_cproc( - vm_offset_t cproc, - thread_t thread) -{ - jmp_buf_t db_jmpbuf; - jmp_buf_t *prev = db_recover; - task_t task; - db_addr_t pc, fp, sp; - - task = (thread == THREAD_NULL)? TASK_NULL: thread->task; - - if (!_setjmp(db_recover = &db_jmpbuf)) { - char pstate[4]; - unsigned int s, w, n, c, cth; - - s = db_get_task_value(cproc + db_cproc_state_offset, 4, FALSE, task); - w = db_get_task_value(cproc + db_cproc_wait_offset, 4, FALSE, task); - n = db_get_task_value(cproc + db_cproc_next_offset, 4, FALSE, task); - c = db_get_task_value(cproc + db_cproc_context_offset, 4, FALSE, task); - cth = db_get_task_value(cproc + db_cproc_incarnation_offset, 4, FALSE, task); - - db_cproc_state(s, pstate); - - db_printf("CThread %x (cproc %x) %s", cth, cproc, pstate); - if (w) db_printf(" awaits %x", w); - if (n) db_printf(" next %x", n); - db_printf("\n"); - - if ((s != 0) && (c != 0)) { - pc = db_get_task_value(c + db_cprocsw_pc_offset, 4, FALSE, task); - fp = c + db_cprocsw_framep_offset; - sp = 0; // TODO - } else { - db_addr_t sb; - vm_size_t ss; - - sb = db_get_task_value(cproc + db_cproc_stack_base_offset, sizeof(db_expr_t), FALSE, task); - ss = db_get_task_value(cproc + db_cproc_stack_size_offset, sizeof(db_expr_t), FALSE, task); - db_printf(" Stack base: %x\n", sb); - /* - * Lessee now.. - */ - thread = db_find_kthread(sb, sb+ss, task); - if (thread != THREAD_NULL) { - pc = thread->pcb->iss.eip; - fp = thread->pcb->iss.ebp; - sp = thread->pcb->iss.uesp; - } else { - fp = -1; - } - } - - if (fp != -1) - db_i386_stack_trace(thread, (struct i386_frame*)fp, sp, pc, - -1, F_USER_TRACE); - } - - db_recover = prev; -} - -void db_all_cprocs( - const task_t task, - db_expr_t cproc_list) -{ - jmp_buf_t db_jmpbuf; - jmp_buf_t *prev = db_recover; - thread_t thread; - db_expr_t cproc, next; - - - if (task != TASK_NULL) { - thread = (thread_t) queue_first(&task->thread_list); - } else - thread = current_thread(); - - if (cproc_list != 0) - next = cproc_list; - else - if (!db_value_of_name("unix::cproc_list", &next)) { - db_printf("No cprocs.\n"); - return; - } - - - while (next) { - if (_setjmp(db_recover = &db_jmpbuf)) - break; - - cproc = db_get_task_value(next, 4, FALSE, TASK_NULL); - if (cproc == 0) break; - next = cproc + db_cproc_list_offset; - - db_trace_cproc(cproc, thread); - } - - db_recover = prev; -} - -#endif /* CTHREADS_SUPPORT */ - #endif /* MACH_KDB */ diff --git a/i386/i386/model_dep.h b/i386/i386/model_dep.h index 711f07fd..095eec9b 100644 --- a/i386/i386/model_dep.h +++ b/i386/i386/model_dep.h @@ -55,4 +55,9 @@ extern void halt_all_cpus (boolean_t reboot) __attribute__ ((noreturn)); */ extern void machine_relax (void); +/* + * C boot entrypoint - called by boot_entry in boothdr.S. + */ +extern void c_boot_entry(vm_offset_t bi); + #endif /* _I386AT_MODEL_DEP_H_ */ diff --git a/i386/i386at/acpi_parse_apic.c b/i386/i386at/acpi_parse_apic.c index 22ed8979..2680d0aa 100644 --- a/i386/i386at/acpi_parse_apic.c +++ b/i386/i386at/acpi_parse_apic.c @@ -173,7 +173,7 @@ acpi_search_rsdp(void *addr, uint32_t length) * * Returns the reference to RDSP structure if success, NULL if failure. */ -struct acpi_rsdp* +static struct acpi_rsdp* acpi_get_rsdp(void) { uint16_t *start = 0; diff --git a/i386/i386at/autoconf.c b/i386/i386at/autoconf.c index 8dc0b3ea..ef813d92 100644 --- a/i386/i386at/autoconf.c +++ b/i386/i386at/autoconf.c @@ -26,6 +26,7 @@ #include <kern/printf.h> #include <mach/std_types.h> +#include <i386at/autoconf.h> #include <i386/irq.h> #include <i386/ipl.h> #include <chips/busses.h> @@ -140,18 +141,3 @@ void take_dev_irq( } } - -void take_ctlr_irq( - const struct bus_ctlr *ctlr) -{ - int pic = ctlr->sysdep1; - if (ivect[pic] == intnull) { - iunit[pic] = ctlr->unit; - ivect[pic] = ctlr->intr; - } else { - printf("The device below will clobber IRQ %d (%p).\n", pic, ivect[pic]); - printf("You have two devices at the same IRQ. This won't work.\n"); - printf("Reconfigure your hardware and try again.\n"); - while (1); - } -} diff --git a/i386/i386at/autoconf.h b/i386/i386at/autoconf.h index a16a88f9..81fc5da7 100644 --- a/i386/i386at/autoconf.h +++ b/i386/i386at/autoconf.h @@ -37,7 +37,7 @@ */ void probeio(void); -extern void take_dev_irq ( - struct bus_device *dev); +void take_dev_irq( + const struct bus_device *dev); #endif /* _AUTOCONF_H_ */ diff --git a/i386/i386at/com.c b/i386/i386at/com.c index a6d6f701..000475db 100644 --- a/i386/i386at/com.c +++ b/i386/i386at/com.c @@ -91,7 +91,7 @@ u_short divisorreg[] = { * the relevant device is present today. * */ -int +static int comprobe_general(struct bus_device *dev, int noisy) { u_short addr = dev->address; @@ -298,7 +298,7 @@ comcninit(struct consdev *cp) * Used to handle PCMCIA modems, which may appear * at any time. */ -boolean_t com_reprobe( +static boolean_t com_reprobe( int unit) { struct bus_device *device; @@ -617,26 +617,6 @@ comparam(int unit) splx(s); } -void -comparm(int unit, int baud, int intr, int mode, int modem) -{ - u_short addr = (u_short)(cominfo[unit]->address); - spl_t s = spltty(); - - if (unit != 0 && unit != 1) { - printf("comparm(unit, baud, mode, intr, modem)\n"); - splx(s); - return; - } - outb(LINE_CTL(addr), iDLAB); - outb(BAUD_LSB(addr), divisorreg[baud] & 0xff); - outb(BAUD_MSB(addr), divisorreg[baud] >> 8); - outb(LINE_CTL(addr), mode); - outb(INTR_ENAB(addr), intr); - outb(MODEM_CTL(addr), modem); - splx(s); -} - int comst_1, comst_2, comst_3, comst_4, comst_5 = 14; void diff --git a/i386/i386at/com.h b/i386/i386at/com.h index a415488c..3be29305 100644 --- a/i386/i386at/com.h +++ b/i386/i386at/com.h @@ -73,6 +73,8 @@ comsetstat( #if MACH_KDB extern void kdb_kintr(void); +extern void compr_addr(vm_offset_t addr); +extern int compr(int unit); #endif /* MACH_KDB */ extern io_return_t comopen(dev_t dev, int flag, io_req_t ior); diff --git a/i386/i386at/int_init.c b/i386/i386at/int_init.c index 6da627dd..3fed4197 100644 --- a/i386/i386at/int_init.c +++ b/i386/i386at/int_init.c @@ -22,6 +22,7 @@ */ #include <i386at/idt.h> +#include <i386at/int_init.h> #include <i386/gdt.h> /* defined in locore.S */ diff --git a/i386/i386at/kd.c b/i386/i386at/kd.c index 9abc1dd0..2fa7b60d 100644 --- a/i386/i386at/kd.c +++ b/i386/i386at/kd.c @@ -85,6 +85,7 @@ WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include <device/io_req.h> #include <device/buf.h> #include <vm/vm_kern.h> +#include <i386/db_interface.h> #include <i386/locore.h> #include <i386/loose_ends.h> #include <i386/vm_param.h> @@ -346,6 +347,15 @@ short font_byte_width = 0; /* num bytes in 1 scan line of font */ int kd_pollc = 0; #ifdef DEBUG +static void +pause(void) +{ + int i; + + for (i = 0; i < 50000; ++i) + ; +} + /* * feep: * @@ -355,23 +365,11 @@ int kd_pollc = 0; void feep(void) { - int i; - kd_bellon(); - for (i = 0; i < 50000; ++i) - ; + pause(); kd_belloff(NULL); } -void -pause(void) -{ - int i; - - for (i = 0; i < 50000; ++i) - ; -} - /* * Put a debugging character on the screen. * LOC=0 means put it in the bottom right corner, LOC=1 means put it @@ -2255,20 +2253,6 @@ kd_getdata(void) return(inb(K_RDWR)); } -unsigned char -kd_cmdreg_read(void) -{ -int ch=KC_CMD_READ; - - while (inb(K_STATUS) & K_IBUF_FUL) - ; - outb(K_CMD, ch); - - while ((inb(K_STATUS) & K_OBUF_FUL) == 0) - ; - return(inb(K_RDWR)); -} - void kd_cmdreg_write(int val) { @@ -2473,6 +2457,33 @@ int new_button = 0; */ #define SLAMBPW 2 /* bytes per word for "slam" fcns */ +/* + * xga_getpos: + * + * This function returns the current hardware cursor position on the + * screen, scaled for compatibility with kd_curpos. + * + * input : None + * output : returns the value of cursor position on screen + * + */ +static csrpos_t +xga_getpos(void) + +{ + unsigned char low; + unsigned char high; + short pos; + + outb(kd_index_reg, C_HIGH); + high = inb(kd_io_reg); + outb(kd_index_reg, C_LOW); + low = inb(kd_io_reg); + pos = (0xff&low) + ((unsigned short)high<<8); + + return(ONE_SPACE * (csrpos_t)pos); +} + /* * kd_xga_init: @@ -2482,7 +2493,6 @@ int new_button = 0; void kd_xga_init(void) { - csrpos_t xga_getpos(void); unsigned char start, stop; #if 0 @@ -2571,34 +2581,6 @@ kd_xga_init(void) /* - * xga_getpos: - * - * This function returns the current hardware cursor position on the - * screen, scaled for compatibility with kd_curpos. - * - * input : None - * output : returns the value of cursor position on screen - * - */ -csrpos_t -xga_getpos(void) - -{ - unsigned char low; - unsigned char high; - short pos; - - outb(kd_index_reg, C_HIGH); - high = inb(kd_io_reg); - outb(kd_index_reg, C_LOW); - low = inb(kd_io_reg); - pos = (0xff&low) + ((unsigned short)high<<8); - - return(ONE_SPACE * (csrpos_t)pos); -} - - -/* * charput: * * Put attributed character for EGA/CGA/etc. diff --git a/i386/i386at/kd_mouse.c b/i386/i386at/kd_mouse.c index 906c1d37..c870cf5a 100644 --- a/i386/i386at/kd_mouse.c +++ b/i386/i386at/kd_mouse.c @@ -110,7 +110,7 @@ int mouse_char_index; /* mouse response */ /* * init_mouse_hw - initialize the serial port. */ -void +static void init_mouse_hw(dev_t unit, int mode) { unsigned short base_addr = cominfo[unit]->address; @@ -594,7 +594,7 @@ mouse_packet_microsoft_mouse(u_char mousebuf[MOUSEBUFSIZE]) /* * Write character to mouse. Called at spltty. */ -void kd_mouse_write( +static void kd_mouse_write( unsigned char ch) { while (inb(K_STATUS) & K_IBUF_FUL) @@ -610,7 +610,7 @@ void kd_mouse_write( * Read next character from mouse, waiting for interrupt * to deliver it. Called at spltty. */ -int kd_mouse_read(void) +static int kd_mouse_read(void) { int ch; @@ -633,7 +633,7 @@ int kd_mouse_read(void) /* * Prepare buffer for receiving next packet from mouse. */ -void kd_mouse_read_reset(void) +static void kd_mouse_read_reset(void) { mousebufindex = 0; mouse_char_index = 0; diff --git a/i386/i386at/lpr.c b/i386/i386at/lpr.c index 3939af54..f8d42f3c 100644 --- a/i386/i386at/lpr.c +++ b/i386/i386at/lpr.c @@ -273,12 +273,6 @@ lprstop( if ((tp->t_state & TS_BUSY) && (tp->t_state & TS_TTSTOP) == 0) tp->t_state |= TS_FLUSH; } -int -lprpr(int unit) -{ - lprpr_addr(lprinfo[unit]->address); - return 0; -} void lprpr_addr(unsigned short addr) diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c index 9ccc7551..7a679ba4 100644 --- a/i386/i386at/model_dep.c +++ b/i386/i386at/model_dep.c @@ -278,11 +278,6 @@ void halt_all_cpus(boolean_t reboot) machine_idle (cpu_number ()); } -void exit(int rc) -{ - halt_all_cpus(0); -} - void db_halt_cpu(void) { halt_all_cpus(0); |