From 1fe3d0e71c7c9afa2aa4ea8d10c0a96a4382466c Mon Sep 17 00:00:00 2001 From: fvdl Date: Wed, 26 Feb 2003 21:29:34 +0000 Subject: [PATCH] Redirect a few includes to x86/foo.h --- sys/arch/x86_64/include/aout_machdep.h | 16 +- sys/arch/x86_64/include/asm.h | 4 +- sys/arch/x86_64/include/bios32.h | 13 +- sys/arch/x86_64/include/bootinfo.h | 18 +- sys/arch/x86_64/include/bus.h | 1239 +----------------------- sys/arch/x86_64/include/float.h | 13 +- sys/arch/x86_64/include/ieee.h | 8 +- sys/arch/x86_64/include/ieeefp.h | 13 +- sys/arch/x86_64/include/intr.h | 177 +--- sys/arch/x86_64/include/mtrr.h | 8 +- sys/arch/x86_64/include/param.h | 19 +- sys/arch/x86_64/include/pci_machdep.h | 113 +-- sys/arch/x86_64/include/pio.h | 234 +---- sys/arch/x86_64/include/psl.h | 8 +- sys/arch/x86_64/include/specialreg.h | 8 +- sys/arch/x86_64/include/trap.h | 8 +- 16 files changed, 44 insertions(+), 1855 deletions(-) diff --git a/sys/arch/x86_64/include/aout_machdep.h b/sys/arch/x86_64/include/aout_machdep.h index 2dbf87f6232f..1c0ac28fccfb 100644 --- a/sys/arch/x86_64/include/aout_machdep.h +++ b/sys/arch/x86_64/include/aout_machdep.h @@ -1,15 +1,3 @@ -/* $NetBSD: aout_machdep.h,v 1.1 2001/06/19 00:20:09 fvdl Exp $ */ +/* $NetBSD: aout_machdep.h,v 1.2 2003/02/26 21:29:34 fvdl Exp $ */ -#ifndef _X86_64_AOUT_H_ -#define _X86_64_AOUT_H - -/* - * Only needed for 32 bit binaries in compatibility mode. - */ -#ifdef _KERNEL -#include -#else -#include -#endif - -#endif /* _X86_64_AOUT_H */ +#include diff --git a/sys/arch/x86_64/include/asm.h b/sys/arch/x86_64/include/asm.h index 6d1f2394a703..3bec62f60cb8 100644 --- a/sys/arch/x86_64/include/asm.h +++ b/sys/arch/x86_64/include/asm.h @@ -1,4 +1,4 @@ -/* $NetBSD: asm.h,v 1.2 2002/06/05 19:17:34 fvdl Exp $ */ +/* $NetBSD: asm.h,v 1.3 2003/02/26 21:29:34 fvdl Exp $ */ /*- * Copyright (c) 1990 The Regents of the University of California. @@ -52,6 +52,8 @@ # define _C_LABEL(x) x #define _ASM_LABEL(x) x +#define CVAR(x) x(%rip) + #ifdef __STDC__ # define __CONCAT(x,y) x ## y # define __STRING(x) #x diff --git a/sys/arch/x86_64/include/bios32.h b/sys/arch/x86_64/include/bios32.h index ea1fbd8bd4af..cba1b0200659 100644 --- a/sys/arch/x86_64/include/bios32.h +++ b/sys/arch/x86_64/include/bios32.h @@ -1,12 +1,3 @@ -/* $NetBSD: bios32.h,v 1.1 2001/06/19 00:20:09 fvdl Exp $ */ +/* $NetBSD: bios32.h,v 1.2 2003/02/26 21:29:34 fvdl Exp $ */ -/* - * XXXfvdl paddr_t, etc, isn't right in bios32 structures, use explicit - * sizes - */ - -#ifdef _KERNEL -#include -#else -#include -#endif +#include diff --git a/sys/arch/x86_64/include/bootinfo.h b/sys/arch/x86_64/include/bootinfo.h index 293f8d4422d2..89c28c7e491a 100644 --- a/sys/arch/x86_64/include/bootinfo.h +++ b/sys/arch/x86_64/include/bootinfo.h @@ -1,16 +1,10 @@ -/* $NetBSD: bootinfo.h,v 1.1 2001/06/19 00:20:10 fvdl Exp $ */ +/* $NetBSD: bootinfo.h,v 1.2 2003/02/26 21:29:34 fvdl Exp $ */ -#ifndef _X86_64_BOOTINFO_H_ -#define _X86_64_BOOTINFO_H_ -/* - * Only the plain i386 info for now, could add more later, but that depends - * on the eventual architecture of the systems. - */ -#ifdef _KERNEL -#include -#else -#include -#endif +#ifndef _X86_64_BOOTINFO_H +#define _X86_64_BOOTINFO_H + +#include #define VAR32_SIZE 4096 + #endif /* _X86_64_BOOTINFO_H_ */ diff --git a/sys/arch/x86_64/include/bus.h b/sys/arch/x86_64/include/bus.h index 211fd4a6f2f5..5cfabb214f96 100644 --- a/sys/arch/x86_64/include/bus.h +++ b/sys/arch/x86_64/include/bus.h @@ -1,1238 +1,3 @@ -/* $NetBSD: bus.h,v 1.5 2003/01/28 01:08:09 kent Exp $ */ +/* $NetBSD: bus.h,v 1.6 2003/02/26 21:29:34 fvdl Exp $ */ -/*- - * Copyright (c) 1996, 1997, 1998, 2001 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Jason R. Thorpe of the Numerical Aerospace Simulation Facility, - * NASA Ames Research Center. - * - * 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. - */ - -/* - * Copyright (c) 1996 Charles M. Hannum. All rights reserved. - * Copyright (c) 1996 Christopher G. Demetriou. 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 Christopher G. Demetriou - * for the NetBSD Project. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. - */ - -/* - * XXXfvdl plain copy of x86_64 stuff. The arrival of the real hardware - * may cause enough changes to this file to be separate. - */ - -#ifndef _X86_64_BUS_H_ -#define _X86_64_BUS_H_ - -#include - -#ifdef BUS_SPACE_DEBUG -#include /* for printf() prototype */ -/* - * Macros for sanity-checking the aligned-ness of pointers passed to - * bus space ops. These are not strictly necessary on the x86, but - * could lead to performance improvements, and help catch problems - * with drivers that would creep up on other architectures. - */ -#define __BUS_SPACE_ALIGNED_ADDRESS(p, t) \ - ((((u_long)(p)) & (sizeof(t)-1)) == 0) - -#define __BUS_SPACE_ADDRESS_SANITY(p, t, d) \ -({ \ - if (__BUS_SPACE_ALIGNED_ADDRESS((p), t) == 0) { \ - printf("%s 0x%lx not aligned to %d bytes %s:%d\n", \ - d, (u_long)(p), sizeof(t), __FILE__, __LINE__); \ - } \ - (void) 0; \ -}) - -#define BUS_SPACE_ALIGNED_POINTER(p, t) __BUS_SPACE_ALIGNED_ADDRESS(p, t) -#else -#define __BUS_SPACE_ADDRESS_SANITY(p,t,d) (void) 0 -#define BUS_SPACE_ALIGNED_POINTER(p, t) ALIGNED_POINTER(p, t) -#endif /* BUS_SPACE_DEBUG */ - -/* - * Values for the x86_64 bus space tag, not to be used directly by MI code. - */ -#define X86_64_BUS_SPACE_IO 0 /* space is i/o space */ -#define X86_64_BUS_SPACE_MEM 1 /* space is mem space */ - -#define __BUS_SPACE_HAS_STREAM_METHODS 1 - -/* - * Bus address and size types - */ -typedef u_long bus_addr_t; -typedef u_long bus_size_t; - -/* - * Access methods for bus resources and address space. - */ -typedef int bus_space_tag_t; -typedef u_long bus_space_handle_t; - -/* - * int bus_space_map __P((bus_space_tag_t t, bus_addr_t addr, - * bus_size_t size, int flags, bus_space_handle_t *bshp)); - * - * Map a region of bus space. - */ - -#define BUS_SPACE_MAP_CACHEABLE 0x01 -#define BUS_SPACE_MAP_LINEAR 0x02 -#define BUS_SPACE_MAP_PREFETCHABLE 0x04 - -int x86_64_memio_map __P((bus_space_tag_t t, bus_addr_t addr, - bus_size_t size, int flags, bus_space_handle_t *bshp)); -/* like map, but without extent map checking/allocation */ -int _x86_64_memio_map __P((bus_space_tag_t t, bus_addr_t addr, - bus_size_t size, int flags, bus_space_handle_t *bshp)); - -#define bus_space_map(t, a, s, f, hp) \ - x86_64_memio_map((t), (a), (s), (f), (hp)) - -/* - * int bus_space_unmap __P((bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t size)); - * - * Unmap a region of bus space. - */ - -void x86_64_memio_unmap __P((bus_space_tag_t t, bus_space_handle_t bsh, - bus_size_t size)); - -#define bus_space_unmap(t, h, s) \ - x86_64_memio_unmap((t), (h), (s)) - -/* - * int bus_space_subregion __P((bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t offset, bus_size_t size, - * bus_space_handle_t *nbshp)); - * - * Get a new handle for a subregion of an already-mapped area of bus space. - */ - -int x86_64_memio_subregion __P((bus_space_tag_t t, bus_space_handle_t bsh, - bus_size_t offset, bus_size_t size, bus_space_handle_t *nbshp)); - -#define bus_space_subregion(t, h, o, s, nhp) \ - x86_64_memio_subregion((t), (h), (o), (s), (nhp)) - -/* - * int bus_space_alloc __P((bus_space_tag_t t, bus_addr_t rstart, - * bus_addr_t rend, bus_size_t size, bus_size_t align, - * bus_size_t boundary, int flags, bus_addr_t *addrp, - * bus_space_handle_t *bshp)); - * - * Allocate a region of bus space. - */ - -int x86_64_memio_alloc __P((bus_space_tag_t t, bus_addr_t rstart, - bus_addr_t rend, bus_size_t size, bus_size_t align, - bus_size_t boundary, int flags, bus_addr_t *addrp, - bus_space_handle_t *bshp)); - -#define bus_space_alloc(t, rs, re, s, a, b, f, ap, hp) \ - x86_64_memio_alloc((t), (rs), (re), (s), (a), (b), (f), (ap), (hp)) - -/* - * int bus_space_free __P((bus_space_tag_t t, - * bus_space_handle_t bsh, bus_size_t size)); - * - * Free a region of bus space. - */ - -void x86_64_memio_free __P((bus_space_tag_t t, bus_space_handle_t bsh, - bus_size_t size)); - -#define bus_space_free(t, h, s) \ - x86_64_memio_free((t), (h), (s)) - -/* - * void *bus_space_vaddr __P((bus_space_tag_t, bus_space_handle_t)); - * - * Get the kernel virtual address for the mapped bus space. - * Only allowed for regions mapped with BUS_SPACE_MAP_LINEAR. - * (XXX not enforced) - */ -#define bus_space_vaddr(t, h) \ - ((t) == X86_64_BUS_SPACE_MEM ? (void *)(h) : (void *)0) - - -/* - * paddr_t bus_space_mmap __P((bus_space_tag_t t, bus_addr_t base, - * off_t offset, int prot, int flags)); - * - * Mmap an area of bus space. - */ - -paddr_t x86_64_memio_mmap __P((bus_space_tag_t, bus_addr_t, off_t, - int, int)); - -#define bus_space_mmap(t, b, o, p, f) \ - x86_64_memio_mmap((t), (b), (o), (p), (f)) - -/* - * u_intN_t bus_space_read_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset)); - * - * Read a 1, 2, 4, or 8 byte quantity from bus space - * described by tag/handle/offset. - */ - -#define bus_space_read_1(t, h, o) \ - ((t) == X86_64_BUS_SPACE_IO ? (inb((h) + (o))) : \ - (*(volatile u_int8_t *)((h) + (o)))) - -#define bus_space_read_2(t, h, o) \ - (__BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"), \ - ((t) == X86_64_BUS_SPACE_IO ? (inw((h) + (o))) : \ - (*(volatile u_int16_t *)((h) + (o))))) - -#define bus_space_read_4(t, h, o) \ - (__BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"), \ - ((t) == X86_64_BUS_SPACE_IO ? (inl((h) + (o))) : \ - (*(volatile u_int32_t *)((h) + (o))))) - -#define bus_space_read_stream_1 bus_space_read_1 -#define bus_space_read_stream_2 bus_space_read_2 -#define bus_space_read_stream_4 bus_space_read_4 - -#if 0 /* Cause a link error for bus_space_read_8 */ -#define bus_space_read_8(t, h, o) !!! bus_space_read_8 unimplemented !!! -#define bus_space_read_stream_8(t, h, o) \ - !!! bus_space_read_stream_8 unimplemented !!! -#endif - -/* - * void bus_space_read_multi_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t *addr, size_t count)); - * - * Read `count' 1, 2, 4, or 8 byte quantities from bus space - * described by tag/handle/offset and copy into buffer provided. - */ - -#define bus_space_read_multi_1(t, h, o, a, c) \ -do { \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - insb((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: movb (%2),%%al ; \ - stosb ; \ - loop 1b" : \ - "=D" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_multi_2(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int16_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - insw((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: movw (%2),%%ax ; \ - stosw ; \ - loop 1b" : \ - "=D" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_multi_4(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int32_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - insl((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: movl (%2),%%eax ; \ - stosl ; \ - loop 1b" : \ - "=D" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_multi_stream_1 bus_space_read_multi_1 -#define bus_space_read_multi_stream_2 bus_space_read_multi_2 -#define bus_space_read_multi_stream_4 bus_space_read_multi_4 - -#if 0 /* Cause a link error for bus_space_read_multi_8 */ -#define bus_space_read_multi_8 !!! bus_space_read_multi_8 unimplemented !!! -#define bus_space_read_multi_stream_8 \ - !!! bus_space_read_multi_stream_8 unimplemented !!! -#endif - -/* - * void bus_space_read_region_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t *addr, size_t count)); - * - * Read `count' 1, 2, 4, or 8 byte quantities from bus space - * described by tag/handle and starting at `offset' and copy into - * buffer provided. - */ - -#define bus_space_read_region_1(t, h, o, a, c) \ -do { \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: inb %w1,%%al ; \ - stosb ; \ - incl %1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=D" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsb" : \ - "=S" (dummy1), "=D" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_region_2(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int16_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: inw %w1,%%ax ; \ - stosw ; \ - addl $2,%1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=D" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsw" : \ - "=S" (dummy1), "=D" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_region_4(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int32_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: inl %w1,%%eax ; \ - stosl ; \ - addl $4,%1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=D" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsl" : \ - "=S" (dummy1), "=D" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_read_region_stream_1 bus_space_read_region_1 -#define bus_space_read_region_stream_2 bus_space_read_region_2 -#define bus_space_read_region_stream_4 bus_space_read_region_4 - -#if 0 /* Cause a link error for bus_space_read_region_8 */ -#define bus_space_read_region_8 !!! bus_space_read_region_8 unimplemented !!! -#define bus_space_read_region_stream_8 \ - !!! bus_space_read_region_stream_8 unimplemented !!! -#endif - -/* - * void bus_space_write_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * u_intN_t value)); - * - * Write the 1, 2, 4, or 8 byte value `value' to bus space - * described by tag/handle/offset. - */ - -#define bus_space_write_1(t, h, o, v) \ -do { \ - if ((t) == X86_64_BUS_SPACE_IO) \ - outb((h) + (o), (v)); \ - else \ - ((void)(*(volatile u_int8_t *)((h) + (o)) = (v))); \ -} while (0) - -#define bus_space_write_2(t, h, o, v) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) \ - outw((h) + (o), (v)); \ - else \ - ((void)(*(volatile u_int16_t *)((h) + (o)) = (v))); \ -} while (0) - -#define bus_space_write_4(t, h, o, v) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) \ - outl((h) + (o), (v)); \ - else \ - ((void)(*(volatile u_int32_t *)((h) + (o)) = (v))); \ -} while (0) - -#define bus_space_write_stream_1 bus_space_write_1 -#define bus_space_write_stream_2 bus_space_write_2 -#define bus_space_write_stream_4 bus_space_write_4 - -#if 0 /* Cause a link error for bus_space_write_8 */ -#define bus_space_write_8 !!! bus_space_write_8 not implemented !!! -#define bus_space_write_stream_8 \ - !!! bus_space_write_stream_8 not implemented !!! -#endif - -/* - * void bus_space_write_multi_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * const u_intN_t *addr, size_t count)); - * - * Write `count' 1, 2, 4, or 8 byte quantities from the buffer - * provided to bus space described by tag/handle/offset. - */ - -#define bus_space_write_multi_1(t, h, o, a, c) \ -do { \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - outsb((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsb ; \ - movb %%al,(%2) ; \ - loop 1b" : \ - "=S" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o))); \ - } \ -} while (0) - -#define bus_space_write_multi_2(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int16_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - outsw((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsw ; \ - movw %%ax,(%2) ; \ - loop 1b" : \ - "=S" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o))); \ - } \ -} while (0) - -#define bus_space_write_multi_4(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int32_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - outsl((h) + (o), (a), (c)); \ - } else { \ - void *dummy1; \ - int dummy2; \ - void *dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsl ; \ - movl %%eax,(%2) ; \ - loop 1b" : \ - "=S" (dummy1), "=c" (dummy2), "=r" (dummy3), "=&a" (__x) : \ - "0" ((a)), "1" ((c)), "2" ((h) + (o))); \ - } \ -} while (0) - -#define bus_space_write_multi_stream_1 bus_space_write_multi_1 -#define bus_space_write_multi_stream_2 bus_space_write_multi_2 -#define bus_space_write_multi_stream_4 bus_space_write_multi_4 - -#if 0 /* Cause a link error for bus_space_write_multi_8 */ -#define bus_space_write_multi_8(t, h, o, a, c) \ - !!! bus_space_write_multi_8 unimplemented !!! -#define bus_space_write_multi_stream_8(t, h, o, a, c) \ - !!! bus_space_write_multi_stream_8 unimplemented !!! -#endif - -/* - * void bus_space_write_region_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * const u_intN_t *addr, size_t count)); - * - * Write `count' 1, 2, 4, or 8 byte quantities from the buffer provided - * to bus space described by tag/handle starting at `offset'. - */ - -#define bus_space_write_region_1(t, h, o, a, c) \ -do { \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsb ; \ - outb %%al,%w1 ; \ - incl %1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=S" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsb" : \ - "=D" (dummy1), "=S" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_write_region_2(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int16_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsw ; \ - outw %%ax,%w1 ; \ - addl $2,%1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=S" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsw" : \ - "=D" (dummy1), "=S" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_write_region_4(t, h, o, a, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((a), u_int32_t, "buffer"); \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - if ((t) == X86_64_BUS_SPACE_IO) { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - int __x; \ - __asm __volatile(" \ - cld ; \ - 1: lodsl ; \ - outl %%eax,%w1 ; \ - addl $4,%1 ; \ - loop 1b" : \ - "=&a" (__x), "=d" (dummy1), "=S" (dummy2), \ - "=c" (dummy3) : \ - "1" ((h) + (o)), "2" ((a)), "3" ((c)) : \ - "memory"); \ - } else { \ - int dummy1; \ - void *dummy2; \ - int dummy3; \ - __asm __volatile(" \ - cld ; \ - repne ; \ - movsl" : \ - "=D" (dummy1), "=S" (dummy2), "=c" (dummy3) : \ - "0" ((h) + (o)), "1" ((a)), "2" ((c)) : \ - "memory"); \ - } \ -} while (0) - -#define bus_space_write_region_stream_1 bus_space_write_region_1 -#define bus_space_write_region_stream_2 bus_space_write_region_2 -#define bus_space_write_region_stream_4 bus_space_write_region_4 - -#if 0 /* Cause a link error for bus_space_write_region_8 */ -#define bus_space_write_region_8 \ - !!! bus_space_write_region_8 unimplemented !!! -#define bus_space_write_region_stream_8 \ - !!! bus_space_write_region_stream_8 unimplemented !!! -#endif - -/* - * void bus_space_set_multi_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, - * size_t count)); - * - * Write the 1, 2, 4, or 8 byte value `val' to bus space described - * by tag/handle/offset `count' times. - */ - -static __inline void x86_64_memio_set_multi_1 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int8_t, size_t)); -static __inline void x86_64_memio_set_multi_2 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int16_t, size_t)); -static __inline void x86_64_memio_set_multi_4 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int32_t, size_t)); - -#define bus_space_set_multi_1(t, h, o, v, c) \ - x86_64_memio_set_multi_1((t), (h), (o), (v), (c)) - -#define bus_space_set_multi_2(t, h, o, v, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - x86_64_memio_set_multi_2((t), (h), (o), (v), (c)); \ -} while (0) - -#define bus_space_set_multi_4(t, h, o, v, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - x86_64_memio_set_multi_4((t), (h), (o), (v), (c)); \ -} while (0) - -static __inline void -x86_64_memio_set_multi_1(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int8_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - while (c--) - outb(addr, v); - else - while (c--) - *(volatile u_int8_t *)(addr) = v; -} - -static __inline void -x86_64_memio_set_multi_2(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int16_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - while (c--) - outw(addr, v); - else - while (c--) - *(volatile u_int16_t *)(addr) = v; -} - -static __inline void -x86_64_memio_set_multi_4(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int32_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - while (c--) - outl(addr, v); - else - while (c--) - *(volatile u_int32_t *)(addr) = v; -} - -#if 0 /* Cause a link error for bus_space_set_multi_8 */ -#define bus_space_set_multi_8 !!! bus_space_set_multi_8 unimplemented !!! -#endif - -/* - * void bus_space_set_region_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, u_intN_t val, - * size_t count)); - * - * Write `count' 1, 2, 4, or 8 byte value `val' to bus space described - * by tag/handle starting at `offset'. - */ - -static __inline void x86_64_memio_set_region_1 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int8_t, size_t)); -static __inline void x86_64_memio_set_region_2 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int16_t, size_t)); -static __inline void x86_64_memio_set_region_4 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, u_int32_t, size_t)); - -#define bus_space_set_region_1(t, h, o, v, c) \ - x86_64_memio_set_region_1((t), (h), (o), (v), (c)) - -#define bus_space_set_region_2(t, h, o, v, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int16_t, "bus addr"); \ - x86_64_memio_set_region_2((t), (h), (o), (v), (c)); \ -} while (0) - -#define bus_space_set_region_4(t, h, o, v, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h) + (o), u_int32_t, "bus addr"); \ - x86_64_memio_set_region_4((t), (h), (o), (v), (c)); \ -} while (0) - -static __inline void -x86_64_memio_set_region_1(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int8_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - for (; c != 0; c--, addr++) - outb(addr, v); - else - for (; c != 0; c--, addr++) - *(volatile u_int8_t *)(addr) = v; -} - -static __inline void -x86_64_memio_set_region_2(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int16_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - for (; c != 0; c--, addr += 2) - outw(addr, v); - else - for (; c != 0; c--, addr += 2) - *(volatile u_int16_t *)(addr) = v; -} - -static __inline void -x86_64_memio_set_region_4(t, h, o, v, c) - bus_space_tag_t t; - bus_space_handle_t h; - bus_size_t o; - u_int32_t v; - size_t c; -{ - bus_addr_t addr = h + o; - - if (t == X86_64_BUS_SPACE_IO) - for (; c != 0; c--, addr += 4) - outl(addr, v); - else - for (; c != 0; c--, addr += 4) - *(volatile u_int32_t *)(addr) = v; -} - -#if 0 /* Cause a link error for bus_space_set_region_8 */ -#define bus_space_set_region_8 !!! bus_space_set_region_8 unimplemented !!! -#endif - -/* - * void bus_space_copy_region_N __P((bus_space_tag_t tag, - * bus_space_handle_t bsh1, bus_size_t off1, - * bus_space_handle_t bsh2, bus_size_t off2, - * size_t count)); - * - * Copy `count' 1, 2, 4, or 8 byte values from bus space starting - * at tag/bsh1/off1 to bus space starting at tag/bsh2/off2. - */ - -static __inline void x86_64_memio_copy_region_1 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, - bus_size_t, size_t)); -static __inline void x86_64_memio_copy_region_2 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, - bus_size_t, size_t)); -static __inline void x86_64_memio_copy_region_4 __P((bus_space_tag_t, - bus_space_handle_t, bus_size_t, bus_space_handle_t, - bus_size_t, size_t)); - -#define bus_space_copy_region_1(t, h1, o1, h2, o2, c) \ - x86_64_memio_copy_region_1((t), (h1), (o1), (h2), (o2), (c)) - -#define bus_space_copy_region_2(t, h1, o1, h2, o2, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h1) + (o1), u_int16_t, "bus addr 1"); \ - __BUS_SPACE_ADDRESS_SANITY((h2) + (o2), u_int16_t, "bus addr 2"); \ - x86_64_memio_copy_region_2((t), (h1), (o1), (h2), (o2), (c)); \ -} while (0) - -#define bus_space_copy_region_4(t, h1, o1, h2, o2, c) \ -do { \ - __BUS_SPACE_ADDRESS_SANITY((h1) + (o1), u_int32_t, "bus addr 1"); \ - __BUS_SPACE_ADDRESS_SANITY((h2) + (o2), u_int32_t, "bus addr 2"); \ - x86_64_memio_copy_region_4((t), (h1), (o1), (h2), (o2), (c)); \ -} while (0) - -static __inline void -x86_64_memio_copy_region_1(t, h1, o1, h2, o2, c) - bus_space_tag_t t; - bus_space_handle_t h1; - bus_size_t o1; - bus_space_handle_t h2; - bus_size_t o2; - size_t c; -{ - bus_addr_t addr1 = h1 + o1; - bus_addr_t addr2 = h2 + o2; - - if (t == X86_64_BUS_SPACE_IO) { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1++, addr2++) - outb(addr2, inb(addr1)); - } else { - /* dest after src: copy backwards */ - for (addr1 += (c - 1), addr2 += (c - 1); - c != 0; c--, addr1--, addr2--) - outb(addr2, inb(addr1)); - } - } else { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1++, addr2++) - *(volatile u_int8_t *)(addr2) = - *(volatile u_int8_t *)(addr1); - } else { - /* dest after src: copy backwards */ - for (addr1 += (c - 1), addr2 += (c - 1); - c != 0; c--, addr1--, addr2--) - *(volatile u_int8_t *)(addr2) = - *(volatile u_int8_t *)(addr1); - } - } -} - -static __inline void -x86_64_memio_copy_region_2(t, h1, o1, h2, o2, c) - bus_space_tag_t t; - bus_space_handle_t h1; - bus_size_t o1; - bus_space_handle_t h2; - bus_size_t o2; - size_t c; -{ - bus_addr_t addr1 = h1 + o1; - bus_addr_t addr2 = h2 + o2; - - if (t == X86_64_BUS_SPACE_IO) { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1 += 2, addr2 += 2) - outw(addr2, inw(addr1)); - } else { - /* dest after src: copy backwards */ - for (addr1 += 2 * (c - 1), addr2 += 2 * (c - 1); - c != 0; c--, addr1 -= 2, addr2 -= 2) - outw(addr2, inw(addr1)); - } - } else { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1 += 2, addr2 += 2) - *(volatile u_int16_t *)(addr2) = - *(volatile u_int16_t *)(addr1); - } else { - /* dest after src: copy backwards */ - for (addr1 += 2 * (c - 1), addr2 += 2 * (c - 1); - c != 0; c--, addr1 -= 2, addr2 -= 2) - *(volatile u_int16_t *)(addr2) = - *(volatile u_int16_t *)(addr1); - } - } -} - -static __inline void -x86_64_memio_copy_region_4(t, h1, o1, h2, o2, c) - bus_space_tag_t t; - bus_space_handle_t h1; - bus_size_t o1; - bus_space_handle_t h2; - bus_size_t o2; - size_t c; -{ - bus_addr_t addr1 = h1 + o1; - bus_addr_t addr2 = h2 + o2; - - if (t == X86_64_BUS_SPACE_IO) { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1 += 4, addr2 += 4) - outl(addr2, inl(addr1)); - } else { - /* dest after src: copy backwards */ - for (addr1 += 4 * (c - 1), addr2 += 4 * (c - 1); - c != 0; c--, addr1 -= 4, addr2 -= 4) - outl(addr2, inl(addr1)); - } - } else { - if (addr1 >= addr2) { - /* src after dest: copy forward */ - for (; c != 0; c--, addr1 += 4, addr2 += 4) - *(volatile u_int32_t *)(addr2) = - *(volatile u_int32_t *)(addr1); - } else { - /* dest after src: copy backwards */ - for (addr1 += 4 * (c - 1), addr2 += 4 * (c - 1); - c != 0; c--, addr1 -= 4, addr2 -= 4) - *(volatile u_int32_t *)(addr2) = - *(volatile u_int32_t *)(addr1); - } - } -} - -#if 0 /* Cause a link error for bus_space_copy_8 */ -#define bus_space_copy_region_8 !!! bus_space_copy_region_8 unimplemented !!! -#endif - - -/* - * Bus read/write barrier methods. - * - * void bus_space_barrier __P((bus_space_tag_t tag, - * bus_space_handle_t bsh, bus_size_t offset, - * bus_size_t len, int flags)); - * - * Note: the x86_64 does not currently require barriers, but we must - * provide the flags to MI code. - */ -#define bus_space_barrier(t, h, o, l, f) \ - ((void)((void)(t), (void)(h), (void)(o), (void)(l), (void)(f))) -#define BUS_SPACE_BARRIER_READ 0x01 /* force read barrier */ -#define BUS_SPACE_BARRIER_WRITE 0x02 /* force write barrier */ - - -/* - * Flags used in various bus DMA methods. - */ -#define BUS_DMA_WAITOK 0x000 /* safe to sleep (pseudo-flag) */ -#define BUS_DMA_NOWAIT 0x001 /* not safe to sleep */ -#define BUS_DMA_ALLOCNOW 0x002 /* perform resource allocation now */ -#define BUS_DMA_COHERENT 0x004 /* hint: map memory DMA coherent */ -#define BUS_DMA_STREAMING 0x008 /* hint: sequential, unidirectional */ -#define BUS_DMA_BUS1 0x010 /* placeholders for bus functions... */ -#define BUS_DMA_BUS2 0x020 -#define BUS_DMA_BUS3 0x040 -#define BUS_DMA_BUS4 0x080 -#define BUS_DMA_READ 0x100 /* mapping is device -> memory only */ -#define BUS_DMA_WRITE 0x200 /* mapping is memory -> device only */ -#define BUS_DMA_NOCACHE 0x400 /* hint: map non-cached memory */ - -/* Forwards needed by prototypes below. */ -struct mbuf; -struct uio; - -/* - * Operations performed by bus_dmamap_sync(). - */ -#define BUS_DMASYNC_PREREAD 0x01 /* pre-read synchronization */ -#define BUS_DMASYNC_POSTREAD 0x02 /* post-read synchronization */ -#define BUS_DMASYNC_PREWRITE 0x04 /* pre-write synchronization */ -#define BUS_DMASYNC_POSTWRITE 0x08 /* post-write synchronization */ - -typedef struct x86_64_bus_dma_tag *bus_dma_tag_t; -typedef struct x86_64_bus_dmamap *bus_dmamap_t; - -/* - * bus_dma_segment_t - * - * Describes a single contiguous DMA transaction. Values - * are suitable for programming into DMA registers. - */ -struct x86_64_bus_dma_segment { - bus_addr_t ds_addr; /* DMA address */ - bus_size_t ds_len; /* length of transfer */ -}; -typedef struct x86_64_bus_dma_segment bus_dma_segment_t; - -/* - * bus_dma_tag_t - * - * A machine-dependent opaque type describing the implementation of - * DMA for a given bus. - */ - -struct x86_64_bus_dma_tag { - /* - * The `bounce threshold' is checked while we are loading - * the DMA map. If the physical address of the segment - * exceeds the threshold, an error will be returned. The - * caller can then take whatever action is necessary to - * bounce the transfer. If this value is 0, it will be - * ignored. - */ - bus_addr_t _bounce_thresh; - - /* - * DMA mapping methods. - */ - int (*_dmamap_create) __P((bus_dma_tag_t, bus_size_t, int, - bus_size_t, bus_size_t, int, bus_dmamap_t *)); - void (*_dmamap_destroy) __P((bus_dma_tag_t, bus_dmamap_t)); - int (*_dmamap_load) __P((bus_dma_tag_t, bus_dmamap_t, void *, - bus_size_t, struct proc *, int)); - int (*_dmamap_load_mbuf) __P((bus_dma_tag_t, bus_dmamap_t, - struct mbuf *, int)); - int (*_dmamap_load_uio) __P((bus_dma_tag_t, bus_dmamap_t, - struct uio *, int)); - int (*_dmamap_load_raw) __P((bus_dma_tag_t, bus_dmamap_t, - bus_dma_segment_t *, int, bus_size_t, int)); - void (*_dmamap_unload) __P((bus_dma_tag_t, bus_dmamap_t)); - void (*_dmamap_sync) __P((bus_dma_tag_t, bus_dmamap_t, - bus_addr_t, bus_size_t, int)); - - /* - * DMA memory utility functions. - */ - int (*_dmamem_alloc) __P((bus_dma_tag_t, bus_size_t, bus_size_t, - bus_size_t, bus_dma_segment_t *, int, int *, int)); - void (*_dmamem_free) __P((bus_dma_tag_t, - bus_dma_segment_t *, int)); - int (*_dmamem_map) __P((bus_dma_tag_t, bus_dma_segment_t *, - int, size_t, caddr_t *, int)); - void (*_dmamem_unmap) __P((bus_dma_tag_t, caddr_t, size_t)); - paddr_t (*_dmamem_mmap) __P((bus_dma_tag_t, bus_dma_segment_t *, - int, off_t, int, int)); -}; - -#define bus_dmamap_create(t, s, n, m, b, f, p) \ - (*(t)->_dmamap_create)((t), (s), (n), (m), (b), (f), (p)) -#define bus_dmamap_destroy(t, p) \ - (*(t)->_dmamap_destroy)((t), (p)) -#define bus_dmamap_load(t, m, b, s, p, f) \ - (*(t)->_dmamap_load)((t), (m), (b), (s), (p), (f)) -#define bus_dmamap_load_mbuf(t, m, b, f) \ - (*(t)->_dmamap_load_mbuf)((t), (m), (b), (f)) -#define bus_dmamap_load_uio(t, m, u, f) \ - (*(t)->_dmamap_load_uio)((t), (m), (u), (f)) -#define bus_dmamap_load_raw(t, m, sg, n, s, f) \ - (*(t)->_dmamap_load_raw)((t), (m), (sg), (n), (s), (f)) -#define bus_dmamap_unload(t, p) \ - (*(t)->_dmamap_unload)((t), (p)) -#define bus_dmamap_sync(t, p, o, l, ops) \ - (void)((t)->_dmamap_sync ? \ - (*(t)->_dmamap_sync)((t), (p), (o), (l), (ops)) : (void)0) - -#define bus_dmamem_alloc(t, s, a, b, sg, n, r, f) \ - (*(t)->_dmamem_alloc)((t), (s), (a), (b), (sg), (n), (r), (f)) -#define bus_dmamem_free(t, sg, n) \ - (*(t)->_dmamem_free)((t), (sg), (n)) -#define bus_dmamem_map(t, sg, n, s, k, f) \ - (*(t)->_dmamem_map)((t), (sg), (n), (s), (k), (f)) -#define bus_dmamem_unmap(t, k, s) \ - (*(t)->_dmamem_unmap)((t), (k), (s)) -#define bus_dmamem_mmap(t, sg, n, o, p, f) \ - (*(t)->_dmamem_mmap)((t), (sg), (n), (o), (p), (f)) - -/* - * bus_dmamap_t - * - * Describes a DMA mapping. - */ -struct x86_64_bus_dmamap { - /* - * PRIVATE MEMBERS: not for use my machine-independent code. - */ - bus_size_t _dm_size; /* largest DMA transfer mappable */ - int _dm_segcnt; /* number of segs this map can map */ - bus_size_t _dm_maxsegsz; /* largest possible segment */ - bus_size_t _dm_boundary; /* don't cross this */ - bus_addr_t _dm_bounce_thresh; /* bounce threshold; see tag */ - int _dm_flags; /* misc. flags */ - - void *_dm_cookie; /* cookie for bus-specific functions */ - - /* - * PUBLIC MEMBERS: these are used by machine-independent code. - */ - bus_size_t dm_mapsize; /* size of the mapping */ - int dm_nsegs; /* # valid segments in mapping */ - bus_dma_segment_t dm_segs[1]; /* segments; variable length */ -}; - -#ifdef _X86_64_BUS_DMA_PRIVATE -int _bus_dmamap_create __P((bus_dma_tag_t, bus_size_t, int, bus_size_t, - bus_size_t, int, bus_dmamap_t *)); -void _bus_dmamap_destroy __P((bus_dma_tag_t, bus_dmamap_t)); -int _bus_dmamap_load __P((bus_dma_tag_t, bus_dmamap_t, void *, - bus_size_t, struct proc *, int)); -int _bus_dmamap_load_mbuf __P((bus_dma_tag_t, bus_dmamap_t, - struct mbuf *, int)); -int _bus_dmamap_load_uio __P((bus_dma_tag_t, bus_dmamap_t, - struct uio *, int)); -int _bus_dmamap_load_raw __P((bus_dma_tag_t, bus_dmamap_t, - bus_dma_segment_t *, int, bus_size_t, int)); -void _bus_dmamap_unload __P((bus_dma_tag_t, bus_dmamap_t)); -void _bus_dmamap_sync __P((bus_dma_tag_t, bus_dmamap_t, bus_addr_t, - bus_size_t, int)); - -int _bus_dmamem_alloc __P((bus_dma_tag_t tag, bus_size_t size, - bus_size_t alignment, bus_size_t boundary, - bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags)); -void _bus_dmamem_free __P((bus_dma_tag_t tag, bus_dma_segment_t *segs, - int nsegs)); -int _bus_dmamem_map __P((bus_dma_tag_t tag, bus_dma_segment_t *segs, - int nsegs, size_t size, caddr_t *kvap, int flags)); -void _bus_dmamem_unmap __P((bus_dma_tag_t tag, caddr_t kva, - size_t size)); -paddr_t _bus_dmamem_mmap __P((bus_dma_tag_t tag, bus_dma_segment_t *segs, - int nsegs, off_t off, int prot, int flags)); - -int _bus_dmamem_alloc_range __P((bus_dma_tag_t tag, bus_size_t size, - bus_size_t alignment, bus_size_t boundary, - bus_dma_segment_t *segs, int nsegs, int *rsegs, int flags, - paddr_t low, paddr_t high)); -#endif /* _X86_64_BUS_DMA_PRIVATE */ - -#endif /* _X86_64_BUS_H_ */ +#include diff --git a/sys/arch/x86_64/include/float.h b/sys/arch/x86_64/include/float.h index f6e7fa550dbc..671e6abaf0d7 100644 --- a/sys/arch/x86_64/include/float.h +++ b/sys/arch/x86_64/include/float.h @@ -1,12 +1,3 @@ -/* $NetBSD: float.h,v 1.1 2001/06/19 00:20:10 fvdl Exp $ */ +/* $NetBSD: float.h,v 1.2 2003/02/26 21:29:35 fvdl Exp $ */ -#ifndef _X86_64_FLOAT_H_ -#define _X86_64_FLOAT_H_ - -#ifdef _KERNEL -#include -#else -#include -#endif - -#endif /* _X86_64_FLOAT_H_ */ +#include diff --git a/sys/arch/x86_64/include/ieee.h b/sys/arch/x86_64/include/ieee.h index 218bdddbe723..19e1952b85bc 100644 --- a/sys/arch/x86_64/include/ieee.h +++ b/sys/arch/x86_64/include/ieee.h @@ -1,7 +1,3 @@ -/* $NetBSD: ieee.h,v 1.1 2001/06/19 00:20:11 fvdl Exp $ */ +/* $NetBSD: ieee.h,v 1.2 2003/02/26 21:29:35 fvdl Exp $ */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include diff --git a/sys/arch/x86_64/include/ieeefp.h b/sys/arch/x86_64/include/ieeefp.h index 88a31dd5eaec..7c4577460385 100644 --- a/sys/arch/x86_64/include/ieeefp.h +++ b/sys/arch/x86_64/include/ieeefp.h @@ -1,12 +1,3 @@ -/* $NetBSD: ieeefp.h,v 1.1 2001/06/19 00:20:11 fvdl Exp $ */ +/* $NetBSD: ieeefp.h,v 1.2 2003/02/26 21:29:35 fvdl Exp $ */ -#ifndef _X86_64_IEEEFP_H_ -#define _X86_64_IEEEFP_H_ - -#ifdef _KERNEL -#include -#else -#include -#endif - -#endif /* _X86_64_IEEEFP_H_ */ +#include diff --git a/sys/arch/x86_64/include/intr.h b/sys/arch/x86_64/include/intr.h index e17e19a1203c..b65d7851bfe3 100644 --- a/sys/arch/x86_64/include/intr.h +++ b/sys/arch/x86_64/include/intr.h @@ -1,176 +1,3 @@ -/* $NetBSD: intr.h,v 1.4 2002/12/03 22:03:01 fvdl Exp $ */ +/* $NetBSD: intr.h,v 1.5 2003/02/26 21:29:35 fvdl Exp $ */ -/*- - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Charles M. Hannum. - * - * 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. - */ - -/* - * XXXfvdl copy of i386 right now. Might change later. - */ - -#ifndef _X86_64_INTR_H_ -#define _X86_64_INTR_H_ - -/* Interrupt priority `levels'. */ -#define IPL_NONE 9 /* nothing */ -#define IPL_SOFTCLOCK 8 /* timeouts */ -#define IPL_SOFTNET 7 /* protocol stacks */ -#define IPL_BIO 6 /* block I/O */ -#define IPL_NET 5 /* network */ -#define IPL_SOFTSERIAL 4 /* serial */ -#define IPL_TTY 3 /* terminal */ -#define IPL_IMP 3 /* memory allocation */ -#define IPL_AUDIO 2 /* audio */ -#define IPL_CLOCK 1 /* clock */ -#define IPL_HIGH 1 /* everything */ -#define IPL_SERIAL 0 /* serial */ -#define NIPL 10 - -/* Interrupt sharing types. */ -#define IST_NONE 0 /* none */ -#define IST_PULSE 1 /* pulsed */ -#define IST_EDGE 2 /* edge-triggered */ -#define IST_LEVEL 3 /* level-triggered */ - -/* Soft interrupt masks. */ -#define SIR_CLOCK 31 -#define SIR_NET 30 -#define SIR_SERIAL 29 - -/* Hack for CLKF_INTR(). */ -#define IPL_TAGINTR 28 - -#define NUM_LEGACY_IRQS 16 -#define ICU_OFFSET 32 -#define IRQ_SLAVE 2 - -#ifndef _LOCORE - -volatile int cpl, ipending, astpending; -int imask[NIPL]; - -extern void Xspllower __P((void)); - -static __inline int splraise __P((int)); -static __inline void spllower __P((int)); -static __inline void softintr __P((int)); - -#define __splbarrier() __asm __volatile("":::"memory") - -/* - * Add a mask to cpl, and return the old value of cpl. - */ -static __inline int -splraise(ncpl) - register int ncpl; -{ - register int ocpl = cpl; - - cpl = ocpl | ncpl; - __splbarrier(); - return (ocpl); -} - -/* - * Restore a value to cpl (unmasking interrupts). If any unmasked - * interrupts are pending, call Xspllower() to process them. - */ -static __inline void -spllower(ncpl) - register int ncpl; -{ - - __splbarrier(); - cpl = ncpl; - if (ipending & ~ncpl) - Xspllower(); -} - -/* - * Hardware interrupt masks - */ -#define splbio() splraise(imask[IPL_BIO]) -#define splnet() splraise(imask[IPL_NET]) -#define spltty() splraise(imask[IPL_TTY]) -#define splaudio() splraise(imask[IPL_AUDIO]) -#define splclock() splraise(imask[IPL_CLOCK]) -#define splstatclock() splclock() -#define splserial() splraise(imask[IPL_SERIAL]) - -#define spllpt() spltty() - -/* - * Software interrupt masks - * - * NOTE: splsoftclock() is used by hardclock() to lower the priority from - * clock to softclock before it calls softclock(). - */ -#define spllowersoftclock() spllower(imask[IPL_SOFTCLOCK]) -#define splsoftclock() splraise(imask[IPL_SOFTCLOCK]) -#define splsoftnet() splraise(imask[IPL_SOFTNET]) -#define splsoftserial() splraise(imask[IPL_SOFTSERIAL]) - -/* - * Miscellaneous - */ -#define splimp() splraise(imask[IPL_IMP]) -#define splvm() splraise(imask[IPL_IMP]) -#define splhigh() splraise(imask[IPL_HIGH]) -#define splipi() splhigh() -#define splsched() splhigh() -#define spllock() splhigh() -#define spl0() spllower(0) -#define splx(x) spllower(x) - -/* - * Software interrupt registration - * - * We hand-code this to ensure that it's atomic. - */ -static __inline void -softintr(mask) - register int mask; -{ - __asm __volatile("orl %1, %0" : "=m"(ipending) : "ir" (1 << mask)); -} - -#define setsoftast() (astpending = 1) -#define setsoftclock() softintr(SIR_CLOCK) -#define setsoftnet() softintr(SIR_NET) -#define setsoftserial() softintr(SIR_SERIAL) - -#endif /* !_LOCORE */ - -#endif /* !_X86_64INTR_H_ */ +#include diff --git a/sys/arch/x86_64/include/mtrr.h b/sys/arch/x86_64/include/mtrr.h index 8e9afd02c28c..bb63cb4ceb3d 100644 --- a/sys/arch/x86_64/include/mtrr.h +++ b/sys/arch/x86_64/include/mtrr.h @@ -1,7 +1,3 @@ -/* $NetBSD: mtrr.h,v 1.1 2002/06/18 08:31:42 fvdl Exp $ */ +/* $NetBSD: mtrr.h,v 1.2 2003/02/26 21:29:35 fvdl Exp $ */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include diff --git a/sys/arch/x86_64/include/param.h b/sys/arch/x86_64/include/param.h index 6853eac4820d..4364017417d0 100644 --- a/sys/arch/x86_64/include/param.h +++ b/sys/arch/x86_64/include/param.h @@ -1,4 +1,4 @@ -/* $NetBSD: param.h,v 1.4 2002/12/10 17:57:19 fvdl Exp $ */ +/* $NetBSD: param.h,v 1.5 2003/02/26 21:29:35 fvdl Exp $ */ #ifdef _KERNEL #ifdef _LOCORE @@ -135,17 +135,16 @@ /* * Mach derived conversion macros */ -#define x86_64_round_pdr(x) \ +#define x86_round_pdr(x) \ ((((unsigned long)(x)) + (NBPD_L2 - 1)) & ~(NBPD_L2 - 1)) -#define x86_64_trunc_pdr(x) ((unsigned long)(x) & ~(NBPD_L2 - 1)) -#define x86_64_btod(x) ((unsigned long)(x) >> L2_SHIFT) -#define x86_64_dtob(x) ((unsigned long)(x) << L2_SHIFT) -#define x86_64_round_page(x) ((((unsigned long)(x)) + PGOFSET) & ~PGOFSET) -#define x86_64_trunc_page(x) ((unsigned long)(x) & ~PGOFSET) -#define x86_64_btop(x) ((unsigned long)(x) >> PGSHIFT) -#define x86_64_ptob(x) ((unsigned long)(x) << PGSHIFT) +#define x86_trunc_pdr(x) ((unsigned long)(x) & ~(NBPD_L2 - 1)) +#define x86_btod(x) ((unsigned long)(x) >> L2_SHIFT) +#define x86_dtob(x) ((unsigned long)(x) << L2_SHIFT) +#define x86_round_page(x) ((((unsigned long)(x)) + PGOFSET) & ~PGOFSET) +#define x86_trunc_page(x) ((unsigned long)(x) & ~PGOFSET) +#define x86_btop(x) ((unsigned long)(x) >> PGSHIFT) +#define x86_ptob(x) ((unsigned long)(x) << PGSHIFT) #define btop(x) x86_64_btop(x) #define ptob(x) x86_64_ptob(x) -#define x86_trunc_page(x) x86_64_trunc_page(x) #define round_pdr(x) x86_64_round_pdr(x) diff --git a/sys/arch/x86_64/include/pci_machdep.h b/sys/arch/x86_64/include/pci_machdep.h index d7e0a0bf93da..e4fb4bd6c536 100644 --- a/sys/arch/x86_64/include/pci_machdep.h +++ b/sys/arch/x86_64/include/pci_machdep.h @@ -1,112 +1,3 @@ -/* $NetBSD: pci_machdep.h,v 1.2 2002/05/15 19:23:57 thorpej Exp $ */ +/* $NetBSD: pci_machdep.h,v 1.3 2003/02/26 21:29:35 fvdl Exp $ */ -/* - * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved. - * Copyright (c) 1994 Charles M. Hannum. 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 Charles M. Hannum. - * 4. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 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. - */ - -/* - * Machine-specific definitions for PCI autoconfiguration. - */ -#define __HAVE_PCIIDE_MACHDEP_COMPAT_INTR_ESTABLISH - -/* - * x86_64-specific PCI structure and type definitions. - * NOT TO BE USED DIRECTLY BY MACHINE INDEPENDENT CODE. - * - * Configuration tag; created from a {bus,device,function} triplet by - * pci_make_tag(), and passed to pci_conf_read() and pci_conf_write(). - * We could instead always pass the {bus,device,function} triplet to - * the read and write routines, but this would cause extra overhead. - * - * Mode 2 is historical and deprecated by the Revision 2.0 specification. - */ -union x86_64_pci_tag_u { - u_int32_t mode1; - struct { - u_int16_t port; - u_int8_t enable; - u_int8_t forward; - } mode2; -}; - -extern struct x86_64_bus_dma_tag pci_bus_dma_tag; - -/* - * Types provided to machine-independent PCI code - */ -typedef void *pci_chipset_tag_t; -typedef union x86_64_pci_tag_u pcitag_t; -typedef int pci_intr_handle_t; - -/* - * x86_64-specific PCI variables and functions. - * NOT TO BE USED DIRECTLY BY MACHINE INDEPENDENT CODE. - */ -extern int pci_mode; -int pci_mode_detect(void); -int pci_bus_flags(void); -struct pci_attach_args; - -/* - * Functions provided to machine-independent PCI code. - */ -void pci_attach_hook(struct device *, struct device *, - struct pcibus_attach_args *); -int pci_bus_maxdevs(pci_chipset_tag_t, int); -pcitag_t pci_make_tag(pci_chipset_tag_t, int, int, int); -void pci_decompose_tag(pci_chipset_tag_t, pcitag_t, - int *, int *, int *); -pcireg_t pci_conf_read(pci_chipset_tag_t, pcitag_t, int); -void pci_conf_write(pci_chipset_tag_t, pcitag_t, int, - pcireg_t); -int pci_intr_map(struct pci_attach_args *, pci_intr_handle_t *); -const char *pci_intr_string(pci_chipset_tag_t, pci_intr_handle_t); -const struct evcnt *pci_intr_evcnt(pci_chipset_tag_t, pci_intr_handle_t); -void *pci_intr_establish(pci_chipset_tag_t, pci_intr_handle_t, - int, int (*)(void *), void *); -void pci_intr_disestablish(pci_chipset_tag_t, void *); - -#define pci_enumerate_bus(sc, m, p) \ - pci_enumerate_bus_generic((sc), (m), (p)) - -/* - * ALL OF THE FOLLOWING ARE MACHINE-DEPENDENT, AND SHOULD NOT BE USED - * BY PORTABLE CODE. - */ - -/* - * XXXfvdl will need to check if this is still valid once the - * real hardware is there. - */ -/* - * Section 6.2.4, `Miscellaneous Functions' of the PCI Specification, - * says that 255 means `unknown' or `no connection' to the interrupt - * controller on a PC. - */ -#define X86_64_PCI_INTERRUPT_LINE_NO_CONNECTION 0xff +#include diff --git a/sys/arch/x86_64/include/pio.h b/sys/arch/x86_64/include/pio.h index 8b55dd3e0cfa..c6d35412f10c 100644 --- a/sys/arch/x86_64/include/pio.h +++ b/sys/arch/x86_64/include/pio.h @@ -1,233 +1,3 @@ -/* $NetBSD: pio.h,v 1.2 2001/12/28 06:42:40 thorpej Exp $ */ +/* $NetBSD: pio.h,v 1.3 2003/02/26 21:29:36 fvdl Exp $ */ -/*- - * Copyright (c) 1998 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Charles M. Hannum. - * - * 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. - */ - -/* - * XXXfvdl plain copy of i386. Since pio didn't change, this should - * probably be shared. - */ - -#ifndef _X86_64_PIO_H_ -#define _X86_64_PIO_H_ - -/* - * Functions to provide access to i386 programmed I/O instructions. - * - * The in[bwl]() and out[bwl]() functions are split into two varieties: one to - * use a small, constant, 8-bit port number, and another to use a large or - * variable port number. The former can be compiled as a smaller instruction. - */ - - -#ifdef __OPTIMIZE__ - -#define __use_immediate_port(port) \ - (__builtin_constant_p((port)) && (port) < 0x100) - -#else - -#define __use_immediate_port(port) 0 - -#endif - - -#define inb(port) \ - (__use_immediate_port(port) ? __inbc(port) : __inb(port)) - -static __inline u_int8_t -__inbc(int port) -{ - u_int8_t data; - __asm __volatile("inb %w1,%0" : "=a" (data) : "id" (port)); - return data; -} - -static __inline u_int8_t -__inb(int port) -{ - u_int8_t data; - __asm __volatile("inb %w1,%0" : "=a" (data) : "d" (port)); - return data; -} - -static __inline void -insb(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\tinsb" : - "=D" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt) : - "memory"); -} - -#define inw(port) \ - (__use_immediate_port(port) ? __inwc(port) : __inw(port)) - -static __inline u_int16_t -__inwc(int port) -{ - u_int16_t data; - __asm __volatile("inw %w1,%0" : "=a" (data) : "id" (port)); - return data; -} - -static __inline u_int16_t -__inw(int port) -{ - u_int16_t data; - __asm __volatile("inw %w1,%0" : "=a" (data) : "d" (port)); - return data; -} - -static __inline void -insw(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\tinsw" : - "=D" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt) : - "memory"); -} - -#define inl(port) \ - (__use_immediate_port(port) ? __inlc(port) : __inl(port)) - -static __inline u_int32_t -__inlc(int port) -{ - u_int32_t data; - __asm __volatile("inl %w1,%0" : "=a" (data) : "id" (port)); - return data; -} - -static __inline u_int32_t -__inl(int port) -{ - u_int32_t data; - __asm __volatile("inl %w1,%0" : "=a" (data) : "d" (port)); - return data; -} - -static __inline void -insl(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\tinsl" : - "=D" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt) : - "memory"); -} - -#define outb(port, data) \ - (__use_immediate_port(port) ? __outbc(port, data) : __outb(port, data)) - -static __inline void -__outbc(int port, u_int8_t data) -{ - __asm __volatile("outb %0,%w1" : : "a" (data), "id" (port)); -} - -static __inline void -__outb(int port, u_int8_t data) -{ - __asm __volatile("outb %0,%w1" : : "a" (data), "d" (port)); -} - -static __inline void -outsb(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\toutsb" : - "=S" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt)); -} - -#define outw(port, data) \ - (__use_immediate_port(port) ? __outwc(port, data) : __outw(port, data)) - -static __inline void -__outwc(int port, u_int16_t data) -{ - __asm __volatile("outw %0,%w1" : : "a" (data), "id" (port)); -} - -static __inline void -__outw(int port, u_int16_t data) -{ - __asm __volatile("outw %0,%w1" : : "a" (data), "d" (port)); -} - -static __inline void -outsw(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\toutsw" : - "=S" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt)); -} - -#define outl(port, data) \ - (__use_immediate_port(port) ? __outlc(port, data) : __outl(port, data)) - -static __inline void -__outlc(int port, u_int32_t data) -{ - __asm __volatile("outl %0,%w1" : : "a" (data), "id" (port)); -} - -static __inline void -__outl(int port, u_int32_t data) -{ - __asm __volatile("outl %0,%w1" : : "a" (data), "d" (port)); -} - -static __inline void -outsl(int port, void *addr, int cnt) -{ - void *dummy1; - int dummy2; - __asm __volatile("cld\n\trepne\n\toutsl" : - "=S" (dummy1), "=c" (dummy2) : - "d" (port), "0" (addr), "1" (cnt)); -} - -#endif /* _X86_64_PIO_H_ */ +#include diff --git a/sys/arch/x86_64/include/psl.h b/sys/arch/x86_64/include/psl.h index 9cef8f534f46..ffa15b17f2b8 100644 --- a/sys/arch/x86_64/include/psl.h +++ b/sys/arch/x86_64/include/psl.h @@ -1,7 +1,3 @@ -/* $NetBSD: psl.h,v 1.1 2001/06/19 00:20:12 fvdl Exp $ */ +/* $NetBSD: psl.h,v 1.2 2003/02/26 21:29:36 fvdl Exp $ */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include diff --git a/sys/arch/x86_64/include/specialreg.h b/sys/arch/x86_64/include/specialreg.h index 6b14c9828ab9..66ba961adfce 100644 --- a/sys/arch/x86_64/include/specialreg.h +++ b/sys/arch/x86_64/include/specialreg.h @@ -1,10 +1,6 @@ -/* $NetBSD: specialreg.h,v 1.2 2002/05/28 23:11:38 fvdl Exp $ */ +/* $NetBSD: specialreg.h,v 1.3 2003/02/26 21:29:36 fvdl Exp $ */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include /* * Extended Feature Enable Register of the x86-64 diff --git a/sys/arch/x86_64/include/trap.h b/sys/arch/x86_64/include/trap.h index ed3798faa15a..6b0c3df051a4 100644 --- a/sys/arch/x86_64/include/trap.h +++ b/sys/arch/x86_64/include/trap.h @@ -1,7 +1,3 @@ -/* $NetBSD: trap.h,v 1.1 2001/06/19 00:20:13 fvdl Exp $ */ +/* $NetBSD: trap.h,v 1.2 2003/02/26 21:29:36 fvdl Exp $ */ -#ifdef _KERNEL -#include -#else -#include -#endif +#include