qeth.h
来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 1,039 行 · 第 1/2 页
H
1,039 行
QETH_PROT_IPV6 = 0x0006,};enum qeth_ip_types { QETH_IP_TYPE_NORMAL, QETH_IP_TYPE_VIPA, QETH_IP_TYPE_RXIP,};enum qeth_cmd_buffer_state { BUF_STATE_FREE, BUF_STATE_LOCKED, BUF_STATE_PROCESSED,};/** * IP address and multicast list */struct qeth_ipaddr { struct list_head entry; enum qeth_ip_types type; enum qeth_ipa_setdelip_flags set_flags; enum qeth_ipa_setdelip_flags del_flags; int is_multicast; volatile int users; enum qeth_prot_versions proto; unsigned char mac[OSA_ADDR_LEN]; union { struct { unsigned int addr; unsigned int mask; } a4; struct { struct in6_addr addr; unsigned int pfxlen; } a6; } u;};struct qeth_ipato_entry { struct list_head entry; enum qeth_prot_versions proto; char addr[16]; int mask_bits;};struct qeth_ipato { int enabled; int invert4; int invert6; struct list_head entries;};struct qeth_channel;struct qeth_cmd_buffer { enum qeth_cmd_buffer_state state; struct qeth_channel *channel; unsigned char *data; int rc; void (*callback) (struct qeth_channel *, struct qeth_cmd_buffer *);};/** * definition of a qeth channel, used for read and write */struct qeth_channel { enum qeth_channel_states state; struct ccw1 ccw; spinlock_t iob_lock; wait_queue_head_t wait_q; struct tasklet_struct irq_tasklet; struct ccw_device *ccwdev;/*command buffer for control data*/ struct qeth_cmd_buffer iob[QETH_CMD_BUFFER_NO]; atomic_t irq_pending; volatile int io_buf_no; volatile int buf_no;};/** * OSA card related definitions */struct qeth_token { __u32 issuer_rm_w; __u32 issuer_rm_r; __u32 cm_filter_w; __u32 cm_filter_r; __u32 cm_connection_w; __u32 cm_connection_r; __u32 ulp_filter_w; __u32 ulp_filter_r; __u32 ulp_connection_w; __u32 ulp_connection_r;};struct qeth_seqno { __u32 trans_hdr; __u32 pdu_hdr; __u32 pdu_hdr_ack; __u16 ipa;};struct qeth_reply { struct list_head list; wait_queue_head_t wait_q; int (*callback)(struct qeth_card *,struct qeth_reply *,unsigned long); u32 seqno; unsigned long offset; int received; int rc; void *param; struct qeth_card *card; atomic_t refcnt;};#define QETH_BROADCAST_WITH_ECHO 1#define QETH_BROADCAST_WITHOUT_ECHO 2struct qeth_card_info { char if_name[IF_NAME_LEN]; unsigned short unit_addr2; unsigned short cula; unsigned short chpid; __u16 func_level; char mcl_level[QETH_MCL_LENGTH + 1]; int guestlan; int portname_required; int portno; char portname[9]; enum qeth_card_types type; enum qeth_link_types link_type; int is_multicast_different; int initial_mtu; int max_mtu; int broadcast_capable; int unique_id; __u32 csum_mask;};struct qeth_card_options { struct qeth_routing_info route4; struct qeth_ipa_info ipa4; struct qeth_ipa_info adp; /*Adapter parameters*/#ifdef CONFIG_QETH_IPV6 struct qeth_routing_info route6; struct qeth_ipa_info ipa6;#endif /* QETH_IPV6 */ enum qeth_checksum_types checksum_type; int broadcast_mode; int macaddr_mode; int fake_broadcast; int add_hhlen; int fake_ll;};/* * thread bits for qeth_card thread masks */enum qeth_threads { QETH_SET_IP_THREAD = 1, QETH_SET_MC_THREAD = 2, QETH_RECOVER_THREAD = 4,};struct qeth_card { struct list_head list; enum qeth_card_states state; int lan_online; spinlock_t lock;/*hardware and sysfs stuff*/ struct ccwgroup_device *gdev; struct qeth_channel read; struct qeth_channel write; struct qeth_channel data; struct net_device *dev; struct net_device_stats stats; struct qeth_card_info info; struct qeth_token token; struct qeth_seqno seqno; struct qeth_card_options options; wait_queue_head_t wait_q;#ifdef CONFIG_QETH_VLAN spinlock_t vlanlock; struct vlan_group *vlangrp;#endif struct work_struct kernel_thread_starter; spinlock_t thread_mask_lock; volatile unsigned long thread_start_mask; volatile unsigned long thread_allowed_mask; volatile unsigned long thread_running_mask; spinlock_t ip_lock; struct list_head ip_list; struct list_head ip_tbd_list; struct qeth_ipato ipato; struct list_head cmd_waiter_list; /* QDIO buffer handling */ struct qeth_qdio_info qdio;#ifdef CONFIG_QETH_PERF_STATS struct qeth_perf_stats perf_stats;#endif /* CONFIG_QETH_PERF_STATS */ int use_hard_stop;};struct qeth_card_list_struct { struct list_head list; rwlock_t rwlock;};extern struct qeth_card_list_struct qeth_card_list;/*notifier list */struct qeth_notify_list_struct { struct list_head list; struct task_struct *task; int signum;};extern spinlock_t qeth_notify_lock;extern struct list_head qeth_notify_list;/*some helper functions*/inline static __u8qeth_get_ipa_adp_type(enum qeth_link_types link_type){ switch (link_type) { case QETH_LINK_TYPE_HSTR: return 2; default: return 1; }}inline static intqeth_get_hlen(__u8 link_type){#ifdef CONFIG_QETH_IPV6 switch (link_type) { case QETH_LINK_TYPE_HSTR: case QETH_LINK_TYPE_LANE_TR: return sizeof(struct qeth_hdr) + TR_HLEN; default:#ifdef CONFIG_QETH_VLAN return sizeof(struct qeth_hdr) + VLAN_ETH_HLEN;#else return sizeof(struct qeth_hdr) + ETH_HLEN;#endif }#else /* CONFIG_QETH_IPV6 */#ifdef CONFIG_QETH_VLAN return sizeof(struct qeth_hdr) + VLAN_HLEN;#else return sizeof(struct qeth_hdr);#endif#endif /* CONFIG_QETH_IPV6 */}inline static unsigned shortqeth_get_netdev_flags(int cardtype){ switch (cardtype) { case QETH_CARD_TYPE_IQD: return IFF_NOARP;#ifdef CONFIG_QETH_IPV6 default: return 0;#else default: return IFF_NOARP;#endif }}inline static intqeth_get_initial_mtu_for_card(struct qeth_card * card){ switch (card->info.type) { case QETH_CARD_TYPE_UNKNOWN: return 1500; case QETH_CARD_TYPE_IQD: return card->info.max_mtu; case QETH_CARD_TYPE_OSAE: switch (card->info.link_type) { case QETH_LINK_TYPE_HSTR: case QETH_LINK_TYPE_LANE_TR: return 2000; default: return 1492; } default: return 1500; }}inline static intqeth_get_max_mtu_for_card(int cardtype){ switch (cardtype) { case QETH_CARD_TYPE_UNKNOWN: return 61440; case QETH_CARD_TYPE_OSAE: return 61440; case QETH_CARD_TYPE_IQD: return 57344; default: return 1500; }}inline static intqeth_get_mtu_out_of_mpc(int cardtype){ switch (cardtype) { case QETH_CARD_TYPE_IQD: return 1; default: return 0; }}inline static intqeth_get_mtu_outof_framesize(int framesize){ switch (framesize) { case 0x4000: return 8192; case 0x6000: return 16384; case 0xa000: return 32768; case 0xffff: return 57344; default: return 0; }}inline static intqeth_mtu_is_valid(struct qeth_card * card, int mtu){ switch (card->info.type) { case QETH_CARD_TYPE_OSAE: return ((mtu >= 576) && (mtu <= 61440)); case QETH_CARD_TYPE_IQD: return ((mtu >= 576) && (mtu <= card->info.max_mtu + 4096 - 32)); case QETH_CARD_TYPE_UNKNOWN: default: return 1; }}inline static intqeth_get_arphdr_type(int cardtype, int linktype){ switch (cardtype) { case QETH_CARD_TYPE_OSAE: switch (linktype) { case QETH_LINK_TYPE_LANE_TR: case QETH_LINK_TYPE_HSTR: return ARPHRD_IEEE802_TR; default: return ARPHRD_ETHER; } case QETH_CARD_TYPE_IQD: default: return ARPHRD_ETHER; }}#ifdef CONFIG_QETH_PERF_STATSinline static intqeth_get_micros(void){ return (int) (get_clock() >> 12);}#endifstatic inline intqeth_get_qdio_q_format(struct qeth_card *card){ switch (card->info.type) { case QETH_CARD_TYPE_IQD: return 2; default: return 0; }}static inline voidqeth_ipaddr4_to_string(const __u8 *addr, char *buf){ sprintf(buf, "%i.%i.%i.%i", addr[0], addr[1], addr[2], addr[3]);}static inline intqeth_string_to_ipaddr4(const char *buf, __u8 *addr){ const char *start, *end; char abuf[4]; char *tmp; int len; int i; start = buf; for (i = 0; i < 3; i++) { if (!(end = strchr(start, '.'))) return -EINVAL; len = end - start; memset(abuf, 0, 4); strncpy(abuf, start, len); addr[i] = simple_strtoul(abuf, &tmp, 10); start = end + 1; } memset(abuf, 0, 4); strcpy(abuf, start); addr[3] = simple_strtoul(abuf, &tmp, 10); return 0;}static inline voidqeth_ipaddr6_to_string(const __u8 *addr, char *buf){ sprintf(buf, "%02x%02x:%02x%02x:%02x%02x:%02x%02x" ":%02x%02x:%02x%02x:%02x%02x:%02x%02x", addr[0], addr[1], addr[2], addr[3], addr[4], addr[5], addr[6], addr[7], addr[8], addr[9], addr[10], addr[11], addr[12], addr[13], addr[14], addr[15]);}static inline intqeth_string_to_ipaddr6(const char *buf, __u8 *addr){ const char *start, *end; u16 *tmp_addr; char abuf[5]; char *tmp; int len; int i; tmp_addr = (u16 *)addr; start = buf; for (i = 0; i < 7; i++) { if (!(end = strchr(start, ':'))) return -EINVAL; len = end - start; memset(abuf, 0, 5); strncpy(abuf, start, len); tmp_addr[i] = simple_strtoul(abuf, &tmp, 16); start = end + 1; } memset(abuf, 0, 5); strcpy(abuf, start); tmp_addr[7] = simple_strtoul(abuf, &tmp, 16); return 0;}static inline voidqeth_ipaddr_to_string(enum qeth_prot_versions proto, const __u8 *addr, char *buf){ if (proto == QETH_PROT_IPV4) return qeth_ipaddr4_to_string(addr, buf); else if (proto == QETH_PROT_IPV6) return qeth_ipaddr6_to_string(addr, buf);}static inline intqeth_string_to_ipaddr(const char *buf, enum qeth_prot_versions proto, __u8 *addr){ if (proto == QETH_PROT_IPV4) return qeth_string_to_ipaddr4(buf, addr); else if (proto == QETH_PROT_IPV6) return qeth_string_to_ipaddr6(buf, addr); else return -EINVAL;}extern intqeth_setrouting_v4(struct qeth_card *);extern intqeth_setrouting_v6(struct qeth_card *);extern intqeth_add_ipato_entry(struct qeth_card *, struct qeth_ipato_entry *);extern voidqeth_del_ipato_entry(struct qeth_card *, enum qeth_prot_versions, u8 *, int);extern intqeth_add_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *);extern voidqeth_del_vipa(struct qeth_card *, enum qeth_prot_versions, const u8 *);extern intqeth_add_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *);extern voidqeth_del_rxip(struct qeth_card *, enum qeth_prot_versions, const u8 *);extern intqeth_notifier_register(struct task_struct *, int );extern intqeth_notifier_unregister(struct task_struct * );extern voidqeth_schedule_recovery(struct qeth_card *);extern intqeth_realloc_buffer_pool(struct qeth_card *, int);#endif /* __QETH_H__ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?