io.h

来自「优龙2410linux2.6.8内核源代码」· C头文件 代码 · 共 240 行

H
240
字号
/*  * 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) 2000-2003 Silicon Graphics, Inc. All rights reserved. */#ifndef _ASM_SN_SN2_IO_H#define _ASM_SN_SN2_IO_H#include <linux/compiler.h>#include <asm/intrinsics.h>extern void * sn_io_addr(unsigned long port) __attribute_const__; /* Forward definition */extern void sn_mmiob(void); /* Forward definition */#define __sn_mf_a()   ia64_mfa()extern void sn_dma_flush(unsigned long);#define __sn_inb ___sn_inb#define __sn_inw ___sn_inw#define __sn_inl ___sn_inl#define __sn_outb ___sn_outb#define __sn_outw ___sn_outw#define __sn_outl ___sn_outl#define __sn_readb ___sn_readb#define __sn_readw ___sn_readw#define __sn_readl ___sn_readl#define __sn_readq ___sn_readq#define __sn_readb_relaxed ___sn_readb_relaxed#define __sn_readw_relaxed ___sn_readw_relaxed#define __sn_readl_relaxed ___sn_readl_relaxed#define __sn_readq_relaxed ___sn_readq_relaxed/* * The following routines are SN Platform specific, called when * a reference is made to inX/outX set macros.  SN Platform * inX set of macros ensures that Posted DMA writes on the * Bridge is flushed. * * The routines should be self explainatory. */static inline unsigned int___sn_inb (unsigned long port){	volatile unsigned char *addr;	unsigned char ret = -1;	if ((addr = sn_io_addr(port))) {		ret = *addr;		__sn_mf_a();		sn_dma_flush((unsigned long)addr);	}	return ret;}static inline unsigned int___sn_inw (unsigned long port){	volatile unsigned short *addr;	unsigned short ret = -1;	if ((addr = sn_io_addr(port))) {		ret = *addr;		__sn_mf_a();		sn_dma_flush((unsigned long)addr);	}	return ret;}static inline unsigned int___sn_inl (unsigned long port){	volatile unsigned int *addr;	unsigned int ret = -1;	if ((addr = sn_io_addr(port))) {		ret = *addr;		__sn_mf_a();		sn_dma_flush((unsigned long)addr);	}	return ret;}static inline void___sn_outb (unsigned char val, unsigned long port){	volatile unsigned char *addr;	if ((addr = sn_io_addr(port))) {		*addr = val;		sn_mmiob();	}}static inline void___sn_outw (unsigned short val, unsigned long port){	volatile unsigned short *addr;	if ((addr = sn_io_addr(port))) {		*addr = val;		sn_mmiob();	}}static inline void___sn_outl (unsigned int val, unsigned long port){	volatile unsigned int *addr;	if ((addr = sn_io_addr(port))) {		*addr = val;		sn_mmiob();	}}/* * The following routines are SN Platform specific, called when  * a reference is made to readX/writeX set macros.  SN Platform  * readX set of macros ensures that Posted DMA writes on the  * Bridge is flushed. *  * The routines should be self explainatory. */static inline unsigned char___sn_readb (void *addr){	unsigned char val;	val = *(volatile unsigned char *)addr;	__sn_mf_a();	sn_dma_flush((unsigned long)addr);        return val;}static inline unsigned short___sn_readw (void *addr){	unsigned short val;	val = *(volatile unsigned short *)addr;	__sn_mf_a();	sn_dma_flush((unsigned long)addr);        return val;}static inline unsigned int___sn_readl (void *addr){	unsigned int val;	val = *(volatile unsigned int *) addr;	__sn_mf_a();	sn_dma_flush((unsigned long)addr);        return val;}static inline unsigned long___sn_readq (void *addr){	unsigned long val;	val = *(volatile unsigned long *) addr;	__sn_mf_a();	sn_dma_flush((unsigned long)addr);        return val;}/* * For generic and SN2 kernels, we have a set of fast access * PIO macros.	These macros are provided on SN Platform * because the normal inX and readX macros perform an * additional task of flushing Post DMA request on the Bridge. * * These routines should be self explainatory. */static inline unsigned intsn_inb_fast (unsigned long port){	volatile unsigned char *addr = (unsigned char *)port;	unsigned char ret;	ret = *addr;	__sn_mf_a();	return ret;}static inline unsigned intsn_inw_fast (unsigned long port){	volatile unsigned short *addr = (unsigned short *)port;	unsigned short ret;	ret = *addr;	__sn_mf_a();	return ret;}static inline unsigned intsn_inl_fast (unsigned long port){	volatile unsigned int *addr = (unsigned int *)port;	unsigned int ret;	ret = *addr;	__sn_mf_a();	return ret;}static inline unsigned char___sn_readb_relaxed (void *addr){	return *(volatile unsigned char *)addr;}static inline unsigned short___sn_readw_relaxed (void *addr){	return *(volatile unsigned short *)addr;}static inline unsigned int___sn_readl_relaxed (void *addr){	return *(volatile unsigned int *) addr;}static inline unsigned long___sn_readq_relaxed (void *addr){	return *(volatile unsigned long *) addr;}#endif

⌨️ 快捷键说明

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