]> CyberLeo.Net >> Repos - FreeBSD/releng/8.1.git/blob - sys/i386/include/mptable.h
Copy stable/8 to releng/8.1 in preparation for 8.1-RC1.
[FreeBSD/releng/8.1.git] / sys / i386 / include / mptable.h
1 /*-
2  * Copyright (c) 1996, by Steve Passe
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. The name of the developer may NOT be used to endorse or promote products
11  *    derived from this software without specific prior written permission.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
17  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23  * SUCH DAMAGE.
24  *
25  * $FreeBSD$
26  */
27
28 #ifndef __MACHINE_MPTABLE_H__
29 #define __MACHINE_MPTABLE_H__
30
31 enum busTypes {
32     NOBUS = 0,
33     EISA = 3,
34     ISA = 6,
35     MCA = 9,
36     PCI = 13,
37     MAX_BUSTYPE = 18,
38     UNKNOWN_BUSTYPE = 0xff
39 };
40
41 /* MP Floating Pointer Structure */
42 typedef struct MPFPS {
43         char    signature[4];
44         u_int32_t pap;
45         u_char  length;
46         u_char  spec_rev;
47         u_char  checksum;
48         u_char  config_type;
49         u_char  mpfb2;
50         u_char  mpfb3;
51         u_char  mpfb4;
52         u_char  mpfb5;
53 }      *mpfps_t;
54
55 #define MPFB2_IMCR_PRESENT      0x80
56 #define MPFB2_MUL_CLK_SRCS      0x40
57
58 /* MP Configuration Table Header */
59 typedef struct MPCTH {
60         char    signature[4];
61         u_short base_table_length;
62         u_char  spec_rev;
63         u_char  checksum;
64         u_char  oem_id[8];
65         u_char  product_id[12];
66         u_int32_t oem_table_pointer;
67         u_short oem_table_size;
68         u_short entry_count;
69         u_int32_t apic_address;
70         u_short extended_table_length;
71         u_char  extended_table_checksum;
72         u_char  reserved;
73 }      *mpcth_t;
74
75 #define MPCT_ENTRY_PROCESSOR    0
76 #define MPCT_ENTRY_BUS          1
77 #define MPCT_ENTRY_IOAPIC       2
78 #define MPCT_ENTRY_INT          3
79 #define MPCT_ENTRY_LOCAL_INT    4
80
81 typedef struct PROCENTRY {
82         u_char  type;
83         u_char  apic_id;
84         u_char  apic_version;
85         u_char  cpu_flags;
86         u_long  cpu_signature;
87         u_long  feature_flags;
88         u_long  reserved1;
89         u_long  reserved2;
90 }      *proc_entry_ptr;
91
92 #define PROCENTRY_FLAG_EN       0x01
93 #define PROCENTRY_FLAG_BP       0x02
94
95 typedef struct BUSENTRY {
96         u_char  type;
97         u_char  bus_id;
98         char    bus_type[6];
99 }      *bus_entry_ptr;
100
101 typedef struct IOAPICENTRY {
102         u_char  type;
103         u_char  apic_id;
104         u_char  apic_version;
105         u_char  apic_flags;
106         u_int32_t apic_address;
107 }      *io_apic_entry_ptr;
108
109 #define IOAPICENTRY_FLAG_EN     0x01
110
111 typedef struct INTENTRY {
112         u_char  type;
113         u_char  int_type;
114         u_short int_flags;
115         u_char  src_bus_id;
116         u_char  src_bus_irq;
117         u_char  dst_apic_id;
118         u_char  dst_apic_int;
119 }      *int_entry_ptr;
120
121 #define INTENTRY_TYPE_INT       0
122 #define INTENTRY_TYPE_NMI       1
123 #define INTENTRY_TYPE_SMI       2
124 #define INTENTRY_TYPE_EXTINT    3
125
126 #define INTENTRY_FLAGS_POLARITY                 0x3
127 #define INTENTRY_FLAGS_POLARITY_CONFORM         0x0
128 #define INTENTRY_FLAGS_POLARITY_ACTIVEHI        0x1
129 #define INTENTRY_FLAGS_POLARITY_ACTIVELO        0x3
130 #define INTENTRY_FLAGS_TRIGGER                  0xc
131 #define INTENTRY_FLAGS_TRIGGER_CONFORM          0x0
132 #define INTENTRY_FLAGS_TRIGGER_EDGE             0x4
133 #define INTENTRY_FLAGS_TRIGGER_LEVEL            0xc
134
135 /* descriptions of MP basetable entries */
136 typedef struct BASETABLE_ENTRY {
137         u_char  type;
138         u_char  length;
139         char    name[16];
140 }       basetable_entry;
141
142 #ifdef _KERNEL
143 int     mptable_pci_probe_table(int bus);
144 int     mptable_pci_route_interrupt(device_t pcib, device_t dev, int pin);
145 #endif
146 #endif /* !__MACHINE_MPTABLE_H__ */