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