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 + -
显示快捷键?