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

Annotation of sys/arch/hppa64/include/cpu.h, Revision 1.1

1.1     ! nbrk        1: /*     $OpenBSD: cpu.h,v 1.11 2007/05/16 19:37:06 thib Exp $   */
        !             2:
        !             3: /*
        !             4:  * Copyright (c) 2005 Michael Shalayeff
        !             5:  * All rights reserved.
        !             6:  *
        !             7:  * Permission to use, copy, modify, and distribute this software for any
        !             8:  * purpose with or without fee is hereby granted, provided that the above
        !             9:  * copyright notice and this permission notice appear in all copies.
        !            10:  *
        !            11:  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
        !            12:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
        !            13:  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
        !            14:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
        !            15:  * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER IN
        !            16:  * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
        !            17:  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
        !            18:  */
        !            19: /*
        !            20:  * Copyright (c) 1988-1994, The University of Utah and
        !            21:  * the Computer Systems Laboratory at the University of Utah (CSL).
        !            22:  * All rights reserved.
        !            23:  *
        !            24:  * Permission to use, copy, modify and distribute this software is hereby
        !            25:  * granted provided that (1) source code retains these copyright, permission,
        !            26:  * and disclaimer notices, and (2) redistributions including binaries
        !            27:  * reproduce the notices in supporting documentation, and (3) all advertising
        !            28:  * materials mentioning features or use of this software display the following
        !            29:  * acknowledgement: ``This product includes software developed by the
        !            30:  * Computer Systems Laboratory at the University of Utah.''
        !            31:  *
        !            32:  * THE UNIVERSITY OF UTAH AND CSL ALLOW FREE USE OF THIS SOFTWARE IN ITS "AS
        !            33:  * IS" CONDITION.  THE UNIVERSITY OF UTAH AND CSL DISCLAIM ANY LIABILITY OF
        !            34:  * ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            35:  *
        !            36:  * CSL requests users of this software to return to csl-dist@cs.utah.edu any
        !            37:  * improvements that they make and grant CSL redistribution rights.
        !            38:  *
        !            39:  *     Utah $Hdr: cpu.h 1.19 94/12/16$
        !            40:  */
        !            41:
        !            42: #ifndef        _MACHINE_CPU_H_
        !            43: #define        _MACHINE_CPU_H_
        !            44:
        !            45: #include <machine/trap.h>
        !            46: #include <machine/frame.h>
        !            47:
        !            48: /*
        !            49:  * COPR/SFUs
        !            50:  */
        !            51: #define        HPPA_FPUS       0xc0
        !            52: #define        HPPA_FPUVER(w)  (((w) & 0x003ff800) >> 11)
        !            53: #define        HPPA_FPU_OP(w)  ((w) >> 26)
        !            54: #define        HPPA_FPU_UNMPL  0x01    /* exception reg, the rest is << 1 */
        !            55: #define        HPPA_FPU_ILL    0x80    /* software-only */
        !            56: #define        HPPA_FPU_I      0x01
        !            57: #define        HPPA_FPU_U      0x02
        !            58: #define        HPPA_FPU_O      0x04
        !            59: #define        HPPA_FPU_Z      0x08
        !            60: #define        HPPA_FPU_V      0x10
        !            61: #define        HPPA_FPU_D      0x20
        !            62: #define        HPPA_FPU_T      0x40
        !            63: #define        HPPA_FPU_XMASK  0x7f
        !            64: #define        HPPA_FPU_T_POS  25      /* 32bit reg! */
        !            65: #define        HPPA_FPU_RM     0x00000600
        !            66: #define        HPPA_FPU_CQ     0x00fff800
        !            67: #define        HPPA_FPU_C      0x04000000
        !            68: #define        HPPA_FPU_FLSH   27
        !            69: #define        HPPA_FPU_INIT   (0)
        !            70: #define        HPPA_FPU_FORK(s) ((s) & ~((u_int64_t)(HPPA_FPU_XMASK)<<32))
        !            71: #define        HPPA_PMSFUS     0x20    /* ??? */
        !            72:
        !            73: /*
        !            74:  * Interrupts stuff
        !            75:  */
        !            76: #define        IPL_NONE        0
        !            77: #define        IPL_SOFTCLOCK   1
        !            78: #define        IPL_SOFTNET     2
        !            79: #define        IPL_BIO         3
        !            80: #define        IPL_NET         4
        !            81: #define        IPL_SOFTTTY     5
        !            82: #define        IPL_TTY         6
        !            83: #define        IPL_VM          7
        !            84: #define        IPL_AUDIO       8
        !            85: #define        IPL_CLOCK       9
        !            86: #define        IPL_STATCLOCK   10
        !            87: #define        IPL_SCHED       IPL_STATCLOCK
        !            88: #define        IPL_HIGH        11
        !            89:
        !            90: #define        NIPL            12
        !            91:
        !            92: #define        IST_NONE        0
        !            93: #define        IST_PULSE       1
        !            94: #define        IST_EDGE        2
        !            95: #define        IST_LEVEL       3
        !            96:
        !            97: #define        splsoftclock()  splraise(IPL_SOFTCLOCK)
        !            98: #define        splsoftnet()    splraise(IPL_SOFTNET)
        !            99: #define        splbio()        splraise(IPL_BIO)
        !           100: #define        splnet()        splraise(IPL_NET)
        !           101: #define        splsofttty()    splraise(IPL_SOFTTTY)
        !           102: #define        spltty()        splraise(IPL_TTY)
        !           103: #define        splvm()         splraise(IPL_VM)
        !           104: #define        splaudio()      splraise(IPL_AUDIO)
        !           105: #define        splclock()      splraise(IPL_CLOCK)
        !           106: #define        splsched()      splraise(IPL_SCHED)
        !           107: #define        splstatclock()  splraise(IPL_STATCLOCK)
        !           108: #define        splhigh()       splraise(IPL_HIGH)
        !           109: #define        spl0()          spllower(IPL_NONE)
        !           110: #define        splx(c)         spllower(c)
        !           111:
        !           112: #define        setsoftast()            (astpending = 1)
        !           113: #define        setsoftclock()          /* TODO */
        !           114: #define        setsoftnet()            /* TODO */
        !           115: #define        setsofttty()            /* TODO */
        !           116:
        !           117: #ifndef _LOCORE
        !           118: #include <sys/time.h>
        !           119: #include <sys/sched.h>
        !           120:
        !           121: struct cpu_info {
        !           122:        struct proc     *ci_curproc;
        !           123:        struct pcb      *ci_cpcb;
        !           124:        struct cpu_info *ci_next;
        !           125:
        !           126:        struct proc     *ci_fpproc;
        !           127:        int             ci_number;
        !           128:        struct schedstate_percpu ci_schedstate; /* scheduler state */
        !           129:
        !           130:        /* DEBUG/DIAGNOSTIC stuff */
        !           131:        u_long          ci_spin_locks;  /* # of spin locks held */
        !           132:        u_long          ci_simple_locks;/* # of simple locks held */
        !           133:
        !           134:        /* Spinning up the CPU */
        !           135:        void            (*ci_spinup)(void); /* spinup routine */
        !           136:        void            *ci_initstack;
        !           137: };
        !           138:
        !           139: struct cpu_info *curcpu(void);
        !           140: #define        cpu_number()    (curcpu()->ci_number)
        !           141: #define        CPU_IS_PRIMARY(ci)      ((ci)->ci_number == 0)
        !           142: #define        CPU_INFO_ITERATOR       int
        !           143: #define        CPU_INFO_FOREACH(cii,ci) \
        !           144:        for (cii = 0, ci = curcpu(); ci != NULL; ci = ci->ci_next)
        !           145: #define        CPU_INFO_UNIT(ci)       ((ci)->ci_number)
        !           146:
        !           147: #ifdef DIAGNOSTIC
        !           148: void splassert_fail(int, int, const char *);
        !           149: extern int splassert_ctl;
        !           150: void splassert_check(int, const char *);
        !           151: #define splassert(__wantipl) do {                      \
        !           152:        if (splassert_ctl > 0) {                        \
        !           153:                splassert_check(__wantipl, __func__);   \
        !           154:        }                                               \
        !           155: } while (0)
        !           156: #else
        !           157: #define splassert(__wantipl)   do { /* nada */ } while (0)
        !           158: #endif /* DIAGNOSTIC */
        !           159:
        !           160: /* types */
        !           161: enum hppa_cpu_type {
        !           162:        hpcxu, hpcxu2, hpcxw
        !           163: };
        !           164: extern enum hppa_cpu_type cpu_type;
        !           165: extern const char *cpu_typename;
        !           166: extern int cpu_hvers;
        !           167: #endif
        !           168:
        !           169: /*
        !           170:  * Exported definitions unique to hp700/PA-RISC cpu support.
        !           171:  */
        !           172:
        !           173: #define        HPPA_PGALIAS    0x0000000000100000UL
        !           174: #define        HPPA_PGAMASK    0xfffffffffff00000UL
        !           175: #define        HPPA_PGAOFF     0x00000000000fffffUL
        !           176:
        !           177: #define        HPPA_PHYSMAP    0x000001ffffffffffUL
        !           178: #define        HPPA_IOBEGIN    0xfffffff000000000UL
        !           179: #define        HPPA_IOLEN      0x0000001000000000UL
        !           180: #define        HPPA_PHYSEND    0xffffffffffffffffUL
        !           181: #define        HPPA_IOADDR     0xfffffff100000000UL
        !           182: #define        HPPA_IOBCAST    0xfffffffffffc0000UL
        !           183: #define        HPPA_LBCAST     0xfffffffffffc0000UL
        !           184: #define        HPPA_GBCAST     0xfffffffffffe0000UL
        !           185: #define        HPPA_FPADDR     0xfffffffffff80000UL
        !           186: #define        HPPA_FLEX_MASK  0xfffffffffffc0000UL
        !           187: #define        HPPA_DMA_ENABLE 0x00000001
        !           188: #define        HPPA_SPA_ENABLE 0x00000020
        !           189: #define        HPPA_NMODSPBUS  64
        !           190:
        !           191: #define        clockframe              trapframe
        !           192: #define        CLKF_PC(framep)         ((framep)->tf_iioq[0])
        !           193: #define        CLKF_INTR(framep)       ((framep)->tf_flags & TFF_INTR)
        !           194: #define        CLKF_USERMODE(framep)   ((framep)->tf_flags & T_USER)
        !           195: #define        CLKF_SYSCALL(framep)    ((framep)->tf_flags & TFF_SYS)
        !           196:
        !           197: #define        signotify(p)            (setsoftast())
        !           198: #define        need_resched(ci)        (want_resched = 1, setsoftast())
        !           199: #define        need_proftick(p)        setsoftast()
        !           200:
        !           201: #ifndef _LOCORE
        !           202: #ifdef _KERNEL
        !           203:
        !           204: extern int want_resched, astpending;
        !           205:
        !           206: #define DELAY(x) delay(x)
        !           207:
        !           208: int    splraise(int cpl);
        !           209: int    spllower(int cpl);
        !           210:
        !           211: void   delay(u_int us);
        !           212: void   hppa_init(paddr_t start);
        !           213: void   trap(int type, struct trapframe *frame);
        !           214: int    spcopy(pa_space_t ssp, const void *src,
        !           215:                    pa_space_t dsp, void *dst, size_t size);
        !           216: int    spstrcpy(pa_space_t ssp, const void *src,
        !           217:                      pa_space_t dsp, void *dst, size_t size, size_t *rsize);
        !           218: int    copy_on_fault(void);
        !           219: void   switch_trampoline(void);
        !           220: int    cpu_dumpsize(void);
        !           221: int    cpu_dump(void);
        !           222:
        !           223: #ifdef USELEDS
        !           224: #define        PALED_NETSND    0x01
        !           225: #define        PALED_NETRCV    0x02
        !           226: #define        PALED_DISK      0x04
        !           227: #define        PALED_HEARTBEAT 0x08
        !           228: #define        PALED_LOADMASK  0xf0
        !           229:
        !           230: #define        PALED_DATA      0x01
        !           231: #define        PALED_STROBE    0x02
        !           232:
        !           233: extern volatile u_int8_t *machine_ledaddr;
        !           234: extern int machine_ledword, machine_leds;
        !           235:
        !           236: static __inline void
        !           237: ledctl(int on, int off, int toggle)
        !           238: {
        !           239:        if (machine_ledaddr) {
        !           240:                int r;
        !           241:
        !           242:                if (on)
        !           243:                        machine_leds |= on;
        !           244:                if (off)
        !           245:                        machine_leds &= ~off;
        !           246:                if (toggle)
        !           247:                        machine_leds ^= toggle;
        !           248:
        !           249:                r = ~machine_leds;      /* it seems they should be reversed */
        !           250:
        !           251:                if (machine_ledword)
        !           252:                        *machine_ledaddr = r;
        !           253:                else {
        !           254:                        register int b;
        !           255:                        for (b = 0x80; b; b >>= 1) {
        !           256:                                *machine_ledaddr = (r & b)? PALED_DATA : 0;
        !           257:                                DELAY(1);
        !           258:                                *machine_ledaddr = ((r & b)? PALED_DATA : 0) |
        !           259:                                    PALED_STROBE;
        !           260:                        }
        !           261:                }
        !           262:        }
        !           263: }
        !           264: #endif
        !           265:
        !           266: void fpu_save(vaddr_t va);
        !           267: void fpu_exit(void);
        !           268: void ficache(pa_space_t sp, vaddr_t va, vsize_t size);
        !           269: void fdcache(pa_space_t sp, vaddr_t va, vsize_t size);
        !           270: void pdcache(pa_space_t sp, vaddr_t va, vsize_t size);
        !           271: void ficacheall(void);
        !           272: void fdcacheall(void);
        !           273: void pitlb(pa_space_t sp, vaddr_t va);
        !           274: void pdtlb(pa_space_t sp, vaddr_t va);
        !           275: void ptlball(void);
        !           276: void mtctl(register_t val, int reg);
        !           277: register_t mfctl(int reg);
        !           278: hppa_hpa_t cpu_gethpa(int n);
        !           279: void sync_caches(void);
        !           280: #endif
        !           281:
        !           282: /*
        !           283:  * Boot arguments stuff
        !           284:  */
        !           285:
        !           286: #define        BOOTARG_LEN     (NBPG)
        !           287: #define        BOOTARG_OFF     (0x10000)
        !           288:
        !           289: /*
        !           290:  * CTL_MACHDEP definitions.
        !           291:  */
        !           292: #define        CPU_CONSDEV             1       /* dev_t: console terminal device */
        !           293: #define        CPU_MAXID               1       /* number of valid machdep ids */
        !           294:
        !           295: #define CTL_MACHDEP_NAMES { \
        !           296:        { 0, 0 }, \
        !           297:        { "console_device", CTLTYPE_STRUCT }, \
        !           298: }
        !           299: #endif
        !           300:
        !           301: #endif /* _MACHINE_CPU_H_ */

CVSweb