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

📄 arcdevice.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
字号:
/* * INET		An implementation of the TCP/IP protocol suite for the LINUX *		operating system.  NET  is implemented using the  BSD Socket *		interface as the means of communication with the user level. * *		Definitions for the ARCnet handlers. * * Version:	$Id: arcdevice.h,v 1.3 1997/11/09 11:05:05 mj Exp $ * * Authors:	Avery Pennarun <apenwarr@bond.net> *              David Woodhouse <dwmw2@cam.ac.uk> * *		This program is free software; you can redistribute it and/or *		modify it under the terms of the GNU General Public License *		as published by the Free Software Foundation; either version *		2 of the License, or (at your option) any later version. * */#ifndef _LINUX_ARCDEVICE_H#define _LINUX_ARCDEVICE_H#include <linux/config.h>#include <linux/if_arcnet.h>#ifdef __KERNEL__#define ARC_20020     1#define ARC_RIM_I     2#define ARC_90xx      3#define ARC_90xx_IO   4#define MAX_ARCNET_DEVS 8/* The card sends the reconfiguration signal when it loses the connection to * the rest of its network. It is a 'Hello, is anybody there?' cry.  This * usually happens when a new computer on the network is powered on or when * the cable is broken. * * Define DETECT_RECONFIGS if you want to detect network reconfigurations. * Recons may be a real nuisance on a larger ARCnet network; if you are a * network administrator you probably would like to count them. * Reconfigurations will be recorded in stats.tx_carrier_errors (the last * field of the /proc/net/dev file). * * Define SHOW_RECONFIGS if you really want to see a log message whenever * a RECON occurs. */#define DETECT_RECONFIGS#undef SHOW_RECONFIGS/* RECON_THRESHOLD is the maximum number of RECON messages to receive within * one minute before printing a "cabling problem" warning.  You must have * DETECT_RECONFIGS enabled if you want to use this.  The default value * should be fine. * * After that, a "cabling restored" message will be printed on the next IRQ * if no RECON messages have been received for 10 seconds. * * Do not define RECON_THRESHOLD at all if you want to disable this feature. */#define RECON_THRESHOLD 30/* Define this to the minimum "timeout" value.  If a transmit takes longer * than TX_TIMEOUT jiffies, Linux will abort the TX and retry.  On a large * network, or one with heavy network traffic, this timeout may need to be * increased.  The larger it is, though, the longer it will be between * necessary transmits - don't set this too large. */#define TX_TIMEOUT (20*HZ/100)/* Display warnings about the driver being an ALPHA version. */#undef ALPHA_WARNING/* New debugging bitflags: each option can be enabled individually. * * These can be set while the driver is running by typing: *	ifconfig arc0 down metric 1xxx HOSTNAME *		where 1xxx is 1000 + the debug level you want *		and HOSTNAME is your hostname/ip address * and then resetting your routes. * * An ioctl() should be used for this instead, someday. * * Note: only debug flags included in the ARCNET_DEBUG_MAX define will *   actually be available.  GCC will (at least, GCC 2.7.0 will) notice *   lines using a BUGLVL not in ARCNET_DEBUG_MAX and automatically optimize *   them out. */#define D_NORMAL	1	/* important operational info		*/#define D_EXTRA		2	/* useful, but non-vital information	*/#define	D_INIT		4	/* show init/probe messages		*/#define D_INIT_REASONS	8	/* show reasons for discarding probes	*//* debug levels below give LOTS of output during normal operation! */#define D_DURING	16	/* trace operations (including irq's)	*/#define D_TX		32	/* show tx packets			*/#define D_RX		64	/* show rx packets			*/#define D_SKB		128	/* show skb's				*/#ifndef ARCNET_DEBUG_MAX#define ARCNET_DEBUG_MAX (~0)		/* enable ALL debug messages	 */#endif#ifndef ARCNET_DEBUG#define ARCNET_DEBUG (D_NORMAL|D_EXTRA)#endifextern int arcnet_debug;/* macros to simplify debug checking */#define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x))#define BUGMSG2(x,msg,args...) do { BUGLVL(x) printk(msg, ## args); } while (0)#define BUGMSG(x,msg,args...) \	BUGMSG2(x,"%s%6s: " msg, \            x==D_NORMAL	? KERN_WARNING : \      x<=D_INIT_REASONS	? KERN_INFO    : KERN_DEBUG , \	dev->name , ## args)#define SETMASK AINTMASK(lp->intmask)	/* Time needed to resetthe card - in jiffies.  This works on my SMC	 * PC100.  I can't find a reference that tells me just how long I	 * should wait.	 */#define RESETtime (HZ * 3 / 10)		/* reset */	/* these are the max/min lengths of packet data. (including	 * ClientData header)	 * note: packet sizes 250, 251, 252 are impossible (God knows why)	 *  so exception packets become necessary.	 *	 * These numbers are compared with the length of the full packet,	 * including ClientData header.	 */#define MTU	253	/* normal packet max size */#define MinTU	257	/* extended packet min size */#define XMTU	508	/* extended packet max size */	/* status/interrupt mask bit fields */#define TXFREEflag	0x01            /* transmitter available */#define TXACKflag       0x02            /* transmitted msg. ackd */#define RECONflag       0x04            /* system reconfigured */#define TESTflag        0x08            /* test flag */#define RESETflag       0x10            /* power-on-reset */#define RES1flag        0x20            /* reserved - usually set by jumper */#define RES2flag        0x40            /* reserved - usually set by jumper */#define NORXflag        0x80            /* receiver inhibited */       /* Flags used for IO-mapped memory operations */#define AUTOINCflag     0x40    /* Increase location with each access */#define IOMAPflag       0x02    /* (for 90xx) Use IO mapped memory, not mmap */#define ENABLE16flag    0x80    /* (for 90xx) Enable 16-bit mode */       /* in the command register, the following bits have these meanings:        *                0-2     command        *                3-4     page number (for enable rcv/xmt command)        *                 7      receive broadcasts        */#define NOTXcmd         0x01            /* disable transmitter */#define NORXcmd         0x02            /* disable receiver */#define TXcmd           0x03            /* enable transmitter */#define RXcmd           0x04            /* enable receiver */#define CONFIGcmd       0x05            /* define configuration */#define CFLAGScmd       0x06            /* clear flags */#define TESTcmd         0x07            /* load test flags */       /* flags for "clear flags" command */#define RESETclear      0x08            /* power-on-reset */#define CONFIGclear     0x10            /* system reconfigured */	/* flags for "load test flags" command */#define TESTload        0x08            /* test flag (diagnostic) */	/* byte deposited into first address of buffers on reset */#define TESTvalue       0321		 /* that's octal for 0xD1 :) */	/* for "enable receiver" command */#define RXbcasts        0x80            /* receive broadcasts */	/* flags for "define configuration" command */#define NORMALconf      0x00            /* 1-249 byte packets */#define EXTconf         0x08            /* 250-504 byte packets */	/* Starts receiving packets into recbuf.	 */#define EnableReceiver()	ACOMMAND(RXcmd|(recbuf<<3)|RXbcasts)#define JIFFER(time) for (delayval=jiffies+time; time_before(jiffies,delayval);) ;	/* a complete ARCnet packet */union ArcPacket{	struct archdr hardheader;	/* the hardware header */	u_char raw[512];		/* raw packet info, incl ClientData */};	/* the "client data" header - RFC1201 information	 * notice that this screws up if it's not an even number of bytes	 * <sigh>	 */struct ClientData{	/* data that's NOT part of real packet - we MUST get rid of it before	 * actually sending!!	 */	u_char  saddr,		/* Source address - needed for IPX */		daddr;		/* Destination address */	/* data that IS part of real packet */	u_char	protocol_id,	/* ARC_P_IP, ARC_P_ARP, etc */		split_flag;	/* for use with split packets */	u_short	sequence;	/* sequence number */};#define EXTRA_CLIENTDATA (sizeof(struct ClientData)-4)	/* the "client data" header - RFC1051 information	 * this also screws up if it's not an even number of bytes	 * <sigh again>	 */struct S_ClientData{	/* data that's NOT part of real packet - we MUST get rid of it before	 * actually sending!!	 */	u_char  saddr,		/* Source address - needed for IPX */		daddr,		/* Destination address */		junk;		/* padding to make an even length */	/* data that IS part of real packet */	u_char	protocol_id;	/* ARC_P_IP, ARC_P_ARP, etc */};#define S_EXTRA_CLIENTDATA (sizeof(struct S_ClientData)-1)/* "Incoming" is information needed for each address that could be sending * to us.  Mostly for partially-received split packets. */struct Incoming{	struct sk_buff *skb;		/* packet data buffer             */	unsigned char lastpacket,	/* number of last packet (from 1) */		      numpackets;	/* number of packets in split     */	u_short sequence;		/* sequence number of assembly	  */};struct Outgoing{	struct sk_buff *skb;		/* buffer from upper levels */	struct ClientData *hdr;		/* clientdata of last packet */	u_char *data;			/* pointer to data in packet */	short length,			/* bytes total */	      dataleft,			/* bytes left */	      segnum,			/* segment being sent */	      numsegs,			/* number of segments */	      seglen;			/* length of segment */};struct arcnet_local {  struct net_device_stats stats;  u_short sequence;	/* sequence number (incs with each packet) */  u_short aborted_seq;  u_char stationid,	/* our 8-bit station address */    recbuf,		/* receive buffer # (0 or 1) */    txbuf,		/* transmit buffer # (2 or 3) */    txready,		/* buffer where a packet is ready to send */    config,		/* current value of CONFIG register */    timeout,		/* Extended timeout for COM20020 */    backplane,		/* Backplane flag for COM20020 */         setup,		/* Contents of setup register */    intmask;		/* current value of INTMASK register */  short intx,		/* in TX routine? */    in_txhandler,	/* in TX_IRQ handler? */    sending,		/* transmit in progress? */    lastload_dest,	/* can last loaded packet be acked? */    lasttrans_dest;	/* can last TX'd packet be acked? */  #if defined(DETECT_RECONFIGS) && defined(RECON_THRESHOLD)  time_t first_recon,	/* time of "first" RECON message to count */    last_recon;		/* time of most recent RECON */  int num_recons,	/* number of RECONs between first and last. */    network_down;	/* do we think the network is down? */#endif    struct timer_list timer; /* the timer interrupt struct */  struct Incoming incoming[256];	/* one from each address */  struct Outgoing outgoing; /* packet currently being sent */    int card_type;  char *card_type_str;    void (*inthandler) (struct device *dev);  int (*arcnet_reset) (struct device *dev, int reset_delay);  void (*asetmask) (struct device *dev, u_char mask);  void (*acommand) (struct device *dev, u_char command);  u_char (*astatus) (struct device *dev);  void (*en_dis_able_TX) (struct device *dev, int enable);   void (*prepare_tx)(struct device *dev,u_char *hdr,int hdrlen,		     char *data,int length,int daddr,int exceptA, int offset);  void (*openclose_device)(int open);      struct device *adev;	/* RFC1201 protocol device */    /* These are last to ensure that the chipset drivers don't depend on the   * CONFIG_ARCNET_ETH and CONFIG_ARCNET_1051 options.    */  #ifdef CONFIG_ARCNET_ETH  struct device *edev;	/* Ethernet-Encap device */#endif  #ifdef CONFIG_ARCNET_1051  struct device *sdev;	/* RFC1051 protocol device */#endif};/* Functions exported by arcnet.c */#if ARCNET_DEBUG_MAX & D_SKBextern void arcnet_dump_skb(struct device *dev,struct sk_buff *skb,			    char *desc);#else#define arcnet_dump_skb(dev,skb,desc) ;#endif#if (ARCNET_DEBUG_MAX & D_RX) || (ARCNET_DEBUG_MAX & D_TX)extern void arcnet_dump_packet(struct device *dev,u_char *buffer,int ext,			       char *desc);#else#define arcnet_dump_packet(dev,buffer,ext,desc) ;#endifextern void arcnet_tx_done(struct device *dev, struct arcnet_local *lp);extern void arcnet_makename(char *device);extern void arcnet_interrupt(int irq,void *dev_id,struct pt_regs *regs);extern void arcnet_setup(struct device *dev);extern int arcnet_go_tx(struct device *dev,int enable_irq);extern void arcnetA_continue_tx(struct device *dev);extern void arcnet_rx(struct arcnet_local *lp, u_char *arcsoft, short length, int saddr, int daddr);extern void arcnet_use_count(int open);#endif  /* __KERNEL__ */#endif	/* _LINUX_ARCDEVICE_H */

⌨️ 快捷键说明

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