Home | History | Annotate | Line # | Download | only in include
alpha.h revision 1.23
      1 /* $NetBSD: alpha.h,v 1.23 2007/11/28 17:40:03 ad Exp $ */
      2 
      3 /*
      4  * Copyright (c) 1982, 1990, 1993
      5  *	The Regents of the University of California.  All rights reserved.
      6  *
      7  * This code is derived from software contributed to Berkeley by
      8  * the Systems Programming Group of the University of Utah Computer
      9  * Science Department.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions and the following disclaimer.
     16  * 2. Redistributions in binary form must reproduce the above copyright
     17  *    notice, this list of conditions and the following disclaimer in the
     18  *    documentation and/or other materials provided with the distribution.
     19  * 3. Neither the name of the University nor the names of its contributors
     20  *    may be used to endorse or promote products derived from this software
     21  *    without specific prior written permission.
     22  *
     23  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     24  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     25  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     26  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     27  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     28  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     29  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     30  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     31  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     32  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     33  * SUCH DAMAGE.
     34  *
     35  * from: Utah $Hdr: cpu.h 1.16 91/03/25$
     36  *
     37  *	@(#)cpu.h	8.4 (Berkeley) 1/5/94
     38  */
     39 /*
     40  * Copyright (c) 1988 University of Utah.
     41  *
     42  * This code is derived from software contributed to Berkeley by
     43  * the Systems Programming Group of the University of Utah Computer
     44  * Science Department.
     45  *
     46  * Redistribution and use in source and binary forms, with or without
     47  * modification, are permitted provided that the following conditions
     48  * are met:
     49  * 1. Redistributions of source code must retain the above copyright
     50  *    notice, this list of conditions and the following disclaimer.
     51  * 2. Redistributions in binary form must reproduce the above copyright
     52  *    notice, this list of conditions and the following disclaimer in the
     53  *    documentation and/or other materials provided with the distribution.
     54  * 3. All advertising materials mentioning features or use of this software
     55  *    must display the following acknowledgement:
     56  *	This product includes software developed by the University of
     57  *	California, Berkeley and its contributors.
     58  * 4. Neither the name of the University nor the names of its contributors
     59  *    may be used to endorse or promote products derived from this software
     60  *    without specific prior written permission.
     61  *
     62  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
     63  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     64  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     65  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
     66  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     67  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     68  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     69  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     70  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     71  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     72  * SUCH DAMAGE.
     73  *
     74  * from: Utah $Hdr: cpu.h 1.16 91/03/25$
     75  *
     76  *	@(#)cpu.h	8.4 (Berkeley) 1/5/94
     77  */
     78 
     79 #ifndef _ALPHA_H_
     80 #define _ALPHA_H_
     81 
     82 typedef union alpha_s_float {
     83 	u_int32_t i;
     84 	u_int32_t frac: 23,
     85 		  exp:   8,
     86 		  sign:  1;
     87 } s_float;
     88 
     89 typedef union alpha_t_float {
     90 	u_int64_t i;
     91 	u_int64_t frac: 52,
     92 		  exp:  11,
     93 		  sign:  1;
     94 } t_float;
     95 
     96 #ifdef _KERNEL
     97 
     98 #include <machine/bus.h>
     99 #include <machine/stdarg.h>
    100 
    101 struct pcb;
    102 struct lwp;
    103 struct reg;
    104 struct rpb;
    105 struct trapframe;
    106 
    107 extern u_long cpu_implver;		/* from IMPLVER instruction */
    108 extern u_long cpu_amask;		/* from AMASK instruction */
    109 extern int bootdev_debug;
    110 extern int alpha_fp_sync_complete;
    111 extern int alpha_unaligned_print, alpha_unaligned_fix, alpha_unaligned_sigbus;
    112 
    113 void	XentArith(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    114 void	XentIF(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    115 void	XentInt(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    116 void	XentMM(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    117 void	XentRestart(void);					/* MAGIC */
    118 void	XentSys(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    119 void	XentUna(u_int64_t, u_int64_t, u_int64_t);		/* MAGIC */
    120 void	alpha_init(u_long, u_long, u_long, u_long, u_long);
    121 int	alpha_pa_access(u_long);
    122 void	ast(struct trapframe *);
    123 int	badaddr(void *, size_t);
    124 int	badaddr_read(void *, size_t, void *);
    125 u_int64_t console_restart(struct trapframe *);
    126 void	do_sir(void);
    127 void	dumpconf(void);
    128 void	exception_return(void);					/* MAGIC */
    129 void	frametoreg(const struct trapframe *, struct reg *);
    130 long	fswintrberr(void);					/* MAGIC */
    131 void	init_bootstrap_console(void);
    132 void	init_prom_interface(struct rpb *);
    133 void	interrupt(unsigned long, unsigned long, unsigned long,
    134 	    struct trapframe *);
    135 void	machine_check(unsigned long, struct trapframe *, unsigned long,
    136 	    unsigned long);
    137 u_int64_t hwrpb_checksum(void);
    138 void	hwrpb_restart_setup(void);
    139 void	regdump(struct trapframe *);
    140 void	regtoframe(const struct reg *, struct trapframe *);
    141 void	savectx(struct pcb *);
    142 void	lwp_trampoline(void);					/* MAGIC */
    143 void	trap(unsigned long, unsigned long, unsigned long, unsigned long,
    144 	    struct trapframe *);
    145 void	trap_init(void);
    146 void	enable_nsio_ide(bus_space_tag_t);
    147 char *	dot_conv(unsigned long);
    148 
    149 void	fpusave_cpu(struct cpu_info *, int);
    150 void	fpusave_proc(struct lwp *, int);
    151 
    152 void	alpha_patch(bool);
    153 
    154 /* Multiprocessor glue; cpu.c */
    155 
    156 struct cpu_info;
    157 int	cpu_iccb_send(long, const char *);
    158 void	cpu_iccb_receive(void);
    159 void	cpu_hatch(struct cpu_info *);
    160 void	cpu_halt(void) __attribute__((__noreturn__));
    161 void	cpu_spinup_trampoline(void);				/* MAGIC */
    162 void	cpu_pause(unsigned long);
    163 void	cpu_resume(unsigned long);
    164 #if defined(DDB)
    165 void	cpu_debug_dump(void);
    166 #endif
    167 
    168 /* IEEE and VAX FP completion */
    169 
    170 void alpha_sts(int, s_float *);					/* MAGIC */
    171 void alpha_stt(int, t_float *);					/* MAGIC */
    172 void alpha_lds(int, s_float *);					/* MAGIC */
    173 void alpha_ldt(int, t_float *);					/* MAGIC */
    174 
    175 uint64_t alpha_read_fpcr(void);					/* MAGIC */
    176 void alpha_write_fpcr(u_int64_t);				/* MAGIC */
    177 
    178 u_int64_t alpha_read_fp_c(struct lwp *);
    179 void alpha_write_fp_c(struct lwp *, u_int64_t);
    180 
    181 void alpha_enable_fp(struct lwp *, int);
    182 int alpha_fp_complete(u_long, u_long, struct lwp *, u_int64_t *);
    183 
    184 /* Security sensitive rate limiting printf */
    185 
    186 void rlprintf(struct timeval *t, const char *fmt, ...);
    187 
    188 #endif /* _KERNEL */
    189 #endif /* _ALPHA_H_ */
    190