[BACK]Return to cpufunc.h CVS log [TXT][DIR] Up to [local] / sys / arch / hppa / include

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