xref: /freebsd/sys/arm64/include/reg.h (revision aab60068943d733b0b4573e5481c543ab3d45a00)
1147b9d04SAndrew Turner /*-
2147b9d04SAndrew Turner  * Copyright (c) 2014 Andrew Turner
3147b9d04SAndrew Turner  * Copyright (c) 2014-2015 The FreeBSD Foundation
4147b9d04SAndrew Turner  * All rights reserved.
5147b9d04SAndrew Turner  *
6147b9d04SAndrew Turner  * This software was developed by Andrew Turner under
7147b9d04SAndrew Turner  * sponsorship from the FreeBSD Foundation.
8147b9d04SAndrew Turner  *
9147b9d04SAndrew Turner  * Redistribution and use in source and binary forms, with or without
10147b9d04SAndrew Turner  * modification, are permitted provided that the following conditions
11147b9d04SAndrew Turner  * are met:
12147b9d04SAndrew Turner  * 1. Redistributions of source code must retain the above copyright
13147b9d04SAndrew Turner  *    notice, this list of conditions and the following disclaimer.
14147b9d04SAndrew Turner  * 2. Redistributions in binary form must reproduce the above copyright
15147b9d04SAndrew Turner  *    notice, this list of conditions and the following disclaimer in the
16147b9d04SAndrew Turner  *    documentation and/or other materials provided with the distribution.
17147b9d04SAndrew Turner  *
18147b9d04SAndrew Turner  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19147b9d04SAndrew Turner  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20147b9d04SAndrew Turner  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21147b9d04SAndrew Turner  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22147b9d04SAndrew Turner  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23147b9d04SAndrew Turner  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24147b9d04SAndrew Turner  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25147b9d04SAndrew Turner  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26147b9d04SAndrew Turner  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27147b9d04SAndrew Turner  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28147b9d04SAndrew Turner  * SUCH DAMAGE.
29147b9d04SAndrew Turner  */
30147b9d04SAndrew Turner 
31d5d97bedSMike Karels #ifdef __arm__
32d5d97bedSMike Karels #include <arm/reg.h>
33d5d97bedSMike Karels #else /* !__arm__ */
34d5d97bedSMike Karels 
35147b9d04SAndrew Turner #ifndef	_MACHINE_REG_H_
36147b9d04SAndrew Turner #define	_MACHINE_REG_H_
37147b9d04SAndrew Turner 
388ee8271eSWarner Losh #include <sys/_types.h>
398ee8271eSWarner Losh 
40147b9d04SAndrew Turner struct reg {
418ee8271eSWarner Losh 	__uint64_t x[30];
428ee8271eSWarner Losh 	__uint64_t lr;
438ee8271eSWarner Losh 	__uint64_t sp;
448ee8271eSWarner Losh 	__uint64_t elr;
452ecbbcc7SZachary Leaf 	__uint64_t spsr;
46147b9d04SAndrew Turner };
47147b9d04SAndrew Turner 
489dcf90f8SEd Schouten struct reg32 {
498c9c3144SOlivier Houchard 	unsigned int r[13];
508c9c3144SOlivier Houchard 	unsigned int r_sp;
518c9c3144SOlivier Houchard 	unsigned int r_lr;
528c9c3144SOlivier Houchard 	unsigned int r_pc;
538c9c3144SOlivier Houchard 	unsigned int r_cpsr;
549dcf90f8SEd Schouten };
559dcf90f8SEd Schouten 
56147b9d04SAndrew Turner struct fpreg {
57147b9d04SAndrew Turner 	__uint128_t	fp_q[32];
588ee8271eSWarner Losh 	__uint32_t	fp_sr;
598ee8271eSWarner Losh 	__uint32_t	fp_cr;
60147b9d04SAndrew Turner };
61147b9d04SAndrew Turner 
629dcf90f8SEd Schouten struct fpreg32 {
639dcf90f8SEd Schouten 	int dummy;
649dcf90f8SEd Schouten };
659dcf90f8SEd Schouten 
66*aab60068SAndrew Turner #define	SVEREG_FLAG_REGS_MASK	0x0001
67*aab60068SAndrew Turner #define	SVEREG_FLAG_FP		0x0000
68*aab60068SAndrew Turner #define	SVEREG_FLAG_SVE		0x0001
69*aab60068SAndrew Turner 
70*aab60068SAndrew Turner struct svereg_header {
71*aab60068SAndrew Turner 	__uint32_t	sve_size;
72*aab60068SAndrew Turner 	__uint32_t	sve_maxsize;
73*aab60068SAndrew Turner 	__uint16_t	sve_vec_len;
74*aab60068SAndrew Turner 	__uint16_t	sve_max_vec_len;
75*aab60068SAndrew Turner 	__uint16_t	sve_flags;
76*aab60068SAndrew Turner 	__uint16_t	sve_reserved;
77*aab60068SAndrew Turner };
78*aab60068SAndrew Turner 
79147b9d04SAndrew Turner struct dbreg {
808ee8271eSWarner Losh 	__uint8_t	db_debug_ver;
818ee8271eSWarner Losh 	__uint8_t	db_nbkpts;
828ee8271eSWarner Losh 	__uint8_t	db_nwtpts;
838ee8271eSWarner Losh 	__uint8_t	db_pad[5];
8405f39d1aSAndrew Turner 
8505f39d1aSAndrew Turner 	struct {
868ee8271eSWarner Losh 		__uint64_t dbr_addr;
878ee8271eSWarner Losh 		__uint32_t dbr_ctrl;
888ee8271eSWarner Losh 		__uint32_t dbr_pad;
89f2583be1SMitchell Horne 	} db_breakregs[16];
90f2583be1SMitchell Horne 	struct {
918ee8271eSWarner Losh 		__uint64_t dbw_addr;
928ee8271eSWarner Losh 		__uint32_t dbw_ctrl;
938ee8271eSWarner Losh 		__uint32_t dbw_pad;
94f2583be1SMitchell Horne 	} db_watchregs[16];
95147b9d04SAndrew Turner };
96147b9d04SAndrew Turner 
979dcf90f8SEd Schouten struct dbreg32 {
989dcf90f8SEd Schouten 	int dummy;
999dcf90f8SEd Schouten };
1009dcf90f8SEd Schouten 
1016713be31SAndrew Turner struct arm64_addr_mask {
1026713be31SAndrew Turner 	__uint64_t	code;
1036713be31SAndrew Turner 	__uint64_t	data;
1046713be31SAndrew Turner };
1056713be31SAndrew Turner 
1069dcf90f8SEd Schouten #define	__HAVE_REG32
1079dcf90f8SEd Schouten 
108147b9d04SAndrew Turner #endif /* !_MACHINE_REG_H_ */
109d5d97bedSMike Karels 
110d5d97bedSMike Karels #endif /* !__arm__ */
111