Get the MI portions of VKERNEL to build, start linking it against libc.
authorMatthew Dillon <dillon@dragonflybsd.org>
Wed, 8 Nov 2006 16:40:00 +0000 (16:40 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Wed, 8 Nov 2006 16:40:00 +0000 (16:40 +0000)
sys/platform/vkernel/Makefile.inc
sys/platform/vkernel/conf/Makefile
sys/platform/vkernel/i386/autoconf.c
sys/platform/vkernel/i386/locore.s
sys/platform/vkernel/include/clock.h [new file with mode: 0644]
sys/platform/vkernel/include/md_var.h [copied from sys/platform/vkernel/i386/locore.s with 69% similarity]
sys/platform/vkernel/include/ptrace.h [new file with mode: 0644]
sys/platform/vkernel/include/smp.h [new file with mode: 0644]

index 4c5081a..ce3556c 100644 (file)
@@ -1,7 +1,4 @@
 # Used by the device build to check for device support
 #
-# $DragonFly: src/sys/platform/vkernel/Makefile.inc,v 1.1 2006/11/07 19:56:19 dillon Exp $
-
-#ACPICA5_SUPPORT=1
-#EST_SUPPORT=1
+# $DragonFly: src/sys/platform/vkernel/Makefile.inc,v 1.2 2006/11/08 16:39:56 dillon Exp $
 
index 2d54fdd..88ed21f 100644 (file)
@@ -1,4 +1,4 @@
-# $DragonFly: src/sys/platform/vkernel/conf/Makefile,v 1.3 2006/11/07 06:43:25 dillon Exp $
+# $DragonFly: src/sys/platform/vkernel/conf/Makefile,v 1.4 2006/11/08 16:39:58 dillon Exp $
 #
 # Which version of config(8) is required.
 %VERSREQ=      400025
@@ -13,6 +13,10 @@ S=   ../..
 
 .include "$S/conf/kern.pre.mk"
 
+# Override the normal kernel link and link as a normal user program
+#
+SYSTEM_LD= @${CC} -g -o ${.TARGET} ${SYSTEM_OBJS} vers.o
+
 %BEFORE_DEPEND
 
 %OBJS
index 9647c1a..c4ee513 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)autoconf.c    7.1 (Berkeley) 5/9/91
  * $FreeBSD: src/sys/i386/i386/autoconf.c,v 1.146.2.2 2001/06/07 06:05:58 dd Exp $
- * $DragonFly: src/sys/platform/vkernel/i386/autoconf.c,v 1.1 2006/11/07 18:50:07 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/autoconf.c,v 1.2 2006/11/08 16:39:59 dillon Exp $
  */
 
 /*
 #include <sys/device.h>
 #include <sys/machintr.h>
 
+#if 0
 #include <machine/pcb.h>
 #include <machine/pcb_ext.h>
 #include <machine/vm86.h>
+#endif
 #include <machine/globaldata.h>
 
 #if NISA > 0
@@ -153,47 +155,10 @@ configure(void *dummy)
 static void
 configure_final(void *dummy)
 {
-       int i;
-
        cninit_finish();
 
-       if (bootverbose) {
-#ifdef APIC_IO
-               imen_dump();
-#endif /* APIC_IO */
-
-               /*
-                * Print out the BIOS's idea of the disk geometries.
-                */
-               printf("BIOS Geometries:\n");
-               for (i = 0; i < N_BIOS_GEOM; i++) {
-                       unsigned long bios_geom;
-                       int max_cylinder, max_head, max_sector;
-
-                       bios_geom = bootinfo.bi_bios_geom[i];
-
-                       /*
-                        * XXX the bootstrap punts a 1200K floppy geometry
-                        * when the get-disk-geometry interrupt fails.  Skip
-                        * drives that have this geometry.
-                        */
-                       if (bios_geom == 0x4f010f)
-                               continue;
-
-                       printf(" %x:%08lx ", i, bios_geom);
-                       max_cylinder = bios_geom >> 16;
-                       max_head = (bios_geom >> 8) & 0xff;
-                       max_sector = bios_geom & 0xff;
-                       printf(
-               "0..%d=%d cylinders, 0..%d=%d heads, 1..%d=%d sectors\n",
-                              max_cylinder, max_cylinder + 1,
-                              max_head, max_head + 1,
-                              max_sector, max_sector);
-               }
-               printf(" %d accounted for\n", bootinfo.bi_n_bios_used);
-
+       if (bootverbose)
                printf("Device configuration finished.\n");
-       }
        cold = 0;
 }
 
@@ -226,8 +191,6 @@ SYSINIT(cpu_rootconf, SI_SUB_ROOT_CONF, SI_ORDER_FIRST, cpu_rootconf, NULL)
 u_long bootdev = 0;            /* not a cdev_t - encoding is different */
 
 #if defined(FFS) && defined(FFS_ROOT)
-#define FDMAJOR        2
-#define FDUNITSHIFT     6
 
 /*
  * The boot code uses old block device major numbers to pass bootdev to
@@ -288,18 +251,8 @@ setroot(void)
                return;
        }
 
-       /*
-        * XXX kludge for inconsistent unit numbering and lack of slice
-        * support for floppies.
-        */
-       if (majdev == FD_CDEV_MAJOR) {
-               slice = COMPATIBILITY_SLICE;
-               part = RAW_PART;
-               mindev = unit << FDUNITSHIFT;
-       } else {
-               part = B_PARTITION(bootdev);
-               mindev = dkmakeminor(unit, slice, part);
-       }
+       part = B_PARTITION(bootdev);
+       mindev = dkmakeminor(unit, slice, part);
        newrootdev = udev2dev(makeudev(majdev, mindev), 0);
        if (!dev_is_good(newrootdev))
                return;
index 8af6bb8..8bf8c3b 100644 (file)
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/platform/vkernel/i386/locore.s,v 1.1 2006/11/07 18:50:07 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/i386/locore.s,v 1.2 2006/11/08 16:39:59 dillon Exp $
  */
 
 #include <machine/asmacros.h>
 #include "assym.s"
+       
+       .globl  kernbase
+       .set    kernbase,KERNBASE
 
        .data
        ALIGN_DATA              /* just to be sure */
diff --git a/sys/platform/vkernel/include/clock.h b/sys/platform/vkernel/include/clock.h
new file mode 100644 (file)
index 0000000..7e596ec
--- /dev/null
@@ -0,0 +1,48 @@
+/*
+ * Kernel interface to machine-dependent clock driver.
+ * Garrett Wollman, September 1994.
+ * This file is in the public domain.
+ *
+ * $FreeBSD: src/sys/i386/include/clock.h,v 1.38.2.1 2002/11/02 04:41:50 iwasaki Exp $
+ * $DragonFly: src/sys/platform/vkernel/include/clock.h,v 1.1 2006/11/08 16:40:00 dillon Exp $
+ */
+
+#ifndef _MACHINE_CLOCK_H_
+#define        _MACHINE_CLOCK_H_
+
+#ifdef _KERNEL
+
+#ifndef _SYS_TYPES_H_
+#include <sys/types.h>
+#endif
+
+/*
+ * i386 to clock driver interface.
+ * XXX large parts of the driver and its interface are misplaced.
+ */
+extern int     adjkerntz;
+extern int     disable_rtc_set;
+extern int     statclock_disable;
+extern u_int   timer_freq;
+extern int     timer0_max_count;
+extern int     tsc_present;
+extern u_int   tsc_freq;
+extern int     tsc_is_broken;
+extern int     wall_cmos_clock;
+#ifdef APIC_IO
+extern int     apic_8254_intr;
+#endif
+
+/*
+ * Driver to clock driver interface.
+ */
+
+int    rtcin (int val);
+int    acquire_timer2 (int mode);
+int    release_timer2 (void);
+int    sysbeep (int pitch, int period);
+void   timer_restore (void);
+
+#endif /* _KERNEL */
+
+#endif /* !_MACHINE_CLOCK_H_ */
similarity index 69%
copy from sys/platform/vkernel/i386/locore.s
copy to sys/platform/vkernel/include/md_var.h
index 8af6bb8..f87b529 100644 (file)
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * 
- * $DragonFly: src/sys/platform/vkernel/i386/locore.s,v 1.1 2006/11/07 18:50:07 dillon Exp $
+ * $DragonFly: src/sys/platform/vkernel/include/md_var.h,v 1.1 2006/11/08 16:40:00 dillon Exp $
  */
 
-#include <machine/asmacros.h>
-#include "assym.s"
+#ifndef _MACHINE_MD_VAR_H_
+#define _MACHINE_MD_VAR_H_
 
-       .data
-       ALIGN_DATA              /* just to be sure */
-
-       .text
-NON_GPROF_ENTRY(btext)
-
-       call    initvkernel
-       call    mi_startup
-1:
-       hlt
-       jmp     1b
-
-#if 0
-/*
- * Signal trampoline, copied to top of user stack
- */
-NON_GPROF_ENTRY(sigcode)
-       call    *SIGF_HANDLER(%esp)             /* call signal handler */
-       lea     SIGF_UC(%esp),%eax              /* get ucontext_t */
-       pushl   %eax
-       testl   $PSL_VM,UC_EFLAGS(%eax)
-       jne     9f
-       movl    UC_GS(%eax),%gs                 /* restore %gs */
-9:
-       movl    $SYS_sigreturn,%eax
-       pushl   %eax                            /* junk to fake return addr. */
-       int     $0x80                           /* enter kernel with args */
-0:     jmp     0b
-
-       ALIGN_TEXT
-esigcode:
+#ifndef _SYS_TYPES_H_
+#include <sys/types.h>
+#endif
 
-       .data
-       .globl  szsigcode
-szsigcode:
-       .long   esigcode - sigcode
+extern char    sigcode[];
+extern int     szsigcode;
 
 #endif
 
diff --git a/sys/platform/vkernel/include/ptrace.h b/sys/platform/vkernel/include/ptrace.h
new file mode 100644 (file)
index 0000000..a9068ff
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 1992, 1993
+ *     The Regents of the University of California.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ *     This product includes software developed by the University of
+ *     California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ *     @(#)ptrace.h    8.1 (Berkeley) 6/11/93
+ * $FreeBSD: src/sys/i386/include/ptrace.h,v 1.9 1999/12/29 04:33:06 peter Exp $
+ * $DragonFly: src/sys/platform/vkernel/include/ptrace.h,v 1.1 2006/11/08 16:40:00 dillon Exp $
+ */
+
+#ifndef _MACHINE_PTRACE_H_
+#define _MACHINE_PTRACE_H_
+
+/*
+ * Machine dependent trace commands.
+ */
+#define PT_GETREGS      (PT_FIRSTMACH + 1)
+#define PT_SETREGS      (PT_FIRSTMACH + 2)
+#define PT_GETFPREGS    (PT_FIRSTMACH + 3)
+#define PT_SETFPREGS    (PT_FIRSTMACH + 4)
+#define PT_GETDBREGS    (PT_FIRSTMACH + 5)
+#define PT_SETDBREGS    (PT_FIRSTMACH + 6)
+
+#endif
+
diff --git a/sys/platform/vkernel/include/smp.h b/sys/platform/vkernel/include/smp.h
new file mode 100644 (file)
index 0000000..6dee0f1
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * ----------------------------------------------------------------------------
+ * "THE BEER-WARE LICENSE" (Revision 42):
+ * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
+ * can do whatever you want with this stuff. If we meet some day, and you think
+ * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
+ * ----------------------------------------------------------------------------
+ *
+ * $FreeBSD: src/sys/i386/include/smp.h,v 1.50.2.5 2001/02/13 22:32:45 tegge Exp $
+ * $DragonFly: src/sys/platform/vkernel/include/smp.h,v 1.1 2006/11/08 16:40:00 dillon Exp $
+ *
+ */
+
+#ifndef _MACHINE_SMP_H_
+#define _MACHINE_SMP_H_
+
+#ifdef _KERNEL
+
+#if defined(SMP)
+
+#ifndef LOCORE
+
+#if 0
+
+/*
+ * For sending values to POST displays.
+ * XXX FIXME: where does this really belong, isa.h/isa.c perhaps?
+ */
+extern int current_postcode;  /** XXX currently in mp_machdep.c */
+#define POSTCODE(X)    current_postcode = (X), \
+                       outb(0x80, current_postcode)
+#define POSTCODE_LO(X) current_postcode &= 0xf0, \
+                       current_postcode |= ((X) & 0x0f), \
+                       outb(0x80, current_postcode)
+#define POSTCODE_HI(X) current_postcode &= 0x0f, \
+                       current_postcode |= (((X) << 4) & 0xf0), \
+                       outb(0x80, current_postcode)
+
+
+#include <machine_base/apic/apicreg.h>
+#include <machine/pcb.h>
+
+/* global data in mpboot.s */
+extern int                     bootMP_size;
+
+/* functions in mpboot.s */
+void   bootMP                  (void);
+
+#endif
+
+#if 0
+/* global data in apic_vector.s */
+extern volatile u_int          stopped_cpus;
+extern volatile u_int          started_cpus;
+
+extern volatile u_int          checkstate_probed_cpus;
+extern void (*cpustop_restartfunc) (void);
+
+/* functions in apic_ipl.s */
+void   apic_eoi                (void);
+u_int  io_apic_read            (int, int);
+void   io_apic_write           (int, int, u_int);
+
+#endif
+
+#if 0
+/* global data in mp_machdep.c */
+extern int                     bsp_apic_ready;
+extern int                     mp_naps;
+extern int                     mp_nbusses;
+extern int                     mp_napics;
+extern int                     boot_cpu_id;
+extern vm_offset_t             cpu_apic_address;
+extern vm_offset_t             io_apic_address[];
+extern u_int32_t               cpu_apic_versions[];
+extern u_int32_t               *io_apic_versions;
+extern int                     cpu_num_to_apic_id[];
+extern int                     io_num_to_apic_id[];
+extern int                     apic_id_to_logical[];
+#endif
+
+#if 0
+#define APIC_INTMAPSIZE 24
+struct apic_intmapinfo {
+       int ioapic;
+       int int_pin;
+       volatile void *apic_address;
+       int redirindex;
+};
+extern struct apic_intmapinfo  int_to_apicintpin[];
+extern struct pcb              stoppcbs[];
+
+#endif
+
+#if 0
+/* functions in mp_machdep.c */
+void   *permanent_io_mapping(vm_paddr_t);
+u_int  mp_bootaddress          (u_int);
+int    mp_probe                (void);
+void   mp_start                (void);
+void   mp_announce             (void);
+u_int  isa_apic_mask           (u_int);
+int    isa_apic_irq            (int);
+int    pci_apic_irq            (int, int, int);
+int    apic_irq                (int, int);
+int    next_apic_irq           (int);
+int    undirect_isa_irq        (int);
+int    undirect_pci_irq        (int);
+int    apic_bus_type           (int);
+int    apic_src_bus_id         (int, int);
+int    apic_src_bus_irq        (int, int);
+int    apic_int_type           (int, int);
+int    apic_trigger            (int, int);
+int    apic_polarity           (int, int);
+void   assign_apic_irq         (int apic, int intpin, int irq);
+void   revoke_apic_irq         (int irq);
+void   init_secondary          (void);
+int    stop_cpus               (u_int);
+void   ap_init                 (void);
+int    restart_cpus            (u_int);
+void   forward_signal          (struct proc *);
+
+#endif
+
+#if 0
+/* global data in mpapic.c */
+extern volatile lapic_t                lapic;
+extern volatile ioapic_t       **ioapic;
+#endif
+
+/* functions in mpapic.c */
+#if 0
+void   apic_dump               (char*);
+void   apic_initialize         (void);
+void   imen_dump               (void);
+int    apic_ipi                (int, int, int);
+void   selected_apic_ipi       (u_int, int, int);
+void   single_apic_ipi(int cpu, int vector, int delivery_mode);
+int    single_apic_ipi_passive(int cpu, int vector, int delivery_mode);
+int    io_apic_setup           (int);
+void   io_apic_setup_intpin    (int, int);
+void   io_apic_set_id          (int, int);
+int    io_apic_get_id          (int);
+int    ext_int_setup           (int, int);
+#endif
+
+#if 0
+void   clr_io_apic_mask24      (int, u_int32_t);
+void   set_io_apic_mask24      (int, u_int32_t);
+#endif
+
+#if 0
+void   set_apic_timer          (int);
+int    read_apic_timer         (void);
+void   u_sleep                 (int);
+#endif
+void   cpu_send_ipiq           (int);
+int    cpu_send_ipiq_passive   (int);
+
+/* global data in init_smp.c */
+extern cpumask_t               smp_active_mask;
+
+#endif /* !LOCORE */
+#else  /* !SMP */
+
+#define        smp_active_mask 1       /* smp_active_mask always 1 on UP machines */
+
+#endif
+
+#endif /* _KERNEL */
+#endif /* _MACHINE_SMP_H_ */