summaryrefslogtreecommitdiffstats
path: root/include/asm-ia64/acpi-ext.h
blob: 775934cbdfb82f33b3f29ba9e6a54333ab15bb40 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
#ifndef _ASM_IA64_ACPI_EXT_H
#define _ASM_IA64_ACPI_EXT_H

/*
 * Advanced Configuration and Power Infterface
 * Based on 'ACPI Specification 1.0b' Febryary 2, 1999
 * and 'IA-64 Extensions to the ACPI Specification' Rev 0.6
 * 
 * Copyright (C) 1999 VA Linux Systems
 * Copyright (C) 1999 Walt Drummond <drummond@valinux.com>
 * Copyright (C) 2000 Intel Corp.
 * Copyright (C) 2000 J.I. Lee <jung-ik.lee@intel.com>
 *	ACPI 2.0 specification 
 */

#include <linux/types.h>

#pragma	pack(1)
#define ACPI_RSDP_SIG "RSD PTR " /* Trailing space required */
#define ACPI_RSDP_SIG_LEN 8
typedef struct {
	char signature[8];
	u8 checksum;
	char oem_id[6];
	u8 revision;
	u32 rsdt;
	u32 lenth;
	struct acpi_xsdt *xsdt;
	u8 ext_checksum;
	u8 reserved[3];
} acpi20_rsdp_t;

typedef struct {
	char signature[4];
	u32 length;
	u8 revision;
	u8 checksum;
	char oem_id[6];
	char oem_table_id[8];
	u32 oem_revision;
	u32 creator_id;
	u32 creator_revision;
} acpi_desc_table_hdr_t;

#define ACPI_RSDT_SIG "RSDT"
#define ACPI_RSDT_SIG_LEN 4
typedef struct {
	acpi_desc_table_hdr_t header;
	u8 reserved[4];
	u32 entry_ptrs[1];	/* Not really . . . */
} acpi20_rsdt_t;

#define ACPI_XSDT_SIG "XSDT"
#define ACPI_XSDT_SIG_LEN 4
typedef struct acpi_xsdt {
	acpi_desc_table_hdr_t header;
	unsigned long entry_ptrs[1];	/* Not really . . . */
} acpi_xsdt_t;

/* Common structures for ACPI 2.0 and 0.71 */

typedef struct acpi_entry_iosapic {
	u8 type;
	u8 length;
	u8 id;
	u8 reserved;
	u32 irq_base;	/* start of IRQ's this IOSAPIC is responsible for. */
	unsigned long address;	/* Address of this IOSAPIC */
} acpi_entry_iosapic_t;

/* Local SAPIC flags */
#define LSAPIC_ENABLED                (1<<0)
#define LSAPIC_PERFORMANCE_RESTRICTED (1<<1)
#define LSAPIC_PRESENT                (1<<2)

/* Defines legacy IRQ->pin mapping */
typedef struct {
	u8 type;
	u8 length;
	u8 bus;		/* Constant 0 == ISA */
	u8 isa_irq;	/* ISA IRQ # */
	u32 pin;		/* called vector in spec; really IOSAPIC pin number */
	u16 flags;	/* Edge/Level trigger & High/Low active */
} acpi_entry_int_override_t;

#define INT_OVERRIDE_ACTIVE_LOW    0x03
#define INT_OVERRIDE_LEVEL_TRIGGER 0x0d

/* IA64 ext 0.71 */

typedef struct {
	char signature[8];
	u8 checksum;
	char oem_id[6];
	char reserved;		/* Must be 0 */
	struct acpi_rsdt *rsdt;
} acpi_rsdp_t;

typedef struct {
	acpi_desc_table_hdr_t header;
	u8 reserved[4];
	unsigned long entry_ptrs[1];	/* Not really . . . */
} acpi_rsdt_t;

#define ACPI_SAPIC_SIG "SPIC"
#define ACPI_SAPIC_SIG_LEN 4
typedef struct {
	acpi_desc_table_hdr_t header;
	u8 reserved[4];
	unsigned long interrupt_block;
} acpi_sapic_t;

/* SAPIC structure types */
#define ACPI_ENTRY_LOCAL_SAPIC         0
#define ACPI_ENTRY_IO_SAPIC            1
#define ACPI_ENTRY_INT_SRC_OVERRIDE    2
#define ACPI_ENTRY_PLATFORM_INT_SOURCE 3	/* Unimplemented */

typedef struct acpi_entry_lsapic {
	u8 type;
	u8 length;
	u16 acpi_processor_id;
	u16 flags;
	u8 id;
	u8 eid;
} acpi_entry_lsapic_t;

typedef struct {
	u8 type;
	u8 length;
	u16 flags;
	u8 int_type;
	u8 id;
	u8 eid;
	u8 iosapic_vector;
	u8 reserved[4];
	u32 global_vector;
} acpi_entry_platform_src_t;

/* ACPI 2.0 with 1.3 errata specific structures */

#define ACPI_MADT_SIG "APIC"
#define ACPI_MADT_SIG_LEN 4
typedef struct {
	acpi_desc_table_hdr_t header;
	u32 lapic_address;
	u32 flags;
} acpi_madt_t;

/* acpi 2.0 MADT structure types */
#define ACPI20_ENTRY_LOCAL_APIC                 0
#define ACPI20_ENTRY_IO_APIC                    1
#define ACPI20_ENTRY_INT_SRC_OVERRIDE           2
#define ACPI20_ENTRY_NMI_SOURCE                 3
#define ACPI20_ENTRY_LOCAL_APIC_NMI             4
#define ACPI20_ENTRY_LOCAL_APIC_ADDR_OVERRIDE   5
#define ACPI20_ENTRY_IO_SAPIC                   6
#define ACPI20_ENTRY_LOCAL_SAPIC                7
#define ACPI20_ENTRY_PLATFORM_INT_SOURCE        8

typedef struct acpi20_entry_lsapic {
	u8 type;
	u8 length;
	u8 acpi_processor_id;
	u8 id;
	u8 eid;
	u8 reserved[3];
	u32 flags;
} acpi20_entry_lsapic_t;

typedef struct acpi20_entry_lapic_addr_override {
	u8 type;
	u8 length;
	u8 reserved[2];
	unsigned long lapic_address;
} acpi20_entry_lapic_addr_override_t;

typedef struct {
	u8 type;
	u8 length;
	u16 flags;
	u8 int_type;
	u8 id;
	u8 eid;
	u8 iosapic_vector;
	u32 global_vector;
} acpi20_entry_platform_src_t;

extern int acpi20_parse(acpi20_rsdp_t *);
extern int acpi_parse(acpi_rsdp_t *);
extern const char *acpi_get_sysname (void);

extern void (*acpi_idle) (void);	/* power-management idle function, if any */
#pragma	pack()
#endif /* _ASM_IA64_ACPI_EXT_H */