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
|
/* $Id$
*
* This file is subject to the terms and conditions of the GNU General Public
* License. See the file "COPYING" in the main directory of this archive
* for more details.
*
* Copyright (C) 1992 - 1997, 2000-2002 Silicon Graphics, Inc. All rights reserved.
*/
#ifndef _ASM_IA64_SN_DRIVER_H
#define _ASM_IA64_SN_DRIVER_H
#include <linux/devfs_fs_kernel.h>
#include <asm/types.h>
/*
** Interface for device driver handle management.
**
** These functions are mostly for use by the loadable driver code, and
** for use by I/O bus infrastructure code.
*/
typedef struct device_driver_s *device_driver_t;
/* == Driver thread priority support == */
typedef int ilvl_t;
#ifdef __cplusplus
extern "C" {
#endif
struct eframe_s;
struct piomap;
struct dmamap;
typedef __psunsigned_t iobush_t;
/* interrupt function */
typedef void *intr_arg_t;
typedef void intr_func_f(intr_arg_t);
typedef intr_func_f *intr_func_t;
#define INTR_ARG(n) ((intr_arg_t)(__psunsigned_t)(n))
/* system interrupt resource handle -- returned from intr_alloc */
typedef struct intr_s *intr_t;
#define INTR_HANDLE_NONE ((intr_t)0)
/*
* restore interrupt level value, returned from intr_block_level
* for use with intr_unblock_level.
*/
typedef void *rlvl_t;
/*
* A basic, platform-independent description of I/O requirements for
* a device. This structure is usually formed by lboot based on information
* in configuration files. It contains information about PIO, DMA, and
* interrupt requirements for a specific instance of a device.
*
* The pio description is currently unused.
*
* The dma description describes bandwidth characteristics and bandwidth
* allocation requirements. (TBD)
*
* The Interrupt information describes the priority of interrupt, desired
* destination, policy (TBD), whether this is an error interrupt, etc.
* For now, interrupts are targeted to specific CPUs.
*/
typedef struct device_desc_s {
/* pio description (currently none) */
/* dma description */
/* TBD: allocated badwidth requirements */
/* interrupt description */
devfs_handle_t intr_target; /* Hardware locator string */
int intr_policy; /* TBD */
ilvl_t intr_swlevel; /* software level for blocking intr */
char *intr_name; /* name of interrupt, if any */
int flags;
} *device_desc_t;
/* flag values */
#define D_INTR_ISERR 0x1 /* interrupt is for error handling */
#define D_IS_ASSOC 0x2 /* descriptor is associated with a dev */
#define D_INTR_NOTHREAD 0x4 /* Interrupt handler isn't threaded. */
#define INTR_SWLEVEL_NOTHREAD_DEFAULT 0 /* Default
* Interrupt level in case of
* non-threaded interrupt
* handlers
*/
#endif /* _ASM_IA64_SN_DRIVER_H */
|