]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/i386/include/elan_mmcr.h
Provide convenience C wrappers for RDPKRU and WRPKRU instructions.
[FreeBSD/FreeBSD.git] / sys / i386 / include / elan_mmcr.h
1 /*-
2  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3  *
4  * Copyright (c) 2004 John Birrell
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  *
16  * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  */
28
29 /* AMD Elan SC520 Memory Mapped Configuration Region (MMCR).
30  *
31  * The layout of this structure is documented by AMD in the Elan SC520
32  * Microcontroller Register Set Manual. The field names match those
33  * described in that document. The overall structure size must be 4096
34  * bytes. Ignore fields with the 'pad' prefix - they are only present for
35  * alignment purposes.
36  *
37  * $FreeBSD$
38  */
39
40 #ifndef _MACHINE_ELAN_MMCR_H_
41 #define _MACHINE_ELAN_MMCR_H_ 1
42
43 struct elan_mmcr {
44         /* CPU */
45         u_int16_t       REVID;
46         u_int8_t        CPUCTL;
47         u_int8_t        pad_0x003[0xd];
48
49         /* SDRAM Controller */
50         u_int16_t       DRCCTL;
51         u_int16_t       DRCTMCTL;
52         u_int16_t       DRCCFG;
53         u_int16_t       DRCBENDADR;
54         u_int8_t        pad_0x01a[0x6];
55         u_int8_t        ECCCTL;
56         u_int8_t        ECCSTA;
57         u_int8_t        ECCCKBPOS;
58         u_int8_t        ECCCKTEST;
59         u_int32_t       ECCSBADD;
60         u_int32_t       ECCMBADD;
61         u_int8_t        pad_0x02c[0x14];
62
63         /* SDRAM Buffer */
64         u_int8_t        DBCTL;
65         u_int8_t        pad_0x041[0xf];
66
67         /* ROM/Flash Controller */
68         u_int16_t       BOOTCSCTL;
69         u_int8_t        pad_0x052[0x2];
70         u_int16_t       ROMCS1CTL;
71         u_int16_t       ROMCS2CTL;
72         u_int8_t        pad_0x058[0x8];
73
74         /* PCI Bus Host Bridge */
75         u_int16_t       HBCTL;
76         u_int16_t       HBTGTIRQCTL;
77         u_int16_t       HBTGTIRQSTA;
78         u_int16_t       HBMSTIRQCTL;
79         u_int16_t       HBMSTIRQSTA;
80         u_int8_t        pad_0x06a[0x2];
81         u_int32_t       MSTINTADD;
82
83         /* System Arbitration */
84         u_int8_t        SYSARBCTL;
85         u_int8_t        PCIARBSTA;
86         u_int16_t       SYSARBMENB;
87         u_int32_t       ARBPRICTL;
88         u_int8_t        pad_0x078[0x8];
89
90         /* System Address Mapping */
91         u_int32_t       ADDDECCTL;
92         u_int32_t       WPVSTA;
93         u_int32_t       PAR0;
94         u_int32_t       PAR1;
95         u_int32_t       PAR2;
96         u_int32_t       PAR3;
97         u_int32_t       PAR4;
98         u_int32_t       PAR5;
99         u_int32_t       PAR6;
100         u_int32_t       PAR7;
101         u_int32_t       PAR8;
102         u_int32_t       PAR9;
103         u_int32_t       PAR10;
104         u_int32_t       PAR11;
105         u_int32_t       PAR12;
106         u_int32_t       PAR13;
107         u_int32_t       PAR14;
108         u_int32_t       PAR15;
109         u_int8_t        pad_0x0c8[0xb38];
110
111         /* GP Bus Controller */
112         u_int8_t        GPECHO;
113         u_int8_t        GPCSDW;
114         u_int16_t       GPCSQUAL;
115         u_int8_t        pad_0xc04[0x4];
116         u_int8_t        GPCSRT;
117         u_int8_t        GPCSPW;
118         u_int8_t        GPCSOFF;
119         u_int8_t        GPRDW;
120         u_int8_t        GPRDOFF;
121         u_int8_t        GPWRW;
122         u_int8_t        GPWROFF;
123         u_int8_t        GPALEW;
124         u_int8_t        GPALEOFF;
125         u_int8_t        pad_0xc11[0xf];
126
127         /* Programmable Input/Output */
128         u_int16_t       PIOPFS15_0;
129         u_int16_t       PIOPFS31_16;
130         u_int8_t        CSPFS;
131         u_int8_t        pad_0xc25;
132         u_int8_t        CLKSEL;
133         u_int8_t        pad_0xc27;
134         u_int16_t       DSCTL;
135         u_int16_t       PIODIR15_0;
136         u_int16_t       PIODIR31_16;
137         u_int8_t         pad_0xc2e[0x2];
138         u_int16_t       PIODATA15_0;
139         u_int16_t       PIODATA31_16;
140         u_int16_t       PIOSET15_0;
141         u_int16_t       PIOSET31_16;
142         u_int16_t       PIOCLR15_0;
143         u_int16_t       PIOCLR31_16;
144         u_int8_t        pad_0xc3c[0x24];
145
146         /* Software Timer */
147         u_int16_t       SWTMRMILLI;
148         u_int16_t       SWTMRMICRO;
149         u_int8_t        SWTMRCFG;
150         u_int8_t        pad_0xc65[0xb];
151
152         /* General-Purpose Timers */
153         u_int8_t        GPTMRSTA;
154         u_int8_t        pad_0xc71;
155         u_int16_t       GPTMR0CTL;
156         u_int16_t       GPTMR0CNT;
157         u_int16_t       GPTMR0MAXCMPA;
158         u_int16_t       GPTMR0MAXCMPB;
159         u_int16_t       GPTMR1CTL;
160         u_int16_t       GPTMR1CNT;
161         u_int16_t       GPTMR1MAXCMPA;
162         u_int16_t       GPTMR1MAXCMPB;
163         u_int16_t       GPTMR2CTL;
164         u_int16_t       GPTMR2CNT;
165         u_int8_t        pad_0xc86[0x8];
166         u_int16_t       GPTMR2MAXCMPA;
167         u_int8_t        pad_0xc90[0x20];
168
169         /* Watchdog Timer */
170         u_int16_t       WDTMRCTL;
171         u_int16_t       WDTMRCNTL;
172         u_int16_t       WDTMRCNTH;
173         u_int8_t        pad_0xcb6[0xa];
174
175         /* UART Serial Ports */
176         u_int8_t        UART1CTL;
177         u_int8_t        UART1STA;
178         u_int8_t        UART1FCRSHAD;
179         u_int8_t        pad_0xcc3;
180         u_int8_t        UART2CTL;
181         u_int8_t        UART2STA;
182         u_int8_t        UART2FCRSHAD;
183         u_int8_t        pad_0xcc7[0x9];
184
185         /* Synchronous Serial Interface */
186         u_int8_t        SSICTL;
187         u_int8_t        SSIXMIT;
188         u_int8_t        SSICMD;
189         u_int8_t        SSISTA;
190         u_int8_t        SSIRCV;
191         u_int8_t        pad_0xcd5[0x2b];
192
193         /* Programmable Interrupt Controller */
194         u_int8_t        PICICR;
195         u_int8_t        pad_0xd01;
196         u_int8_t        MPICMODE;
197         u_int8_t        SL1PICMODE;
198         u_int8_t        SL2PICMODE;
199         u_int8_t        pad_0xd05[0x3];
200         u_int16_t       SWINT16_1;
201         u_int8_t        SWINT22_17;
202         u_int8_t        pad_0xd0b[0x5];
203         u_int16_t       INTPINPOL;
204         u_int8_t        pad_0xd12[0x2];
205         u_int16_t       PCIHOSTMAP;
206         u_int8_t        pad_0xd16[0x2];
207         u_int16_t       ECCMAP;
208         u_int8_t        GPTMR0MAP;
209         u_int8_t        GPTMR1MAP;
210         u_int8_t        GPTMR2MAP;
211         u_int8_t        pad_0xd1d[0x3];
212         u_int8_t        PIT0MAP;
213         u_int8_t        PIT1MAP;
214         u_int8_t        PIT2MAP;
215         u_int8_t        pad_0xd23[0x5];
216         u_int8_t        UART1MAP;
217         u_int8_t        UART2MAP;
218         u_int8_t        pad_0xd2a[0x6];
219         u_int8_t        PCIINTAMAP;
220         u_int8_t        PCIINTBMAP;
221         u_int8_t        PCIINTCMAP;
222         u_int8_t        PCIINTDMAP;
223         u_int8_t        pad_0xd34[0xc];
224         u_int8_t        DMABCINTMAP;
225         u_int8_t        SSIMAP;
226         u_int8_t        WDTMAP;
227         u_int8_t        RTCMAP;
228         u_int8_t        WPVMAP;
229         u_int8_t        ICEMAP;
230         u_int8_t        FERRMAP;
231         u_int8_t        pad_0xd47[0x9];
232         u_int8_t        GP0IMAP;
233         u_int8_t        GP1IMAP;
234         u_int8_t        GP2IMAP;
235         u_int8_t        GP3IMAP;
236         u_int8_t        GP4IMAP;
237         u_int8_t        GP5IMAP;
238         u_int8_t        GP6IMAP;
239         u_int8_t        GP7IMAP;
240         u_int8_t        GP8IMAP;
241         u_int8_t        GP9IMAP;
242         u_int8_t        GP10IMAP;
243         u_int8_t        pad_0xd5b[0x15];
244
245         /* Reset Generation */
246         u_int8_t        SYSINFO;
247         u_int8_t        pad_0xd71;
248         u_int8_t        RESCFG;
249         u_int8_t        pad_0xd73;
250         u_int8_t        RESSTA;
251         u_int8_t        pad_0xd75[0xb];
252
253         /* GP DMA Controller */
254         u_int8_t        GPDMACTL;
255         u_int8_t        GPDMAMMIO;
256         u_int16_t       GPDMAEXTCHMAPA;
257         u_int16_t       GPDMAEXTCHMAPB;
258         u_int8_t        GPDMAEXTPG0;
259         u_int8_t        GPDMAEXTPG1;
260         u_int8_t        GPDMAEXTPG2;
261         u_int8_t        GPDMAEXTPG3;
262         u_int8_t        GPDMAEXTPG5;
263         u_int8_t        GPDMAEXTPG6;
264         u_int8_t        GPDMAEXTPG7;
265         u_int8_t        pad_0xd8d[0x3];
266         u_int8_t        GPDMAEXTTC3;
267         u_int8_t        GPDMAEXTTC5;
268         u_int8_t        GPDMAEXTTC6;
269         u_int8_t        GPDMAEXTTC7;
270         u_int8_t        pad_0xd94[0x4];
271         u_int8_t        GPDMABCCTL;
272         u_int8_t        GPDMABCSTA;
273         u_int8_t        GPDMABSINTENB;
274         u_int8_t        GPDMABCVAL;
275         u_int8_t        pad_0xd9c[0x4];
276         u_int16_t       GPDMANXTADDL3;
277         u_int16_t       GPDMANXTADDH3;
278         u_int16_t       GPDMANXTADDL5;
279         u_int16_t       GPDMANXTADDH5;
280         u_int16_t       GPDMANXTADDL6;
281         u_int16_t       GPDMANXTADDH6;
282         u_int16_t       GPDMANXTADDL7;
283         u_int16_t       GPDMANXTADDH7;
284         u_int16_t       GPDMANXTTCL3;
285         u_int8_t        GPDMANXTTCH3;
286         u_int8_t        pad_0xdb3;
287         u_int16_t       GPDMANXTTCL5;
288         u_int8_t        GPDMANXTTCH5;
289         u_int8_t        pad_0xdb7;
290         u_int16_t       GPDMANXTTCL6;
291         u_int8_t        GPDMANXTTCH6;
292         u_int8_t        pad_0xdbb;
293         u_int16_t       GPDMANXTTCL7;
294         u_int8_t        GPDMANXTTCH7;
295         u_int8_t        pad_0xdc0[0x240];
296         };
297
298 CTASSERT(sizeof(struct elan_mmcr) == 4096);
299
300 extern volatile struct elan_mmcr * elan_mmcr;
301
302 #endif /* _MACHINE_ELAN_MMCR_H_ */