Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
ia64
include
asm
machvec.h
Go to the documentation of this file.
1
/*
2
* Machine vector for IA-64.
3
*
4
* Copyright (C) 1999 Silicon Graphics, Inc.
5
* Copyright (C) Srinivasa Thirumalachar <
[email protected]
>
6
* Copyright (C) Vijay Chander <
[email protected]
>
7
* Copyright (C) 1999-2001, 2003-2004 Hewlett-Packard Co.
8
* David Mosberger-Tang <
[email protected]
>
9
*/
10
#ifndef _ASM_IA64_MACHVEC_H
11
#define _ASM_IA64_MACHVEC_H
12
13
#include <linux/types.h>
14
15
/* forward declarations: */
16
struct
device
;
17
struct
pt_regs
;
18
struct
scatterlist
;
19
struct
page
;
20
struct
mm_struct
;
21
struct
pci_bus
;
22
struct
task_struct
;
23
struct
pci_dev
;
24
struct
msi_desc
;
25
struct
dma_attrs
;
26
27
typedef
void
ia64_mv_setup_t
(
char
**);
28
typedef
void
ia64_mv_cpu_init_t
(
void
);
29
typedef
void
ia64_mv_irq_init_t
(
void
);
30
typedef
void
ia64_mv_send_ipi_t
(
int
,
int
,
int
,
int
);
31
typedef
void
ia64_mv_timer_interrupt_t
(
int
,
void
*);
32
typedef
void
ia64_mv_global_tlb_purge_t
(
struct
mm_struct
*,
unsigned
long
,
unsigned
long
,
unsigned
long
);
33
typedef
void
ia64_mv_tlb_migrate_finish_t
(
struct
mm_struct
*);
34
typedef
u8
ia64_mv_irq_to_vector
(
int
);
35
typedef
unsigned
int
ia64_mv_local_vector_to_irq
(
u8
);
36
typedef
char
*
ia64_mv_pci_get_legacy_mem_t
(
struct
pci_bus
*);
37
typedef
int
ia64_mv_pci_legacy_read_t
(
struct
pci_bus
*,
u16
port
,
u32
*
val
,
38
u8
size
);
39
typedef
int
ia64_mv_pci_legacy_write_t
(
struct
pci_bus
*,
u16
port
,
u32
val
,
40
u8
size
);
41
typedef
void
ia64_mv_migrate_t
(
struct
task_struct
*
task
);
42
typedef
void
ia64_mv_pci_fixup_bus_t
(
struct
pci_bus
*);
43
typedef
void
ia64_mv_kernel_launch_event_t
(
void
);
44
45
/* DMA-mapping interface: */
46
typedef
void
ia64_mv_dma_init
(
void
);
47
typedef
u64
ia64_mv_dma_get_required_mask
(
struct
device
*);
48
typedef
struct
dma_map_ops
*
ia64_mv_dma_get_ops
(
struct
device
*);
49
50
/*
51
* WARNING: The legacy I/O space is _architected_. Platforms are
52
* expected to follow this architected model (see Section 10.7 in the
53
* IA-64 Architecture Software Developer's Manual). Unfortunately,
54
* some broken machines do not follow that model, which is why we have
55
* to make the inX/outX operations part of the machine vector.
56
* Platform designers should follow the architected model whenever
57
* possible.
58
*/
59
typedef
unsigned
int
ia64_mv_inb_t
(
unsigned
long
);
60
typedef
unsigned
int
ia64_mv_inw_t
(
unsigned
long
);
61
typedef
unsigned
int
ia64_mv_inl_t
(
unsigned
long
);
62
typedef
void
ia64_mv_outb_t
(
unsigned
char
,
unsigned
long
);
63
typedef
void
ia64_mv_outw_t
(
unsigned
short
,
unsigned
long
);
64
typedef
void
ia64_mv_outl_t
(
unsigned
int
,
unsigned
long
);
65
typedef
void
ia64_mv_mmiowb_t
(
void
);
66
typedef
unsigned
char
ia64_mv_readb_t
(
const
volatile
void
__iomem
*);
67
typedef
unsigned
short
ia64_mv_readw_t
(
const
volatile
void
__iomem
*);
68
typedef
unsigned
int
ia64_mv_readl_t
(
const
volatile
void
__iomem
*);
69
typedef
unsigned
long
ia64_mv_readq_t
(
const
volatile
void
__iomem
*);
70
typedef
unsigned
char
ia64_mv_readb_relaxed_t
(
const
volatile
void
__iomem
*);
71
typedef
unsigned
short
ia64_mv_readw_relaxed_t
(
const
volatile
void
__iomem
*);
72
typedef
unsigned
int
ia64_mv_readl_relaxed_t
(
const
volatile
void
__iomem
*);
73
typedef
unsigned
long
ia64_mv_readq_relaxed_t
(
const
volatile
void
__iomem
*);
74
75
typedef
int
ia64_mv_setup_msi_irq_t
(
struct
pci_dev
*pdev,
struct
msi_desc
*);
76
typedef
void
ia64_mv_teardown_msi_irq_t
(
unsigned
int
irq);
77
78
static
inline
void
79
machvec_noop (
void
)
80
{
81
}
82
83
static
inline
void
84
machvec_noop_mm (
struct
mm_struct
*mm)
85
{
86
}
87
88
static
inline
void
89
machvec_noop_task (
struct
task_struct
*
task
)
90
{
91
}
92
93
static
inline
void
94
machvec_noop_bus (
struct
pci_bus
*
bus
)
95
{
96
}
97
98
extern
void
machvec_setup
(
char
**);
99
extern
void
machvec_timer_interrupt
(
int
,
void
*);
100
extern
void
machvec_tlb_migrate_finish
(
struct
mm_struct
*);
101
102
# if defined (CONFIG_IA64_HP_SIM)
103
# include <
asm/machvec_hpsim.h
>
104
# elif defined (CONFIG_IA64_DIG)
105
# include <
asm/machvec_dig.h
>
106
# elif defined(CONFIG_IA64_DIG_VTD)
107
# include <
asm/machvec_dig_vtd.h
>
108
# elif defined (CONFIG_IA64_HP_ZX1)
109
# include <
asm/machvec_hpzx1.h
>
110
# elif defined (CONFIG_IA64_HP_ZX1_SWIOTLB)
111
# include <
asm/machvec_hpzx1_swiotlb.h
>
112
# elif defined (CONFIG_IA64_SGI_SN2)
113
# include <
asm/machvec_sn2.h
>
114
# elif defined (CONFIG_IA64_SGI_UV)
115
# include <
asm/machvec_uv.h
>
116
# elif defined (CONFIG_IA64_XEN_GUEST)
117
# include <
asm/machvec_xen.h
>
118
# elif defined (CONFIG_IA64_GENERIC)
119
120
# ifdef MACHVEC_PLATFORM_HEADER
121
# include MACHVEC_PLATFORM_HEADER
122
# else
123
# define ia64_platform_name ia64_mv.name
124
# define platform_setup ia64_mv.setup
125
# define platform_cpu_init ia64_mv.cpu_init
126
# define platform_irq_init ia64_mv.irq_init
127
# define platform_send_ipi ia64_mv.send_ipi
128
# define platform_timer_interrupt ia64_mv.timer_interrupt
129
# define platform_global_tlb_purge ia64_mv.global_tlb_purge
130
# define platform_tlb_migrate_finish ia64_mv.tlb_migrate_finish
131
# define platform_dma_init ia64_mv.dma_init
132
# define platform_dma_get_required_mask ia64_mv.dma_get_required_mask
133
# define platform_dma_get_ops ia64_mv.dma_get_ops
134
# define platform_irq_to_vector ia64_mv.irq_to_vector
135
# define platform_local_vector_to_irq ia64_mv.local_vector_to_irq
136
# define platform_pci_get_legacy_mem ia64_mv.pci_get_legacy_mem
137
# define platform_pci_legacy_read ia64_mv.pci_legacy_read
138
# define platform_pci_legacy_write ia64_mv.pci_legacy_write
139
# define platform_inb ia64_mv.inb
140
# define platform_inw ia64_mv.inw
141
# define platform_inl ia64_mv.inl
142
# define platform_outb ia64_mv.outb
143
# define platform_outw ia64_mv.outw
144
# define platform_outl ia64_mv.outl
145
# define platform_mmiowb ia64_mv.mmiowb
146
# define platform_readb ia64_mv.readb
147
# define platform_readw ia64_mv.readw
148
# define platform_readl ia64_mv.readl
149
# define platform_readq ia64_mv.readq
150
# define platform_readb_relaxed ia64_mv.readb_relaxed
151
# define platform_readw_relaxed ia64_mv.readw_relaxed
152
# define platform_readl_relaxed ia64_mv.readl_relaxed
153
# define platform_readq_relaxed ia64_mv.readq_relaxed
154
# define platform_migrate ia64_mv.migrate
155
# define platform_setup_msi_irq ia64_mv.setup_msi_irq
156
# define platform_teardown_msi_irq ia64_mv.teardown_msi_irq
157
# define platform_pci_fixup_bus ia64_mv.pci_fixup_bus
158
# define platform_kernel_launch_event ia64_mv.kernel_launch_event
159
# endif
160
161
/* __attribute__((__aligned__(16))) is required to make size of the
162
* structure multiple of 16 bytes.
163
* This will fillup the holes created because of section 3.3.1 in
164
* Software Conventions guide.
165
*/
166
struct
ia64_machine_vector {
167
const
char
*
name
;
168
ia64_mv_setup_t
*
setup
;
169
ia64_mv_cpu_init_t
*
cpu_init
;
170
ia64_mv_irq_init_t
*irq_init;
171
ia64_mv_send_ipi_t
*
send_ipi
;
172
ia64_mv_timer_interrupt_t
*
timer_interrupt
;
173
ia64_mv_global_tlb_purge_t
*global_tlb_purge;
174
ia64_mv_tlb_migrate_finish_t
*
tlb_migrate_finish
;
175
ia64_mv_dma_init
*
dma_init
;
176
ia64_mv_dma_get_required_mask
*
dma_get_required_mask
;
177
ia64_mv_dma_get_ops
*
dma_get_ops
;
178
ia64_mv_irq_to_vector
*irq_to_vector;
179
ia64_mv_local_vector_to_irq
*local_vector_to_irq;
180
ia64_mv_pci_get_legacy_mem_t
*
pci_get_legacy_mem
;
181
ia64_mv_pci_legacy_read_t
*
pci_legacy_read
;
182
ia64_mv_pci_legacy_write_t
*
pci_legacy_write
;
183
ia64_mv_inb_t
*
inb
;
184
ia64_mv_inw_t
*
inw
;
185
ia64_mv_inl_t
*
inl
;
186
ia64_mv_outb_t
*
outb
;
187
ia64_mv_outw_t
*
outw
;
188
ia64_mv_outl_t
*
outl
;
189
ia64_mv_mmiowb_t
*
mmiowb
;
190
ia64_mv_readb_t
*
readb
;
191
ia64_mv_readw_t
*
readw
;
192
ia64_mv_readl_t
*
readl
;
193
ia64_mv_readq_t
*
readq
;
194
ia64_mv_readb_relaxed_t
*
readb_relaxed
;
195
ia64_mv_readw_relaxed_t
*
readw_relaxed
;
196
ia64_mv_readl_relaxed_t
*
readl_relaxed
;
197
ia64_mv_readq_relaxed_t
*
readq_relaxed
;
198
ia64_mv_migrate_t
*migrate;
199
ia64_mv_setup_msi_irq_t
*setup_msi_irq;
200
ia64_mv_teardown_msi_irq_t
*teardown_msi_irq;
201
ia64_mv_pci_fixup_bus_t
*pci_fixup_bus;
202
ia64_mv_kernel_launch_event_t
*kernel_launch_event;
203
}
__attribute__
((__aligned__(16)));
/* align attrib? see above comment */
204
205
#define MACHVEC_INIT(name) \
206
{ \
207
#name, \
208
platform_setup, \
209
platform_cpu_init, \
210
platform_irq_init, \
211
platform_send_ipi, \
212
platform_timer_interrupt, \
213
platform_global_tlb_purge, \
214
platform_tlb_migrate_finish, \
215
platform_dma_init, \
216
platform_dma_get_required_mask, \
217
platform_dma_get_ops, \
218
platform_irq_to_vector, \
219
platform_local_vector_to_irq, \
220
platform_pci_get_legacy_mem, \
221
platform_pci_legacy_read, \
222
platform_pci_legacy_write, \
223
platform_inb, \
224
platform_inw, \
225
platform_inl, \
226
platform_outb, \
227
platform_outw, \
228
platform_outl, \
229
platform_mmiowb, \
230
platform_readb, \
231
platform_readw, \
232
platform_readl, \
233
platform_readq, \
234
platform_readb_relaxed, \
235
platform_readw_relaxed, \
236
platform_readl_relaxed, \
237
platform_readq_relaxed, \
238
platform_migrate, \
239
platform_setup_msi_irq, \
240
platform_teardown_msi_irq, \
241
platform_pci_fixup_bus, \
242
platform_kernel_launch_event \
243
}
244
245
extern
struct
ia64_machine_vector
ia64_mv
;
246
extern
void
machvec_init
(
const
char
*
name
);
247
extern
void
machvec_init_from_cmdline(
const
char
*
cmdline
);
248
249
# else
250
# error Unknown configuration. Update arch/ia64/include/asm/machvec.h.
251
# endif
/* CONFIG_IA64_GENERIC */
252
253
extern
void
swiotlb_dma_init
(
void
);
254
extern
struct
dma_map_ops
*
dma_get_ops
(
struct
device
*);
255
256
/*
257
* Define default versions so we can extend machvec for new platforms without having
258
* to update the machvec files for all existing platforms.
259
*/
260
#ifndef platform_setup
261
# define platform_setup machvec_setup
262
#endif
263
#ifndef platform_cpu_init
264
# define platform_cpu_init machvec_noop
265
#endif
266
#ifndef platform_irq_init
267
# define platform_irq_init machvec_noop
268
#endif
269
270
#ifndef platform_send_ipi
271
# define platform_send_ipi ia64_send_ipi
/* default to architected version */
272
#endif
273
#ifndef platform_timer_interrupt
274
# define platform_timer_interrupt machvec_timer_interrupt
275
#endif
276
#ifndef platform_global_tlb_purge
277
# define platform_global_tlb_purge ia64_global_tlb_purge
/* default to architected version */
278
#endif
279
#ifndef platform_tlb_migrate_finish
280
# define platform_tlb_migrate_finish machvec_noop_mm
281
#endif
282
#ifndef platform_kernel_launch_event
283
# define platform_kernel_launch_event machvec_noop
284
#endif
285
#ifndef platform_dma_init
286
# define platform_dma_init swiotlb_dma_init
287
#endif
288
#ifndef platform_dma_get_ops
289
# define platform_dma_get_ops dma_get_ops
290
#endif
291
#ifndef platform_dma_get_required_mask
292
# define platform_dma_get_required_mask ia64_dma_get_required_mask
293
#endif
294
#ifndef platform_irq_to_vector
295
# define platform_irq_to_vector __ia64_irq_to_vector
296
#endif
297
#ifndef platform_local_vector_to_irq
298
# define platform_local_vector_to_irq __ia64_local_vector_to_irq
299
#endif
300
#ifndef platform_pci_get_legacy_mem
301
# define platform_pci_get_legacy_mem ia64_pci_get_legacy_mem
302
#endif
303
#ifndef platform_pci_legacy_read
304
# define platform_pci_legacy_read ia64_pci_legacy_read
305
extern
int
ia64_pci_legacy_read
(
struct
pci_bus
*
bus
,
u16
port
,
u32
*
val
,
u8
size
);
306
#endif
307
#ifndef platform_pci_legacy_write
308
# define platform_pci_legacy_write ia64_pci_legacy_write
309
extern
int
ia64_pci_legacy_write
(
struct
pci_bus
*
bus
,
u16
port
,
u32
val
,
u8
size
);
310
#endif
311
#ifndef platform_inb
312
# define platform_inb __ia64_inb
313
#endif
314
#ifndef platform_inw
315
# define platform_inw __ia64_inw
316
#endif
317
#ifndef platform_inl
318
# define platform_inl __ia64_inl
319
#endif
320
#ifndef platform_outb
321
# define platform_outb __ia64_outb
322
#endif
323
#ifndef platform_outw
324
# define platform_outw __ia64_outw
325
#endif
326
#ifndef platform_outl
327
# define platform_outl __ia64_outl
328
#endif
329
#ifndef platform_mmiowb
330
# define platform_mmiowb __ia64_mmiowb
331
#endif
332
#ifndef platform_readb
333
# define platform_readb __ia64_readb
334
#endif
335
#ifndef platform_readw
336
# define platform_readw __ia64_readw
337
#endif
338
#ifndef platform_readl
339
# define platform_readl __ia64_readl
340
#endif
341
#ifndef platform_readq
342
# define platform_readq __ia64_readq
343
#endif
344
#ifndef platform_readb_relaxed
345
# define platform_readb_relaxed __ia64_readb_relaxed
346
#endif
347
#ifndef platform_readw_relaxed
348
# define platform_readw_relaxed __ia64_readw_relaxed
349
#endif
350
#ifndef platform_readl_relaxed
351
# define platform_readl_relaxed __ia64_readl_relaxed
352
#endif
353
#ifndef platform_readq_relaxed
354
# define platform_readq_relaxed __ia64_readq_relaxed
355
#endif
356
#ifndef platform_migrate
357
# define platform_migrate machvec_noop_task
358
#endif
359
#ifndef platform_setup_msi_irq
360
# define platform_setup_msi_irq ((ia64_mv_setup_msi_irq_t*)NULL)
361
#endif
362
#ifndef platform_teardown_msi_irq
363
# define platform_teardown_msi_irq ((ia64_mv_teardown_msi_irq_t*)NULL)
364
#endif
365
#ifndef platform_pci_fixup_bus
366
# define platform_pci_fixup_bus machvec_noop_bus
367
#endif
368
369
#endif
/* _ASM_IA64_MACHVEC_H */
Generated on Thu Jan 10 2013 12:49:56 for Linux Kernel by
1.8.2