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

📄 xtalk.h

📁 linux-2.4.29操作系统的源码
💻 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-2003 Silicon Graphics, Inc.  All Rights Reserved. */#ifndef _ASM_SN_XTALK_XTALK_H#define _ASM_SN_XTALK_XTALK_H#include <linux/config.h>#ifdef __KERNEL__#include "asm/sn/sgi.h"#endif/* * xtalk.h -- platform-independent crosstalk interface *//* * User-level device driver visible types */typedef char            xwidgetnum_t;	/* xtalk widget number  (0..15) */#define XWIDGET_NONE		(-1)typedef int xwidget_part_num_t;	/* xtalk widget part number */#define XWIDGET_PART_NUM_NONE	(-1)typedef int             xwidget_rev_num_t;	/* xtalk widget revision number */#define XWIDGET_REV_NUM_NONE	(-1)typedef int xwidget_mfg_num_t;	/* xtalk widget manufacturing ID */#define XWIDGET_MFG_NUM_NONE	(-1)typedef struct xtalk_piomap_s *xtalk_piomap_t;/* It is often convenient to fold the XIO target port * number into the XIO address. */#define	XIO_NOWHERE	(0xFFFFFFFFFFFFFFFFull)#define	XIO_ADDR_BITS	(0x0000FFFFFFFFFFFFull)#define	XIO_PORT_BITS	(0xF000000000000000ull)#define	XIO_PORT_SHIFT	(60)#define	XIO_PACKED(x)	(((x)&XIO_PORT_BITS) != 0)#define	XIO_ADDR(x)	((x)&XIO_ADDR_BITS)#define	XIO_PORT(x)	((xwidgetnum_t)(((x)&XIO_PORT_BITS) >> XIO_PORT_SHIFT))#define	XIO_PACK(p,o)	((((uint64_t)(p))<<XIO_PORT_SHIFT) | ((o)&XIO_ADDR_BITS))/* * Kernel/driver only definitions */#if __KERNEL__#include <asm/types.h>#include <asm/sn/types.h>#include <asm/sn/alenlist.h>#include <asm/sn/ioerror.h>#include <asm/sn/driver.h>#include <asm/sn/dmamap.h>struct xwidget_hwid_s;/* *    Acceptable flag bits for xtalk service calls * * XTALK_FIXED: require that mappings be established *	using fixed sharable resources; address *	translation results will be permanently *	available. (PIOMAP_FIXED and DMAMAP_FIXED are *	the same numeric value and are acceptable). * XTALK_NOSLEEP: if any part of the operation would *	sleep waiting for resoruces, return an error *	instead. (PIOMAP_NOSLEEP and DMAMAP_NOSLEEP are *	the same numeric value and are acceptable). * XTALK_INPLACE: when operating on alenlist structures, *	reuse the source alenlist rather than creating a *	new one. (PIOMAP_INPLACE and DMAMAP_INPLACE are *	the same numeric value and are acceptable). */#define	XTALK_FIXED		DMAMAP_FIXED#define	XTALK_NOSLEEP		DMAMAP_NOSLEEP#define	XTALK_INPLACE		DMAMAP_INPLACE/* PIO MANAGEMENT */typedef xtalk_piomap_txtalk_piomap_alloc_f    (vertex_hdl_t dev,	/* set up mapping for this device */			 device_desc_t dev_desc,	/* device descriptor */			 iopaddr_t xtalk_addr,	/* map for this xtalk_addr range */			 size_t byte_count,			 size_t byte_count_max,		/* maximum size of a mapping */			 unsigned flags);	/* defined in sys/pio.h */typedef voidxtalk_piomap_free_f     (xtalk_piomap_t xtalk_piomap);typedef caddr_txtalk_piomap_addr_f     (xtalk_piomap_t xtalk_piomap,	/* mapping resources */			 iopaddr_t xtalk_addr,	/* map for this xtalk address */			 size_t byte_count);	/* map this many bytes */typedef voidxtalk_piomap_done_f     (xtalk_piomap_t xtalk_piomap);typedef caddr_txtalk_piotrans_addr_f   (vertex_hdl_t dev,	/* translate for this device */			 device_desc_t dev_desc,	/* device descriptor */			 iopaddr_t xtalk_addr,	/* Crosstalk address */			 size_t byte_count,	/* map this many bytes */			 unsigned flags);	/* (currently unused) */extern caddr_txtalk_pio_addr		(vertex_hdl_t dev,	/* translate for this device */			 device_desc_t dev_desc,	/* device descriptor */			 iopaddr_t xtalk_addr,	/* Crosstalk address */			 size_t byte_count,	/* map this many bytes */			 xtalk_piomap_t *xtalk_piomapp,	/* RETURNS mapping resources */			 unsigned flags);	/* (currently unused) *//* DMA MANAGEMENT */typedef struct xtalk_dmamap_s *xtalk_dmamap_t;typedef xtalk_dmamap_txtalk_dmamap_alloc_f    (vertex_hdl_t dev,	/* set up mappings for this device */			 device_desc_t dev_desc,	/* device descriptor */			 size_t byte_count_max,		/* max size of a mapping */			 unsigned flags);	/* defined in dma.h */typedef voidxtalk_dmamap_free_f     (xtalk_dmamap_t dmamap);typedef iopaddr_txtalk_dmamap_addr_f     (xtalk_dmamap_t dmamap,		/* use these mapping resources */			 paddr_t paddr,		/* map for this address */			 size_t byte_count);	/* map this many bytes */typedef alenlist_txtalk_dmamap_list_f     (xtalk_dmamap_t dmamap,		/* use these mapping resources */			 alenlist_t alenlist,	/* map this address/length list */			 unsigned flags);typedef voidxtalk_dmamap_done_f     (xtalk_dmamap_t dmamap);typedef iopaddr_txtalk_dmatrans_addr_f   (vertex_hdl_t dev,	/* translate for this device */			 device_desc_t dev_desc,	/* device descriptor */			 paddr_t paddr,		/* system physical address */			 size_t byte_count,	/* length */			 unsigned flags);typedef alenlist_txtalk_dmatrans_list_f   (vertex_hdl_t dev,	/* translate for this device */			 device_desc_t dev_desc,	/* device descriptor */			 alenlist_t palenlist,	/* system address/length list */			 unsigned flags);typedef voidxtalk_dmamap_drain_f	(xtalk_dmamap_t map);	/* drain this map's channel */typedef voidxtalk_dmaaddr_drain_f	(vertex_hdl_t vhdl,	/* drain channel from this device */			 paddr_t addr,		/* to this physical address */			 size_t bytes);		/* for this many bytes */typedef voidxtalk_dmalist_drain_f	(vertex_hdl_t vhdl,	/* drain channel from this device */			 alenlist_t list);	/* for this set of physical blocks *//* INTERRUPT MANAGEMENT *//* * A xtalk interrupt resource handle.  When resources are allocated * in order to satisfy a xtalk_intr_alloc request, a xtalk_intr handle * is returned.  xtalk_intr_connect associates a software handler with * these system resources. */typedef struct xtalk_intr_s *xtalk_intr_t;/* * When a crosstalk device connects an interrupt, it passes in a function * that knows how to set its xtalk interrupt register appropriately.  The * low-level interrupt code may invoke this function later in order to * migrate an interrupt transparently to the device driver(s) that use this * interrupt. * * The argument passed to this function contains enough information for a * crosstalk device to (re-)target an interrupt.  A function of this type * must be supplied by every crosstalk driver. */typedef intxtalk_intr_setfunc_f    (xtalk_intr_t intr_hdl);	/* interrupt handle */typedef xtalk_intr_txtalk_intr_alloc_f      (vertex_hdl_t dev,	/* which crosstalk device */			 device_desc_t dev_desc,	/* device descriptor */			 vertex_hdl_t owner_dev);	/* owner of this intr */typedef voidxtalk_intr_free_f       (xtalk_intr_t intr_hdl);typedef intxtalk_intr_connect_f    (xtalk_intr_t intr_hdl,		/* xtalk intr resource handle */			intr_func_t intr_func,         /* xtalk intr handler */			void *intr_arg,	/* arg to intr handler */			xtalk_intr_setfunc_f *setfunc,		/* func to set intr hw */			void *setfunc_arg);	/* arg to setfunc */typedef voidxtalk_intr_disconnect_f (xtalk_intr_t intr_hdl);typedef vertex_hdl_txtalk_intr_cpu_get_f    (xtalk_intr_t intr_hdl);	/* xtalk intr resource handle *//* CONFIGURATION MANAGEMENT */typedef voidxtalk_provider_startup_f (vertex_hdl_t xtalk_provider);typedef voidxtalk_provider_shutdown_f (vertex_hdl_t xtalk_provider);typedef voidxtalk_widgetdev_enable_f (vertex_hdl_t, int);typedef voidxtalk_widgetdev_shutdown_f (vertex_hdl_t, int);typedef intxtalk_dma_enabled_f (vertex_hdl_t);/* Error Management */typedef intxtalk_error_devenable_f (vertex_hdl_t xconn_vhdl,			 int devnum,			 int error_code);/* Early Action Support */typedef caddr_txtalk_early_piotrans_addr_f (xwidget_part_num_t part_num,			     xwidget_mfg_num_t mfg_num,			     int which,			     iopaddr_t xtalk_addr,			     size_t byte_count,			     unsigned flags);/* * Adapters that provide a crosstalk interface adhere to this software interface. */typedef struct xtalk_provider_s {    /* PIO MANAGEMENT */    xtalk_piomap_alloc_f   *piomap_alloc;    xtalk_piomap_free_f    *piomap_free;    xtalk_piomap_addr_f    *piomap_addr;    xtalk_piomap_done_f    *piomap_done;    xtalk_piotrans_addr_f  *piotrans_addr;    /* DMA MANAGEMENT */    xtalk_dmamap_alloc_f   *dmamap_alloc;    xtalk_dmamap_free_f    *dmamap_free;    xtalk_dmamap_addr_f    *dmamap_addr;    xtalk_dmamap_list_f    *dmamap_list;    xtalk_dmamap_done_f    *dmamap_done;    xtalk_dmatrans_addr_f  *dmatrans_addr;    xtalk_dmatrans_list_f  *dmatrans_list;    xtalk_dmamap_drain_f   *dmamap_drain;    xtalk_dmaaddr_drain_f  *dmaaddr_drain;    xtalk_dmalist_drain_f  *dmalist_drain;    /* INTERRUPT MANAGEMENT */    xtalk_intr_alloc_f     *intr_alloc;    xtalk_intr_alloc_f     *intr_alloc_nothd;    xtalk_intr_free_f      *intr_free;    xtalk_intr_connect_f   *intr_connect;    xtalk_intr_disconnect_f *intr_disconnect;    /* CONFIGURATION MANAGEMENT */    xtalk_provider_startup_f *provider_startup;    xtalk_provider_shutdown_f *provider_shutdown;    /* Error Management     */    xtalk_error_devenable_f *error_devenable;} xtalk_provider_t;/* Crosstalk devices use these standard Crosstalk provider interfaces */extern xtalk_piomap_alloc_f xtalk_piomap_alloc;extern xtalk_piomap_free_f xtalk_piomap_free;extern xtalk_piomap_addr_f xtalk_piomap_addr;extern xtalk_piomap_done_f xtalk_piomap_done;extern xtalk_piotrans_addr_f xtalk_piotrans_addr;extern xtalk_dmamap_alloc_f xtalk_dmamap_alloc;extern xtalk_dmamap_free_f xtalk_dmamap_free;extern xtalk_dmamap_addr_f xtalk_dmamap_addr;extern xtalk_dmamap_list_f xtalk_dmamap_list;extern xtalk_dmamap_done_f xtalk_dmamap_done;extern xtalk_dmatrans_addr_f xtalk_dmatrans_addr;extern xtalk_dmatrans_list_f xtalk_dmatrans_list;extern xtalk_dmamap_drain_f xtalk_dmamap_drain;extern xtalk_dmaaddr_drain_f xtalk_dmaaddr_drain;extern xtalk_dmalist_drain_f xtalk_dmalist_drain;extern xtalk_intr_alloc_f xtalk_intr_alloc;extern xtalk_intr_alloc_f xtalk_intr_alloc_nothd;extern xtalk_intr_free_f xtalk_intr_free;extern xtalk_intr_connect_f xtalk_intr_connect;extern xtalk_intr_disconnect_f xtalk_intr_disconnect;extern xtalk_intr_cpu_get_f xtalk_intr_cpu_get;extern xtalk_provider_startup_f xtalk_provider_startup;extern xtalk_provider_shutdown_f xtalk_provider_shutdown;extern xtalk_widgetdev_enable_f xtalk_widgetdev_enable;extern xtalk_widgetdev_shutdown_f xtalk_widgetdev_shutdown;extern xtalk_dma_enabled_f xtalk_dma_enabled;extern xtalk_error_devenable_f xtalk_error_devenable;extern xtalk_early_piotrans_addr_f xtalk_early_piotrans_addr;/* error management */extern int              xtalk_error_handler(vertex_hdl_t,					    int,					    ioerror_mode_t,					    ioerror_t *);/* * Generic crosstalk interface, for use with all crosstalk providers * and all crosstalk devices. */typedef unchar xtalk_intr_vector_t;	/* crosstalk interrupt vector (0..255) */#define XTALK_INTR_VECTOR_NONE	(xtalk_intr_vector_t)0/* Generic crosstalk interrupt interfaces */extern vertex_hdl_t     xtalk_intr_dev_get(xtalk_intr_t xtalk_intr);extern xwidgetnum_t     xtalk_intr_target_get(xtalk_intr_t xtalk_intr);extern xtalk_intr_vector_t xtalk_intr_vector_get(xtalk_intr_t xtalk_intr);extern iopaddr_t        xtalk_intr_addr_get(xtalk_intr_t xtalk_intr);extern vertex_hdl_t     xtalk_intr_cpu_get(xtalk_intr_t xtalk_intr);extern void            *xtalk_intr_sfarg_get(xtalk_intr_t xtalk_intr);/* Generic crosstalk pio interfaces */extern vertex_hdl_t     xtalk_pio_dev_get(xtalk_piomap_t xtalk_piomap);extern xwidgetnum_t     xtalk_pio_target_get(xtalk_piomap_t xtalk_piomap);extern iopaddr_t        xtalk_pio_xtalk_addr_get(xtalk_piomap_t xtalk_piomap);extern size_t           xtalk_pio_mapsz_get(xtalk_piomap_t xtalk_piomap);extern caddr_t          xtalk_pio_kvaddr_get(xtalk_piomap_t xtalk_piomap);/* Generic crosstalk dma interfaces */extern vertex_hdl_t     xtalk_dma_dev_get(xtalk_dmamap_t xtalk_dmamap);extern xwidgetnum_t     xtalk_dma_target_get(xtalk_dmamap_t xtalk_dmamap);/* Register/unregister Crosstalk providers and get implementation handle */extern void             xtalk_set_early_piotrans_addr(xtalk_early_piotrans_addr_f *);extern void             xtalk_provider_register(vertex_hdl_t provider, xtalk_provider_t *xtalk_fns);extern void             xtalk_provider_unregister(vertex_hdl_t provider);extern xtalk_provider_t *xtalk_provider_fns_get(vertex_hdl_t provider);/* Crosstalk Switch generic layer, for use by initialization code */extern void             xswitch_census(vertex_hdl_t xswitchv);extern void             xswitch_init_widgets(vertex_hdl_t xswitchv);/* early init interrupt management */typedef voidxwidget_intr_preset_f   (void *which_widget,			 int which_widget_intr,			 xwidgetnum_t targ,			 iopaddr_t addr,			 xtalk_intr_vector_t vect);typedef voidxtalk_intr_prealloc_f   (void *which_xtalk,			 xtalk_intr_vector_t xtalk_vector,			 xwidget_intr_preset_f *preset_func,			 void *which_widget,			 int which_widget_intr);typedef voidxtalk_intr_preconn_f    (void *which_xtalk,			 xtalk_intr_vector_t xtalk_vector,			 intr_func_t intr_func,			 intr_arg_t intr_arg);#define XTALK_ADDR_TO_UPPER(xtalk_addr) (((iopaddr_t)(xtalk_addr) >> 32) & 0xffff)#define XTALK_ADDR_TO_LOWER(xtalk_addr) ((iopaddr_t)(xtalk_addr) & 0xffffffff)typedef xtalk_intr_setfunc_f *xtalk_intr_setfunc_t;typedef void		xtalk_iter_f(vertex_hdl_t vhdl);extern void		xtalk_iterate(char *prefix, xtalk_iter_f *func);#endif				/* __KERNEL__ */#endif				/* _ASM_SN_XTALK_XTALK_H */

⌨️ 快捷键说明

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