zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

pcb.h (2991B) - Raw


      1 /*-
      2  * Copyright (c) 2001 Jake Burkholder.
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  *
     14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
     15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
     17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
     18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
     22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
     23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     24  * SUCH DAMAGE.
     25  */
     26 
     27 #ifdef __arm__
     28 #include <arm/pcb.h>
     29 #else /* !__arm__ */
     30 
     31 #ifndef	_MACHINE_PCB_H_
     32 #define	_MACHINE_PCB_H_
     33 
     34 #ifndef LOCORE
     35 
     36 #include <machine/debug_monitor.h>
     37 #include <machine/vfp.h>
     38 
     39 struct trapframe;
     40 
     41 /* The first register in pcb_x is x19 */
     42 #define	PCB_X_START	19
     43 
     44 #define	PCB_X19		0
     45 #define	PCB_X20		1
     46 #define	PCB_FP		10
     47 #define	PCB_LR		11
     48 
     49 struct pcb {
     50 	uint64_t	pcb_x[12];
     51 	/* These two need to be in order as we access them together */
     52 	uint64_t	pcb_sp;
     53 	uint64_t	pcb_tpidr_el0;
     54 	uint64_t	pcb_tpidrro_el0;
     55 
     56 	/* Fault handler, the error value is passed in x0 */
     57 	vm_offset_t	pcb_onfault;
     58 
     59 	u_int		pcb_flags;
     60 #define	PCB_SINGLE_STEP_SHIFT	0
     61 #define	PCB_SINGLE_STEP		(1 << PCB_SINGLE_STEP_SHIFT)
     62 	u_int		pcb_sve_len;	/* The SVE vector length */
     63 
     64 	struct vfpstate	*pcb_fpusaved;
     65 	int		pcb_fpflags;
     66 #define	PCB_FP_STARTED	0x00000001
     67 #define	PCB_FP_SVEVALID	0x00000002
     68 #define	PCB_FP_KERN	0x40000000
     69 #define	PCB_FP_NOSAVE	0x80000000
     70 /* The bits passed to userspace in get_fpcontext */
     71 #define	PCB_FP_USERMASK	(PCB_FP_STARTED | PCB_FP_SVEVALID)
     72 	u_int		pcb_vfpcpu;	/* Last cpu this thread ran VFP code */
     73 	void		*pcb_svesaved;
     74 	uint64_t	pcb_reserved[4];
     75 
     76 	/*
     77 	 * The userspace VFP state. The pcb_fpusaved pointer will point to
     78 	 * this unless the kernel has allocated a VFP context.
     79 	 * Place last to simplify the asm to access the rest if the struct.
     80 	 */
     81 	struct vfpstate	pcb_fpustate;
     82 
     83 	struct debug_monitor_state pcb_dbg_regs;
     84 };
     85 
     86 #ifdef _KERNEL
     87 void	makectx(struct trapframe *tf, struct pcb *pcb);
     88 void	savectx(struct pcb *pcb) __returns_twice;
     89 #endif
     90 
     91 #endif /* !LOCORE */
     92 
     93 #endif /* !_MACHINE_PCB_H_ */
     94 
     95 #endif /* !__arm__ */