17a76381d6b789db0f1d567fd5451e9b2746facd
[linux-flexiantxendom0-3.2.10.git] / include / asm-ia64 / sn / driver.h
1 /* $Id$
2  *
3  * This file is subject to the terms and conditions of the GNU General Public
4  * License.  See the file "COPYING" in the main directory of this archive
5  * for more details.
6  *
7  * Copyright (C) 1992 - 1997, 2000-2002 Silicon Graphics, Inc. All rights reserved.
8  */
9 #ifndef _ASM_IA64_SN_DRIVER_H
10 #define _ASM_IA64_SN_DRIVER_H
11
12 #include <linux/devfs_fs_kernel.h>
13 #include <asm/types.h>
14
15 /*
16 ** Interface for device driver handle management.
17 **
18 ** These functions are mostly for use by the loadable driver code, and
19 ** for use by I/O bus infrastructure code.
20 */
21
22 typedef struct device_driver_s *device_driver_t;
23
24 /* == Driver thread priority support == */
25 typedef int ilvl_t;
26
27 #ifdef __cplusplus
28 extern "C" {
29 #endif
30
31 struct eframe_s;
32 struct piomap;
33 struct dmamap;
34
35 typedef __psunsigned_t iobush_t;
36
37 /* interrupt function */
38 typedef void           *intr_arg_t;
39 typedef void            intr_func_f(intr_arg_t);
40 typedef intr_func_f    *intr_func_t;
41
42 #define INTR_ARG(n)     ((intr_arg_t)(__psunsigned_t)(n))
43
44 /* system interrupt resource handle -- returned from intr_alloc */
45 typedef struct intr_s *intr_t;
46 #define INTR_HANDLE_NONE ((intr_t)0)
47
48 /*
49  * restore interrupt level value, returned from intr_block_level
50  * for use with intr_unblock_level.
51  */
52 typedef void *rlvl_t;
53
54
55 /* 
56  * A basic, platform-independent description of I/O requirements for
57  * a device. This structure is usually formed by lboot based on information 
58  * in configuration files.  It contains information about PIO, DMA, and
59  * interrupt requirements for a specific instance of a device.
60  *
61  * The pio description is currently unused.
62  *
63  * The dma description describes bandwidth characteristics and bandwidth
64  * allocation requirements. (TBD)
65  *
66  * The Interrupt information describes the priority of interrupt, desired 
67  * destination, policy (TBD), whether this is an error interrupt, etc.  
68  * For now, interrupts are targeted to specific CPUs.
69  */
70
71 typedef struct device_desc_s {
72         /* pio description (currently none) */
73
74         /* dma description */
75         /* TBD: allocated badwidth requirements */
76
77         /* interrupt description */
78         devfs_handle_t  intr_target;    /* Hardware locator string */
79         int             intr_policy;    /* TBD */
80         ilvl_t          intr_swlevel;   /* software level for blocking intr */
81         char            *intr_name;     /* name of interrupt, if any */
82
83         int             flags;
84 } *device_desc_t;
85
86 /* flag values */
87 #define D_INTR_ISERR    0x1             /* interrupt is for error handling */
88 #define D_IS_ASSOC      0x2             /* descriptor is associated with a dev */
89 #define D_INTR_NOTHREAD 0x4             /* Interrupt handler isn't threaded. */
90
91 #define INTR_SWLEVEL_NOTHREAD_DEFAULT   0       /* Default
92                                                  * Interrupt level in case of
93                                                  * non-threaded interrupt 
94                                                  * handlers
95                                                  */
96 #endif /* _ASM_IA64_SN_DRIVER_H */