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

📄 qdio.h

📁 linux-2.6.15.6
💻 H
📖 第 1 页 / 共 2 页
字号:
#ifndef _CIO_QDIO_H#define _CIO_QDIO_H#include <asm/page.h>#define VERSION_CIO_QDIO_H "$Revision: 1.33 $"#ifdef CONFIG_QDIO_DEBUG#define QDIO_VERBOSE_LEVEL 9#else /* CONFIG_QDIO_DEBUG */#define QDIO_VERBOSE_LEVEL 5#endif /* CONFIG_QDIO_DEBUG */#define QDIO_USE_PROCESSING_STATE#ifdef CONFIG_QDIO_PERF_STATS#define QDIO_PERFORMANCE_STATS#endif /* CONFIG_QDIO_PERF_STATS */#define QDIO_MINIMAL_BH_RELIEF_TIME 16#define QDIO_TIMER_POLL_VALUE 1#define IQDIO_TIMER_POLL_VALUE 1/* * unfortunately this can't be (QDIO_MAX_BUFFERS_PER_Q*4/3) or so -- as * we never know, whether we'll get initiative again, e.g. to give the * transmit skb's back to the stack, however the stack may be waiting for * them... therefore we define 4 as threshold to start polling (which * will stop as soon as the asynchronous queue catches up) * btw, this only applies to the asynchronous HiperSockets queue */#define IQDIO_FILL_LEVEL_TO_POLL 4#define TIQDIO_THININT_ISC 3#define TIQDIO_DELAY_TARGET 0#define QDIO_BUSY_BIT_PATIENCE 100 /* in microsecs */#define QDIO_BUSY_BIT_GIVE_UP 10000000 /* 10 seconds */#define IQDIO_GLOBAL_LAPS 2 /* GLOBAL_LAPS are not used as we */#define IQDIO_GLOBAL_LAPS_INT 1 /* don't global summary */#define IQDIO_LOCAL_LAPS 4#define IQDIO_LOCAL_LAPS_INT 1#define IQDIO_GLOBAL_SUMMARY_CC_MASK 2/*#define IQDIO_IQDC_INT_PARM 0x1234*/#define QDIO_Q_LAPS 5#define QDIO_STORAGE_KEY PAGE_DEFAULT_KEY#define L2_CACHELINE_SIZE 256#define INDICATORS_PER_CACHELINE (L2_CACHELINE_SIZE/sizeof(__u32))#define QDIO_PERF "qdio_perf"/* must be a power of 2 *//*#define QDIO_STATS_NUMBER 4#define QDIO_STATS_CLASSES 2#define QDIO_STATS_COUNT_NEEDED 2*/#define QDIO_NO_USE_COUNT_TIMEOUT (1*HZ) /* wait for 1 sec on each q before					    exiting without having use_count					    of the queue to 0 */#define QDIO_ESTABLISH_TIMEOUT (1*HZ)#define QDIO_ACTIVATE_TIMEOUT ((5*HZ)>>10)#define QDIO_CLEANUP_CLEAR_TIMEOUT (20*HZ)#define QDIO_CLEANUP_HALT_TIMEOUT (10*HZ)enum qdio_irq_states {	QDIO_IRQ_STATE_INACTIVE,	QDIO_IRQ_STATE_ESTABLISHED,	QDIO_IRQ_STATE_ACTIVE,	QDIO_IRQ_STATE_STOPPED,	QDIO_IRQ_STATE_CLEANUP,	QDIO_IRQ_STATE_ERR,	NR_QDIO_IRQ_STATES,};/* used as intparm in do_IO: */#define QDIO_DOING_SENSEID 0#define QDIO_DOING_ESTABLISH 1#define QDIO_DOING_ACTIVATE 2#define QDIO_DOING_CLEANUP 3/************************* DEBUG FACILITY STUFF *********************/#define QDIO_DBF_HEX(ex,name,level,addr,len) \	do { \	if (ex) \		debug_exception(qdio_dbf_##name,level,(void*)(addr),len); \	else \		debug_event(qdio_dbf_##name,level,(void*)(addr),len); \	} while (0)#define QDIO_DBF_TEXT(ex,name,level,text) \	do { \	if (ex) \		debug_text_exception(qdio_dbf_##name,level,text); \	else \		debug_text_event(qdio_dbf_##name,level,text); \	} while (0)#define QDIO_DBF_HEX0(ex,name,addr,len) QDIO_DBF_HEX(ex,name,0,addr,len)#define QDIO_DBF_HEX1(ex,name,addr,len) QDIO_DBF_HEX(ex,name,1,addr,len)#define QDIO_DBF_HEX2(ex,name,addr,len) QDIO_DBF_HEX(ex,name,2,addr,len)#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_HEX3(ex,name,addr,len) QDIO_DBF_HEX(ex,name,3,addr,len)#define QDIO_DBF_HEX4(ex,name,addr,len) QDIO_DBF_HEX(ex,name,4,addr,len)#define QDIO_DBF_HEX5(ex,name,addr,len) QDIO_DBF_HEX(ex,name,5,addr,len)#define QDIO_DBF_HEX6(ex,name,addr,len) QDIO_DBF_HEX(ex,name,6,addr,len)#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_HEX3(ex,name,addr,len) do {} while (0)#define QDIO_DBF_HEX4(ex,name,addr,len) do {} while (0)#define QDIO_DBF_HEX5(ex,name,addr,len) do {} while (0)#define QDIO_DBF_HEX6(ex,name,addr,len) do {} while (0)#endif /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_TEXT0(ex,name,text) QDIO_DBF_TEXT(ex,name,0,text)#define QDIO_DBF_TEXT1(ex,name,text) QDIO_DBF_TEXT(ex,name,1,text)#define QDIO_DBF_TEXT2(ex,name,text) QDIO_DBF_TEXT(ex,name,2,text)#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_TEXT3(ex,name,text) QDIO_DBF_TEXT(ex,name,3,text)#define QDIO_DBF_TEXT4(ex,name,text) QDIO_DBF_TEXT(ex,name,4,text)#define QDIO_DBF_TEXT5(ex,name,text) QDIO_DBF_TEXT(ex,name,5,text)#define QDIO_DBF_TEXT6(ex,name,text) QDIO_DBF_TEXT(ex,name,6,text)#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_TEXT3(ex,name,text) do {} while (0)#define QDIO_DBF_TEXT4(ex,name,text) do {} while (0)#define QDIO_DBF_TEXT5(ex,name,text) do {} while (0)#define QDIO_DBF_TEXT6(ex,name,text) do {} while (0)#endif /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SETUP_NAME "qdio_setup"#define QDIO_DBF_SETUP_LEN 8#define QDIO_DBF_SETUP_PAGES 4#define QDIO_DBF_SETUP_NR_AREAS 1#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_SETUP_LEVEL 6#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SETUP_LEVEL 2#endif /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SBAL_NAME "qdio_labs" /* sbal */#define QDIO_DBF_SBAL_LEN 256#define QDIO_DBF_SBAL_PAGES 4#define QDIO_DBF_SBAL_NR_AREAS 2#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_SBAL_LEVEL 6#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SBAL_LEVEL 2#endif /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_TRACE_NAME "qdio_trace"#define QDIO_DBF_TRACE_LEN 8#define QDIO_DBF_TRACE_NR_AREAS 2#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_TRACE_PAGES 16#define QDIO_DBF_TRACE_LEVEL 4 /* -------- could be even more verbose here */#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_TRACE_PAGES 4#define QDIO_DBF_TRACE_LEVEL 2#endif /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SENSE_NAME "qdio_sense"#define QDIO_DBF_SENSE_LEN 64#define QDIO_DBF_SENSE_PAGES 2#define QDIO_DBF_SENSE_NR_AREAS 1#ifdef CONFIG_QDIO_DEBUG#define QDIO_DBF_SENSE_LEVEL 6#else /* CONFIG_QDIO_DEBUG */#define QDIO_DBF_SENSE_LEVEL 2#endif /* CONFIG_QDIO_DEBUG */#ifdef CONFIG_QDIO_DEBUG#define QDIO_TRACE_QTYPE QDIO_ZFCP_QFMT#define QDIO_DBF_SLSB_OUT_NAME "qdio_slsb_out"#define QDIO_DBF_SLSB_OUT_LEN QDIO_MAX_BUFFERS_PER_Q#define QDIO_DBF_SLSB_OUT_PAGES 256#define QDIO_DBF_SLSB_OUT_NR_AREAS 1#define QDIO_DBF_SLSB_OUT_LEVEL 6#define QDIO_DBF_SLSB_IN_NAME "qdio_slsb_in"#define QDIO_DBF_SLSB_IN_LEN QDIO_MAX_BUFFERS_PER_Q#define QDIO_DBF_SLSB_IN_PAGES 256#define QDIO_DBF_SLSB_IN_NR_AREAS 1#define QDIO_DBF_SLSB_IN_LEVEL 6#endif /* CONFIG_QDIO_DEBUG */#define QDIO_PRINTK_HEADER QDIO_NAME ": "#if QDIO_VERBOSE_LEVEL>8#define QDIO_PRINT_STUPID(x...) printk( KERN_DEBUG QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_STUPID(x...)#endif#if QDIO_VERBOSE_LEVEL>7#define QDIO_PRINT_ALL(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_ALL(x...)#endif#if QDIO_VERBOSE_LEVEL>6#define QDIO_PRINT_INFO(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_INFO(x...)#endif#if QDIO_VERBOSE_LEVEL>5#define QDIO_PRINT_WARN(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_WARN(x...)#endif#if QDIO_VERBOSE_LEVEL>4#define QDIO_PRINT_ERR(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_ERR(x...)#endif#if QDIO_VERBOSE_LEVEL>3#define QDIO_PRINT_CRIT(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_CRIT(x...)#endif#if QDIO_VERBOSE_LEVEL>2#define QDIO_PRINT_ALERT(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_ALERT(x...)#endif#if QDIO_VERBOSE_LEVEL>1#define QDIO_PRINT_EMERG(x...) printk( QDIO_PRINTK_HEADER x)#else#define QDIO_PRINT_EMERG(x...)#endif#define HEXDUMP16(importance,header,ptr) \QDIO_PRINT_##importance(header "%02x %02x %02x %02x  " \			"%02x %02x %02x %02x  %02x %02x %02x %02x  " \			"%02x %02x %02x %02x\n",*(((char*)ptr)), \			*(((char*)ptr)+1),*(((char*)ptr)+2), \			*(((char*)ptr)+3),*(((char*)ptr)+4), \			*(((char*)ptr)+5),*(((char*)ptr)+6), \			*(((char*)ptr)+7),*(((char*)ptr)+8), \			*(((char*)ptr)+9),*(((char*)ptr)+10), \			*(((char*)ptr)+11),*(((char*)ptr)+12), \			*(((char*)ptr)+13),*(((char*)ptr)+14), \			*(((char*)ptr)+15)); \QDIO_PRINT_##importance(header "%02x %02x %02x %02x  %02x %02x %02x %02x  " \			"%02x %02x %02x %02x  %02x %02x %02x %02x\n", \			*(((char*)ptr)+16),*(((char*)ptr)+17), \			*(((char*)ptr)+18),*(((char*)ptr)+19), \			*(((char*)ptr)+20),*(((char*)ptr)+21), \			*(((char*)ptr)+22),*(((char*)ptr)+23), \			*(((char*)ptr)+24),*(((char*)ptr)+25), \			*(((char*)ptr)+26),*(((char*)ptr)+27), \			*(((char*)ptr)+28),*(((char*)ptr)+29), \			*(((char*)ptr)+30),*(((char*)ptr)+31));/****************** END OF DEBUG FACILITY STUFF *********************//* * Some instructions as assembly */static inline intdo_siga_sync(unsigned int irq, unsigned int mask1, unsigned int mask2){	int cc;#ifndef CONFIG_ARCH_S390X	asm volatile (		"lhi	0,2	\n\t"		"lr	1,%1	\n\t"		"lr	2,%2	\n\t"		"lr	3,%3	\n\t"		"siga   0	\n\t"		"ipm	%0	\n\t"		"srl	%0,28	\n\t"		: "=d" (cc)		: "d" (0x10000|irq), "d" (mask1), "d" (mask2)		: "cc", "0", "1", "2", "3"		);#else /* CONFIG_ARCH_S390X */	asm volatile (		"lghi	0,2	\n\t"		"llgfr	1,%1	\n\t"		"llgfr	2,%2	\n\t"		"llgfr	3,%3	\n\t"		"siga   0	\n\t"		"ipm	%0	\n\t"		"srl	%0,28	\n\t"		: "=d" (cc)		: "d" (0x10000|irq), "d" (mask1), "d" (mask2)		: "cc", "0", "1", "2", "3"		);#endif /* CONFIG_ARCH_S390X */	return cc;}static inline intdo_siga_input(unsigned int irq, unsigned int mask){	int cc;#ifndef CONFIG_ARCH_S390X	asm volatile (		"lhi	0,1	\n\t"		"lr	1,%1	\n\t"		"lr	2,%2	\n\t"		"siga   0	\n\t"		"ipm	%0	\n\t"		"srl	%0,28	\n\t"		: "=d" (cc)		: "d" (0x10000|irq), "d" (mask)		: "cc", "0", "1", "2", "memory"		);#else /* CONFIG_ARCH_S390X */	asm volatile (		"lghi	0,1	\n\t"		"llgfr	1,%1	\n\t"		"llgfr	2,%2	\n\t"		"siga   0	\n\t"		"ipm	%0	\n\t"

⌨️ 快捷键说明

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