xref: /netbsd-src/sys/arch/amigappc/amigappc/p5reg.h (revision cde8f271ec30c028c5652673e0e3c4a6298637d1)
1 /*	$NetBSD: p5reg.h,v 1.3 2022/02/16 23:49:26 riastradh Exp $ */
2 
3 /*
4  * Copyright (C) 2000 Adam Ciarcinski.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  * 3. All advertising materials mentioning features or use of this software
16  *    must display the following acknowledgement:
17  *	This product includes software developed by Adam Ciarcinski for
18  *	the NetBSD project.
19  * 4. The name of the author may not be used to endorse or promote products
20  *    derived from this software without specific prior written permission.
21  *
22  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
23  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
24  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
25  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
27  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
28  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
29  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
30  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
31  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32  */
33 
34 #ifndef _P5REG_H_
35 #define _P5REG_H_
36 
37 #define	P5BASE	0xf60000
38 
39 /* registers */
40 #define	P5_REG_RESET		0x00
41 #define	P5_REG_ENABLE		0x08
42 #define	P5_REG_WAITSTATE	0x10
43 #define P5_BPPC_MAGIC		0x13
44 #define	P5_REG_SHADOW		0x18
45 #define	P5_REG_LOCK		0x20
46 #define	P5_REG_INT		0x28
47 #define	P5_IPL_EMU		0x30
48 #define	P5_INT_LVL		0x38
49 
50 /* bit definitions */
51 #define	P5_SET_CLEAR	0x80
52 
53 /* REQ_RESET */
54 #define	P5_PPC_RESET	0x10
55 #define	P5_M68K_RESET	0x08
56 #define	P5_AMIGA_RESET	0x04
57 #define	P5_AUX_RESET	0x02
58 #define	P5_SCSI_RESET	0x01
59 
60 /* REG_WAITSTATE */
61 #define	P5_PPC_WRITE	0x08
62 #define	P5_PPC_READ	0x04
63 #define	P5_M68K_WRITE	0x02
64 #define	P5_M68K_READ	0x01
65 
66 /* REG_SHADOW */
67 #define	P5_SELF_RESET	0x40
68 #define	P5_SHADOW	0x01
69 
70 /* REG_LOCK */
71 #define	P5_MAGIC1	0x40
72 #define	P5_MAGIC2	0x20
73 #define	P5_MAGIC3	0x10
74 
75 /* REG_INT */
76 #define	P5_ENABLE_IPL	0x02
77 #define	P5_INT_MASTER	0x01
78 
79 /* IPL_EMU */
80 #define	P5_DISABLE_INT	0x40
81 #define	P5_M68K_IPL2	0x20
82 #define	P5_M68K_IPL1	0x10
83 #define	P5_M68K_IPL0	0x08
84 #define	P5_PPC_IPL2	0x04
85 #define	P5_PPC_IPL1	0x02
86 #define	P5_PPC_IPL0	0x01
87 
88 #define P5_IPL_MASK	0x07
89 
90 /* INT_LVL */
91 #define	P5_LVL7		0x40
92 #define	P5_LVL6		0x20
93 #define	P5_LVL5		0x10
94 #define	P5_LVL4		0x08
95 #define	P5_LVL3		0x04
96 #define	P5_LVL2		0x02
97 #define	P5_LVL1		0x01
98 
99 /* macros to read and write P5 registers */
100 #define P5read(reg, val)						\
101 	do {								\
102 		(val) = *(volatile unsigned char *)(P5BASE + (reg));	\
103 		__asm volatile("eieio" ::: "memory");			\
104 	} while (0);
105 
106 #define P5write(reg, val)						\
107 	do {								\
108 		*(volatile unsigned char *)(P5BASE + (reg)) = (val);	\
109 		__asm volatile("eieio" ::: "memory");			\
110 	} while (0);
111 
112 #endif /* _P5REG_H_ */
113