1/* $Id: driver.h,v 1.1.1.1 2008/10/15 03:27:17 james26_jang Exp $
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
22typedef struct device_driver_s *device_driver_t;
23
24/* == Driver thread priority support == */
25typedef int ilvl_t;
26
27#ifdef __cplusplus
28extern "C" {
29#endif
30
31struct eframe_s;
32struct piomap;
33struct dmamap;
34
35typedef __psunsigned_t iobush_t;
36
37/* interrupt function */
38typedef void	       *intr_arg_t;
39typedef void		intr_func_f(intr_arg_t);
40typedef 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 */
45typedef 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 */
52typedef 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
71typedef 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 */
97