Import amd64 MD headers
authorSimon Schubert <corecode@dragonflybsd.org>
Thu, 27 Jul 2006 00:42:46 +0000 (00:42 +0000)
committerSimon Schubert <corecode@dragonflybsd.org>
Thu, 27 Jul 2006 00:42:46 +0000 (00:42 +0000)
Obtained-from: FreeBSD and our sys/i386

17 files changed:
sys/amd64/include/acpica_machdep.h [new file with mode: 0644]
sys/amd64/include/atomic.h
sys/amd64/include/console.h [new file with mode: 0644]
sys/amd64/include/cpu.h [copied from sys/amd64/include/types.h with 54% similarity]
sys/amd64/include/elf.h
sys/amd64/include/inttypes.h [new file with mode: 0644]
sys/amd64/include/ioctl_fd.h [new file with mode: 0644]
sys/amd64/include/mouse.h [new file with mode: 0644]
sys/amd64/include/param.h
sys/amd64/include/pmap.h
sys/amd64/include/ptrace.h [copied from sys/amd64/include/types.h with 56% similarity]
sys/amd64/include/reg.h [new file with mode: 0644]
sys/amd64/include/stdint.h
sys/amd64/include/tls.h [new file with mode: 0644]
sys/amd64/include/types.h
sys/amd64/include/varargs.h [copied from sys/amd64/include/types.h with 57% similarity]
sys/amd64/include/vmparam.h

diff --git a/sys/amd64/include/acpica_machdep.h b/sys/amd64/include/acpica_machdep.h
new file mode 100644 (file)
index 0000000..f841a59
--- /dev/null
@@ -0,0 +1,80 @@
+/*-
+ * Copyright (c) 2002 Mitsuru IWASAKI
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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.
+ *
+ * $FreeBSD: src/sys/amd64/include/acpica_machdep.h,v 1.6 2004/10/11 05:39:15 njl Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/acpica_machdep.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+/******************************************************************************
+ *
+ * Name: acpica_machdep.h - arch-specific defines, etc.
+ *       $Revision$
+ *
+ *****************************************************************************/
+
+#ifndef __ACPICA_MACHDEP_H__
+#define __ACPICA_MACHDEP_H__
+
+#ifdef _KERNEL
+/*
+ * Calling conventions:
+ *
+ * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads)
+ * ACPI_EXTERNAL_XFACE      - External ACPI interfaces 
+ * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces
+ * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces
+ */
+#define ACPI_SYSTEM_XFACE
+#define ACPI_EXTERNAL_XFACE
+#define ACPI_INTERNAL_XFACE
+#define ACPI_INTERNAL_VAR_XFACE
+
+/* Asm macros */
+
+#define ACPI_ASM_MACROS
+#define BREAKPOINT3
+#define ACPI_DISABLE_IRQS() disable_intr()
+#define ACPI_ENABLE_IRQS()  enable_intr()
+
+#define ACPI_FLUSH_CPU_CACHE() wbinvd()
+
+/* Section 5.2.9.1:  global lock acquire/release functions */
+extern int     acpi_acquire_global_lock(uint32_t *lock);
+extern int     acpi_release_global_lock(uint32_t *lock);
+#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
+               ((Acq) = acpi_acquire_global_lock(GLptr))
+#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
+               ((Acq) = acpi_release_global_lock(GLptr))
+#endif /* _KERNEL */
+
+#define ACPI_MACHINE_WIDTH             64
+#define COMPILER_DEPENDENT_INT64       long
+#define COMPILER_DEPENDENT_UINT64      unsigned long
+
+void   acpi_SetDefaultIntrModel(int model);
+void   acpi_cpu_c1(void);
+
+#endif /* __ACPICA_MACHDEP_H__ */
index a66b773..7e3b479 100644 (file)
@@ -24,7 +24,7 @@
  * SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/amd64/include/atomic.h,v 1.32 2003/11/21 03:02:00 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/atomic.h,v 1.1 2004/02/02 08:05:52 dillon Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/atomic.h,v 1.2 2006/07/27 00:42:46 corecode Exp $
  */
 #ifndef _MACHINE_ATOMIC_H_
 #define _MACHINE_ATOMIC_H_
@@ -84,7 +84,7 @@ void          atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)
  * the binaries will run on both types of systems.
  */
 #if defined(SMP) || !defined(_KERNEL)
-#define MPLOCKED       lock ;
+#define MPLOCKED       "lock ; "
 #else
 #define MPLOCKED
 #endif
@@ -97,7 +97,7 @@ void          atomic_store_rel_##TYPE(volatile u_##TYPE *p, u_##TYPE v)
 static __inline void                                   \
 atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)\
 {                                                      \
-       __asm __volatile(__XSTRING(MPLOCKED) OP         \
+       __asm __volatile(MPLOCKED OP                    \
                         : "+m" (*p)                    \
                         : CONS (V));                   \
 }                                                      \
@@ -110,6 +110,174 @@ extern void atomic_##NAME##_##TYPE(volatile u_##TYPE *p, u_##TYPE v)
 
 #endif /* __GNUC__ */
 
+/*
+ * These functions operate on a 32 bit interrupt interlock which is defined
+ * as follows:
+ *
+ *     bit 0-30        interrupt handler disabled bits (counter)
+ *     bit 31          interrupt handler currently running bit (1 = run)
+ *
+ * atomic_intr_cond_test(P)    Determine if the interlock is in an
+ *                             acquired state.  Returns 0 if it not
+ *                             acquired, non-zero if it is.
+ *
+ * atomic_intr_cond_try(P)
+ *                             Increment the request counter and attempt to
+ *                             set bit 31 to acquire the interlock.  If
+ *                             we are unable to set bit 31 the request
+ *                             counter is decremented and we return -1,
+ *                             otherwise we return 0.
+ *
+ * atomic_intr_cond_enter(P, func, arg)
+ *                             Increment the request counter and attempt to
+ *                             set bit 31 to acquire the interlock.  If
+ *                             we are unable to set bit 31 func(arg) is
+ *                             called in a loop until we are able to set
+ *                             bit 31.
+ *
+ * atomic_intr_cond_exit(P, func, arg)
+ *                             Decrement the request counter and clear bit
+ *                             31.  If the request counter is still non-zero
+ *                             call func(arg) once.
+ *
+ * atomic_intr_handler_disable(P)
+ *                             Set bit 30, indicating that the interrupt
+ *                             handler has been disabled.  Must be called
+ *                             after the hardware is disabled.
+ *
+ *                             Returns bit 31 indicating whether a serialized
+ *                             accessor is active (typically the interrupt
+ *                             handler is running).  0 == not active,
+ *                             non-zero == active.
+ *
+ * atomic_intr_handler_enable(P)
+ *                             Clear bit 30, indicating that the interrupt
+ *                             handler has been enabled.  Must be called
+ *                             before the hardware is actually enabled.
+ *
+ * atomic_intr_handler_is_enabled(P)
+ *                             Returns bit 30, 0 indicates that the handler
+ *                             is enabled, non-zero indicates that it is
+ *                             disabled.  The request counter portion of
+ *                             the field is ignored.
+ */
+
+#ifndef __ATOMIC_INTR_T
+#define __ATOMIC_INTR_T
+typedef volatile int atomic_intr_t;
+#endif
+
+#if defined(KLD_MODULE)
+
+void atomic_intr_init(atomic_intr_t *p);
+int atomic_intr_handler_disable(atomic_intr_t *p);
+void atomic_intr_handler_enable(atomic_intr_t *p);
+int atomic_intr_handler_is_enabled(atomic_intr_t *p);
+int atomic_intr_cond_test(atomic_intr_t *p);
+int atomic_intr_cond_try(atomic_intr_t *p);
+void atomic_intr_cond_enter(atomic_intr_t *p, void (*func)(void *), void *arg);
+void atomic_intr_cond_exit(atomic_intr_t *p, void (*func)(void *), void *arg);
+
+#else
+
+static __inline
+void
+atomic_intr_init(atomic_intr_t *p)
+{
+       *p = 0;
+}
+
+static __inline
+int
+atomic_intr_handler_disable(atomic_intr_t *p)
+{
+       int data;
+
+       __asm __volatile(MPLOCKED "orl $0x40000000,%1; movl %1,%%eax; " \
+                                 "andl $0x80000000,%%eax" \
+                                 : "=a"(data) , "+m"(*p));
+       return(data);
+}
+
+static __inline
+void
+atomic_intr_handler_enable(atomic_intr_t *p)
+{
+       __asm __volatile(MPLOCKED "andl $0xBFFFFFFF,%0" : "+m" (*p));
+}
+
+static __inline
+int
+atomic_intr_handler_is_enabled(atomic_intr_t *p)
+{
+       int data;
+
+       __asm __volatile("movl %1,%%eax; andl $0x40000000,%%eax" \
+                        : "=a"(data) : "m"(*p));
+       return(data);
+}
+
+static __inline
+void
+atomic_intr_cond_enter(atomic_intr_t *p, void (*func)(void *), void *arg)
+{
+       __asm __volatile(MPLOCKED "incl %0; " \
+                        "1: ;" \
+                        MPLOCKED "btsl $31,%0; jnc 2f; " \
+                        "movq %2,%rdi; call *%1; " \
+                        "jmp 1b; " \
+                        "2: ;" \
+                        : "+m" (*p) \
+                        : "r"(func), "m"(arg) \
+                        : "ax", "cx", "dx", "di");     /* XXX clobbers more regs */
+}
+
+/*
+ * Attempt to enter the interrupt condition variable.  Returns zero on
+ * success, 1 on failure.
+ */
+static __inline
+int
+atomic_intr_cond_try(atomic_intr_t *p)
+{
+       int ret;
+
+       __asm __volatile(MPLOCKED "incl %0; " \
+                        "1: ;" \
+                        "subl %%eax,%%eax; " \
+                        MPLOCKED "btsl $31,%0; jnc 2f; " \
+                        MPLOCKED "decl %0; " \
+                        "movl $1,%%eax;" \
+                        "2: ;" \
+                        : "+m" (*p), "=a"(ret) \
+                        : : "cx", "dx");
+       return (ret);
+}
+
+
+static __inline
+int
+atomic_intr_cond_test(atomic_intr_t *p)
+{
+       return((int)(*p & 0x80000000));
+}
+
+static __inline
+void
+atomic_intr_cond_exit(atomic_intr_t *p, void (*func)(void *), void *arg)
+{
+       __asm __volatile(MPLOCKED "decl %0; " \
+                       MPLOCKED "btrl $31,%0; " \
+                       "testl $0x3FFFFFFF,%0; jz 1f; " \
+                        "movq %2,%rdi; call *%1; " \
+                        "1: ;" \
+                        : "+m" (*p) \
+                        : "r"(func), "m"(arg) \
+                        : "ax", "cx", "dx", "di");     /* XXX clobbers more regs */
+}
+
+#endif
+
 /*
  * Atomic compare and set, used by the mutex functions
  *
@@ -126,7 +294,7 @@ atomic_cmpset_int(volatile u_int *dst, u_int exp, u_int src)
        int res = exp;
 
        __asm __volatile (
-       "       " __XSTRING(MPLOCKED) " "
+               MPLOCKED
        "       cmpxchgl %1,%2 ;        "
        "       setz    %%al ;          "
        "       movzbl  %%al,%0 ;       "
@@ -146,7 +314,7 @@ atomic_cmpset_long(volatile u_long *dst, u_long exp, u_long src)
        long res = exp;
 
        __asm __volatile (
-       "       " __XSTRING(MPLOCKED) " "
+               MPLOCKED
        "       cmpxchgq %1,%2 ;        "
        "       setz    %%al ;          "
        "       movzbq  %%al,%0 ;       "
@@ -169,7 +337,7 @@ atomic_load_acq_##TYPE(volatile u_##TYPE *p)                \
 {                                                      \
        u_##TYPE res;                                   \
                                                        \
-       __asm __volatile(__XSTRING(MPLOCKED) LOP        \
+       __asm __volatile(MPLOCKED LOP                   \
        : "=a" (res),                   /* 0 (result) */\
          "+m" (*p)                     /* 1 */         \
        : : "memory");                                  \
diff --git a/sys/amd64/include/console.h b/sys/amd64/include/console.h
new file mode 100644 (file)
index 0000000..507defc
--- /dev/null
@@ -0,0 +1,11 @@
+/* $FreeBSD: src/sys/i386/include/console.h,v 1.46.2.1 2000/08/03 01:01:19 peter Exp $ */
+/* $DragonFly: src/sys/amd64/include/Attic/console.h,v 1.1 2006/07/27 00:42:46 corecode Exp $ */
+
+#ifndef _MACHINE_CONSOLE_H_
+#define _MACHINE_CONSOLE_H_
+
+#include <sys/fbio.h>
+#include <sys/kbio.h>
+#include <sys/consio.h>
+
+#endif /* !_MACHINE_CONSOLE_H_ */
similarity index 54%
copy from sys/amd64/include/types.h
copy to sys/amd64/include/cpu.h
index bbf253e..96fdf49 100644 (file)
@@ -1,6 +1,9 @@
 /*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * William Jolitz.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)types.h     8.3 (Berkeley) 1/5/94
- * $FreeBSD: src/sys/i386/include/types.h,v 1.19.2.1 2001/03/21 10:50:58 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/types.h,v 1.2 2004/02/14 20:34:26 dillon Exp $
+ *     from: @(#)cpu.h 5.4 (Berkeley) 5/9/91
+ * $FreeBSD: src/sys/i386/include/cpu.h,v 1.43.2.2 2001/06/15 09:37:57 scottl Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/cpu.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
  */
 
-#ifndef _MACHINE_TYPES_H_
-#define        _MACHINE_TYPES_H_
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-typedef struct _physadr {
-       int r[1];
-} *physadr;
-
-typedef struct label_t {
-       int val[6];
-} label_t;
-#endif
-
-typedef        __uint64_t      vm_offset_t;    /* address space bounded offset */
-typedef        __uint64_t      vm_size_t;      /* address space bounded size */
-typedef        __int64_t       vm_ooffset_t;   /* VM object bounded offset */
-typedef        __uint64_t      vm_pindex_t;    /* physical page index */
-typedef __uint64_t     vm_poff_t;      /* physical offset */
-typedef __uint64_t     vm_paddr_t;     /* physical addr (same as vm_poff_t) */
-
-typedef        __int64_t       register_t;
-typedef        __uint64_t      u_register_t;
-
-#ifdef _KERNEL
-typedef        __int64_t       intfptr_t;
-typedef        __uint64_t      uintfptr_t;
-#endif
+#ifndef _MACHINE_CPU_H_
+#define        _MACHINE_CPU_H_
 
 /*
- * MMU page tables
+ * CTL_MACHDEP definitions.
  */
-typedef __uint64_t     pd_entry_t;
-typedef __uint64_t     pt_entry_t;
-typedef __uint32_t      cpumask_t;      /* mask representing a set of cpus */
-
-#define PDESIZE         sizeof(pd_entry_t) /* for assembly files */
-#define PTESIZE         sizeof(pt_entry_t) /* for assembly files */
-
-/* Interrupt mask (spl, xxx_imask, etc) */
-typedef __uint32_t     intrmask_t;
-
-#endif /* !_MACHINE_TYPES_H_ */
-
+#define CPU_CONSDEV            1       /* dev_t: console terminal device */
+#define        CPU_ADJKERNTZ           2       /* int: timezone offset (seconds) */
+#define        CPU_DISRTCSET           3       /* int: disable resettodr() call */
+#define CPU_BOOTINFO           4       /* struct: bootinfo */
+#define        CPU_WALLCLOCK           5       /* int: indicates wall CMOS clock */
+#define        CPU_MAXID               6       /* number of valid machdep ids */
+
+#define CTL_MACHDEP_NAMES { \
+       { 0, 0 }, \
+       { "console_device", CTLTYPE_STRUCT }, \
+       { "adjkerntz", CTLTYPE_INT }, \
+       { "disable_rtc_set", CTLTYPE_INT }, \
+       { "bootinfo", CTLTYPE_STRUCT }, \
+       { "wall_cmos_clock", CTLTYPE_INT }, \
+}
+
+#endif /* !_MACHINE_CPU_H_ */
index 034c86c..e7a8b08 100644 (file)
@@ -23,8 +23,8 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $FreeBSD: src/sys/amd64/include/elf.h,v 1.16 2003/09/25 01:10:23 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/elf.h,v 1.1 2004/02/02 08:05:52 dillon Exp $
+ * $FreeBSD: src/sys/amd64/include/elf.h,v 1.18 2004/08/03 08:21:48 dfr Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/elf.h,v 1.2 2006/07/27 00:42:46 corecode Exp $
  */
 
 #ifndef _MACHINE_ELF_H_
@@ -125,8 +125,16 @@ __ElfType(Auxinfo);
 #define        R_X86_64_PC16   13      /* Add 16 bit signed extended pc relative symbol value */
 #define        R_X86_64_8      14      /* Add 8 bit zero extended symbol value */
 #define        R_X86_64_PC8    15      /* Add 8 bit signed extended pc relative symbol value */
-
-#define        R_X86_64_COUNT  16      /* Count of defined relocation types. */
+#define        R_X86_64_DTPMOD64 16    /* ID of module containing symbol */
+#define        R_X86_64_DTPOFF64 17    /* Offset in TLS block */
+#define        R_X86_64_TPOFF64 18     /* Offset in static TLS block */
+#define        R_X86_64_TLSGD  19      /* PC relative offset to GD GOT entry */
+#define        R_X86_64_TLSLD  20      /* PC relative offset to LD GOT entry */
+#define        R_X86_64_DTPOFF32 21    /* Offset in TLS block */
+#define        R_X86_64_GOTTPOFF 22    /* PC relative offset to IE GOT entry */
+#define        R_X86_64_TPOFF32 23     /* Offset in static TLS block */
+
+#define        R_X86_64_COUNT  24      /* Count of defined relocation types. */
 
 /* Define "machine" characteristics */
 #if __ELF_WORD_SIZE == 32
diff --git a/sys/amd64/include/inttypes.h b/sys/amd64/include/inttypes.h
new file mode 100644 (file)
index 0000000..bf57031
--- /dev/null
@@ -0,0 +1,221 @@
+/*-
+ * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Klaus Klein.
+ *
+ * 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 NetBSD
+ *        Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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.
+ *
+ *     From: $NetBSD: int_fmtio.h,v 1.2 2001/04/26 16:25:21 kleink Exp $
+ * $FreeBSD: src/sys/amd64/include/_inttypes.h,v 1.3 2003/05/01 01:05:23 peter Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/inttypes.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+#ifndef _MACHINE_INTTYPES_H_
+#define _MACHINE_INTTYPES_H_
+
+/*
+ * Macros for format specifiers.
+ */
+
+/* fprintf(3) macros for signed integers. */
+
+#define        PRId8           "d"     /* int8_t */
+#define        PRId16          "d"     /* int16_t */
+#define        PRId32          "d"     /* int32_t */
+#define        PRId64          "ld"    /* int64_t */
+#define        PRIdLEAST8      "d"     /* int_least8_t */
+#define        PRIdLEAST16     "d"     /* int_least16_t */
+#define        PRIdLEAST32     "d"     /* int_least32_t */
+#define        PRIdLEAST64     "ld"    /* int_least64_t */
+#define        PRIdFAST8       "d"     /* int_fast8_t */
+#define        PRIdFAST16      "d"     /* int_fast16_t */
+#define        PRIdFAST32      "d"     /* int_fast32_t */
+#define        PRIdFAST64      "ld"    /* int_fast64_t */
+#define        PRIdMAX         "jd"    /* intmax_t */
+#define        PRIdPTR         "ld"    /* intptr_t */
+
+#define        PRIi8           "i"     /* int8_t */
+#define        PRIi16          "i"     /* int16_t */
+#define        PRIi32          "i"     /* int32_t */
+#define        PRIi64          "li"    /* int64_t */
+#define        PRIiLEAST8      "i"     /* int_least8_t  */
+#define        PRIiLEAST16     "i"     /* int_least16_t */
+#define        PRIiLEAST32     "i"     /* int_least32_t */
+#define        PRIiLEAST64     "li"    /* int_least64_t */
+#define        PRIiFAST8       "i"     /* int_fast8_t */
+#define        PRIiFAST16      "i"     /* int_fast16_t */
+#define        PRIiFAST32      "i"     /* int_fast32_t */
+#define        PRIiFAST64      "li"    /* int_fast64_t */
+#define        PRIiMAX         "ji"    /* intmax_t */
+#define        PRIiPTR         "li"    /* intptr_t */
+
+/* fprintf(3) macros for unsigned integers. */
+
+#define        PRIo8           "o"     /* uint8_t */
+#define        PRIo16          "o"     /* uint16_t */
+#define        PRIo32          "o"     /* uint32_t */
+#define        PRIo64          "lo"    /* uint64_t */
+#define        PRIoLEAST8      "o"     /* uint_least8_t */
+#define        PRIoLEAST16     "o"     /* uint_least16_t */
+#define        PRIoLEAST32     "o"     /* uint_least32_t */
+#define        PRIoLEAST64     "lo"    /* uint_least64_t */
+#define        PRIoFAST8       "o"     /* uint_fast8_t */
+#define        PRIoFAST16      "o"     /* uint_fast16_t */
+#define        PRIoFAST32      "o"     /* uint_fast32_t */
+#define        PRIoFAST64      "lo"    /* uint_fast64_t */
+#define        PRIoMAX         "jo"    /* uintmax_t */
+#define        PRIoPTR         "lo"    /* uintptr_t */
+
+#define        PRIu8           "u"     /* uint8_t */
+#define        PRIu16          "u"     /* uint16_t */
+#define        PRIu32          "u"     /* uint32_t */
+#define        PRIu64          "lu"    /* uint64_t */
+#define        PRIuLEAST8      "u"     /* uint_least8_t */
+#define        PRIuLEAST16     "u"     /* uint_least16_t */
+#define        PRIuLEAST32     "u"     /* uint_least32_t */
+#define        PRIuLEAST64     "lu"    /* uint_least64_t */
+#define        PRIuFAST8       "u"     /* uint_fast8_t */
+#define        PRIuFAST16      "u"     /* uint_fast16_t */
+#define        PRIuFAST32      "u"     /* uint_fast32_t */
+#define        PRIuFAST64      "lu"    /* uint_fast64_t */
+#define        PRIuMAX         "ju"    /* uintmax_t */
+#define        PRIuPTR         "lu"    /* uintptr_t */
+
+#define        PRIx8           "x"     /* uint8_t */
+#define        PRIx16          "x"     /* uint16_t */
+#define        PRIx32          "x"     /* uint32_t */
+#define        PRIx64          "lx"    /* uint64_t */
+#define        PRIxLEAST8      "x"     /* uint_least8_t */
+#define        PRIxLEAST16     "x"     /* uint_least16_t */
+#define        PRIxLEAST32     "x"     /* uint_least32_t */
+#define        PRIxLEAST64     "lx"    /* uint_least64_t */
+#define        PRIxFAST8       "x"     /* uint_fast8_t */
+#define        PRIxFAST16      "x"     /* uint_fast16_t */
+#define        PRIxFAST32      "x"     /* uint_fast32_t */
+#define        PRIxFAST64      "lx"    /* uint_fast64_t */
+#define        PRIxMAX         "jx"    /* uintmax_t */
+#define        PRIxPTR         "lx"    /* uintptr_t */
+
+#define        PRIX8           "X"     /* uint8_t */
+#define        PRIX16          "X"     /* uint16_t */
+#define        PRIX32          "X"     /* uint32_t */
+#define        PRIX64          "lX"    /* uint64_t */
+#define        PRIXLEAST8      "X"     /* uint_least8_t */
+#define        PRIXLEAST16     "X"     /* uint_least16_t */
+#define        PRIXLEAST32     "X"     /* uint_least32_t */
+#define        PRIXLEAST64     "lX"    /* uint_least64_t */
+#define        PRIXFAST8       "X"     /* uint_fast8_t */
+#define        PRIXFAST16      "X"     /* uint_fast16_t */
+#define        PRIXFAST32      "X"     /* uint_fast32_t */
+#define        PRIXFAST64      "lX"    /* uint_fast64_t */
+#define        PRIXMAX         "jX"    /* uintmax_t */
+#define        PRIXPTR         "lX"    /* uintptr_t */
+
+/* fscanf(3) macros for signed integers. */
+
+#define        SCNd8           "hhd"   /* int8_t */
+#define        SCNd16          "hd"    /* int16_t */
+#define        SCNd32          "d"     /* int32_t */
+#define        SCNd64          "ld"    /* int64_t */
+#define        SCNdLEAST8      "hhd"   /* int_least8_t */
+#define        SCNdLEAST16     "hd"    /* int_least16_t */
+#define        SCNdLEAST32     "d"     /* int_least32_t */
+#define        SCNdLEAST64     "ld"    /* int_least64_t */
+#define        SCNdFAST8       "d"     /* int_fast8_t */
+#define        SCNdFAST16      "d"     /* int_fast16_t */
+#define        SCNdFAST32      "d"     /* int_fast32_t */
+#define        SCNdFAST64      "ld"    /* int_fast64_t */
+#define        SCNdMAX         "jd"    /* intmax_t */
+#define        SCNdPTR         "ld"    /* intptr_t */
+
+#define        SCNi8           "hhi"   /* int8_t */
+#define        SCNi16          "hi"    /* int16_t */
+#define        SCNi32          "i"     /* int32_t */
+#define        SCNi64          "li"    /* int64_t */
+#define        SCNiLEAST8      "hhi"   /* int_least8_t */
+#define        SCNiLEAST16     "hi"    /* int_least16_t */
+#define        SCNiLEAST32     "i"     /* int_least32_t */
+#define        SCNiLEAST64     "li"    /* int_least64_t */
+#define        SCNiFAST8       "i"     /* int_fast8_t */
+#define        SCNiFAST16      "i"     /* int_fast16_t */
+#define        SCNiFAST32      "i"     /* int_fast32_t */
+#define        SCNiFAST64      "li"    /* int_fast64_t */
+#define        SCNiMAX         "ji"    /* intmax_t */
+#define        SCNiPTR         "li"    /* intptr_t */
+
+/* fscanf(3) macros for unsigned integers. */
+
+#define        SCNo8           "hho"   /* uint8_t */
+#define        SCNo16          "ho"    /* uint16_t */
+#define        SCNo32          "o"     /* uint32_t */
+#define        SCNo64          "lo"    /* uint64_t */
+#define        SCNoLEAST8      "hho"   /* uint_least8_t */
+#define        SCNoLEAST16     "ho"    /* uint_least16_t */
+#define        SCNoLEAST32     "o"     /* uint_least32_t */
+#define        SCNoLEAST64     "lo"    /* uint_least64_t */
+#define        SCNoFAST8       "o"     /* uint_fast8_t */
+#define        SCNoFAST16      "o"     /* uint_fast16_t */
+#define        SCNoFAST32      "o"     /* uint_fast32_t */
+#define        SCNoFAST64      "lo"    /* uint_fast64_t */
+#define        SCNoMAX         "jo"    /* uintmax_t */
+#define        SCNoPTR         "lo"    /* uintptr_t */
+
+#define        SCNu8           "hhu"   /* uint8_t */
+#define        SCNu16          "hu"    /* uint16_t */
+#define        SCNu32          "u"     /* uint32_t */
+#define        SCNu64          "lu"    /* uint64_t */
+#define        SCNuLEAST8      "hhu"   /* uint_least8_t */
+#define        SCNuLEAST16     "hu"    /* uint_least16_t */
+#define        SCNuLEAST32     "u"     /* uint_least32_t */
+#define        SCNuLEAST64     "lu"    /* uint_least64_t */
+#define        SCNuFAST8       "u"     /* uint_fast8_t */
+#define        SCNuFAST16      "u"     /* uint_fast16_t */
+#define        SCNuFAST32      "u"     /* uint_fast32_t */
+#define        SCNuFAST64      "lu"    /* uint_fast64_t */
+#define        SCNuMAX         "ju"    /* uintmax_t */
+#define        SCNuPTR         "lu"    /* uintptr_t */
+
+#define        SCNx8           "hhx"   /* uint8_t */
+#define        SCNx16          "hx"    /* uint16_t */
+#define        SCNx32          "x"     /* uint32_t */
+#define        SCNx64          "lx"    /* uint64_t */
+#define        SCNxLEAST8      "hhx"   /* uint_least8_t */
+#define        SCNxLEAST16     "hx"    /* uint_least16_t */
+#define        SCNxLEAST32     "x"     /* uint_least32_t */
+#define        SCNxLEAST64     "lx"    /* uint_least64_t */
+#define        SCNxFAST8       "x"     /* uint_fast8_t */
+#define        SCNxFAST16      "x"     /* uint_fast16_t */
+#define        SCNxFAST32      "x"     /* uint_fast32_t */
+#define        SCNxFAST64      "lx"    /* uint_fast64_t */
+#define        SCNxMAX         "jx"    /* uintmax_t */
+#define        SCNxPTR         "lx"    /* uintptr_t */
+
+#endif /* !_MACHINE_INTTYPES_H_ */
diff --git a/sys/amd64/include/ioctl_fd.h b/sys/amd64/include/ioctl_fd.h
new file mode 100644 (file)
index 0000000..18f29aa
--- /dev/null
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 1992-1994,2001 by Joerg Wunsch, Dresden
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) ``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 AUTHOR(S) 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.
+ *
+ * $FreeBSD: src/sys/i386/include/ioctl_fd.h,v 1.13.2.1 2001/07/19 13:16:54 joerg Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/ioctl_fd.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+#ifndef        _MACHINE_IOCTL_FD_H_
+#define        _MACHINE_IOCTL_FD_H_
+
+#ifndef _SYS_TYPES_H_
+#include <sys/types.h>
+#endif
+#ifndef _SYS_IOCCOM_H_
+#include <sys/ioccom.h>
+#endif
+
+#define FD_FORMAT_VERSION 110  /* used to validate before formatting */
+#define FD_MAX_NSEC 36         /* highest known number of spt - allow for */
+                               /* 2.88 MB drives */
+
+struct fd_formb {
+       int format_version;     /* == FD_FORMAT_VERSION */
+       int cyl, head;
+       int transfer_rate;      /* fdreg.h: FDC_???KBPS */
+
+       union {
+               struct fd_form_data {
+                       /*
+                        * DO NOT CHANGE THE LAYOUT OF THIS STRUCTS
+                        * it is hardware-dependent since it exactly
+                        * matches the byte sequence to write to FDC
+                        * during its `format track' operation
+                        */
+                       u_char secshift; /* 0 -> 128, ...; usually 2 -> 512 */
+                       u_char nsecs;   /* must be <= FD_MAX_NSEC */
+                       u_char gaplen;  /* GAP 3 length; usually 84 */
+                       u_char fillbyte; /* usually 0xf6 */
+                       struct fd_idfield_data {
+                               /*
+                                * data to write into id fields;
+                                * for obscure formats, they mustn't match
+                                * the real values (but mostly do)
+                                */
+                               u_char cylno;   /* 0 thru 79 (or 39) */
+                               u_char headno;  /* 0, or 1 */
+                               u_char secno;   /* starting at 1! */
+                               u_char secsize; /* usually 2 */
+                       } idfields[FD_MAX_NSEC]; /* 0 <= idx < nsecs used */
+               } structured;
+               u_char raw[1];  /* to have continuous indexed access */
+       } format_info;
+};
+
+/* make life easier */
+# define fd_formb_secshift   format_info.structured.secshift
+# define fd_formb_nsecs      format_info.structured.nsecs
+# define fd_formb_gaplen     format_info.structured.gaplen
+# define fd_formb_fillbyte   format_info.structured.fillbyte
+/* these data must be filled in for(i = 0; i < fd_formb_nsecs; i++) */
+# define fd_formb_cylno(i)   format_info.structured.idfields[i].cylno
+# define fd_formb_headno(i)  format_info.structured.idfields[i].headno
+# define fd_formb_secno(i)   format_info.structured.idfields[i].secno
+# define fd_formb_secsize(i) format_info.structured.idfields[i].secsize
+
+struct fd_type {
+       int     sectrac;                /* sectors per track         */
+       int     secsize;                /* size code for sectors     */
+       int     datalen;                /* data len when secsize = 0 */
+       int     gap;                    /* gap len between sectors   */
+       int     tracks;                 /* total num of tracks       */
+       int     size;                   /* size of disk in sectors   */
+       int     steptrac;               /* steps per cylinder        */
+       int     trans;                  /* transfer speed code       */
+       int     heads;                  /* number of heads           */
+       int     f_gap;                  /* format gap len            */
+       int     f_inter;                /* format interleave factor  */
+};
+
+struct fdc_status {
+       u_int   status[7];
+};
+
+#define FD_FORM   _IOW('F', 61, struct fd_formb) /* format a track */
+#define FD_GTYPE  _IOR('F', 62, struct fd_type)  /* get drive type */
+#define FD_STYPE  _IOW('F', 63, struct fd_type)  /* set drive type */
+
+#define FD_GOPTS  _IOR('F', 64, int) /* drive options, see below */
+#define FD_SOPTS  _IOW('F', 65, int)
+
+#define FD_DEBUG  _IOW('F', 66, int)
+
+/*
+ * Obtain NE765 status registers.  Only successful if there is
+ * a valid status stored in fdc->status[].
+ */
+#define FD_GSTAT  _IOR('F', 68, struct fdc_status)
+
+/* Options for FD_GOPTS/FD_SOPTS, cleared on device close */
+#define FDOPT_NORETRY 0x0001   /* no retries on failure */
+#define FDOPT_NOERRLOG 0x002   /* no "hard error" kernel log messages */
+
+/*
+ * The following definitions duplicate those in sys/i386/isa/fdreg.h
+ * They are here since their values are to be used in the above
+ * structure when formatting a floppy. For very obvious reasons, both
+ * definitions must match ;-)
+ */
+#ifndef FDC_500KBPS
+#define        FDC_500KBPS     0x00    /* 500KBPS MFM drive transfer rate */
+#define        FDC_300KBPS     0x01    /* 300KBPS MFM drive transfer rate */
+#define        FDC_250KBPS     0x02    /* 250KBPS MFM drive transfer rate */
+#define        FDC_125KBPS     0x03    /* 125KBPS FM drive transfer rate */
+                               /* for some controllers 1MPBS instead */
+#endif /* FDC_500KBPS */
+
+#endif /* !_MACHINE_IOCTL_FD_H_ */
diff --git a/sys/amd64/include/mouse.h b/sys/amd64/include/mouse.h
new file mode 100644 (file)
index 0000000..d98249d
--- /dev/null
@@ -0,0 +1,337 @@
+/*-
+ * Copyright (c) 1992, 1993 Erik Forsberg.
+ * Copyright (c) 1996, 1997 Kazutaka YOKOTA
+ * 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.
+ *
+ * THIS SOFTWARE IS PROVIDED BY ``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 I 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.
+ *
+ * $FreeBSD: src/sys/i386/include/mouse.h,v 1.15.2.2 2002/04/15 00:52:08 will Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/mouse.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+#ifndef _MACHINE_MOUSE_H_
+#define _MACHINE_MOUSE_H_
+
+#include <sys/types.h>
+#include <sys/ioccom.h>
+
+/* ioctls */
+#define MOUSE_GETSTATUS                _IOR('M', 0, mousestatus_t)
+#define MOUSE_GETHWINFO                _IOR('M', 1, mousehw_t)
+#define MOUSE_GETMODE          _IOR('M', 2, mousemode_t)
+#define MOUSE_SETMODE          _IOW('M', 3, mousemode_t)
+#define MOUSE_GETLEVEL         _IOR('M', 4, int)
+#define MOUSE_SETLEVEL         _IOW('M', 5, int)
+#define MOUSE_GETVARS          _IOR('M', 6, mousevar_t)
+#define MOUSE_SETVARS          _IOW('M', 7, mousevar_t)
+#define MOUSE_READSTATE                _IOWR('M', 8, mousedata_t)
+#define MOUSE_READDATA         _IOWR('M', 9, mousedata_t)
+
+#if notyet
+#define MOUSE_SETRESOLUTION    _IOW('M', 10, int)
+#define MOUSE_SETSCALING       _IOW('M', 11, int)
+#define MOUSE_SETRATE          _IOW('M', 12, int)
+#define MOUSE_GETHWID          _IOR('M', 13, int)
+#endif
+
+/* mouse status block */
+typedef struct mousestatus {
+    int     flags;             /* state change flags */
+    int     button;            /* button status */
+    int     obutton;           /* previous button status */
+    int     dx;                        /* x movement */
+    int     dy;                        /* y movement */
+    int     dz;                        /* z movement */
+} mousestatus_t;
+
+/* button */
+#define MOUSE_BUTTON1DOWN      0x0001  /* left */
+#define MOUSE_BUTTON2DOWN      0x0002  /* middle */
+#define MOUSE_BUTTON3DOWN      0x0004  /* right */
+#define MOUSE_BUTTON4DOWN      0x0008
+#define MOUSE_BUTTON5DOWN      0x0010
+#define MOUSE_BUTTON6DOWN      0x0020
+#define MOUSE_BUTTON7DOWN      0x0040
+#define MOUSE_BUTTON8DOWN      0x0080
+#define MOUSE_MAXBUTTON                31
+#define MOUSE_STDBUTTONS       0x0007          /* buttons 1-3 */
+#define MOUSE_EXTBUTTONS       0x7ffffff8      /* the others (28 of them!) */
+#define MOUSE_BUTTONS          (MOUSE_STDBUTTONS | MOUSE_EXTBUTTONS)
+
+/* flags */
+#define MOUSE_STDBUTTONSCHANGED        MOUSE_STDBUTTONS
+#define MOUSE_EXTBUTTONSCHANGED        MOUSE_EXTBUTTONS
+#define MOUSE_BUTTONSCHANGED   MOUSE_BUTTONS
+#define MOUSE_POSCHANGED       0x80000000
+
+typedef struct mousehw {
+       int buttons;            /* -1 if unknown */
+       int iftype;             /* MOUSE_IF_XXX */
+       int type;               /* mouse/track ball/pad... */
+       int model;              /* I/F dependent model ID: MOUSE_MODEL_XXX */
+       int hwid;               /* I/F dependent hardware ID
+                                * for the PS/2 mouse, it will be PSM_XXX_ID 
+                                */
+} mousehw_t;
+
+/* iftype */
+#define MOUSE_IF_UNKNOWN       (-1)
+#define MOUSE_IF_SERIAL                0
+#define MOUSE_IF_BUS           1
+#define MOUSE_IF_INPORT                2
+#define MOUSE_IF_PS2           3
+#define MOUSE_IF_SYSMOUSE      4
+#define MOUSE_IF_USB           5
+
+/* type */
+#define MOUSE_UNKNOWN          (-1)    /* should be treated as a mouse */
+#define MOUSE_MOUSE            0
+#define MOUSE_TRACKBALL                1
+#define MOUSE_STICK            2
+#define MOUSE_PAD              3
+
+/* model */
+#define MOUSE_MODEL_UNKNOWN            (-1)
+#define MOUSE_MODEL_GENERIC            0
+#define MOUSE_MODEL_GLIDEPOINT         1
+#define MOUSE_MODEL_NETSCROLL          2
+#define MOUSE_MODEL_NET                        3
+#define MOUSE_MODEL_INTELLI            4
+#define MOUSE_MODEL_THINK              5
+#define MOUSE_MODEL_EASYSCROLL         6
+#define MOUSE_MODEL_MOUSEMANPLUS       7
+#define MOUSE_MODEL_KIDSPAD            8
+#define MOUSE_MODEL_VERSAPAD           9
+#define MOUSE_MODEL_EXPLORER           10
+#define MOUSE_MODEL_4D                 11
+#define MOUSE_MODEL_4DPLUS             12
+
+typedef struct mousemode {
+       int protocol;           /* MOUSE_PROTO_XXX */
+       int rate;               /* report rate (per sec), -1 if unknown */
+       int resolution;         /* MOUSE_RES_XXX, -1 if unknown */
+       int accelfactor;        /* accelation factor (must be 1 or greater) */
+       int level;              /* driver operation level */
+       int packetsize;         /* the length of the data packet */
+       unsigned char syncmask[2]; /* sync. data bits in the header byte */
+} mousemode_t;
+
+/* protocol */
+/*
+ * Serial protocols:
+ *   Microsoft, MouseSystems, Logitech, MM series, MouseMan, Hitachi Tablet,
+ *   GlidePoint, IntelliMouse, Thinking Mouse, MouseRemote, Kidspad,
+ *   VersaPad
+ * Bus mouse protocols:
+ *   bus, InPort
+ * PS/2 mouse protocol:
+ *   PS/2
+ */
+#define MOUSE_PROTO_UNKNOWN    (-1)
+#define MOUSE_PROTO_MS         0       /* Microsoft Serial, 3 bytes */
+#define MOUSE_PROTO_MSC                1       /* Mouse Systems, 5 bytes */
+#define MOUSE_PROTO_LOGI       2       /* Logitech, 3 bytes */
+#define MOUSE_PROTO_MM         3       /* MM series, 3 bytes */
+#define MOUSE_PROTO_LOGIMOUSEMAN 4     /* Logitech MouseMan 3/4 bytes */
+#define MOUSE_PROTO_BUS                5       /* MS/Logitech bus mouse */
+#define MOUSE_PROTO_INPORT     6       /* MS/ATI InPort mouse */
+#define MOUSE_PROTO_PS2                7       /* PS/2 mouse, 3 bytes */
+#define MOUSE_PROTO_HITTAB     8       /* Hitachi Tablet 3 bytes */
+#define MOUSE_PROTO_GLIDEPOINT 9       /* ALPS GlidePoint, 3/4 bytes */
+#define MOUSE_PROTO_INTELLI    10      /* MS IntelliMouse, 4 bytes */
+#define MOUSE_PROTO_THINK      11      /* Kensignton Thinking Mouse, 3/4 bytes */
+#define MOUSE_PROTO_SYSMOUSE   12      /* /dev/sysmouse */
+#define MOUSE_PROTO_X10MOUSEREM        13      /* X10 MouseRemote, 3 bytes */
+#define MOUSE_PROTO_KIDSPAD    14      /* Genius Kidspad */
+#define MOUSE_PROTO_VERSAPAD   15      /* Interlink VersaPad, 6 bytes */
+#define        MOUSE_PROTO_JOGDIAL     16      /* Vaio's JogDial */
+
+#define MOUSE_RES_UNKNOWN      (-1)
+#define MOUSE_RES_DEFAULT      0
+#define MOUSE_RES_LOW          (-2)
+#define MOUSE_RES_MEDIUMLOW    (-3)
+#define MOUSE_RES_MEDIUMHIGH   (-4)
+#define MOUSE_RES_HIGH         (-5)
+
+typedef struct mousedata {
+       int len;                /* # of data in the buffer */
+       int buf[16];            /* data buffer */
+} mousedata_t;
+
+#if (defined(MOUSE_GETVARS))
+
+typedef struct mousevar {
+       int var[16];
+} mousevar_t;
+
+/* magic numbers in var[0] */
+#define MOUSE_VARS_PS2_SIG     0x00325350      /* 'PS2' */
+#define MOUSE_VARS_BUS_SIG     0x00535542      /* 'BUS' */
+#define MOUSE_VARS_INPORT_SIG  0x00504e49      /* 'INP' */
+
+#endif /* MOUSE_GETVARS */
+
+/* Microsoft Serial mouse data packet */
+#define MOUSE_MSS_PACKETSIZE   3
+#define MOUSE_MSS_SYNCMASK     0x40
+#define MOUSE_MSS_SYNC         0x40
+#define MOUSE_MSS_BUTTONS      0x30
+#define MOUSE_MSS_BUTTON1DOWN  0x20    /* left */
+#define MOUSE_MSS_BUTTON2DOWN  0x00    /* no middle button */
+#define MOUSE_MSS_BUTTON3DOWN  0x10    /* right */
+
+/* Logitech MouseMan data packet (M+ protocol) */
+#define MOUSE_LMAN_BUTTON2DOWN 0x20    /* middle button, the 4th byte */
+
+/* ALPS GlidePoint extention (variant of M+ protocol) */
+#define MOUSE_ALPS_BUTTON2DOWN 0x20    /* middle button, the 4th byte */
+#define MOUSE_ALPS_TAP         0x10    /* `tapping' action, the 4th byte */
+
+/* Kinsington Thinking Mouse extention (variant of M+ protocol) */
+#define MOUSE_THINK_BUTTON2DOWN 0x20   /* lower-left button, the 4th byte */
+#define MOUSE_THINK_BUTTON4DOWN 0x10   /* lower-right button, the 4th byte */
+
+/* MS IntelliMouse (variant of MS Serial) */
+#define MOUSE_INTELLI_PACKETSIZE 4
+#define MOUSE_INTELLI_BUTTON2DOWN 0x10 /* middle button in the 4th byte */
+
+/* Mouse Systems Corp. mouse data packet */
+#define MOUSE_MSC_PACKETSIZE   5
+#define MOUSE_MSC_SYNCMASK     0xf8
+#define MOUSE_MSC_SYNC         0x80
+#define MOUSE_MSC_BUTTONS      0x07
+#define MOUSE_MSC_BUTTON1UP    0x04    /* left */
+#define MOUSE_MSC_BUTTON2UP    0x02    /* middle */
+#define MOUSE_MSC_BUTTON3UP    0x01    /* right */
+#define MOUSE_MSC_MAXBUTTON    3
+
+/* MM series mouse data packet */
+#define MOUSE_MM_PACKETSIZE    3
+#define MOUSE_MM_SYNCMASK      0xe0
+#define MOUSE_MM_SYNC          0x80
+#define MOUSE_MM_BUTTONS       0x07
+#define MOUSE_MM_BUTTON1DOWN   0x04    /* left */
+#define MOUSE_MM_BUTTON2DOWN   0x02    /* middle */
+#define MOUSE_MM_BUTTON3DOWN   0x01    /* right */
+#define MOUSE_MM_XPOSITIVE     0x10
+#define MOUSE_MM_YPOSITIVE     0x08
+
+/* PS/2 mouse data packet */
+#define MOUSE_PS2_PACKETSIZE   3
+#define MOUSE_PS2_SYNCMASK     0xc8
+#define MOUSE_PS2_SYNC         0x08
+#define MOUSE_PS2_BUTTONS      0x07    /* 0x03 for 2 button mouse */
+#define MOUSE_PS2_BUTTON1DOWN  0x01    /* left */
+#define MOUSE_PS2_BUTTON2DOWN  0x04    /* middle */
+#define MOUSE_PS2_BUTTON3DOWN  0x02    /* right */
+#define MOUSE_PS2_TAP          MOUSE_PS2_SYNC /* GlidePoint (PS/2) `tapping'
+                                               * Yes! this is the same bit 
+                                               * as SYNC!
+                                               */
+
+#define MOUSE_PS2_XNEG         0x10
+#define MOUSE_PS2_YNEG         0x20
+#define MOUSE_PS2_XOVERFLOW    0x40
+#define MOUSE_PS2_YOVERFLOW    0x80
+
+/* Logitech MouseMan+ (PS/2) data packet (PS/2++ protocol) */
+#define MOUSE_PS2PLUS_SYNCMASK 0x48
+#define MOUSE_PS2PLUS_SYNC     0x48
+#define MOUSE_PS2PLUS_ZNEG     0x08    /* sign bit */
+#define MOUSE_PS2PLUS_BUTTON4DOWN 0x10 /* 4th button on MouseMan+ */
+#define MOUSE_PS2PLUS_BUTTON5DOWN 0x20
+
+/* IBM ScrollPoint (PS/2) also uses PS/2++ protocol */
+#define MOUSE_SPOINT_ZNEG      0x80    /* sign bits */
+#define MOUSE_SPOINT_WNEG      0x08
+
+/* MS IntelliMouse (PS/2) data packet */
+#define MOUSE_PS2INTELLI_PACKETSIZE 4
+/* some compatible mice have additional buttons */
+#define MOUSE_PS2INTELLI_BUTTON4DOWN 0x40
+#define MOUSE_PS2INTELLI_BUTTON5DOWN 0x80
+
+/* MS IntelliMouse Explorer (PS/2) data packet (variation of IntelliMouse) */
+#define MOUSE_EXPLORER_ZNEG    0x08    /* sign bit */
+/* IntelliMouse Explorer has additional button data in the fourth byte */
+#define MOUSE_EXPLORER_BUTTON4DOWN 0x10
+#define MOUSE_EXPLORER_BUTTON5DOWN 0x20
+
+/* Interlink VersaPad (serial I/F) data packet */
+#define MOUSE_VERSA_PACKETSIZE 6
+#define MOUSE_VERSA_IN_USE     0x04
+#define MOUSE_VERSA_SYNCMASK   0xc3
+#define MOUSE_VERSA_SYNC       0xc0
+#define MOUSE_VERSA_BUTTONS    0x30
+#define MOUSE_VERSA_BUTTON1DOWN        0x20    /* left */
+#define MOUSE_VERSA_BUTTON2DOWN        0x00    /* middle */
+#define MOUSE_VERSA_BUTTON3DOWN        0x10    /* right */
+#define MOUSE_VERSA_TAP                0x08
+
+/* Interlink VersaPad (PS/2 I/F) data packet */
+#define MOUSE_PS2VERSA_PACKETSIZE      6
+#define MOUSE_PS2VERSA_IN_USE          0x10
+#define MOUSE_PS2VERSA_SYNCMASK                0xe8
+#define MOUSE_PS2VERSA_SYNC            0xc8
+#define MOUSE_PS2VERSA_BUTTONS         0x05
+#define MOUSE_PS2VERSA_BUTTON1DOWN     0x04    /* left */
+#define MOUSE_PS2VERSA_BUTTON2DOWN     0x00    /* middle */
+#define MOUSE_PS2VERSA_BUTTON3DOWN     0x01    /* right */
+#define MOUSE_PS2VERSA_TAP             0x02
+
+/* A4 Tech 4D Mouse (PS/2) data packet */
+#define MOUSE_4D_PACKETSIZE            3       
+#define MOUSE_4D_WHEELBITS             0xf0
+
+/* A4 Tech 4D+ Mouse (PS/2) data packet */
+#define MOUSE_4DPLUS_PACKETSIZE                3       
+#define MOUSE_4DPLUS_ZNEG              0x04    /* sign bit */
+#define MOUSE_4DPLUS_BUTTON4DOWN       0x08
+
+/* sysmouse extended data packet */
+/*
+ * /dev/sysmouse sends data in two formats, depending on the protocol
+ * level.  At the level 0, format is exactly the same as MousSystems'
+ * five byte packet.  At the level 1, the first five bytes are the same
+ * as at the level 0.  There are additional three bytes which shows
+ * `dz' and the states of additional buttons.  `dz' is expressed as the
+ * sum of the byte 5 and 6 which contain signed seven bit values.
+ * The states of the button 4 though 10 are in the bit 0 though 6 in 
+ * the byte 7 respectively: 1 indicates the button is up.
+ */
+#define MOUSE_SYS_PACKETSIZE   8
+#define MOUSE_SYS_SYNCMASK     0xf8
+#define MOUSE_SYS_SYNC         0x80
+#define MOUSE_SYS_BUTTON1UP    0x04    /* left, 1st byte */
+#define MOUSE_SYS_BUTTON2UP    0x02    /* middle, 1st byte */
+#define MOUSE_SYS_BUTTON3UP    0x01    /* right, 1st byte */
+#define MOUSE_SYS_BUTTON4UP    0x0001  /* 7th byte */
+#define MOUSE_SYS_BUTTON5UP    0x0002
+#define MOUSE_SYS_BUTTON6UP    0x0004
+#define MOUSE_SYS_BUTTON7UP    0x0008
+#define MOUSE_SYS_BUTTON8UP    0x0010
+#define MOUSE_SYS_BUTTON9UP    0x0020
+#define MOUSE_SYS_BUTTON10UP   0x0040
+#define MOUSE_SYS_MAXBUTTON    10
+#define MOUSE_SYS_STDBUTTONS   0x07
+#define MOUSE_SYS_EXTBUTTONS   0x7f    /* the others */
+
+/* Mouse remote socket */
+#define _PATH_MOUSEREMOTE      "/var/run/MouseRemote"
+
+#endif /* _MACHINE_MOUSE_H_ */
index 9f8deaf..0e74455 100644 (file)
@@ -35,7 +35,7 @@
  *
  *     from: @(#)param.h       5.8 (Berkeley) 6/28/91
  * $FreeBSD: src/sys/i386/include/param.h,v 1.54.2.8 2002/08/31 21:15:55 dillon Exp $
- * $DragonFly: src/sys/amd64/include/Attic/param.h,v 1.2 2006/03/08 04:54:05 reed Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/param.h,v 1.3 2006/07/27 00:42:46 corecode Exp $
  */
 
 #ifndef _MACHINE_PARAM_H_
 #define ALIGNBYTES     _ALIGNBYTES
 #define ALIGN(p)       _ALIGN(p)
 
+/* level 1 == page table */
 #define PAGE_SHIFT     12              /* LOG2(PAGE_SIZE) */
 #define PAGE_SIZE      (1<<PAGE_SHIFT) /* bytes/page */
 #define PAGE_MASK      (PAGE_SIZE-1)
 #define NPTEPG         (PAGE_SIZE/(sizeof (pt_entry_t)))
 
-#if 0
-#define NPDEPG         (PAGE_SIZE/(sizeof (pd_entry_t)))
-#define PDRSHIFT       22              /* LOG2(NBPDR) */
+/* level 2 == page directory */
+#define PDRSHIFT       21              /* LOG2(NBPDR) */
 #define NBPDR          (1<<PDRSHIFT)   /* bytes/page dir */
 #define PDRMASK                (NBPDR-1)
-#endif
+#define NPDEPG         (PAGE_SIZE/(sizeof (pd_entry_t)))
+
+/* level 3 == page directory pointer table */
+#define PDPSHIFT       30              /* LOG2(NBPDP) */
+#define NBPDP          (1<<PDPSHIFT)   /* bytes/page dir ptr table */
+#define PDPMASK                (NBPDP-1)
+#define NPDPEPG                (PAGE_SIZE/(sizeof (pdp_entry_t)))
+
+/* level 4 */
+#define PML4SHIFT      39              /* LOG2(NPML4) */
+#define NPML4          (1UL<<PML4SHIFT)/* bytes/page map level4 table */
+#define PML4MASK       (NPML4-1)
+#define NPML4EPG       (PAGE_SIZE/(sizeof (pml4_entry_t)))
+
 
 #define DEV_BSHIFT     9               /* log2(DEV_BSIZE) */
 #define DEV_BSIZE      (1<<DEV_BSHIFT)
index a4d3a39..42a7c95 100644 (file)
@@ -23,7 +23,7 @@
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- * $DragonFly: src/sys/amd64/include/Attic/pmap.h,v 1.3 2005/08/12 00:25:10 hmp Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/pmap.h,v 1.4 2006/07/27 00:42:46 corecode Exp $
  */
 #ifndef _MACHINE_PMAP_H_
 #define        _MACHINE_PMAP_H_
@@ -60,7 +60,7 @@
 #define PG_PCD         0x0010LL                /* PCD  Page Cache Disable */
 #define PG_A           0x0020LL                /* A    Accessed        */
 #define PG_D           0x0040LL                /* D    Dirty   (pte only) */
-#define PG_PAE         0x0080LL                /* PAT          (pte only) */
+#define PG_P         0x0080LL                /* PAT          (pte only) */
 #define PG_G           0x0100LL                /* G    Global  (pte only) */
 #define PG_USR0                0x0200LL                /* available to os */
 #define PG_USR1                0x0400LL                /* available to os */
 #define UVA_MAXMEM     (512LL*1024*1024*1024)
 #define KVA_MAXMEM     (512LL*1024*1024*1024)
 
-#if 0
 /*
- * Pte related macros
+ * Pte related macros.  This is complicated by having to deal with
+ * the sign extension of the 48th bit.
  */
-#define VADDR(pdi, pti) ((vm_offset_t)(((pdi)<<PDRSHIFT)|((pti)<<PAGE_SHIFT)))
+#define KVADDR(l4, l3, l2, l1) ( \
+       ((unsigned long)-1 << 47) | \
+       ((unsigned long)(l4) << PML4SHIFT) | \
+       ((unsigned long)(l3) << PDPSHIFT) | \
+       ((unsigned long)(l2) << PDRSHIFT) | \
+       ((unsigned long)(l1) << PAGE_SHIFT))
+
+#define UVADDR(l4, l3, l2, l1) ( \
+       ((unsigned long)(l4) << PML4SHIFT) | \
+       ((unsigned long)(l3) << PDPSHIFT) | \
+       ((unsigned long)(l2) << PDRSHIFT) | \
+       ((unsigned long)(l1) << PAGE_SHIFT))
+
+
+#define NKPML4E                1
+#define NKPDPE         1
+#define NKPDE          (NKPDPE*NPDEPG)
+
+#define NUPML4E                (NPML4EPG/2)
+#define NUPDPE         (NUPML4E*NPDPEPG)
+#define NUPDE          (NUPDPE*NPDEPG)
 
-#ifndef NKPT
-#define        NKPT            30      /* actual number of kernel page tables */
-#endif
-#ifndef NKPDE
-#define NKPDE  (KVA_PAGES - 2) /* addressable number of page tables/pde's */
-#endif
-#if NKPDE > KVA_PAGES - 2
-#error "Maximum NKPDE is KVA_PAGES - 2"
-#endif
 
 /*
  * The *PTDI values control the layout of virtual memory
 #define        UMAXPTDI        (PTDPTDI-1)     /* ptd entry for user space end */
 #define        UMAXPTEOFF      (NPTEPG)        /* pte entry for user space end */
 
-#endif /* 0 */
+#define KPML4I         (NPML4EPG-1)
+
+#define KPDPI          (NPDPEPG-2)
 
 /*
  * XXX doesn't really belong here I guess...
 
 #include <sys/queue.h>
 
-#if 0
-
 /*
  * Address of current and alternate address space page table maps
  * and directories.
@@ -193,8 +204,6 @@ pmap_kextract(vm_offset_t va)
 
 #endif
 
-#endif /* 0 */
-
 /*
  * Pmap stuff
  */
@@ -205,6 +214,18 @@ struct md_page {
        TAILQ_HEAD(,pv_entry)   pv_list;
 };
 
+/*
+ * Each machine dependent implementation is expected to
+ * keep certain statistics.  They may do this anyway they
+ * so choose, but are expected to return the statistics
+ * in the following structure.
+ */
+struct pmap_statistics {
+       long resident_count;    /* # of pages mapped (total) */
+       long wired_count;       /* # of pages wired */
+};
+typedef struct pmap_statistics *pmap_statistics_t;
+
 struct pmap {
        pd_entry_t              *pm_pdir;       /* KVA of page directory */
        vm_object_t             pm_pteobj;      /* Container for pte's */
similarity index 56%
copy from sys/amd64/include/types.h
copy to sys/amd64/include/ptrace.h
index bbf253e..33247ae 100644 (file)
@@ -1,5 +1,5 @@
-/*-
- * Copyright (c) 1990, 1993
+/*
+ * 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
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)types.h     8.3 (Berkeley) 1/5/94
- * $FreeBSD: src/sys/i386/include/types.h,v 1.19.2.1 2001/03/21 10:50:58 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/types.h,v 1.2 2004/02/14 20:34:26 dillon Exp $
+ *     @(#)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/amd64/include/Attic/ptrace.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
  */
 
-#ifndef _MACHINE_TYPES_H_
-#define        _MACHINE_TYPES_H_
-
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-typedef struct _physadr {
-       int r[1];
-} *physadr;
-
-typedef struct label_t {
-       int val[6];
-} label_t;
-#endif
-
-typedef        __uint64_t      vm_offset_t;    /* address space bounded offset */
-typedef        __uint64_t      vm_size_t;      /* address space bounded size */
-typedef        __int64_t       vm_ooffset_t;   /* VM object bounded offset */
-typedef        __uint64_t      vm_pindex_t;    /* physical page index */
-typedef __uint64_t     vm_poff_t;      /* physical offset */
-typedef __uint64_t     vm_paddr_t;     /* physical addr (same as vm_poff_t) */
-
-typedef        __int64_t       register_t;
-typedef        __uint64_t      u_register_t;
-
-#ifdef _KERNEL
-typedef        __int64_t       intfptr_t;
-typedef        __uint64_t      uintfptr_t;
-#endif
+#ifndef _MACHINE_PTRACE_H_
+#define _MACHINE_PTRACE_H_
 
 /*
- * MMU page tables
+ * Machine dependent trace commands.
  */
-typedef __uint64_t     pd_entry_t;
-typedef __uint64_t     pt_entry_t;
-typedef __uint32_t      cpumask_t;      /* mask representing a set of cpus */
-
-#define PDESIZE         sizeof(pd_entry_t) /* for assembly files */
-#define PTESIZE         sizeof(pt_entry_t) /* for assembly files */
-
-/* Interrupt mask (spl, xxx_imask, etc) */
-typedef __uint32_t     intrmask_t;
-
-#endif /* !_MACHINE_TYPES_H_ */
+#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/amd64/include/reg.h b/sys/amd64/include/reg.h
new file mode 100644 (file)
index 0000000..a650027
--- /dev/null
@@ -0,0 +1,113 @@
+/*-
+ * Copyright (c) 2003 Peter Wemm.
+ * Copyright (c) 1990 The Regents of the University of California.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to Berkeley by
+ * William Jolitz.
+ *
+ * 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.
+ * 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.
+ *
+ *     from: @(#)reg.h 5.5 (Berkeley) 1/18/91
+ * $FreeBSD: src/sys/amd64/include/reg.h,v 1.35 2004/04/05 23:55:14 imp Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/reg.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+#ifndef _MACHINE_REG_H_
+#define        _MACHINE_REG_H_
+
+/*
+ * Register set accessible via /proc/$pid/regs and PT_{SET,GET}REGS.
+ */
+struct reg {
+       register_t      r_r15;
+       register_t      r_r14;
+       register_t      r_r13;
+       register_t      r_r12;
+       register_t      r_r11;
+       register_t      r_r10;
+       register_t      r_r9;
+       register_t      r_r8;
+       register_t      r_rdi;
+       register_t      r_rsi;
+       register_t      r_rbp;
+       register_t      r_rbx;
+       register_t      r_rdx;
+       register_t      r_rcx;
+       register_t      r_rax;
+       register_t      r_trapno;
+       register_t      r_err;
+       register_t      r_rip;
+       register_t      r_cs;
+       register_t      r_rflags;
+       register_t      r_rsp;
+       register_t      r_ss;
+};
+
+/*
+ * Register set accessible via /proc/$pid/fpregs.
+ */
+struct fpreg {
+       /*
+        * XXX should get struct from fpu.h.  Here we give a slightly
+        * simplified struct.  This may be too much detail.  Perhaps
+        * an array of unsigned longs is best.
+        */
+       unsigned long   fpr_env[4];
+       unsigned char   fpr_acc[8][16];
+       unsigned char   fpr_xacc[16][16];
+       unsigned long   fpr_spare[12];
+};
+
+/*
+ * Register set accessible via /proc/$pid/dbregs.
+ */
+struct dbreg {
+       unsigned long  dr[16];  /* debug registers */
+                               /* Index 0-3: debug address registers */
+                               /* Index 4-5: reserved */
+                               /* Index 6: debug status */
+                               /* Index 7: debug control */
+                               /* Index 8-15: reserved */
+};
+
+#define DBREG_DR7_EXEC      0x00      /* break on execute       */
+#define DBREG_DR7_WRONLY    0x01      /* break on write         */
+#define DBREG_DR7_RDWR      0x03      /* break on read or write */
+#define DBREG_DRX(d,x) ((d)->dr[(x)]) /* reference dr0 - dr15 by
+                                         register number */
+#ifdef _KERNEL
+/*
+ * XXX these interfaces are MI, so they should be declared in a MI place.
+ */
+int    fill_regs(struct thread *, struct reg *);
+int    set_regs(struct thread *, struct reg *);
+int    fill_fpregs(struct thread *, struct fpreg *);
+int    set_fpregs(struct thread *, struct fpreg *);
+int    fill_dbregs(struct thread *, struct dbreg *);
+int    set_dbregs(struct thread *, struct dbreg *);
+#endif
+
+#endif /* !_MACHINE_REG_H_ */
index 9d28620..a38693b 100644 (file)
@@ -36,7 +36,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  *
  * $FreeBSD: src/sys/i386/include/_stdint.h,v 1.1 2002/07/29 17:41:07 mike Exp $
- * $DragonFly: src/sys/amd64/include/Attic/stdint.h,v 1.2 2005/10/01 12:40:33 corecode Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/stdint.h,v 1.3 2006/07/27 00:42:46 corecode Exp $
  */
 
 #ifndef _MACHINE_STDINT_H_
@@ -51,6 +51,7 @@ typedef       short           __int16_t;
 typedef        unsigned short  __uint16_t;
 typedef        int             __int32_t;
 typedef        unsigned int    __uint32_t;
+typedef int            __boolean_t;
 
 /*
  * This mess is to override compiler options that might restrict long long
diff --git a/sys/amd64/include/tls.h b/sys/amd64/include/tls.h
new file mode 100644 (file)
index 0000000..70d75fb
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright (c) 2005 The DragonFly Project.  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. Neither the name of The DragonFly Project 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 COPYRIGHT HOLDERS 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
+ * COPYRIGHT HOLDERS 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.
+ *
+ * $DragonFly: src/sys/amd64/include/Attic/tls.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
+ */
+
+#ifndef        _MACHINE_TLS_H_
+#define        _MACHINE_TLS_H_
+
+#ifndef _SYS_TYPES_H_
+#include <sys/types.h>
+#endif
+#ifndef _SYS_TLS_H_
+#include <sys/tls.h>
+#endif
+
+/*
+ * NOTE: the tcb_{self,dtv,pthread,errno) fields must be declared
+ * in the structure in the specified order as assembly will access the
+ * fields with a hardwired offset.
+ *
+ * Outside of this file, the system call layer generation will hardwire
+ * the offset for tcb_errno.
+ */
+struct tls_tcb {
+       struct tls_tcb *tcb_self;       /* pointer to self*/
+       void *tcb_dtv;                  /* Dynamic Thread Vector */
+       void *tcb_pthread;              /* thread library's data*/
+       int *tcb_errno_p;               /* pointer to per-thread errno */
+       void *tcb_unused[4];
+};
+
+struct tls_dtv {
+       uintptr_t dtv_generation;
+       uintptr_t dtv_max_index;
+       void *dtv_offset[__ARRAY_ZERO];
+};
+
+#define        RTLD_TCB_HAS_SELF_POINTER
+#define        RTLD_STATIC_TLS_ALIGN           16
+#define        RTLD_STATIC_TLS_ALIGN_MASK      (RTLD_STATIC_TLS_ALIGN - 1)
+#define        RTLD_STATIC_TLS_EXTRA           256
+#define RTLD_STATIC_TLS_VARIANT_II
+
+#ifndef _KERNEL
+
+/* Get the current TCB. */
+static __inline struct tls_tcb *
+tls_get_tcb(void)
+{
+       void *self;
+
+       __asm __volatile ("movq %%fs:%1, %0"
+           : "=r" (self)
+           : "m" (((struct tls_tcb *)0)->tcb_self));
+
+       return(self);
+}
+
+/* Get the current thread. */
+static __inline void *
+tls_get_curthread(void)
+{
+       void *self;
+
+       __asm __volatile ("movq %%fs:%1, %0"
+           : "=r" (self)
+           : "m" (((struct tls_tcb *)0)->tcb_pthread));
+
+       return(self);
+}
+
+static __inline void
+tls_set_tcb(struct tls_tcb *tcb)
+{
+       struct tls_info info;
+       int seg;
+
+       info.base = tcb;
+       info.size = -1;
+       seg = sys_set_tls_area(0, &info, sizeof(info));
+       __asm __volatile("movl %0, %%fs" : : "r" (seg));
+}
+
+struct tls_tcb *_rtld_allocate_tls(void);
+struct tls_tcb *_libc_allocate_tls(void);
+void            _rtld_free_tls(struct tls_tcb *);
+void            _libc_free_tls(struct tls_tcb *);
+void            _rtld_call_init(void);
+struct tls_tcb *_libc_init_tls(void);
+struct tls_tcb *_init_tls(void);
+
+#endif
+
+#endif /* !_MACHINE_TLS_H_ */
index bbf253e..2de3bbc 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)types.h     8.3 (Berkeley) 1/5/94
  * $FreeBSD: src/sys/i386/include/types.h,v 1.19.2.1 2001/03/21 10:50:58 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/types.h,v 1.2 2004/02/14 20:34:26 dillon Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/types.h,v 1.3 2006/07/27 00:42:46 corecode Exp $
  */
 
 #ifndef _MACHINE_TYPES_H_
@@ -66,10 +66,14 @@ typedef     __uint64_t      uintfptr_t;
 /*
  * MMU page tables
  */
+typedef __uint64_t     pml4_entry_t;
+typedef __uint64_t     pdp_entry_t;
 typedef __uint64_t     pd_entry_t;
 typedef __uint64_t     pt_entry_t;
 typedef __uint32_t      cpumask_t;      /* mask representing a set of cpus */
 
+#define PML4SIZE       sizeof(pml4_entry_t) /* for assembly files */
+#define PDPSIZE                sizeof(pdp_entry_t) /* for assembly files */
 #define PDESIZE         sizeof(pd_entry_t) /* for assembly files */
 #define PTESIZE         sizeof(pt_entry_t) /* for assembly files */
 
similarity index 57%
copy from sys/amd64/include/types.h
copy to sys/amd64/include/varargs.h
index bbf253e..cc5c997 100644 (file)
@@ -1,6 +1,12 @@
 /*-
+ * Copyright (c) 2002 David E. O'Brien.  All rights reserved.
  * Copyright (c) 1990, 1993
  *     The Regents of the University of California.  All rights reserved.
+ * (c) UNIX System Laboratories, Inc.
+ * All or some portions of this file are derived from material licensed
+ * to the University of California by American Telephone and Telegraph
+ * Co. or Unix System Laboratories, Inc. and are reproduced herein with
+ * the permission of UNIX System Laboratories, Inc.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  *
- *     @(#)types.h     8.3 (Berkeley) 1/5/94
- * $FreeBSD: src/sys/i386/include/types.h,v 1.19.2.1 2001/03/21 10:50:58 peter Exp $
- * $DragonFly: src/sys/amd64/include/Attic/types.h,v 1.2 2004/02/14 20:34:26 dillon Exp $
+ *     @(#)varargs.h   8.2 (Berkeley) 3/22/94
+ * $FreeBSD: src/sys/amd64/include/varargs.h,v 1.14 2005/03/11 22:16:09 peter Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/varargs.h,v 1.1 2006/07/27 00:42:46 corecode Exp $
  */
 
-#ifndef _MACHINE_TYPES_H_
-#define        _MACHINE_TYPES_H_
+#ifndef _MACHINE_VARARGS_H_
+#define        _MACHINE_VARARGS_H_
 
-#if !defined(_ANSI_SOURCE) && !defined(_POSIX_SOURCE)
-typedef struct _physadr {
-       int r[1];
-} *physadr;
+#ifdef __GNUC__
 
-typedef struct label_t {
-       int val[6];
-} label_t;
-#endif
+typedef        __va_list       va_list;
 
-typedef        __uint64_t      vm_offset_t;    /* address space bounded offset */
-typedef        __uint64_t      vm_size_t;      /* address space bounded size */
-typedef        __int64_t       vm_ooffset_t;   /* VM object bounded offset */
-typedef        __uint64_t      vm_pindex_t;    /* physical page index */
-typedef __uint64_t     vm_poff_t;      /* physical offset */
-typedef __uint64_t     vm_paddr_t;     /* physical addr (same as vm_poff_t) */
+typedef int __builtin_va_alist_t __attribute__((__mode__(__word__)));
 
-typedef        __int64_t       register_t;
-typedef        __uint64_t      u_register_t;
+#define        va_alist                __builtin_va_alist
+#define        va_dcl                  __builtin_va_alist_t __builtin_va_alist; ...
+#define        va_start(ap)            __builtin_varargs_start(ap)
+#define        va_arg(ap, type)        __builtin_va_arg((ap), type)
+#define        va_end(ap)              __builtin_va_end(ap)
 
-#ifdef _KERNEL
-typedef        __int64_t       intfptr_t;
-typedef        __uint64_t      uintfptr_t;
-#endif
+#else  /* !__GNUC__ */
 
-/*
- * MMU page tables
- */
-typedef __uint64_t     pd_entry_t;
-typedef __uint64_t     pt_entry_t;
-typedef __uint32_t      cpumask_t;      /* mask representing a set of cpus */
+typedef char *va_list;
+
+#define        __va_size(type) \
+       (((sizeof(type) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
+
+#define        va_dcl  int va_alist; ...
+
+#define        va_start(ap) \
+       ((ap) = (va_list)&va_alist)
 
-#define PDESIZE         sizeof(pd_entry_t) /* for assembly files */
-#define PTESIZE         sizeof(pt_entry_t) /* for assembly files */
+#define        va_arg(ap, type) \
+       (*(type *)((ap) += __va_size(type), (ap) - __va_size(type)))
 
-/* Interrupt mask (spl, xxx_imask, etc) */
-typedef __uint32_t     intrmask_t;
+#define        va_end(ap)
 
-#endif /* !_MACHINE_TYPES_H_ */
+#endif /* __GNUC__ */
 
+#endif /* !_MACHINE_VARARGS_H_ */
index d458670..c8189d3 100644 (file)
@@ -39,7 +39,7 @@
  *
  *     from: @(#)vmparam.h     5.9 (Berkeley) 5/12/91
  * $FreeBSD: src/sys/amd64/include/vmparam.h,v 1.44 2003/12/07 04:51:04 alc Exp $
- * $DragonFly: src/sys/amd64/include/Attic/vmparam.h,v 1.1 2004/02/02 08:05:52 dillon Exp $
+ * $DragonFly: src/sys/amd64/include/Attic/vmparam.h,v 1.2 2006/07/27 00:42:46 corecode Exp $
  */
 
 
@@ -88,7 +88,6 @@
  */
 #define        UMA_MD_SMALL_ALLOC
 
-#if 0
 /*
  * Virtual addresses of things.  Derived from the page directory and
  * page table indexes from pmap.h for precision.
 #define        PHYS_TO_DMAP(x)         ((x) | DMAP_MIN_ADDRESS)
 #define        DMAP_TO_PHYS(x)         ((x) & ~DMAP_MIN_ADDRESS)
 
-#endif
 
 /* initial pagein size of beginning of executable file */
 #ifndef VM_INITIAL_PAGEIN