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