1 |
dpavlin |
20 |
/* GXemul: $Id: ppc_bat.h,v 1.1 2005/11/17 21:26:07 debug Exp $ */ |
2 |
|
|
/* $NetBSD: bat.h,v 1.5 2003/03/14 06:21:19 matt Exp $ */ |
3 |
|
|
|
4 |
|
|
#ifndef _POWERPC_OEA_BAT_H_ |
5 |
|
|
#define _POWERPC_OEA_BAT_H_ |
6 |
|
|
|
7 |
|
|
/*- |
8 |
|
|
* Copyright (c) 1999 The NetBSD Foundation, Inc. |
9 |
|
|
* All rights reserved. |
10 |
|
|
* |
11 |
|
|
* This code is derived from software contributed to The NetBSD Foundation |
12 |
|
|
* by Jason R. Thorpe. |
13 |
|
|
* |
14 |
|
|
* Redistribution and use in source and binary forms, with or without |
15 |
|
|
* modification, are permitted provided that the following conditions |
16 |
|
|
* are met: |
17 |
|
|
* 1. Redistributions of source code must retain the above copyright |
18 |
|
|
* notice, this list of conditions and the following disclaimer. |
19 |
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
20 |
|
|
* notice, this list of conditions and the following disclaimer in the |
21 |
|
|
* documentation and/or other materials provided with the distribution. |
22 |
|
|
* 3. All advertising materials mentioning features or use of this software |
23 |
|
|
* must display the following acknowledgement: |
24 |
|
|
* This product includes software developed by the NetBSD |
25 |
|
|
* Foundation, Inc. and its contributors. |
26 |
|
|
* 4. Neither the name of The NetBSD Foundation nor the names of its |
27 |
|
|
* contributors may be used to endorse or promote products derived |
28 |
|
|
* from this software without specific prior written permission. |
29 |
|
|
* |
30 |
|
|
* THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS |
31 |
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED |
32 |
|
|
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
33 |
|
|
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS |
34 |
|
|
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
35 |
|
|
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
36 |
|
|
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
37 |
|
|
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
38 |
|
|
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
39 |
|
|
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
40 |
|
|
* POSSIBILITY OF SUCH DAMAGE. |
41 |
|
|
*/ |
42 |
|
|
|
43 |
|
|
/* |
44 |
|
|
* Copyright (C) 1995, 1996 Wolfgang Solfrank. |
45 |
|
|
* Copyright (C) 1995, 1996 TooLs GmbH. |
46 |
|
|
* All rights reserved. |
47 |
|
|
* |
48 |
|
|
* Redistribution and use in source and binary forms, with or without |
49 |
|
|
* modification, are permitted provided that the following conditions |
50 |
|
|
* are met: |
51 |
|
|
* 1. Redistributions of source code must retain the above copyright |
52 |
|
|
* notice, this list of conditions and the following disclaimer. |
53 |
|
|
* 2. Redistributions in binary form must reproduce the above copyright |
54 |
|
|
* notice, this list of conditions and the following disclaimer in the |
55 |
|
|
* documentation and/or other materials provided with the distribution. |
56 |
|
|
* 3. All advertising materials mentioning features or use of this software |
57 |
|
|
* must display the following acknowledgement: |
58 |
|
|
* This product includes software developed by TooLs GmbH. |
59 |
|
|
* 4. The name of TooLs GmbH may not be used to endorse or promote products |
60 |
|
|
* derived from this software without specific prior written permission. |
61 |
|
|
* |
62 |
|
|
* THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR |
63 |
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
64 |
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
65 |
|
|
* IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
66 |
|
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
67 |
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
68 |
|
|
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
69 |
|
|
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
70 |
|
|
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
71 |
|
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
72 |
|
|
*/ |
73 |
|
|
|
74 |
|
|
#if 0 |
75 |
|
|
#ifndef _LOCORE |
76 |
|
|
struct bat { |
77 |
|
|
register_t batu; |
78 |
|
|
register_t batl; |
79 |
|
|
}; |
80 |
|
|
#endif |
81 |
|
|
#endif |
82 |
|
|
|
83 |
|
|
/* Lower BAT bits (all but PowerPC 601): */ |
84 |
|
|
#define BAT_RPN (~0x1ffff) /* physical block start */ |
85 |
|
|
#define BAT_XPN 0x00000e00 /* eXtended physical page number (0-2) */ |
86 |
|
|
#define BAT_W 0x00000040 /* 1 = write-through, 0 = write-back */ |
87 |
|
|
#define BAT_I 0x00000020 /* cache inhibit */ |
88 |
|
|
#define BAT_M 0x00000010 /* memory coherency enable */ |
89 |
|
|
#define BAT_G 0x00000008 /* guarded region (not on 601) */ |
90 |
|
|
#define BAT_X 0x00000004 /* eXtended physical page number (3) */ |
91 |
|
|
|
92 |
|
|
/* |
93 |
|
|
* BAT_XPN and BAT_X are only used when HID0[XAEN] == 1 and are used |
94 |
|
|
* to generate the 4 MSB of physical address |
95 |
|
|
*/ |
96 |
|
|
|
97 |
|
|
#define BAT_PP 0x00000003 /* PP mask */ |
98 |
|
|
#define BAT_PP_NONE 0x00000000 /* no access permission */ |
99 |
|
|
#define BAT_PP_RO_S 0x00000001 /* read-only (soft) */ |
100 |
|
|
#define BAT_PP_RW 0x00000002 /* read/write */ |
101 |
|
|
#define BAT_PP_RO 0x00000003 /* read-only */ |
102 |
|
|
|
103 |
|
|
/* Upper BAT bits (all but PowerPC 601): */ |
104 |
|
|
#define BAT_EPI (~0x1ffffL) /* effective block start */ |
105 |
|
|
#define BAT_BL 0x00001ffc /* block length */ |
106 |
|
|
#define BAT_Vs 0x00000002 /* valid in supervisor mode */ |
107 |
|
|
#define BAT_Vu 0x00000001 /* valid in user mode */ |
108 |
|
|
|
109 |
|
|
#define BAT_XBL 0x0001e000 /* eXtended Block Length (*) */ |
110 |
|
|
#define BAT_XBL_512M 0x00002000 /* XBL for 512MB */ |
111 |
|
|
#define BAT_XBL_1G 0x00006000 /* XBL for 1GB */ |
112 |
|
|
#define BAT_XBL_2G 0x0000e000 /* XBL for 2GB */ |
113 |
|
|
#define BAT_XBL_4G 0x0001e000 /* XBL for 4GB */ |
114 |
|
|
|
115 |
|
|
#define BAT_V (BAT_Vs|BAT_Vu) |
116 |
|
|
|
117 |
|
|
/* Block Length encoding (all but PowerPC 601): */ |
118 |
|
|
#define BAT_BL_128K 0x00000000 |
119 |
|
|
#define BAT_BL_256K 0x00000004 |
120 |
|
|
#define BAT_BL_512K 0x0000000c |
121 |
|
|
#define BAT_BL_1M 0x0000001c |
122 |
|
|
#define BAT_BL_2M 0x0000003c |
123 |
|
|
#define BAT_BL_4M 0x0000007c |
124 |
|
|
#define BAT_BL_8M 0x000000fc |
125 |
|
|
#define BAT_BL_16M 0x000001fc |
126 |
|
|
#define BAT_BL_32M 0x000003fc |
127 |
|
|
#define BAT_BL_64M 0x000007fc |
128 |
|
|
#define BAT_BL_128M 0x00000ffc |
129 |
|
|
#define BAT_BL_256M 0x00001ffc |
130 |
|
|
|
131 |
|
|
#define BATU(va, len, v) \ |
132 |
|
|
(((va) & BAT_EPI) | ((len) & BAT_BL) | ((v) & BAT_V)) |
133 |
|
|
|
134 |
|
|
#define BATL(pa, wimg, pp) \ |
135 |
|
|
(((pa) & BAT_RPN) | (wimg) | (pp)) |
136 |
|
|
|
137 |
|
|
#define BAT_VA_MATCH_P(batu,va) \ |
138 |
|
|
(((~(((batu)&BAT_BL)<<15))&(va)&BAT_EPI)==((batu)&BAT_EPI)) |
139 |
|
|
|
140 |
|
|
#define BAT_PA_MATCH_P(batu,batl,pa) \ |
141 |
|
|
(((~(((batu)&BAT_BL)<<15))&(pa)&BAT_RPN)==((batl)&BAT_RPN)) |
142 |
|
|
|
143 |
|
|
#define BAT_VALID_P(batu, msr) \ |
144 |
|
|
(((msr)&PSL_PR)?(((batu)&BAT_Vu)==BAT_Vu):(((batu)&BAT_Vs)==BAT_Vs)) |
145 |
|
|
|
146 |
|
|
/* Lower BAT bits (PowerPC 601): */ |
147 |
|
|
#define BAT601_PBN 0xfffe0000 /* physical block number */ |
148 |
|
|
#define BAT601_V 0x00000040 /* valid */ |
149 |
|
|
#define BAT601_BSM 0x0000003f /* block size mask */ |
150 |
|
|
|
151 |
|
|
/* Upper BAT bits (PowerPC 601): */ |
152 |
|
|
#define BAT601_BLPI 0xfffe0000 /* block logical page index */ |
153 |
|
|
#define BAT601_W 0x00000040 /* 1 = write-through, 0 = write-back */ |
154 |
|
|
#define BAT601_I 0x00000020 /* cache inhibit */ |
155 |
|
|
#define BAT601_M 0x00000010 /* memory coherency enable */ |
156 |
|
|
#define BAT601_Ks 0x00000008 /* key-supervisor */ |
157 |
|
|
#define BAT601_Ku 0x00000004 /* key-user */ |
158 |
|
|
|
159 |
|
|
/* |
160 |
|
|
* Permission bits on the PowerPC 601 are modified by the appropriate |
161 |
|
|
* Key bit: |
162 |
|
|
* |
163 |
|
|
* Key PP Access |
164 |
|
|
* 0 NONE read/write |
165 |
|
|
* 0 RO_S read/write |
166 |
|
|
* 0 RW read/write |
167 |
|
|
* 0 RO read-only |
168 |
|
|
* |
169 |
|
|
* 1 NONE none |
170 |
|
|
* 1 RO_S read-only |
171 |
|
|
* 1 RW read/write |
172 |
|
|
* 1 RO read-only |
173 |
|
|
*/ |
174 |
|
|
#define BAT601_PP 0x00000003 |
175 |
|
|
#define BAT601_PP_NONE 0x00000000 /* no access permission */ |
176 |
|
|
#define BAT601_PP_RO_S 0x00000001 /* read-only (soft) */ |
177 |
|
|
#define BAT601_PP_RW 0x00000002 /* read/write */ |
178 |
|
|
#define BAT601_PP_RO 0x00000003 /* read-only */ |
179 |
|
|
|
180 |
|
|
/* Block Size Mask encoding (PowerPC 601): */ |
181 |
|
|
#define BAT601_BSM_128K 0x00000000 |
182 |
|
|
#define BAT601_BSM_256K 0x00000001 |
183 |
|
|
#define BAT601_BSM_512K 0x00000003 |
184 |
|
|
#define BAT601_BSM_1M 0x00000007 |
185 |
|
|
#define BAT601_BSM_2M 0x0000000f |
186 |
|
|
#define BAT601_BSM_4M 0x0000001f |
187 |
|
|
#define BAT601_BSM_8M 0x0000003f |
188 |
|
|
|
189 |
|
|
#define BATU601(va, wim, key, pp) \ |
190 |
|
|
(((va) & BAT601_BLPI) | (wim) | (key) | (pp)) |
191 |
|
|
|
192 |
|
|
#define BATL601(pa, size, v) \ |
193 |
|
|
(((pa) & BAT601_PBN) | (v) | (size)) |
194 |
|
|
|
195 |
|
|
#define BAT601_VA_MATCH_P(batu, batl, va) \ |
196 |
|
|
(((~(((batl)&BAT601_BSM)<<17))&(va)&BAT601_BLPI)==((batu)&BAT601_BLPI)) |
197 |
|
|
|
198 |
|
|
#define BAT601_VALID_P(batl) \ |
199 |
|
|
((batl) & BAT601_V) |
200 |
|
|
|
201 |
|
|
#ifdef _KERNEL |
202 |
|
|
#ifndef _LOCORE |
203 |
|
|
void oea_batinit(paddr_t, ...); |
204 |
|
|
void oea_iobat_add(paddr_t, register_t); |
205 |
|
|
void oea_iobat_remove(paddr_t); |
206 |
|
|
extern struct bat battable[]; |
207 |
|
|
#endif |
208 |
|
|
#endif |
209 |
|
|
|
210 |
|
|
#endif /* _POWERPC_OEA_BAT_H_ */ |