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