542 lines
		
	
	
	
		
			16 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			542 lines
		
	
	
	
		
			16 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
|   | /*
 | ||
|  |  *  Copyright (C) 1997 Cullen Jennings | ||
|  |  *  Copyright (C) 1998 Elmer.Joandi@ut.ee, +37-255-13500	 | ||
|  |  *  GNU General Public License applies | ||
|  |  */ | ||
|  | 
 | ||
|  | #include <linux/module.h>
 | ||
|  | #include <linux/config.h>
 | ||
|  | #include <linux/kernel.h>
 | ||
|  | #include <linux/types.h>
 | ||
|  | #include <linux/skbuff.h>
 | ||
|  | #include <linux/if_ether.h>	/* For the statistics structure. */
 | ||
|  | #include <linux/if_arp.h>	/* For ARPHRD_ETHER */
 | ||
|  | #include <linux/ptrace.h>
 | ||
|  | #include <linux/ioport.h>
 | ||
|  | #include <linux/in.h>
 | ||
|  | #include <linux/slab.h>
 | ||
|  | #include <linux/string.h>
 | ||
|  | #include <linux/timer.h>
 | ||
|  | 
 | ||
|  | #include <linux/init.h>
 | ||
|  | #include <linux/bitops.h>
 | ||
|  | #include <asm/system.h>
 | ||
|  | #include <asm/io.h>
 | ||
|  | #include <linux/errno.h>
 | ||
|  | #include <linux/delay.h>
 | ||
|  | #include <linux/netdevice.h>
 | ||
|  | #include <linux/etherdevice.h>
 | ||
|  | 
 | ||
|  | 
 | ||
|  | //#define ARLAN_DEBUGGING 1
 | ||
|  | 
 | ||
|  | #define ARLAN_PROC_INTERFACE
 | ||
|  | #define MAX_ARLANS 4 /* not more than 4 ! */
 | ||
|  | #define ARLAN_PROC_SHM_DUMP /* shows all card registers, makes driver way larger */
 | ||
|  | 
 | ||
|  | #define ARLAN_MAX_MULTICAST_ADDRS 16
 | ||
|  | #define ARLAN_RCV_CLEAN 	0
 | ||
|  | #define ARLAN_RCV_PROMISC 1
 | ||
|  | #define ARLAN_RCV_CONTROL 2
 | ||
|  | 
 | ||
|  | #ifdef CONFIG_PROC_FS
 | ||
|  | extern int init_arlan_proc(void); | ||
|  | extern void cleanup_arlan_proc(void); | ||
|  | #else
 | ||
|  | #define init_arlan_proc()	({ 0; })
 | ||
|  | #define cleanup_arlan_proc()	do { } while (0)
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | extern struct net_device *arlan_device[MAX_ARLANS]; | ||
|  | extern int	arlan_debug; | ||
|  | extern int	arlan_entry_debug; | ||
|  | extern int	arlan_exit_debug; | ||
|  | extern int	testMemory; | ||
|  | extern int     arlan_command(struct net_device * dev, int command); | ||
|  |   | ||
|  | #define SIDUNKNOWN -1
 | ||
|  | #define radioNodeIdUNKNOWN -1
 | ||
|  | #define irqUNKNOWN 0
 | ||
|  | #define debugUNKNOWN 0
 | ||
|  | #define testMemoryUNKNOWN 1
 | ||
|  | #define spreadingCodeUNKNOWN 0
 | ||
|  | #define channelNumberUNKNOWN 0
 | ||
|  | #define channelSetUNKNOWN 0
 | ||
|  | #define systemIdUNKNOWN -1
 | ||
|  | #define registrationModeUNKNOWN -1
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define IFDEBUG( L ) if ( (L) & arlan_debug ) 
 | ||
|  | #define ARLAN_FAKE_HDR_LEN 12 
 | ||
|  | 
 | ||
|  | #ifdef ARLAN_DEBUGGING
 | ||
|  | 	#define DEBUG 1
 | ||
|  | 	#define ARLAN_ENTRY_EXIT_DEBUGGING 1
 | ||
|  | 	#define ARLAN_DEBUG(a,b) printk(KERN_DEBUG a, b)
 | ||
|  | #else
 | ||
|  | 	#define ARLAN_DEBUG(a,b) 
 | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #define ARLAN_SHMEM_SIZE	0x2000
 | ||
|  | 
 | ||
|  | struct arlan_shmem | ||
|  | { | ||
|  |       /* Header Signature */  | ||
|  |       volatile	char textRegion[48]; | ||
|  |       volatile	u_char resetFlag; | ||
|  |       volatile	u_char  diagnosticInfo; | ||
|  |       volatile	u_short diagnosticOffset; | ||
|  |       volatile	u_char _1[12]; | ||
|  |       volatile	u_char lanCardNodeId[6]; | ||
|  |       volatile	u_char broadcastAddress[6]; | ||
|  |       volatile	u_char hardwareType; | ||
|  |       volatile	u_char majorHardwareVersion; | ||
|  |       volatile	u_char minorHardwareVersion; | ||
|  |       volatile	u_char radioModule;// shows EEPROM, can be overridden at 0x111
 | ||
|  |       volatile	u_char defaultChannelSet; // shows EEProm, can be overriiden at 0x10A
 | ||
|  |       volatile	u_char _2[47]; | ||
|  |        | ||
|  |       /* Control/Status Block - 0x0080 */ | ||
|  |       volatile	u_char interruptInProgress; /* not used by lancpu */ | ||
|  |       volatile	u_char cntrlRegImage; /* not used by lancpu */ | ||
|  |       volatile	u_char _3[13]; | ||
|  |       volatile	u_char dumpByte; | ||
|  |       volatile	u_char commandByte; /* non-zero = active */ | ||
|  |       volatile	u_char commandParameter[15]; | ||
|  | 
 | ||
|  |       /* Receive Status - 0x00a0 */ | ||
|  |       volatile	u_char rxStatus; /* 1- data, 2-control, 0xff - registr change */ | ||
|  |       volatile	u_char rxFrmType; | ||
|  |       volatile	u_short rxOffset; | ||
|  |       volatile	u_short rxLength; | ||
|  |       volatile	u_char rxSrc[6]; | ||
|  |       volatile	u_char rxBroadcastFlag; | ||
|  |       volatile	u_char rxQuality; | ||
|  |       volatile	u_char scrambled; | ||
|  |       volatile	u_char _4[1]; | ||
|  |        | ||
|  |       /* Transmit Status - 0x00b0 */ | ||
|  |       volatile	u_char txStatus; | ||
|  |       volatile	u_char txAckQuality; | ||
|  |       volatile	u_char numRetries; | ||
|  |       volatile	u_char _5[14]; | ||
|  |       volatile	u_char registeredRouter[6]; | ||
|  |       volatile	u_char backboneRouter[6]; | ||
|  |       volatile	u_char registrationStatus; | ||
|  |       volatile	u_char configuredStatusFlag; | ||
|  |       volatile	u_char _6[1]; | ||
|  |       volatile	u_char ultimateDestAddress[6]; | ||
|  |       volatile	u_char immedDestAddress[6]; | ||
|  |       volatile	u_char immedSrcAddress[6]; | ||
|  |       volatile	u_short rxSequenceNumber; | ||
|  |       volatile	u_char assignedLocaltalkAddress; | ||
|  |       volatile	u_char _7[27]; | ||
|  | 
 | ||
|  |       /* System Parameter Block */ | ||
|  | 
 | ||
|  |       /* - Driver Parameters (Novell Specific) */ | ||
|  | 
 | ||
|  |       volatile	u_short txTimeout; | ||
|  |       volatile	u_short transportTime; | ||
|  |       volatile	u_char _8[4]; | ||
|  | 
 | ||
|  |       /* - Configuration Parameters */ | ||
|  |       volatile	u_char irqLevel; | ||
|  |       volatile	u_char spreadingCode; | ||
|  |       volatile	u_char channelSet; | ||
|  |       volatile	u_char channelNumber; | ||
|  |       volatile	u_short radioNodeId; | ||
|  |       volatile	u_char _9[2]; | ||
|  |       volatile	u_char scramblingDisable; | ||
|  |       volatile	u_char radioType; | ||
|  |       volatile	u_short routerId; | ||
|  |       volatile	u_char _10[9]; | ||
|  |       volatile	u_char txAttenuation; | ||
|  |       volatile	u_char systemId[4];  | ||
|  |       volatile	u_short globalChecksum; | ||
|  |       volatile	u_char _11[4]; | ||
|  |       volatile	u_short maxDatagramSize; | ||
|  |       volatile	u_short maxFrameSize; | ||
|  |       volatile	u_char maxRetries; | ||
|  |       volatile	u_char receiveMode; | ||
|  |       volatile	u_char priority; | ||
|  |       volatile	u_char rootOrRepeater; | ||
|  |       volatile	u_char specifiedRouter[6]; | ||
|  |       volatile	u_short fastPollPeriod; | ||
|  |       volatile	u_char pollDecay; | ||
|  |       volatile	u_char fastPollDelay[2]; | ||
|  |       volatile	u_char arlThreshold; | ||
|  |       volatile	u_char arlDecay; | ||
|  |       volatile	u_char _12[1]; | ||
|  |       volatile	u_short specRouterTimeout; | ||
|  |       volatile	u_char _13[5]; | ||
|  | 
 | ||
|  |       /* Scrambled Area */ | ||
|  |       volatile	u_char SID[4]; | ||
|  |       volatile	u_char encryptionKey[12]; | ||
|  |       volatile	u_char _14[2]; | ||
|  |       volatile	u_char waitTime[2]; | ||
|  |       volatile	u_char lParameter[2]; | ||
|  |       volatile	u_char _15[3]; | ||
|  |       volatile	u_short headerSize; | ||
|  |       volatile	u_short sectionChecksum; | ||
|  | 
 | ||
|  |       volatile	u_char registrationMode; | ||
|  |       volatile	u_char registrationFill; | ||
|  |       volatile	u_short pollPeriod; | ||
|  |       volatile	u_short refreshPeriod; | ||
|  |       volatile	u_char name[16]; | ||
|  |       volatile	u_char NID[6]; | ||
|  |       volatile	u_char localTalkAddress; | ||
|  |       volatile	u_char codeFormat; | ||
|  |       volatile	u_char numChannels; | ||
|  |       volatile	u_char channel1; | ||
|  |       volatile	u_char channel2; | ||
|  |       volatile	u_char channel3; | ||
|  |       volatile	u_char channel4; | ||
|  |       volatile	u_char SSCode[59]; | ||
|  | 
 | ||
|  |       volatile	u_char _16[0xC0]; | ||
|  |       volatile	u_short auxCmd; | ||
|  |       volatile	u_char  dumpPtr[4]; | ||
|  |       volatile	u_char dumpVal; | ||
|  |       volatile	u_char _17[0x6A]; | ||
|  |       volatile	u_char wireTest; | ||
|  |       volatile	u_char _18[14]; | ||
|  | 
 | ||
|  |       /* Statistics Block - 0x0300 */ | ||
|  |       volatile	u_char hostcpuLock; | ||
|  |       volatile	u_char lancpuLock; | ||
|  |       volatile	u_char resetTime[18]; | ||
|  |        | ||
|  |       volatile	u_char numDatagramsTransmitted[4]; | ||
|  |       volatile	u_char numReTransmissions[4]; | ||
|  |       volatile	u_char numFramesDiscarded[4]; | ||
|  |       volatile	u_char numDatagramsReceived[4]; | ||
|  |       volatile	u_char numDuplicateReceivedFrames[4]; | ||
|  |       volatile	u_char numDatagramsDiscarded[4]; | ||
|  |        | ||
|  |       volatile	u_short maxNumReTransmitDatagram; | ||
|  |       volatile	u_short maxNumReTransmitFrames; | ||
|  |       volatile	u_short maxNumConsecutiveDuplicateFrames; | ||
|  |       /* misaligned here so we have to go to characters */ | ||
|  |       | ||
|  |       volatile	u_char numBytesTransmitted[4]; | ||
|  |       volatile	u_char numBytesReceived[4]; | ||
|  |       volatile	u_char numCRCErrors[4]; | ||
|  |       volatile	u_char numLengthErrors[4]; | ||
|  |       volatile	u_char numAbortErrors[4]; | ||
|  |       volatile	u_char numTXUnderruns[4]; | ||
|  |       volatile	u_char numRXOverruns[4]; | ||
|  |       volatile	u_char numHoldOffs[4]; | ||
|  |       volatile	u_char numFramesTransmitted[4]; | ||
|  |       volatile	u_char numFramesReceived[4]; | ||
|  |       volatile	u_char numReceiveFramesLost[4]; | ||
|  |       volatile	u_char numRXBufferOverflows[4]; | ||
|  |       volatile	u_char numFramesDiscardedAddrMismatch[4]; | ||
|  |       volatile	u_char numFramesDiscardedSIDMismatch[4]; | ||
|  |       volatile	u_char numPollsTransmistted[4]; | ||
|  |       volatile	u_char numPollAcknowledges[4]; | ||
|  |       volatile	u_char numStatusTimeouts[4]; | ||
|  |       volatile	u_char numNACKReceived[4]; | ||
|  | 
 | ||
|  |       volatile	u_char _19[0x86]; | ||
|  | 
 | ||
|  |       volatile	u_char txBuffer[0x800]; | ||
|  |       volatile	u_char rxBuffer[0x800]; | ||
|  | 
 | ||
|  |       volatile	u_char _20[0x800]; | ||
|  |       volatile	u_char _21[0x3fb]; | ||
|  |       volatile	u_char configStatus; | ||
|  |       volatile	u_char _22; | ||
|  |       volatile	u_char progIOCtrl; | ||
|  |       volatile	u_char shareMBase; | ||
|  |       volatile	u_char controlRegister; | ||
|  | }; | ||
|  | 
 | ||
|  | struct arlan_conf_stru { | ||
|  |       int spreadingCode; | ||
|  |       int channelSet; | ||
|  |       int channelNumber; | ||
|  |       int scramblingDisable; | ||
|  |       int txAttenuation; | ||
|  |       int systemId;  | ||
|  |       int maxDatagramSize; | ||
|  |       int maxFrameSize; | ||
|  |       int maxRetries; | ||
|  |       int receiveMode; | ||
|  |       int priority; | ||
|  |       int rootOrRepeater; | ||
|  |       int SID; | ||
|  |       int radioNodeId; | ||
|  |       int registrationMode; | ||
|  |       int registrationFill; | ||
|  |       int localTalkAddress; | ||
|  |       int codeFormat; | ||
|  |       int numChannels; | ||
|  |       int channel1; | ||
|  |       int channel2; | ||
|  |       int channel3; | ||
|  |       int channel4; | ||
|  |       int txClear; | ||
|  |       int txRetries; | ||
|  |       int txRouting; | ||
|  |       int txScrambled; | ||
|  |       int rxParameter; | ||
|  |       int txTimeoutMs; | ||
|  |       int txAckTimeoutMs; | ||
|  |       int waitCardTimeout; | ||
|  |       int	waitTime; | ||
|  |       int	lParameter; | ||
|  |       int	_15; | ||
|  |       int	headerSize; | ||
|  |       int retries; | ||
|  |       int tx_delay_ms; | ||
|  |       int waitReTransmitPacketMaxSize; | ||
|  |       int ReTransmitPacketMaxSize; | ||
|  |       int fastReTransCount; | ||
|  |       int driverRetransmissions; | ||
|  |       int registrationInterrupts; | ||
|  |       int hardwareType; | ||
|  |       int radioType; | ||
|  |       int writeRadioType; | ||
|  |       int writeEEPROM; | ||
|  |       char siteName[17]; | ||
|  |       int measure_rate; | ||
|  |       int in_speed; | ||
|  |       int out_speed; | ||
|  |       int in_speed10; | ||
|  |       int out_speed10; | ||
|  |       int in_speed_max; | ||
|  |       int out_speed_max; | ||
|  |       int pre_Command_Wait; | ||
|  |       int rx_tweak1; | ||
|  |       int rx_tweak2; | ||
|  |       int tx_queue_len; | ||
|  | }; | ||
|  | 
 | ||
|  | extern struct arlan_conf_stru arlan_conf[MAX_ARLANS]; | ||
|  | 
 | ||
|  | struct TxParam | ||
|  | { | ||
|  |       volatile	short 		offset; | ||
|  |       volatile 	short 		length; | ||
|  |       volatile	u_char 		dest[6]; | ||
|  |       volatile	unsigned	char clear; | ||
|  |       volatile	unsigned	char retries; | ||
|  |       volatile	unsigned	char routing; | ||
|  |       volatile	unsigned	char scrambled; | ||
|  | }; | ||
|  | 
 | ||
|  | #define TX_RING_SIZE 2
 | ||
|  | /* Information that need to be kept for each board. */ | ||
|  | struct arlan_private { | ||
|  |       struct net_device_stats stats; | ||
|  |       struct arlan_shmem __iomem * card; | ||
|  |       struct arlan_shmem * conf; | ||
|  | 
 | ||
|  |       struct arlan_conf_stru * Conf;	      | ||
|  |       int	bad; | ||
|  |       int 	reset; | ||
|  |       unsigned long lastReset; | ||
|  |       struct timer_list timer; | ||
|  |       struct timer_list tx_delay_timer; | ||
|  |       struct timer_list tx_retry_timer; | ||
|  |       struct timer_list rx_check_timer; | ||
|  | 
 | ||
|  |       int registrationLostCount; | ||
|  |       int reRegisterExp; | ||
|  |       int irq_test_done; | ||
|  | 
 | ||
|  |       struct TxParam txRing[TX_RING_SIZE]; | ||
|  |       char reTransmitBuff[0x800]; | ||
|  |       int txLast; | ||
|  |       unsigned ReTransmitRequested; | ||
|  |       unsigned long tx_done_delayed; | ||
|  |       unsigned long registrationLastSeen; | ||
|  | 
 | ||
|  |       unsigned long	tx_last_sent; | ||
|  |       unsigned long	tx_last_cleared; | ||
|  |       unsigned long	retransmissions; | ||
|  |       unsigned long 	interrupt_ack_requested; | ||
|  |       spinlock_t	lock; | ||
|  |       unsigned long	waiting_command_mask; | ||
|  |       unsigned long 	card_polling_interval; | ||
|  |       unsigned long 	last_command_buff_free_time; | ||
|  | 
 | ||
|  |       int 		under_reset; | ||
|  |       int 		under_config; | ||
|  |       int 		rx_command_given; | ||
|  |       int	 	tx_command_given; | ||
|  |       unsigned  long	interrupt_processing_active; | ||
|  |       unsigned long	last_rx_int_ack_time; | ||
|  |       unsigned long	in_bytes; | ||
|  |       unsigned long 	out_bytes; | ||
|  |       unsigned long	in_time; | ||
|  |       unsigned long	out_time; | ||
|  |       unsigned long	in_time10; | ||
|  |       unsigned long	out_time10; | ||
|  |       unsigned long	in_bytes10; | ||
|  |       unsigned long 	out_bytes10; | ||
|  |       int	init_etherdev_alloc; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define ARLAN_CLEAR		0x00
 | ||
|  | #define ARLAN_RESET 		0x01
 | ||
|  | #define ARLAN_CHANNEL_ATTENTION 0x02
 | ||
|  | #define ARLAN_INTERRUPT_ENABLE 	0x04
 | ||
|  | #define ARLAN_CLEAR_INTERRUPT 	0x08
 | ||
|  | #define ARLAN_POWER 		0x40
 | ||
|  | #define ARLAN_ACCESS		0x80
 | ||
|  | 
 | ||
|  | #define ARLAN_COM_CONF                0x01
 | ||
|  | #define ARLAN_COM_RX_ENABLE           0x03
 | ||
|  | #define ARLAN_COM_RX_ABORT            0x04
 | ||
|  | #define ARLAN_COM_TX_ENABLE           0x05
 | ||
|  | #define ARLAN_COM_TX_ABORT            0x06
 | ||
|  | #define ARLAN_COM_NOP		      0x07
 | ||
|  | #define ARLAN_COM_STANDBY             0x08
 | ||
|  | #define ARLAN_COM_ACTIVATE            0x09
 | ||
|  | #define ARLAN_COM_GOTO_SLOW_POLL      0x0a
 | ||
|  | #define ARLAN_COM_INT                 0x80
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define TXLAST(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[((struct arlan_private *)netdev_priv(dev))->txLast])
 | ||
|  | #define TXHEAD(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[0])
 | ||
|  | #define TXTAIL(dev) (((struct arlan_private *)netdev_priv(dev))->txRing[1])
 | ||
|  | 
 | ||
|  | #define TXBuffStart(dev) offsetof(struct arlan_shmem, txBuffer)
 | ||
|  | #define TXBuffEnd(dev) offsetof(struct arlan_shmem, xxBuffer)
 | ||
|  |   | ||
|  | #define READSHM(to,from,atype) {\
 | ||
|  | 	atype tmp;\ | ||
|  | 	memcpy_fromio(&(tmp),&(from),sizeof(atype));\ | ||
|  | 	to = tmp;\ | ||
|  | 	} | ||
|  | 
 | ||
|  | #define READSHMEM(from,atype)\
 | ||
|  | 	atype from; \ | ||
|  | 	READSHM(from, arlan->from, atype); | ||
|  | 
 | ||
|  | #define WRITESHM(to,from,atype) \
 | ||
|  | 	{ atype tmpSHM = from;\ | ||
|  | 	memcpy_toio(&(to),&tmpSHM,sizeof(atype));\ | ||
|  | 	} | ||
|  | 
 | ||
|  | #define DEBUGSHM(levelSHM,stringSHM,stuff,atype) \
 | ||
|  | 	{	atype tmpSHM; \ | ||
|  | 		memcpy_fromio(&tmpSHM,&(stuff),sizeof(atype));\ | ||
|  | 		IFDEBUG(levelSHM) printk(stringSHM,tmpSHM);\ | ||
|  | 	} | ||
|  | 
 | ||
|  | #define WRITESHMB(to, val) \
 | ||
|  | 	writeb(val,&(to)) | ||
|  | #define READSHMB(to) \
 | ||
|  | 	readb(&(to)) | ||
|  | #define WRITESHMS(to, val) \
 | ||
|  | 	writew(val,&(to)) | ||
|  | #define READSHMS(to) \
 | ||
|  | 	readw(&(to)) | ||
|  | #define WRITESHMI(to, val) \
 | ||
|  | 	writel(val,&(to)) | ||
|  | #define READSHMI(to) \
 | ||
|  | 	readl(&(to)) | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define registrationBad(dev)\
 | ||
|  |    ( (   READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationMode)    > 0) && \ | ||
|  |      (   READSHMB(((struct arlan_private *)netdev_priv(dev))->card->registrationStatus) == 0)    ) | ||
|  | 
 | ||
|  | 
 | ||
|  | #define readControlRegister(dev)\
 | ||
|  |  	READSHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage) | ||
|  | 
 | ||
|  | #define writeControlRegister(dev, v){\
 | ||
|  |    WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->cntrlRegImage	,((v) &0xF) );\ | ||
|  |    WRITESHMB(((struct arlan_private *)netdev_priv(dev))->card->controlRegister	,(v) 	);} | ||
|  | 
 | ||
|  | 
 | ||
|  | #define arlan_interrupt_lancpu(dev) {\
 | ||
|  |    int cr;   \ | ||
|  |    \ | ||
|  |    cr = readControlRegister(dev);\ | ||
|  |    if (cr & ARLAN_CHANNEL_ATTENTION){ \ | ||
|  |       writeControlRegister(dev, (cr & ~ARLAN_CHANNEL_ATTENTION));\ | ||
|  |    }else  \ | ||
|  |       writeControlRegister(dev, (cr | ARLAN_CHANNEL_ATTENTION));\ | ||
|  | } | ||
|  | 
 | ||
|  | #define clearChannelAttention(dev){ \
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CHANNEL_ATTENTION);} | ||
|  | #define setHardwareReset(dev) {\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) | ARLAN_RESET);} | ||
|  | #define clearHardwareReset(dev) {\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_RESET);} | ||
|  | #define setInterruptEnable(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) | ARLAN_INTERRUPT_ENABLE)  ;} | ||
|  | #define clearInterruptEnable(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_INTERRUPT_ENABLE)  ;} | ||
|  | #define setClearInterrupt(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) | ARLAN_CLEAR_INTERRUPT)   ;} | ||
|  | #define clearClearInterrupt(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_CLEAR_INTERRUPT);} | ||
|  | #define setPowerOff(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) | (ARLAN_POWER && ARLAN_ACCESS));\ | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);} | ||
|  | #define setPowerOn(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~(ARLAN_POWER));   } | ||
|  | #define arlan_lock_card_access(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) & ~ARLAN_ACCESS);} | ||
|  | #define arlan_unlock_card_access(dev){\
 | ||
|  |    writeControlRegister(dev,readControlRegister(dev) | ARLAN_ACCESS ); }   | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | #define ARLAN_COMMAND_RX		0x000001
 | ||
|  | #define ARLAN_COMMAND_NOOP		0x000002
 | ||
|  | #define ARLAN_COMMAND_NOOPINT		0x000004
 | ||
|  | #define ARLAN_COMMAND_TX		0x000008
 | ||
|  | #define ARLAN_COMMAND_CONF		0x000010
 | ||
|  | #define ARLAN_COMMAND_RESET		0x000020
 | ||
|  | #define ARLAN_COMMAND_TX_ABORT		0x000040
 | ||
|  | #define ARLAN_COMMAND_RX_ABORT		0x000080
 | ||
|  | #define ARLAN_COMMAND_POWERDOWN		0x000100
 | ||
|  | #define ARLAN_COMMAND_POWERUP		0x000200
 | ||
|  | #define ARLAN_COMMAND_SLOW_POLL 	0x000400
 | ||
|  | #define ARLAN_COMMAND_ACTIVATE 		0x000800
 | ||
|  | #define ARLAN_COMMAND_INT_ACK		0x001000
 | ||
|  | #define ARLAN_COMMAND_INT_ENABLE	0x002000
 | ||
|  | #define ARLAN_COMMAND_WAIT_NOW		0x004000
 | ||
|  | #define ARLAN_COMMAND_LONG_WAIT_NOW	0x008000
 | ||
|  | #define ARLAN_COMMAND_STANDBY		0x010000
 | ||
|  | #define ARLAN_COMMAND_INT_RACK		0x020000
 | ||
|  | #define ARLAN_COMMAND_INT_RENABLE	0x040000
 | ||
|  | #define ARLAN_COMMAND_CONF_WAIT		0x080000
 | ||
|  | #define ARLAN_COMMAND_TBUSY_CLEAR	0x100000
 | ||
|  | #define ARLAN_COMMAND_CLEAN_AND_CONF	(ARLAN_COMMAND_TX_ABORT\
 | ||
|  | 					| ARLAN_COMMAND_RX_ABORT\ | ||
|  | 					| ARLAN_COMMAND_CONF) | ||
|  | #define ARLAN_COMMAND_CLEAN_AND_RESET   (ARLAN_COMMAND_TX_ABORT\
 | ||
|  | 					| ARLAN_COMMAND_RX_ABORT\ | ||
|  | 					| ARLAN_COMMAND_RESET) | ||
|  | 
 | ||
|  | 
 | ||
|  |   | ||
|  | #define ARLAN_DEBUG_CHAIN_LOCKS		0x00001
 | ||
|  | #define ARLAN_DEBUG_RESET		0x00002
 | ||
|  | #define ARLAN_DEBUG_TIMING		0x00004
 | ||
|  | #define ARLAN_DEBUG_CARD_STATE		0x00008
 | ||
|  | #define ARLAN_DEBUG_TX_CHAIN		0x00010
 | ||
|  | #define ARLAN_DEBUG_MULTICAST		0x00020
 | ||
|  | #define ARLAN_DEBUG_HEADER_DUMP		0x00040
 | ||
|  | #define ARLAN_DEBUG_INTERRUPT		0x00080
 | ||
|  | #define ARLAN_DEBUG_STARTUP		0x00100
 | ||
|  | #define ARLAN_DEBUG_SHUTDOWN		0x00200
 | ||
|  |   |