Annotation of sys/arch/hppa/include/cpufunc.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: cpufunc.h,v 1.27 2005/04/07 00:19:28 mickey Exp $ */
! 2:
! 3: /*
! 4: * Copyright (c) 1998-2004 Michael Shalayeff
! 5: * All rights reserved.
! 6: *
! 7: * Redistribution and use in source and binary forms, with or without
! 8: * modification, are permitted provided that the following conditions
! 9: * are met:
! 10: * 1. Redistributions of source code must retain the above copyright
! 11: * notice, this list of conditions and the following disclaimer.
! 12: * 2. Redistributions in binary form must reproduce the above copyright
! 13: * notice, this list of conditions and the following disclaimer in the
! 14: * documentation and/or other materials provided with the distribution.
! 15: *
! 16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 19: * IN NO EVENT SHALL THE AUTHOR OR HIS RELATIVES BE LIABLE FOR ANY DIRECT,
! 20: * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
! 21: * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
! 22: * SERVICES; LOSS OF MIND, USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
! 24: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
! 25: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
! 26: * THE POSSIBILITY OF SUCH DAMAGE.
! 27: */
! 28: /*
! 29: * (c) Copyright 1988 HEWLETT-PACKARD COMPANY
! 30: *
! 31: * To anyone who acknowledges that this file is provided "AS IS"
! 32: * without any express or implied warranty:
! 33: * permission to use, copy, modify, and distribute this file
! 34: * for any purpose is hereby granted without fee, provided that
! 35: * the above copyright notice and this notice appears in all
! 36: * copies, and that the name of Hewlett-Packard Company not be
! 37: * used in advertising or publicity pertaining to distribution
! 38: * of the software without specific, written prior permission.
! 39: * Hewlett-Packard Company makes no representations about the
! 40: * suitability of this software for any purpose.
! 41: */
! 42: /*
! 43: * Copyright (c) 1990,1994 The University of Utah and
! 44: * the Computer Systems Laboratory (CSL). All rights reserved.
! 45: *
! 46: * THE UNIVERSITY OF UTAH AND CSL PROVIDE THIS SOFTWARE IN ITS "AS IS"
! 47: * CONDITION, AND DISCLAIM ANY LIABILITY OF ANY KIND FOR ANY DAMAGES
! 48: * WHATSOEVER RESULTING FROM ITS USE.
! 49: *
! 50: * CSL requests users of this software to return to csl-dist@cs.utah.edu any
! 51: * improvements that they make and grant CSL redistribution rights.
! 52: *
! 53: * Utah $Hdr: c_support.s 1.8 94/12/14$
! 54: * Author: Bob Wheeler, University of Utah CSL
! 55: */
! 56:
! 57: #ifndef _MACHINE_CPUFUNC_H_
! 58: #define _MACHINE_CPUFUNC_H_
! 59:
! 60: #include <machine/psl.h>
! 61: #include <machine/pte.h>
! 62:
! 63: #define tlbbtop(b) ((b) >> (PGSHIFT - 5))
! 64: #define tlbptob(p) ((p) << (PGSHIFT - 5))
! 65:
! 66: #define hptbtop(b) ((b) >> 17)
! 67:
! 68: /* Get space register for an address */
! 69: static __inline register_t ldsid(vaddr_t p) {
! 70: register_t ret;
! 71: __asm __volatile("ldsid (%1),%0" : "=r" (ret) : "r" (p));
! 72: return ret;
! 73: }
! 74:
! 75: #define mtctl(v,r) __asm __volatile("mtctl %0,%1":: "r" (v), "i" (r))
! 76: #define mfctl(r,v) __asm __volatile("mfctl %1,%0": "=r" (v): "i" (r))
! 77:
! 78: #define mfcpu(r,v) /* XXX for the lack of the mnemonics */ \
! 79: __asm __volatile(".word %1\n\t" \
! 80: "copy %%r22, %0" \
! 81: : "=r" (v) : "i" ((0x14001400 | ((r) << 21) | (22))) \
! 82: : "r22")
! 83:
! 84: #define mtsp(v,r) __asm __volatile("mtsp %0,%1":: "r" (v), "i" (r))
! 85: #define mfsp(r,v) __asm __volatile("mfsp %1,%0": "=r" (v): "i" (r))
! 86:
! 87: #define ssm(v,r) __asm __volatile("ssm %1,%0": "=r" (r): "i" (v))
! 88: #define rsm(v,r) __asm __volatile("rsm %1,%0": "=r" (r): "i" (v))
! 89:
! 90: /* Move to system mask. Old value of system mask is returned. */
! 91: static __inline register_t
! 92: mtsm(register_t mask) {
! 93: register_t ret;
! 94: __asm __volatile("ssm 0,%0\n\t"
! 95: "mtsm %1": "=&r" (ret) : "r" (mask));
! 96: return ret;
! 97: }
! 98:
! 99: #define fdce(sp,off) __asm __volatile("fdce 0(%0,%1)":: "i" (sp), "r" (off))
! 100: #define fice(sp,off) __asm __volatile("fice 0(%0,%1)":: "i" (sp), "r" (off))
! 101: #define sync_caches() __asm __volatile(\
! 102: "sync\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop\n\tnop":::"memory")
! 103:
! 104: static __inline void
! 105: iitlba(u_int pg, pa_space_t sp, vaddr_t va)
! 106: {
! 107: mtsp(sp, 1);
! 108: __asm volatile("iitlba %0,(%%sr1, %1)":: "r" (pg), "r" (va));
! 109: }
! 110:
! 111: static __inline void
! 112: idtlba(u_int pg, pa_space_t sp, vaddr_t va)
! 113: {
! 114: mtsp(sp, 1);
! 115: __asm volatile("idtlba %0,(%%sr1, %1)":: "r" (pg), "r" (va));
! 116: }
! 117:
! 118: static __inline void
! 119: iitlbp(u_int prot, pa_space_t sp, vaddr_t va)
! 120: {
! 121: mtsp(sp, 1);
! 122: __asm volatile("iitlbp %0,(%%sr1, %1)":: "r" (prot), "r" (va));
! 123: }
! 124:
! 125: static __inline void
! 126: idtlbp(u_int prot, pa_space_t sp, vaddr_t va)
! 127: {
! 128: mtsp(sp, 1);
! 129: __asm volatile("idtlbp %0,(%%sr1, %1)":: "r" (prot), "r" (va));
! 130: }
! 131:
! 132: static __inline void
! 133: pitlb(pa_space_t sp, vaddr_t va)
! 134: {
! 135: mtsp(sp, 1);
! 136: __asm volatile("pitlb %%r0(%%sr1, %0)":: "r" (va));
! 137: }
! 138:
! 139: static __inline void
! 140: pdtlb(pa_space_t sp, vaddr_t va)
! 141: {
! 142: mtsp(sp, 1);
! 143: __asm volatile("pdtlb %%r0(%%sr1, %0)":: "r" (va));
! 144: }
! 145:
! 146: static __inline void
! 147: pitlbe(pa_space_t sp, vaddr_t va)
! 148: {
! 149: mtsp(sp, 1);
! 150: __asm volatile("pitlbe %%r0(%%sr1, %0)":: "r" (va));
! 151: }
! 152:
! 153: static __inline void
! 154: pdtlbe(pa_space_t sp, vaddr_t va)
! 155: {
! 156: mtsp(sp, 1);
! 157: __asm volatile("pdtlbe %%r0(%%sr1, %0)":: "r" (va));
! 158: }
! 159:
! 160: #ifdef USELEDS
! 161: #define PALED_NETSND 0x01
! 162: #define PALED_NETRCV 0x02
! 163: #define PALED_DISK 0x04
! 164: #define PALED_HEARTBEAT 0x08
! 165: #define PALED_LOADMASK 0xf0
! 166:
! 167: #define PALED_DATA 0x01
! 168: #define PALED_STROBE 0x02
! 169:
! 170: extern volatile u_int8_t *machine_ledaddr;
! 171: extern int machine_ledword, machine_leds;
! 172:
! 173: static __inline void
! 174: ledctl(int on, int off, int toggle)
! 175: {
! 176: if (machine_ledaddr) {
! 177: int r;
! 178:
! 179: if (on)
! 180: machine_leds |= on;
! 181: if (off)
! 182: machine_leds &= ~off;
! 183: if (toggle)
! 184: machine_leds ^= toggle;
! 185:
! 186: r = ~machine_leds; /* it seems they should be reversed */
! 187:
! 188: if (machine_ledword)
! 189: *machine_ledaddr = r;
! 190: else {
! 191: register int b;
! 192: for (b = 0x80; b; b >>= 1) {
! 193: *machine_ledaddr = (r & b)? PALED_DATA : 0;
! 194: DELAY(1);
! 195: *machine_ledaddr = ((r & b)? PALED_DATA : 0) |
! 196: PALED_STROBE;
! 197: }
! 198: }
! 199: }
! 200: }
! 201: #endif
! 202:
! 203: #ifdef _KERNEL
! 204: extern int (*cpu_hpt_init)(vaddr_t hpt, vsize_t hptsize);
! 205:
! 206: void fpu_save(vaddr_t va);
! 207: void fpu_exit(void);
! 208: void ficache(pa_space_t sp, vaddr_t va, vsize_t size);
! 209: void fdcache(pa_space_t sp, vaddr_t va, vsize_t size);
! 210: void pdcache(pa_space_t sp, vaddr_t va, vsize_t size);
! 211: void ficacheall(void);
! 212: void fdcacheall(void);
! 213: void ptlball(void);
! 214: int btlb_insert(pa_space_t space, vaddr_t va, paddr_t pa, vsize_t *lenp, u_int prot);
! 215: hppa_hpa_t cpu_gethpa(int n);
! 216: void eaio_l2(int i);
! 217: #endif
! 218:
! 219: #endif /* _MACHINE_CPUFUNC_H_ */
CVSweb