head 1.1; access; symbols pkgsrc-2026Q1:1.1.0.144 pkgsrc-2026Q1-base:1.1 pkgsrc-2025Q4:1.1.0.142 pkgsrc-2025Q4-base:1.1 pkgsrc-2025Q3:1.1.0.140 pkgsrc-2025Q3-base:1.1 pkgsrc-2025Q2:1.1.0.138 pkgsrc-2025Q2-base:1.1 pkgsrc-2025Q1:1.1.0.136 pkgsrc-2025Q1-base:1.1 pkgsrc-2024Q4:1.1.0.134 pkgsrc-2024Q4-base:1.1 pkgsrc-2024Q3:1.1.0.132 pkgsrc-2024Q3-base:1.1 pkgsrc-2024Q2:1.1.0.130 pkgsrc-2024Q2-base:1.1 pkgsrc-2024Q1:1.1.0.128 pkgsrc-2024Q1-base:1.1 pkgsrc-2023Q4:1.1.0.126 pkgsrc-2023Q4-base:1.1 pkgsrc-2023Q3:1.1.0.124 pkgsrc-2023Q3-base:1.1 pkgsrc-2023Q2:1.1.0.122 pkgsrc-2023Q2-base:1.1 pkgsrc-2023Q1:1.1.0.120 pkgsrc-2023Q1-base:1.1 pkgsrc-2022Q4:1.1.0.118 pkgsrc-2022Q4-base:1.1 pkgsrc-2022Q3:1.1.0.116 pkgsrc-2022Q3-base:1.1 pkgsrc-2022Q2:1.1.0.114 pkgsrc-2022Q2-base:1.1 pkgsrc-2022Q1:1.1.0.112 pkgsrc-2022Q1-base:1.1 pkgsrc-2021Q4:1.1.0.110 pkgsrc-2021Q4-base:1.1 pkgsrc-2021Q3:1.1.0.108 pkgsrc-2021Q3-base:1.1 pkgsrc-2021Q2:1.1.0.106 pkgsrc-2021Q2-base:1.1 pkgsrc-2021Q1:1.1.0.104 pkgsrc-2021Q1-base:1.1 pkgsrc-2020Q4:1.1.0.102 pkgsrc-2020Q4-base:1.1 pkgsrc-2020Q3:1.1.0.100 pkgsrc-2020Q3-base:1.1 pkgsrc-2020Q2:1.1.0.96 pkgsrc-2020Q2-base:1.1 pkgsrc-2020Q1:1.1.0.76 pkgsrc-2020Q1-base:1.1 pkgsrc-2019Q4:1.1.0.98 pkgsrc-2019Q4-base:1.1 pkgsrc-2019Q3:1.1.0.94 pkgsrc-2019Q3-base:1.1 pkgsrc-2019Q2:1.1.0.92 pkgsrc-2019Q2-base:1.1 pkgsrc-2019Q1:1.1.0.90 pkgsrc-2019Q1-base:1.1 pkgsrc-2018Q4:1.1.0.88 pkgsrc-2018Q4-base:1.1 pkgsrc-2018Q3:1.1.0.86 pkgsrc-2018Q3-base:1.1 pkgsrc-2018Q2:1.1.0.84 pkgsrc-2018Q2-base:1.1 pkgsrc-2018Q1:1.1.0.82 pkgsrc-2018Q1-base:1.1 pkgsrc-2017Q4:1.1.0.80 pkgsrc-2017Q4-base:1.1 pkgsrc-2017Q3:1.1.0.78 pkgsrc-2017Q3-base:1.1 pkgsrc-2017Q2:1.1.0.74 pkgsrc-2017Q2-base:1.1 pkgsrc-2017Q1:1.1.0.72 pkgsrc-2017Q1-base:1.1 pkgsrc-2016Q4:1.1.0.70 pkgsrc-2016Q4-base:1.1 pkgsrc-2016Q3:1.1.0.68 pkgsrc-2016Q3-base:1.1 pkgsrc-2016Q2:1.1.0.66 pkgsrc-2016Q2-base:1.1 pkgsrc-2016Q1:1.1.0.64 pkgsrc-2016Q1-base:1.1 pkgsrc-2015Q4:1.1.0.62 pkgsrc-2015Q4-base:1.1 pkgsrc-2015Q3:1.1.0.60 pkgsrc-2015Q3-base:1.1 pkgsrc-2015Q2:1.1.0.58 pkgsrc-2015Q2-base:1.1 pkgsrc-2015Q1:1.1.0.56 pkgsrc-2015Q1-base:1.1 pkgsrc-2014Q4:1.1.0.54 pkgsrc-2014Q4-base:1.1 pkgsrc-2014Q3:1.1.0.52 pkgsrc-2014Q3-base:1.1 pkgsrc-2014Q2:1.1.0.50 pkgsrc-2014Q2-base:1.1 pkgsrc-2014Q1:1.1.0.48 pkgsrc-2014Q1-base:1.1 pkgsrc-2013Q4:1.1.0.46 pkgsrc-2013Q4-base:1.1 pkgsrc-2013Q3:1.1.0.44 pkgsrc-2013Q3-base:1.1 pkgsrc-2013Q2:1.1.0.42 pkgsrc-2013Q2-base:1.1 pkgsrc-2013Q1:1.1.0.40 pkgsrc-2013Q1-base:1.1 pkgsrc-2012Q4:1.1.0.38 pkgsrc-2012Q4-base:1.1 pkgsrc-2012Q3:1.1.0.36 pkgsrc-2012Q3-base:1.1 pkgsrc-2012Q2:1.1.0.34 pkgsrc-2012Q2-base:1.1 pkgsrc-2012Q1:1.1.0.32 pkgsrc-2012Q1-base:1.1 pkgsrc-2011Q4:1.1.0.30 pkgsrc-2011Q4-base:1.1 pkgsrc-2011Q3:1.1.0.28 pkgsrc-2011Q3-base:1.1 pkgsrc-2011Q2:1.1.0.26 pkgsrc-2011Q2-base:1.1 pkgsrc-2011Q1:1.1.0.24 pkgsrc-2011Q1-base:1.1 pkgsrc-2010Q4:1.1.0.22 pkgsrc-2010Q4-base:1.1 pkgsrc-2010Q3:1.1.0.20 pkgsrc-2010Q3-base:1.1 pkgsrc-2010Q2:1.1.0.18 pkgsrc-2010Q2-base:1.1 pkgsrc-2010Q1:1.1.0.16 pkgsrc-2010Q1-base:1.1 pkgsrc-2009Q4:1.1.0.14 pkgsrc-2009Q4-base:1.1 pkgsrc-2009Q3:1.1.0.12 pkgsrc-2009Q3-base:1.1 pkgsrc-2009Q2:1.1.0.10 pkgsrc-2009Q2-base:1.1 pkgsrc-2009Q1:1.1.0.8 pkgsrc-2009Q1-base:1.1 pkgsrc-2008Q4:1.1.0.6 pkgsrc-2008Q4-base:1.1 pkgsrc-2008Q3:1.1.0.4 pkgsrc-2008Q3-base:1.1 cube-native-xorg:1.1.0.2 cube-native-xorg-base:1.1; locks; strict; comment @# @; 1.1 date 2008.08.02.16.46.56; author dholland; state Exp; branches; next ; desc @@ 1.1 log @Fix broken build on -current. While here, make it build on amd64 too. (Patches have been sent upstream.) PKGREVISION++. @ text @$NetBSD$ diff -urpN /dev/null x86_pio.h --- /dev/null 1969-12-31 19:00:00.000000000 -0500 +++ x86_pio.h 2008-08-02 12:15:47.000000000 -0400 @@@@ -0,0 +1,231 @@@@ +/* $NetBSD: pio.h,v 1.5 2006/02/16 20:17:15 perry 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. + */ + +#ifndef _X86_PIO_H_ +#define _X86_PIO_H_ + +/* + * Functions to provide access to x86 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) \ + (/* CONSTCOND */ __use_immediate_port(port) ? __inbc(port) : __inb(port)) + +static __inline u_int8_t +__inbc(unsigned port) +{ + u_int8_t data; + __asm volatile("inb %w1,%0" : "=a" (data) : "id" (port)); + return data; +} + +static __inline u_int8_t +__inb(unsigned port) +{ + u_int8_t data; + __asm volatile("inb %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline void +insb(unsigned port, void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\tinsb" : + "=D" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt) : + "memory"); +} + +#define inw(port) \ + (/* CONSTCOND */ __use_immediate_port(port) ? __inwc(port) : __inw(port)) + +static __inline u_int16_t +__inwc(unsigned port) +{ + u_int16_t data; + __asm volatile("inw %w1,%0" : "=a" (data) : "id" (port)); + return data; +} + +static __inline u_int16_t +__inw(unsigned port) +{ + u_int16_t data; + __asm volatile("inw %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline void +insw(unsigned port, void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\tinsw" : + "=D" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt) : + "memory"); +} + +#define inl(port) \ + (/* CONSTCOND */ __use_immediate_port(port) ? __inlc(port) : __inl(port)) + +static __inline u_int32_t +__inlc(unsigned port) +{ + u_int32_t data; + __asm volatile("inl %w1,%0" : "=a" (data) : "id" (port)); + return data; +} + +static __inline u_int32_t +__inl(unsigned port) +{ + u_int32_t data; + __asm volatile("inl %w1,%0" : "=a" (data) : "d" (port)); + return data; +} + +static __inline void +insl(unsigned port, void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\tinsl" : + "=D" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt) : + "memory"); +} + +#define outb(port, data) \ + (/* CONSTCOND */__use_immediate_port(port) ? __outbc(port, data) : \ + __outb(port, data)) + +static __inline void +__outbc(unsigned port, u_int8_t data) +{ + __asm volatile("outb %0,%w1" : : "a" (data), "id" (port)); +} + +static __inline void +__outb(unsigned port, u_int8_t data) +{ + __asm volatile("outb %0,%w1" : : "a" (data), "d" (port)); +} + +static __inline void +outsb(unsigned port, const void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\toutsb" : + "=S" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt)); +} + +#define outw(port, data) \ + (/* CONSTCOND */ __use_immediate_port(port) ? __outwc(port, data) : \ + __outw(port, data)) + +static __inline void +__outwc(unsigned port, u_int16_t data) +{ + __asm volatile("outw %0,%w1" : : "a" (data), "id" (port)); +} + +static __inline void +__outw(unsigned port, u_int16_t data) +{ + __asm volatile("outw %0,%w1" : : "a" (data), "d" (port)); +} + +static __inline void +outsw(unsigned port, const void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\toutsw" : + "=S" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt)); +} + +#define outl(port, data) \ + (/* CONSTCOND */ __use_immediate_port(port) ? __outlc(port, data) : \ + __outl(port, data)) + +static __inline void +__outlc(unsigned port, u_int32_t data) +{ + __asm volatile("outl %0,%w1" : : "a" (data), "id" (port)); +} + +static __inline void +__outl(unsigned port, u_int32_t data) +{ + __asm volatile("outl %0,%w1" : : "a" (data), "d" (port)); +} + +static __inline void +outsl(unsigned port, const void *addr, int cnt) +{ + void *dummy1; + int dummy2; + __asm volatile("cld\n\trep\n\toutsl" : + "=S" (dummy1), "=c" (dummy2) : + "d" (port), "0" (addr), "1" (cnt)); +} + +#endif /* _X86_PIO_H_ */ @