cpufunc.h revision 74897
166458Sdfr/*- 266458Sdfr * Copyright (c) 1998 Doug Rabson 366458Sdfr * All rights reserved. 466458Sdfr * 566458Sdfr * Redistribution and use in source and binary forms, with or without 666458Sdfr * modification, are permitted provided that the following conditions 766458Sdfr * are met: 866458Sdfr * 1. Redistributions of source code must retain the above copyright 966458Sdfr * notice, this list of conditions and the following disclaimer. 1066458Sdfr * 2. Redistributions in binary form must reproduce the above copyright 1166458Sdfr * notice, this list of conditions and the following disclaimer in the 1266458Sdfr * documentation and/or other materials provided with the distribution. 1366458Sdfr * 1466458Sdfr * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1566458Sdfr * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1666458Sdfr * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1766458Sdfr * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1866458Sdfr * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 1966458Sdfr * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2066458Sdfr * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2166458Sdfr * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2266458Sdfr * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2366458Sdfr * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2466458Sdfr * SUCH DAMAGE. 2566458Sdfr * 2666458Sdfr * $FreeBSD: head/sys/ia64/include/cpufunc.h 74897 2001-03-28 02:31:54Z jhb $ 2766458Sdfr */ 2866458Sdfr 2966458Sdfr#ifndef _MACHINE_CPUFUNC_H_ 3066458Sdfr#define _MACHINE_CPUFUNC_H_ 3166458Sdfr 3266458Sdfr#ifdef _KERNEL 3366458Sdfr 3466458Sdfr#include <sys/types.h> 3566458Sdfr 3666458Sdfr#ifdef __GNUC__ 3766458Sdfr 3866458Sdfrstatic __inline void 3966458Sdfrbreakpoint(void) 4066458Sdfr{ 4166458Sdfr __asm __volatile("break 0x80100"); /* XXX use linux value */ 4266458Sdfr} 4366458Sdfr 4466458Sdfr#endif 4566458Sdfr 4666458Sdfrstatic __inline u_int8_t 4766458Sdfrinb(u_int port) 4866458Sdfr{ 4966458Sdfr return 0; /* TODO: implement this */ 5066458Sdfr} 5166458Sdfr 5266458Sdfrstatic __inline u_int16_t 5366458Sdfrinw(u_int port) 5466458Sdfr{ 5566458Sdfr return 0; /* TODO: implement this */ 5666458Sdfr} 5766458Sdfr 5866458Sdfrstatic __inline u_int32_t 5966458Sdfrinl(u_int port) 6066458Sdfr{ 6166458Sdfr return 0; /* TODO: implement this */ 6266458Sdfr} 6366458Sdfr 6466458Sdfrstatic __inline void 6566458Sdfrinsb(u_int port, void *addr, size_t count) 6666458Sdfr{ 6766458Sdfr u_int8_t *p = addr; 6866458Sdfr while (count--) 6966458Sdfr *p++ = inb(port); 7066458Sdfr} 7166458Sdfr 7266458Sdfrstatic __inline void 7366458Sdfrinsw(u_int port, void *addr, size_t count) 7466458Sdfr{ 7566458Sdfr u_int16_t *p = addr; 7666458Sdfr while (count--) 7766458Sdfr *p++ = inw(port); 7866458Sdfr} 7966458Sdfr 8066458Sdfrstatic __inline void 8166458Sdfrinsl(u_int port, void *addr, size_t count) 8266458Sdfr{ 8366458Sdfr u_int32_t *p = addr; 8466458Sdfr while (count--) 8566458Sdfr *p++ = inl(port); 8666458Sdfr} 8766458Sdfr 8866458Sdfrstatic __inline void 8966458Sdfroutb(u_int port, u_int8_t data) 9066458Sdfr{ 9166458Sdfr return; /* TODO: implement this */ 9266458Sdfr} 9366458Sdfr 9466458Sdfrstatic __inline void 9566458Sdfroutw(u_int port, u_int16_t data) 9666458Sdfr{ 9766458Sdfr return; /* TODO: implement this */ 9866458Sdfr} 9966458Sdfr 10066458Sdfrstatic __inline void 10166458Sdfroutl(u_int port, u_int32_t data) 10266458Sdfr{ 10366458Sdfr return; /* TODO: implement this */ 10466458Sdfr} 10566458Sdfr 10666458Sdfrstatic __inline void 10766458Sdfroutsb(u_int port, const void *addr, size_t count) 10866458Sdfr{ 10966458Sdfr const u_int8_t *p = addr; 11066458Sdfr while (count--) 11166458Sdfr outb(port, *p++); 11266458Sdfr} 11366458Sdfr 11466458Sdfrstatic __inline void 11566458Sdfroutsw(u_int port, const void *addr, size_t count) 11666458Sdfr{ 11766458Sdfr const u_int16_t *p = addr; 11866458Sdfr while (count--) 11966458Sdfr outw(port, *p++); 12066458Sdfr} 12166458Sdfr 12266458Sdfrstatic __inline void 12366458Sdfroutsl(u_int port, const void *addr, size_t count) 12466458Sdfr{ 12566458Sdfr const u_int32_t *p = addr; 12666458Sdfr while (count--) 12766458Sdfr outl(port, *p++); 12866458Sdfr} 12966458Sdfr 13066458Sdfrstatic __inline u_int8_t 13166458Sdfrreadb(u_int addr) 13266458Sdfr{ 13366458Sdfr return 0; /* TODO: implement this */ 13466458Sdfr} 13566458Sdfr 13666458Sdfrstatic __inline u_int16_t 13766458Sdfrreadw(u_int addr) 13866458Sdfr{ 13966458Sdfr return 0; /* TODO: implement this */ 14066458Sdfr} 14166458Sdfr 14266458Sdfrstatic __inline u_int32_t 14366458Sdfrreadl(u_int addr) 14466458Sdfr{ 14566458Sdfr return 0; /* TODO: implement this */ 14666458Sdfr} 14766458Sdfr 14866458Sdfrstatic __inline void 14966458Sdfrwriteb(u_int addr, u_int8_t data) 15066458Sdfr{ 15166458Sdfr return; /* TODO: implement this */ 15266458Sdfr} 15366458Sdfr 15466458Sdfrstatic __inline void 15566458Sdfrwritew(u_int addr, u_int16_t data) 15666458Sdfr{ 15766458Sdfr return; /* TODO: implement this */ 15866458Sdfr} 15966458Sdfr 16066458Sdfrstatic __inline void 16166458Sdfrwritel(u_int addr, u_int32_t data) 16266458Sdfr{ 16366458Sdfr return; /* TODO: implement this */ 16466458Sdfr} 16566458Sdfr 16666458Sdfrstatic __inline void 16766458Sdfrdisable_intr(void) 16866458Sdfr{ 16966458Sdfr __asm __volatile ("rsm psr.i;;"); 17066458Sdfr} 17166458Sdfr 17266458Sdfrstatic __inline void 17366458Sdfrenable_intr(void) 17466458Sdfr{ 17566458Sdfr __asm __volatile (";; ssm psr.i;; srlz.d"); 17666458Sdfr} 17766458Sdfr 17874897Sjhbstatic __inline critical_t 17974897Sjhbcritical_enter(void) 18066458Sdfr{ 18174897Sjhb critical_t psr; 18274897Sjhb 18366458Sdfr __asm __volatile ("mov %0=psr;;" : "=r" (psr)); 18474897Sjhb disable_intr(); 18574897Sjhb return (psr); 18666458Sdfr} 18766458Sdfr 18866458Sdfrstatic __inline void 18974897Sjhbcritical_exit(critical_t psr) 19066458Sdfr{ 19166458Sdfr __asm __volatile ("mov psr.l=%0;; srlz.d" :: "r" (psr)); 19266458Sdfr} 19366458Sdfr 19466458Sdfr#endif /* _KERNEL */ 19566458Sdfr 19666458Sdfr#endif /* !_MACHINE_CPUFUNC_H_ */ 197