⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iobus.h

📁 ARM S3C2410 linux2.4 内核源码
💻 H
字号:
/* $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 Silicon Graphics, Inc. * Copyright (C) 2000 by Colin Ngam */#ifndef _ASM_SN_IOBUS_H#define _ASM_SN_IOBUS_H#ifdef __cplusplusextern "C" {#endifstruct eframe_s;struct piomap;struct dmamap;/* for ilvl_t interrupt level, for use with intr_block_level.  Can't * typedef twice without causing warnings, and some users of this header * file do not already include driver.h, but expect ilvl_t to be defined, * while others include both, leading to the warning ... */#include <asm/types.h>#include <asm/sn/driver.h>typedef __psunsigned_t iobush_t;#if __KERNEL__/* adapter handle */typedef devfs_handle_t adap_t;#endif/* 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						 *//*  * Drivers use these interfaces to manage device descriptors. * * To examine defaults: *	desc = device_desc_default_get(dev); *	device_desc_*_get(desc); * * To modify defaults: *	desc = device_desc_default_get(dev); *	device_desc_*_set(desc); * * To eliminate defaults: *	device_desc_default_set(dev, NULL); * * To override defaults: *	desc = device_desc_dup(dev); *	device_desc_*_set(desc,...); *	use device_desc in calls *	device_desc_free(desc); * * Software must not set or eliminate default device descriptors for a device while * concurrently get'ing, dup'ing or using them.  Default device descriptors can be  * changed only for a device that is quiescent.  In general, device drivers have no * need to permanently change defaults anyway -- they just override defaults, when * necessary. */extern device_desc_t	device_desc_dup(devfs_handle_t dev);extern void		device_desc_free(device_desc_t device_desc);extern device_desc_t	device_desc_default_get(devfs_handle_t dev);extern void		device_desc_default_set(devfs_handle_t dev, device_desc_t device_desc);extern devfs_handle_t	device_desc_intr_target_get(device_desc_t device_desc);extern int		device_desc_intr_policy_get(device_desc_t device_desc);extern ilvl_t		device_desc_intr_swlevel_get(device_desc_t device_desc);extern char *		device_desc_intr_name_get(device_desc_t device_desc);extern int		device_desc_flags_get(device_desc_t device_desc);extern void		device_desc_intr_target_set(device_desc_t device_desc, devfs_handle_t target);extern void		device_desc_intr_policy_set(device_desc_t device_desc, int policy);extern void		device_desc_intr_swlevel_set(device_desc_t device_desc, ilvl_t swlevel);extern void		device_desc_intr_name_set(device_desc_t device_desc, char *name);extern void		device_desc_flags_set(device_desc_t device_desc, int flags);/* IO state */#ifdef COMMENT#define IO_STATE_EMPTY			0x01	/* non-existent */#define IO_STATE_INITIALIZING		0x02	/* being initialized */#define IO_STATE_ATTACHING   		0x04    /* becoming active */#define IO_STATE_ACTIVE      		0x08    /* active */#define IO_STATE_DETACHING   		0x10    /* becoming inactive */#define IO_STATE_INACTIVE    		0x20    /* not in use */#define IO_STATE_ERROR			0x40    /* problems */#define IO_STATE_BAD_HARDWARE		0x80	/* broken hardware */#endifstruct edt;/* return codes */#define RC_OK				0	#define RC_ERROR			1/* bus configuration management op code */#define IOBUS_CONFIG_ATTACH		0	/* vary on */#define IOBUS_CONFIG_DETACH		1	/* vary off */#define IOBUS_CONFIG_RECOVER		2	/* clear error then vary on *//* get low-level PIO handle */extern int pio_geth(struct piomap*, int bus, int bus_id, int subtype, 	iopaddr_t addr, int size);	/* get low-level DMA handle */extern int dma_geth(struct dmamap*, int bus_type, int bus_id, int dma_type, 	int npages, int page_size, int flags);	#ifdef __cplusplus}#endif/* * Macros for page number and page offsets, using ps as page size */#define x_pnum(addr, ps) ((__psunsigned_t)(addr) / (__psunsigned_t)(ps))#define x_poff(addr, ps) ((__psunsigned_t)(addr) & ((__psunsigned_t)(ps) - 1))#endif /* _ASM_SN_IOBUS_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -