qeth.h

来自「linux-2.4.29操作系统的源码」· C头文件 代码 · 共 1,284 行 · 第 1/3 页

H
1,284
字号
/* * linux/drivers/s390/net/qeth.h * * Linux on zSeries OSA Express and HiperSockets support * * Copyright 2000,2003 IBM Corporation * Author(s): Utz Bacher <utz.bacher@de.ibm.com> * */#ifndef __QETH_H__#define __QETH_H__#include <asm/qdio.h>#define QETH_NAME " qeth"#define VERSION_QETH_H "$Revision: 1.113.4.8 $"/******************** CONFIG STUFF ***********************///#define QETH_DBF_LIKE_HELL#ifdef CONFIG_QETH_IPV6#define QETH_IPV6#define QETH_VERSION_IPV6 ":IPv6"#else#define QETH_VERSION_IPV6 ""#endif /* CONFIG_QETH_IPV6 */#ifdef CONFIG_QETH_VLAN#define QETH_VLAN#define QETH_VERSION_VLAN ":VLAN"#else#define QETH_VERSION_VLAN ""#endif /* CONFIG_QETH_VLAN *//* these values match CHECKSUM_* in include/linux/skbuff.h */#define SW_CHECKSUMMING 0#define HW_CHECKSUMMING 1#define NO_CHECKSUMMING 2#define QETH_CHECKSUM_DEFAULT NO_CHECKSUMMING#define QETH_DEFAULT_QUEUE 2/******************** CONFIG STUFF END ***********************//********************* TUNING STUFF **************************/#define HIGH_WATERMARK_PACK		5#define LOW_WATERMARK_PACK		2#define WATERMARK_FUZZ			1#define QETH_MAX_INPUT_THRESHOLD 500#define QETH_MAX_OUTPUT_THRESHOLD 300 /* ? *//* only the MAX values are used */#define QETH_MIN_INPUT_THRESHOLD 1#define QETH_MIN_OUTPUT_THRESHOLD 1#define QETH_REQUEUE_THRESHOLD (card->options.inbound_buffer_count/4)#ifdef CONFIG_QETH_PERF_STATS#define QETH_PERFORMANCE_STATS#endif /* CONFIG_QETH_PERF_STATS */#define QETH_VERBOSE_LEVEL 7#define PCI_THRESHOLD_A (card->options.inbound_buffer_count+1) /* buffers we have to be behind			     before we get a PCI */#define PCI_THRESHOLD_B 0 /* enqueued free buffers left before we get a PCI */#define PCI_TIMER_VALUE 3 /* not used, unless the microcode gets patched */#define DEFAULT_SPARE_BUFFERS 0#define MAX_SPARE_BUFFERS 1024#define SPAREBUF_MASK 65536#define MAX_PORTNO 15#define QETH_PROCFILE_NAME "qeth"#define QETH_PERF_PROCFILE_NAME "qeth_perf"#define QETH_IPA_PROCFILE_NAME "qeth_ipa_takeover"#define SEND_RETRIES_ALLOWED 5#define QETH_ROUTING_ATTEMPTS 2#define QETH_HARDSETUP_LAPS 5#define QETH_HARDSETUP_CLEAR_LAPS 3#define QETH_RECOVERY_HARDSETUP_RETRY 2/* the worst case stack usage is: * qeth_hard_start_xmit * do_QDIO * qeth_qdio_output_handler * do_QDIO * qeth_qdio_output_handler * (no more recursion as we have called netif_stop_queue) */#ifdef CONFIG_ARCH_S390X#define STACK_PTR_MASK 0x3fff#define WORST_CASE_STACK_USAGE 1100#else /* CONFIG_ARCH_S390X */#define STACK_PTR_MASK 0x1fff#define WORST_CASE_STACK_USAGE 800#endif /* CONFIG_ARCH_S390X *//************************* DEBUG FACILITY STUFF *********************/#define QETH_DBF_HEX(ex,name,level,addr,len) \        do { \        if (ex) \                debug_exception(qeth_dbf_##name,level,(void*)addr,len); \        else \                debug_event(qeth_dbf_##name,level,(void*)addr,len); \        } while (0)#define QETH_DBF_TEXT(ex,name,level,text) \        do { \        if (ex) \                debug_text_exception(qeth_dbf_##name,level,text); \        else \                debug_text_event(qeth_dbf_##name,level,text); \        } while (0)#define QETH_DBF_HEX0(ex,name,addr,len) QETH_DBF_HEX(ex,name,0,addr,len)#define QETH_DBF_HEX1(ex,name,addr,len) QETH_DBF_HEX(ex,name,1,addr,len)#define QETH_DBF_HEX2(ex,name,addr,len) QETH_DBF_HEX(ex,name,2,addr,len)#define QETH_DBF_HEX3(ex,name,addr,len) QETH_DBF_HEX(ex,name,3,addr,len)#define QETH_DBF_HEX4(ex,name,addr,len) QETH_DBF_HEX(ex,name,4,addr,len)#define QETH_DBF_HEX5(ex,name,addr,len) QETH_DBF_HEX(ex,name,5,addr,len)#define QETH_DBF_HEX6(ex,name,addr,len) QETH_DBF_HEX(ex,name,6,addr,len)#ifdef QETH_DBF_LIKE_HELL#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_TEXT0(ex,name,text) QETH_DBF_TEXT(ex,name,0,text)#define QETH_DBF_TEXT1(ex,name,text) QETH_DBF_TEXT(ex,name,1,text)#define QETH_DBF_TEXT2(ex,name,text) QETH_DBF_TEXT(ex,name,2,text)#define QETH_DBF_TEXT3(ex,name,text) QETH_DBF_TEXT(ex,name,3,text)#define QETH_DBF_TEXT4(ex,name,text) QETH_DBF_TEXT(ex,name,4,text)#define QETH_DBF_TEXT5(ex,name,text) QETH_DBF_TEXT(ex,name,5,text)#define QETH_DBF_TEXT6(ex,name,text) QETH_DBF_TEXT(ex,name,6,text)#ifdef QETH_DBF_LIKE_HELL#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_SETUP_NAME "qeth_setup"#define QETH_DBF_SETUP_LEN 8#define QETH_DBF_SETUP_INDEX 3#define QETH_DBF_SETUP_NR_AREAS 1#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_SETUP_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_SETUP_LEVEL 3#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_MISC_NAME "qeth_misc"#define QETH_DBF_MISC_LEN 128#define QETH_DBF_MISC_INDEX 1#define QETH_DBF_MISC_NR_AREAS 1#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_MISC_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_MISC_LEVEL 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_DATA_NAME "qeth_data"#define QETH_DBF_DATA_LEN 96#define QETH_DBF_DATA_INDEX 3#define QETH_DBF_DATA_NR_AREAS 1#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_DATA_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_DATA_LEVEL 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_CONTROL_NAME "qeth_control"/* buffers are 255 bytes long, but no prob */#define QETH_DBF_CONTROL_LEN 256#define QETH_DBF_CONTROL_INDEX 3#define QETH_DBF_CONTROL_NR_AREAS 2#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_CONTROL_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_CONTROL_LEVEL 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_TRACE_NAME "qeth_trace"#define QETH_DBF_TRACE_LEN 8#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_TRACE_INDEX 3#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_TRACE_INDEX 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_TRACE_NR_AREAS 2#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_TRACE_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_TRACE_LEVEL 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_SENSE_NAME "qeth_sense"#define QETH_DBF_SENSE_LEN 64#define QETH_DBF_SENSE_INDEX 1#define QETH_DBF_SENSE_NR_AREAS 1#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_SENSE_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_SENSE_LEVEL 2#endif /* QETH_DBF_LIKE_HELL */#define QETH_DBF_QERR_NAME "qeth_qerr"#define QETH_DBF_QERR_LEN 8#define QETH_DBF_QERR_INDEX 1#define QETH_DBF_QERR_NR_AREAS 2#ifdef QETH_DBF_LIKE_HELL#define QETH_DBF_QERR_LEVEL 6#else /* QETH_DBF_LIKE_HELL */#define QETH_DBF_QERR_LEVEL 2#endif /* QETH_DBF_LIKE_HELL *//****************** END OF DEBUG FACILITY STUFF *********************//********************* CARD DATA STUFF **************************/#define QETH_MAX_PARAMS 150#define QETH_CARD_TYPE_UNKNOWN	0#define QETH_CARD_TYPE_OSAE	10#define QETH_CARD_TYPE_IQD	1234#define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x0101#define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x0101/* as soon as steve is ready:#define QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT 0x4101#define QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT 0x5101*/#define QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT 0x4108#define QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT 0x5108#define QETH_MAX_QUEUES 4#define UNIQUE_ID_IF_CREATE_ADDR_FAILED 0xfffe#define UNIQUE_ID_NOT_BY_CARD 0x10000/* CU type & model, Dev type & model, card_type, odd_even_restriction, func level, no of queues, multicast is different (multicast-queue_no + 0x100) */#define QETH_MODELLIST_ARRAY \	{{0x1731,0x01,0x1732,0x01,QETH_CARD_TYPE_OSAE,1, \	  QETH_IDX_FUNC_LEVEL_OSAE_ENA_IPAT, \	  QETH_IDX_FUNC_LEVEL_OSAE_DIS_IPAT, \	  QETH_MAX_QUEUES,0}, \	 {0x1731,0x05,0x1732,0x05,QETH_CARD_TYPE_IQD,0, \	  QETH_IDX_FUNC_LEVEL_IQD_ENA_IPAT, \	  QETH_IDX_FUNC_LEVEL_IQD_DIS_IPAT, \	  QETH_MAX_QUEUES,0x103}, \	 {0,0,0,0,0,0,0,0,0}}#define QETH_MPC_DIFINFO_LEN_INDICATES_LINK_TYPE 0x18 /* only the first two bytes are looked at in qeth_get_cardname_short */#define QETH_MPC_LINK_TYPE_FAST_ETHERNET 0x01#define QETH_MPC_LINK_TYPE_HSTR 0x02#define QETH_MPC_LINK_TYPE_GIGABIT_ETHERNET 0x03#define QETH_MPC_LINK_TYPE_LANE_ETH100 0x81#define QETH_MPC_LINK_TYPE_LANE_TR 0x82#define QETH_MPC_LINK_TYPE_LANE_ETH1000 0x83#define QETH_MPC_LINK_TYPE_LANE 0x88#define DEFAULT_ADD_HHLEN 0#define MAX_ADD_HHLEN 1024#define QETH_HEADER_SIZE	32#define QETH_IP_HEADER_SIZE	40#define QETH_HEADER_LEN_POS	8/* flags for the header: */#define QETH_HEADER_PASSTHRU	0x10#define QETH_HEADER_IPV6	0x80#define QETH_ETH_MAC_V4      0x0100 /* like v4 */#define QETH_ETH_MAC_V6      0x3333 /* like v6 *//* tr mc mac is longer, but that will be enough to detect mc frames */#define QETH_TR_MAC_NC       0xc000 /* non-canonical */#define QETH_TR_MAC_C        0x0300 /* canonical */#define QETH_CAST_FLAGS		0x07#define QETH_CAST_UNICAST	6#define QETH_CAST_MULTICAST	4#define QETH_CAST_BROADCAST	5#define QETH_CAST_ANYCAST	7#define QETH_CAST_NOCAST	0/* VLAN defines */#define QETH_EXT_HEADER_VLAN_FRAME	  0x01#define QETH_EXT_HEADER_TOKEN_ID	  0x02#define QETH_EXT_HEADER_INCLUDE_VLAN_TAG  0x04#define QETH_EXT_HEADER_SRC_MAC_ADDRESS   0x08#define QETH_EXT_HEADER_CSUM_HDR_REQ      0x10#define QETH_EXT_HEADER_CSUM_TRANSP_REQ   0x20#define QETH_EXT_HEADER_CSUM_TRANSP_FRAME_TYPE   0x40#define QETH_UDP_CSUM_OFFSET	6#define QETH_TCP_CSUM_OFFSET	16#define QETH_VERIFY_IS_REAL_DEV               1#define QETH_VERIFY_IS_VLAN_DEV               2inline static unsigned int qeth_get_ipa_timeout(int cardtype){	switch (cardtype) {	case QETH_CARD_TYPE_IQD: return 2000;	default: return 20000;	}}inline static unsigned short qeth_get_additional_dev_flags(int cardtype){	switch (cardtype) {	case QETH_CARD_TYPE_IQD: return IFF_NOARP;#ifdef QETH_IPV6	default: return 0;#else /* QETH_IPV6 */	default: return IFF_NOARP;#endif /* QETH_IPV6 */	}}inline static int qeth_get_hlen(__u8 link_type){#ifdef QETH_IPV6	switch (link_type) {	case QETH_MPC_LINK_TYPE_HSTR:	case QETH_MPC_LINK_TYPE_LANE_TR:		return QETH_HEADER_SIZE+TR_HLEN;	default:#ifdef QETH_VLAN		return QETH_HEADER_SIZE+VLAN_ETH_HLEN;#else		return QETH_HEADER_SIZE+ETH_HLEN;#endif	}#else /* QETH_IPV6 */#ifdef QETH_VLAN	return QETH_HEADER_SIZE+VLAN_HLEN;#else	return QETH_HEADER_SIZE;#endif#endif /* QETH_IPV6 */}int (*qeth_my_eth_header)(struct sk_buff *,struct net_device *,	unsigned short,void *,void *,unsigned);int (*qeth_my_tr_header)(struct sk_buff *,struct net_device *,	unsigned short,void *,void *,unsigned);int (*qeth_my_eth_rebuild_header)(struct sk_buff *);int (*qeth_my_tr_rebuild_header)(struct sk_buff *);int (*qeth_my_eth_header_cache)(struct neighbour *,struct hh_cache *);void (*qeth_my_eth_header_cache_update)(struct hh_cache *,struct net_device *,	 unsigned char *);#ifdef QETH_IPV6typedef int (*__qeth_temp1)(struct sk_buff *,struct net_device *,	unsigned short,void *,void *,unsigned);inline static __qeth_temp1 qeth_get_hard_header(__u8 link_type){	switch (link_type) {#ifdef CONFIG_TR	case QETH_MPC_LINK_TYPE_HSTR:	case QETH_MPC_LINK_TYPE_LANE_TR:		return qeth_my_tr_header;#endif /* CONFIG_TR */	default:		return qeth_my_eth_header;	}}typedef int (*__qeth_temp2)(struct sk_buff *);inline static __qeth_temp2 qeth_get_rebuild_header(__u8 link_type){	switch (link_type) {#ifdef CONFIG_TR	case QETH_MPC_LINK_TYPE_HSTR:	case QETH_MPC_LINK_TYPE_LANE_TR:		return qeth_my_tr_rebuild_header;#endif /* CONFIG_TR */	default:		return qeth_my_eth_rebuild_header;	}}typedef int (*__qeth_temp3)(struct neighbour *,struct hh_cache *);inline static __qeth_temp3 qeth_get_hard_header_cache(__u8 link_type){	switch (link_type) {	case QETH_MPC_LINK_TYPE_HSTR:	case QETH_MPC_LINK_TYPE_LANE_TR:		return NULL;	default:		return qeth_my_eth_header_cache;	}}typedef void (*__qeth_temp4)(struct hh_cache *,struct net_device *,	 unsigned char *);inline static __qeth_temp4 qeth_get_header_cache_update(__u8 link_type){	switch (link_type) {	case QETH_MPC_LINK_TYPE_HSTR:	case QETH_MPC_LINK_TYPE_LANE_TR:		return NULL;	default:		return qeth_my_eth_header_cache_update;	}}static unsigned short qeth_eth_type_trans(struct sk_buff *skb,					  struct net_device *dev){	struct ethhdr *eth;		skb->mac.raw=skb->data;	skb_pull(skb,ETH_ALEN*2+sizeof(short));	eth=skb->mac.ethernet;		if(*eth->h_dest&1) {		if(memcmp(eth->h_dest,dev->broadcast, ETH_ALEN)==0)			skb->pkt_type=PACKET_BROADCAST;		else			skb->pkt_type=PACKET_MULTICAST;   	} else {		skb->pkt_type=PACKET_OTHERHOST;	}	if (ntohs(eth->h_proto)>=1536) return eth->h_proto;	if (*(unsigned short *)(skb->data) == 0xFFFF)

⌨️ 快捷键说明

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