/* 
 * tms380tr.h: TI TMS380 Token Ring driver for Linux
 *
 * Authors:
 * - Christoph Goos <cgoos@syskonnect.de>
 * - Adam Fritzler
 */

#ifndef __LINUX_TMS380TR_H
#define __LINUX_TMS380TR_H

#ifdef __KERNEL__

#include <linux/interrupt.h>

/* module prototypes */
extern const struct net_device_ops tms380tr_netdev_ops;
int tms380tr_open(struct net_device *dev);
int tms380tr_close(struct net_device *dev);
irqreturn_t tms380tr_interrupt(int irq, void *dev_id);
int tmsdev_init(struct net_device *dev, struct device *pdev);
void tmsdev_term(struct net_device *dev);
void tms380tr_wait(unsigned long time);

#define TMS380TR_MAX_ADAPTERS 7

#define SEND_TIMEOUT 10*HZ

#define TR_RCF_LONGEST_FRAME_MASK 0x0070
#define TR_RCF_FRAME4K 0x0030

/*------------------------------------------------------------------*/
/*  Bit order for adapter communication with DMA		    */
/*  --------------------------------------------------------------  */
/*  Bit  8 | 9| 10| 11|| 12| 13| 14| 15|| 0| 1| 2| 3|| 4| 5| 6| 7|  */
/*  --------------------------------------------------------------  */
/*  The bytes in a word must be byte swapped. Also, if a double	    */
/*  word is used for storage, then the words, as well as the bytes, */
/*  must be swapped. 						    */
/*  Bit order for adapter communication with DIO 		    */
/*  --------------------------------------------------------------  */
/*  Bit  0 | 1| 2| 3|| 4| 5| 6| 7|| 8| 9| 10| 11|| 12| 13| 14| 15|  */
/*  --------------------------------------------------------------  */
/*------------------------------------------------------------------*/

/* Swap words of a long.                        */
#define SWAPW(x) (((x) << 16) | ((x) >> 16))

/* Get the low byte of a word.                      */
#define LOBYTE(w)       ((unsigned char)(w))

/* Get the high byte of a word.                     */
#define HIBYTE(w)       ((unsigned char)((unsigned short)(w) >> 8))

/* Get the low word of a long.                      */
#define LOWORD(l)       ((unsigned short)(l))

/* Get the high word of a long.                     */
#define HIWORD(l)       ((unsigned short)((unsigned long)(l) >> 16))



/* Token ring adapter I/O addresses for normal mode. */

/*
 * The SIF registers.  Common to all adapters.
 */
/* Basic SIF (SRSX = 0) */
#define SIFDAT      		0x00	/* SIF/DMA data. */
#define SIFINC      		0x02  	/* IO Word data with auto increment. */
#define SIFINH      		0x03  	/* IO Byte data with auto increment. */
#define SIFADR      		0x04  	/* SIF/DMA Address. */
#define SIFCMD      		0x06  	/* SIF Command. */
#define SIFSTS      		0x06  	/* SIF Status. */

/* "Extended" SIF (SRSX = 1) */
#define SIFACL      		0x08  	/* SIF Adapter Control Register. */
#define SIFADD      		0x0a 	/* SIF/DMA Address. -- 0x0a */
#define SIFADX      		0x0c     /* 0x0c */
#define DMALEN      		0x0e 	/* SIF DMA length. -- 0x0e */

/*
 * POS Registers.  Only for ISA Adapters.
 */
#define POSREG      		0x10 	/* Adapter Program Option Select (POS)
			 		 * Register: base IO address + 16 byte.
			 		 */
#define POSREG_2    		24L 	/* only for TR4/16+ adapter
			 		 * base IO address + 24 byte. -- 0x18
			 		 */

/* SIFCMD command codes (high-low) */
#define CMD_INTERRUPT_ADAPTER   0x8000  /* Cause internal adapter interrupt */
#define CMD_ADAPTER_RESET   	0x4000  /* Hardware reset of adapter */
#define CMD_SSB_CLEAR		0x2000  /* Acknowledge to adapter to
					 * system interrupts.
					 */
#define CMD_EXECUTE		0x1000	/* Execute SCB command */
#define CMD_SCB_REQUEST		0x0800  /* Request adapter to interrupt
					 * system when SCB is available for
					 * another command.
					 */
#define CMD_RX_CONTINUE		0x0400  /* Continue receive after odd pointer
					 * stop. (odd pointer receive method)
					 */
#define CMD_RX_VALID		0x0200  /* Now actual RPL is valid. */
#define CMD_TX_VALID		0x0100  /* Now actual TPL is valid. (valid
					 * bit receive/transmit method)
					 */
#define CMD_SYSTEM_IRQ		0x0080  /* Adapter-to-attached-system
					 * interrupt is reset.
					 */
#define CMD_CLEAR_SYSTEM_IRQ	0x0080	/* Clear SYSTEM_INTERRUPT bit.
					 * (write: 1=ignore, 0=reset)
					 */
#define EXEC_SOFT_RESET		0xFF00  /* adapter soft reset. (restart
					 * adapter after hardware reset)
					 */


/* ACL commands (high-low) */
#define ACL_SWHLDA		0x0800  /* Software hold acknowledge. */
#define ACL_SWDDIR		0x0400  /* Data transfer direction. */
#define ACL_SWHRQ		0x0200  /* Pseudo DMA operation. */
#define ACL_PSDMAEN		0x0100  /* Enable pseudo system DMA. */
#define ACL_ARESET		0x0080  /* Adapter hardware reset command.
					 * (held in reset condition as
					 * long as bit is set)
					 */
#define ACL_CPHALT		0x0040  /* Communication processor halt.
					 * (can only be set while ACL_ARESET
					 * bit is set; prevents adapter
					 * processor from executing code while
					 * downloading firmware)
					 */
#define ACL_BOOT		0x0020
#define ACL_SINTEN		0x0008  /* System interrupt enable/disable
					 * (1/0): can be written if ACL_ARESET
					 * is zero.
					 */
#define ACL_PEN                 0x0004

#define ACL_NSELOUT0            0x0002 
#define ACL_NSELOUT1            0x0001	/* NSELOUTx have a card-specific
					 * meaning for setting ring speed.
					 */

#define PS_DMA_MASK		(ACL_SWHRQ | ACL_PSDMAEN)


/* SIFSTS register return codes (high-low) */
#define STS_SYSTEM_IRQ		0x0080	/* Adapter-to-attached-system
					 * interrupt is valid.
					 */
#define STS_INITIALIZE		0x0040  /* INITIALIZE status. (ready to
					 * initialize)
					 */
#define STS_TEST		0x0020  /* TEST status. (BUD not completed) */
#define STS_ERROR		0x0010  /* ERROR status. (unrecoverable
					 * HW error occurred)
					 */
#define STS_MASK		0x00F0  /* Mask interesting status bits. */
#define STS_ERROR_MASK		0x000F  /* Get Error Code by masking the
					 * interrupt code bits.
					 */
#define ADAPTER_INT_PTRS	0x0A00  /* Address offset of adapter internal
					 * pointers 01:0a00 (high-low) have to
					 * be read after init and before open.
					 */


/* Interrupt Codes (only MAC IRQs) */
#define STS_IRQ_ADAPTER_CHECK	0x0000	/* unrecoverable hardware or
					 * software error.
					 */ 
#define STS_IRQ_RING_STATUS	0x0004  /* SSB is updated with ring status. */
#define STS_IRQ_LLC_STATUS	0x0005	/* Not used in MAC-only microcode */
#define STS_IRQ_SCB_CLEAR	0x0006	/* SCB clear, following an
					 * SCB_REQUEST IRQ.
					 */
#define STS_IRQ_TIMER		0x0007	/* Not normally used in MAC ucode */
#define STS_IRQ_COMMAND_STATUS	0x0008	/* SSB is updated with command 
					 * status.
					 */ 
#define STS_IRQ_RECEIVE_STATUS	0x000A	/* SSB is updated with receive
					 * status.
					 */
#define STS_IRQ_TRANSMIT_STATUS	0x000C	/* SSB is updated with transmit
                                         * status
					 */
#define STS_IRQ_RECEIVE_PENDING	0x000E	/* Not used in MAC-only microcode */
#define STS_IRQ_MASK		0x000F	/* = STS_ERROR_MASK. */


/* TRANSMIT_STATUS completion code: (SSB.Parm[0]) */
#define COMMAND_COMPLETE	0x0080	/* TRANSMIT command completed
                                         * (avoid this!) issue another transmit
					 * to send additional frames.
					 */
#define FRAME_COMPLETE		0x0040	/* Frame has been transmitted;
					 * INTERRUPT_FRAME bit was set in the
					 * CSTAT request; indication of possibly
					 * more than one frame transmissions!
					 * SSB.Parm[0-1]: 32 bit pointer to
					 * TPL of last frame.
					 */
#define LIST_ERROR		0x0020	/* Error in one of the TPLs that
					 * compose the frame; TRANSMIT
					 * terminated; Parm[1-2]: 32bit pointer
					 * to TPL which starts the error
					 * frame; error details in bits 8-13.
					 * (14?)
					 */
#define FRAME_SIZE_ERROR	0x8000	/* FRAME_SIZE does not equal the sum of
					 * the valid DATA_COUNT fields;
					 * FRAME_SIZE less than header plus
					 * information field. (15 bytes +
					 * routing field) Or if FRAME_SIZE
					 * was specified as zero in one list.
					 */
#define TX_THRESHOLD		0x4000	/* FRAME_SIZE greater than (BUFFER_SIZE
					 * - 9) * TX_BUF_MAX.
					 */
#define ODD_ADDRESS		0x2000	/* Odd forward pointer value is
					 * read on a list without END_FRAME
					 * indication.
					 */
#define FRAME_ERROR		0x1000	/* START_FRAME bit (not) anticipated,
					 * but (not) set.
					 */
#define ACCESS_PRIORITY_ERROR	0x0800	/* Access priority requested has not
					 * been allowed.
					 */
#define UNENABLED_MAC_FRAME	0x0400	/* MAC frame has source class of zero
					 * or MAC frame PCF ATTN field is
					 * greater than one.
					 */
#define ILLEGAL_FRAME_FORMAT	0x0200	/* Bit 0 or FC field was set to one. */


/*
 * Since we need to support some functions even if the adapter is in a
 * CLOSED state, we have a (pseudo-) command queue which holds commands
 * that are outstandig to be executed.
 *
 * Each time a command completes, an interrupt occurs and the next
 * command is executed. The command queue is actually a simple word with 
 * a bit for each outstandig command. Therefore the commands will not be
 * executed in the order they have been queued.
 *
 * The following defines the command code bits and the command queue:
 */
#define OC_OPEN			0x0001	/* OPEN command */
#define OC_TRANSMIT		0x0002	/* TRANSMIT command */
#define OC_TRANSMIT_HALT	0x0004	/* TRANSMIT_HALT command */
#define OC_RECEIVE		0x0008	/* RECEIVE command */
#define OC_CLOSE		0x0010	/* CLOSE command */
#define OC_SET_GROUP_ADDR	0x0020	/* SET_GROUP_ADDR command */
#define OC_SET_FUNCT_ADDR	0x0040	/* SET_FUNCT_ADDR command */
#define OC_READ_ERROR_LOG	0x0080	/* READ_ERROR_LOG command */
#define OC_READ_ADAPTER		0x0100	/* READ_ADAPTER command */
#define OC_MODIFY_OPEN_PARMS	0x0400	/* MODIFY_OPEN_PARMS command */
#define OC_RESTORE_OPEN_PARMS	0x0800	/* RESTORE_OPEN_PARMS command */
#define OC_SET_FIRST_16_GROUP	0x1000	/* SET_FIRST_16_GROUP command */
#define OC_SET_BRIDGE_PARMS	0x2000	/* SET_BRIDGE_PARMS command */
#define OC_CONFIG_BRIDGE_PARMS	0x4000	/* CONFIG_BRIDGE_PARMS command */

#define OPEN			0x0300	/* C: open command. S: completion. */
#define TRANSMIT		0x0400	/* C: transmit command. S: completion
					 * status. (reject: COMMAND_REJECT if
					 * adapter not opened, TRANSMIT already
					 * issued or address passed in the SCB
					 * not word aligned)
					 */
#define TRANSMIT_HALT		0x0500	/* C: interrupt TX TPL chain; if no
					 * TRANSMIT command issued, the command
					 * is ignored (completion with TRANSMIT
					 * status (0x0400)!)
					 */
#define RECEIVE			0x0600	/* C: receive command. S: completion
					 * status. (reject: COMMAND_REJECT if
					 * adapter not opened, RECEIVE already
					 * issued or address passed in the SCB 
					 * not word aligned)
					 */
#define CLOSE			0x0700	/* C: close adapter. S: completion.
					 * (COMMAND_REJECT if adapter not open)
					 */
#define SET_GROUP_ADDR		0x0800	/* C: alter adapter group address after
					 * OPEN. S: completion. (COMMAND_REJECT
					 * if adapter not open)
					 */
#define SET_FUNCT_ADDR		0x0900	/* C: alter adapter functional address
					 * after OPEN. S: completion.
					 * (COMMAND_REJECT if adapter not open)
					 */
#define READ_ERROR_LOG		0x0A00	/* C: read adapter error counters.
					 * S: completion. (command ignored
					 * if adapter not open!)
					 */
#define READ_ADAPTER		0x0B00	/* C: read data from adapter memory.
					 * (important: after init and before
					 * open!) S: completion. (ADAPTER_CHECK
					 * interrupt if undefined storage area
					 * read)
					 */
#define MODIFY_OPEN_PARMS	0x0D00	/* C: modify some adapter operational
					 * parameters. (bit correspondend to
					 * WRAP_INTERFACE is ignored)
					 * S: completion. (reject: 
					 * COMMAND_REJECT)
					 */
#define RESTORE_OPEN_PARMS	0x0E00	/* C: modify some adapter operational
					 * parameters. (bit correspondend
					 * to WRAP_INTERFACE is ignored)
					 * S: completion. (reject:
					 * COMMAND_REJECT)
					 */
#define SET_FIRST_16_GROUP	0x0F00	/* C: alter the first two bytes in
					 * adapter group address.
					 * S: completion. (reject:
					 * COMMAND_REJECT)
					 */
#define SET_BRIDGE_PARMS	0x1000	/* C: values and conditions for the
					 * adapter hardware to use when frames
					 * are copied for forwarding.
					 * S: completion. (reject:
					 * COMMAND_REJECT)
					 */
#define CONFIG_BRIDGE_PARMS	0x1100	/* C: ..
					 * S: completion. (reject:
					 * COMMAND_REJECT)
					 */

#define SPEED_4			4
#define SPEED_16		16	/* Default transmission speed  */


/* Initialization Parameter Block (IPB); word alignment necessary! */
#define BURST_SIZE	0x0018	/* Default burst size */
#define BURST_MODE	0x9F00	/* Burst mode enable */
#define DMA_RETRIES	0x0505	/* Magic DMA retry number... */

#define CYCLE_TIME	3	/* Default AT-bus cycle time: 500 ns
				 * (later adapter version: fix  cycle time!)
				 */
#define LINE_SPEED_BIT	0x80

/* Macro definition for the wait function. */
#define ONE_SECOND_TICKS	1000000
#define HALF_SECOND		(ONE_SECOND_TICKS / 2)
#define ONE_SECOND		(ONE_SECOND_TICKS)
#define TWO_SECONDS		(ONE_SECOND_TICKS * 2)
#define THREE_SECONDS		(ONE_SECOND_TICKS * 3)
#define FOUR_SECONDS		(ONE_SECOND_TICKS * 4)
#define FIVE_SECONDS		(ONE_SECOND_TICKS * 5)

#define BUFFER_SIZE 		2048	/* Buffers on Adapter */

#pragma pack(1)
typedef struct {
	unsigned short Init_Options;	/* Initialize with burst mode;
					 * LLC disabled. (MAC only)
					 */

	/* Interrupt vectors the adapter places on attached system bus. */
	u_int8_t  CMD_Status_IV;    /* Interrupt vector: command status. */
	u_int8_t  TX_IV;	    /* Interrupt vector: transmit. */
	u_int8_t  RX_IV;	    /* Interrupt vector: receive. */
	u_int8_t  Ring_Status_IV;   /* Interrupt vector: ring status. */
	u_int8_t  SCB_Clear_IV;	    /* Interrupt vector: SCB clear. */
	u_int8_t  Adapter_CHK_IV;   /* Interrupt vector: adapter check. */

	u_int16_t RX_Burst_Size;    /* Max. number of transfer cycles. */
	u_int16_t TX_Burst_Size;    /* During DMA burst; even value! */
	u_int16_t DMA_Abort_Thrhld; /* Number of DMA retries. */

	u_int32_t SCB_Addr;   /* SCB address: even, word aligned, high-low */
	u_int32_t SSB_Addr;   /* SSB address: even, word aligned, high-low */
} IPB, *IPB_Ptr;
#pragma pack()

/*
 * OPEN Command Parameter List (OCPL) (can be reused, if the adapter has to
 * be reopened)
 */
#define BUFFER_SIZE	2048		/* Buffers on Adapter. */
#define TPL_SIZE	8+6*TX_FRAG_NUM /* Depending on fragments per TPL. */
#define RPL_SIZE	14		/* (with TI firmware v2.26 handling
					 * up to nine fragments possible)
					 */
#define TX_BUF_MIN	20		/* ??? (Stephan: calculation with */
#define TX_BUF_MAX	40		/* BUFFER_SIZE and MAX_FRAME_SIZE) ??? 
					 */
#define DISABLE_EARLY_TOKEN_RELEASE 	0x1000

/* OPEN Options (high-low) */
#define WRAP_INTERFACE		0x0080	/* Inserting omitted for test
					 * purposes; transmit data appears
					 * as receive data. (useful for
					 * testing; change: CLOSE necessary)
					 */
#define DISABLE_HARD_ERROR	0x0040	/* On HARD_ERROR & TRANSMIT_BEACON
					 * no RING.STATUS interrupt.
					 */
#define DISABLE_SOFT_ERROR	0x0020	/* On SOFT_ERROR, no RING.STATUS
					 * interrupt.
					 */
#define PASS_ADAPTER_MAC_FRAMES	0x0010	/* Passing unsupported MAC frames
					 * to system.
					 */
#define PASS_ATTENTION_FRAMES	0x0008	/* All changed attention MAC frames are
					 * passed to the system.
					 */
#define PAD_ROUTING_FIELD	0x0004	/* Routing field is padded to 18
					 * bytes.
					 */
#define FRAME_HOLD		0x0002	/*Adapter waits for entire frame before
					 * initiating DMA transfer; otherwise:
					 * DMA transfer initiation if internal
					 * buffer filled.
					 */
#define CONTENDER		0x0001	/* Adapter participates in the monitor
					 * contention process.
					 */
#define PASS_BEACON_MAC_FRAMES	0x8000	/* Adapter passes beacon MAC frames
					 * to the system.
					 */
#define EARLY_TOKEN_RELEASE 	0x1000	/* Only valid in 16 Mbps operation;
					 * 0 = ETR. (no effect in 4 Mbps
					 * operation)
					 */
#define COPY_ALL_MAC_FRAMES	0x0400	/* All MAC frames are copied to
					 * the system. (after OPEN: duplicate
					 * address test (DAT) MAC frame is 
					 * first received frame copied to the
					 * system)
					 */
#define COPY_ALL_NON_MAC_FRAMES	0x0200	/* All non MAC frames are copied to
					 * the system.
					 */
#define PASS_FIRST_BUF_ONLY	0x0100	/* Passes only first internal buffer
					 * of each received frame; FrameSize
					 * of RPLs must contain internal
					 * BUFFER_SIZE bits for promiscous mode.
					 */
#define ENABLE_FULL_DUPLEX_SELECTION	0x2000 
 					/* Enable the use of full-duplex
					 * settings with bits in byte 22 in
					 * ocpl. (new feature in firmware
					 * version 3.09)
					 */

/* Full-duplex settings */
#define OPEN_FULL_DUPLEX_OFF	0x0000
#define OPEN_FULL_DUPLEX_ON	0x00c0
#define OPEN_FULL_DUPLEX_AUTO	0x0080

#define PROD_ID_SIZE	18	/* Length of product ID. */

#define TX_FRAG_NUM	3	 /* Number of fragments used in one TPL. */
#define TX_MORE_FRAGMENTS 0x8000 /* Bit set in DataCount to indicate more
				  * fragments following.
				  */

/* XXX is there some better way to do this? */
#define ISA_MAX_ADDRESS 	0x00ffffff
#define PCI_MAX_ADDRESS		0xffffffff

#pragma pack(1)
typedef struct {
	u_int16_t OPENOptions;
	u_int8_t  NodeAddr[6];	/* Adapter node address; use ROM 
				 * address
				 */
	u_int32_t GroupAddr;	/* Multicast: high order
				 * bytes = 0xC000
				 */
	u_int32_t FunctAddr;	/* High order bytes = 0xC000 */
	__be16 RxListSize;	/* RPL size: 0 (=26), 14, 20 or
				 * 26 bytes read by the adapter.
				 * (Depending on the number of 
				 * fragments/list)
				 */
	__be16 TxListSize;	/* TPL size */
	__be16 BufSize;		/* Is automatically rounded up to the
				 * nearest nK boundary.
				 */
	u_int16_t FullDuplex;
	u_int16_t Reserved;
	u_int8_t  TXBufMin;	/* Number of adapter buffers reserved
				 * for transmission a minimum of 2
				 * buffers must be allocated.
				 */
	u_int8_t  TXBufMax;	/* Maximum number of adapter buffers
				 * for transmit; a minimum of 2 buffers
				 * must be available for receive.
				 * Default: 6
				 */
	u_int16_t ProdIDAddr[2];/* Pointer to product ID. */
} OPB, *OPB_Ptr;
#pragma pack()

/*
 * SCB: adapter commands enabled by the host system started by writing
 * CMD_INTERRUPT_ADAPTER | CMD_EXECUTE (|SCB_REQUEST) to the SIFCMD IO
 * register. (special case: | CMD_SYSTEM_IRQ for initialization)
 */
#pragma pack(1)
typedef struct {
	u_int16_t CMD;		/* Command code */
	u_int16_t Parm[2];	/* Pointer to Command Parameter Block */
} SCB;	/* System Command Block (32 bit physical address; big endian)*/
#pragma pack()

/*
 * SSB: adapter command return status can be evaluated after COMMAND_STATUS
 * adapter to system interrupt after reading SSB, the availability of the SSB
 * has to be told the adapter by writing CMD_INTERRUPT_ADAPTER | CMD_SSB_CLEAR
 * in the SIFCMD IO register.
 */
#pragma pack(1)
typedef struct {
	u_int16_t STS;		/* Status code */
	u_int16_t Parm[3];	/* Parameter or pointer to Status Parameter
				 * Block.
				 */
} SSB;	/* System Status Block (big endian - physical address)  */
#pragma pack()

typedef struct {
	unsigned short BurnedInAddrPtr;	/* Pointer to adapter burned in
					 * address. (BIA)
					 */
	unsigned short SoftwareLevelPtr;/* Pointer to software level data. */
	unsigned short AdapterAddrPtr;	/* Pointer to adapter addresses. */
	unsigned short AdapterParmsPtr;	/* Pointer to adapter parameters. */
	unsigned short MACBufferPtr;	/* Pointer to MAC buffer. (internal) */
	unsigned short LLCCountersPtr;	/* Pointer to LLC counters.  */
	unsigned short SpeedFlagPtr;	/* Pointer to data rate flag.
					 * (4/16 Mbps)
					 */
	unsigned short AdapterRAMPtr;	/* Pointer to adapter RAM found. (KB) */
} INTPTRS;	/* Adapter internal pointers */

#pragma pack(1)
typedef struct {
	u_int8_t  Line_Error;		/* Line error: code violation in
					 * frame or in a token, or FCS error.
					 */
	u_int8_t  Internal_Error;	/* IBM specific. (Reserved_1) */
	u_int8_t  Burst_Error;
	u_int8_t  ARI_FCI_Error;	/* ARI/FCI bit zero in AMP or
					 * SMP MAC frame.
					 */
	u_int8_t  AbortDelimeters;	/* IBM specific. (Reserved_2) */
	u_int8_t  Reserved_3;
	u_int8_t  Lost_Frame_Error;	/* Receive of end of transmitted
					 * frame failed.
					 */
	u_int8_t  Rx_Congest_Error;	/* Adapter in repeat mode has not
					 * enough buffer space to copy incoming
					 * frame.
					 */
	u_int8_t  Frame_Copied_Error;	/* ARI bit not zero in frame
					 * addressed to adapter.
					 */
	u_int8_t  Frequency_Error;	/* IBM specific. (Reserved_4) */
	u_int8_t  Token_Error;		/* (active only in monitor station) */
	u_int8_t  Reserved_5;
	u_int8_t  DMA_Bus_Error;	/* DMA bus errors not exceeding the
					 * abort thresholds.
					 */
	u_int8_t  DMA_Parity_Error;	/* DMA parity errors not exceeding
					 * the abort thresholds.
					 */
} ERRORTAB;	/* Adapter error counters */
#pragma pack()


/*--------------------- Send and Receive definitions -------------------*/
#pragma pack(1)
typedef struct {
	__be16 DataCount;	/* Value 0, even and odd values are
				 * permitted; value is unaltered most
				 * significant bit set: following
				 * fragments last fragment: most
				 * significant bit is not evaluated.
				 * (???)
				 */
	__be32 DataAddr;	/* Pointer to frame data fragment;
				 * even or odd.
				 */
} Fragment;
#pragma pack()

#define MAX_FRAG_NUMBERS    9	/* Maximal number of fragments possible to use
				 * in one RPL/TPL. (depending on TI firmware 
				 * version)
				 */

/*
 * AC (1), FC (1), Dst (6), Src (6), RIF (18), Data (4472) = 4504
 * The packet size can be one of the follows: 548, 1502, 2084, 4504, 8176,
 * 11439, 17832. Refer to TMS380 Second Generation Token Ring User's Guide
 * Page 2-27.
 */
#define HEADER_SIZE		(1 + 1 + 6 + 6)
#define SRC_SIZE		18
#define MIN_DATA_SIZE		516
#define DEFAULT_DATA_SIZE	4472
#define MAX_DATA_SIZE		17800

#define DEFAULT_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + DEFAULT_DATA_SIZE)
#define MIN_PACKET_SIZE     (HEADER_SIZE + SRC_SIZE + MIN_DATA_SIZE)
#define MAX_PACKET_SIZE     (HEADER_SIZE + SRC_SIZE + MAX_DATA_SIZE)

/*
 * Macros to deal with the frame status field.
 */
#define AC_NOT_RECOGNIZED	0x00
#define GROUP_BIT		0x80
#define GET_TRANSMIT_STATUS_HIGH_BYTE(Ts) ((unsigned char)((Ts) >> 8))
#define GET_FRAME_STATUS_HIGH_AC(Fs)	  ((unsigned char)(((Fs) & 0xC0) >> 6))
#define GET_FRAME_STATUS_LOW_AC(Fs)       ((unsigned char)(((Fs) & 0x0C) >> 2))
#define DIRECTED_FRAME(Context)           (!((Context)->MData[2] & GROUP_BIT))


/*--------------------- Send Functions ---------------------------------*/
/* define TX_CSTAT _REQUEST (R) and _COMPLETE (C) values (high-low) */

#define TX_VALID		0x0080	/* R: set via TRANSMIT.VALID interrupt.
					 * C: always reset to zero!
					 */
#define TX_FRAME_COMPLETE	0x0040	/* R: must be reset to zero.
					 * C: set to one.
					 */
#define TX_START_FRAME		0x0020  /* R: start of a frame: 1 
					 * C: unchanged.
					 */
#define TX_END_FRAME		0x0010  /* R: end of a frame: 1
					 * C: unchanged.
					 */
#define TX_FRAME_IRQ		0x0008  /* R: request interrupt generation
					 * after transmission.
					 * C: unchanged.
					 */
#define TX_ERROR		0x0004  /* R: reserved.
					 * C: set to one if Error occurred.
					 */
#define TX_INTERFRAME_WAIT	0x0004
#define TX_PASS_CRC		0x0002  /* R: set if CRC value is already
					 * calculated. (valid only in
					 * FRAME_START TPL)
					 * C: unchanged.
					 */
#define TX_PASS_SRC_ADDR	0x0001  /* R: adapter uses explicit frame
					 * source address and does not overwrite
					 * with the adapter node address.
					 * (valid only in FRAME_START TPL)
					 *
					 * C: unchanged.
					 */
#define TX_STRIP_FS		0xFF00  /* R: reserved.
					 * C: if no Transmission Error,
					 * field contains copy of FS byte after
					 * stripping of frame.
					 */

/*
 * Structure of Transmit Parameter Lists (TPLs) (only one frame every TPL,
 * but possibly multiple TPLs for one frame) the length of the TPLs has to be
 * initialized in the OPL. (OPEN parameter list)
 */
#define TPL_NUM		3	/* Number of Transmit Parameter Lists.
				 * !! MUST BE >= 3 !!
				 */

#pragma pack(1)
typedef struct s_TPL TPL;

struct s_TPL {	/* Transmit Parameter List (align on even word boundaries) */
	__be32 NextTPLAddr;		/* Pointer to next TPL in chain; if
					 * pointer is odd: this is the last
					 * TPL. Pointing to itself can cause
					 * problems!
					 */
	volatile u_int16_t Status;	/* Initialized by the adapter:
					 * CSTAT_REQUEST important: update least
					 * significant bit first! Set by the
					 * adapter: CSTAT_COMPLETE status.
					 */
	__be16 FrameSize;		/* Number of bytes to be transmitted
					 * as a frame including AC/FC,
					 * Destination, Source, Routing field
					 * not including CRC, FS, End Delimiter
					 * (valid only if START_FRAME bit in 
					 * CSTAT nonzero) must not be zero in
					 * any list; maximum value: (BUFFER_SIZE
					 * - 8) * TX_BUF_MAX sum of DataCount
					 * values in FragmentList must equal
					 * Frame_Size value in START_FRAME TPL!
					 * frame data fragment list.
					 */

	/* TPL/RPL size in OPEN parameter list depending on maximal
	 * numbers of fragments used in one parameter list.
	 */
	Fragment FragList[TX_FRAG_NUM];	/* Maximum: nine frame fragments in one
					 * TPL actual version of firmware: 9
					 * fragments possible.
					 */
#pragma pack()

	/* Special proprietary data and precalculations */

	TPL *NextTPLPtr;		/* Pointer to next TPL in chain. */
	unsigned char *MData;
	struct sk_buff *Skb;
	unsigned char TPLIndex;
	volatile unsigned char BusyFlag;/* Flag: TPL busy? */
	dma_addr_t DMABuff;		/* DMA IO bus address from dma_map */
};

/* ---------------------Receive Functions-------------------------------*
 * define RECEIVE_CSTAT_REQUEST (R) and RECEIVE_CSTAT_COMPLETE (C) values.
 * (high-low)
 */
#define RX_VALID		0x0080	/* R: set; tell adapter with
					 * RECEIVE.VALID interrupt.
					 * C: reset to zero.
					 */
#define RX_FRAME_COMPLETE	0x0040  /* R: must be reset to zero,
					 * C: set to one.
					 */
#define RX_START_FRAME		0x0020  /* R: must be reset to zero.
					 * C: set to one on the list.
					 */
#define RX_END_FRAME		0x0010  /* R: must be reset to zero.
					 * C: set to one on the list
					 * that ends the frame.
					 */
#define RX_FRAME_IRQ		0x0008  /* R: request interrupt generation
					 * after receive.
					 * C: unchanged.
					 */
#define RX_INTERFRAME_WAIT	0x0004  /* R: after receiving a frame:
					 * interrupt and wait for a
					 * RECEIVE.CONTINUE.
					 * C: unchanged.
					 */
#define RX_PASS_CRC		0x0002  /* R: if set, the adapter includes
					 * the CRC in data passed. (last four 
					 * bytes; valid only if FRAME_START is
					 * set)
					 * C: set, if CRC is included in
					 * received data.
					 */
#define RX_PASS_SRC_ADDR	0x0001  /* R: adapter uses explicit frame
					 * source address and does not
					 * overwrite with the adapter node
					 * address. (valid only if FRAME_START
					 * is set)
					 * C: unchanged.
					 */
#define RX_RECEIVE_FS		0xFC00  /* R: reserved; must be reset to zero.
					 * C: on lists with START_FRAME, field
					 * contains frame status field from
					 * received frame; otherwise cleared.
					 */
#define RX_ADDR_MATCH		0x0300  /* R: reserved; must be reset to zero.
					 * C: address match code mask.
					 */ 
#define RX_STATUS_MASK		0x00FF  /* Mask for receive status bits. */

#define RX_INTERN_ADDR_MATCH    0x0100  /* C: internally address match. */
#define RX_EXTERN_ADDR_MATCH    0x0200  /* C: externally matched via
					 * XMATCH/XFAIL interface.
					 */
#define RX_INTEXT_ADDR_MATCH    0x0300  /* C: internally and externally
					 * matched.
					 */
#define RX_READY (RX_VALID | RX_FRAME_IRQ) /* Ready for receive. */

/* Constants for Command Status Interrupt.
 * COMMAND_REJECT status field bit functions (SSB.Parm[0])
 */
#define ILLEGAL_COMMAND		0x0080	/* Set if an unknown command
					 * is issued to the adapter
					 */
#define ADDRESS_ERROR		0x0040  /* Set if any address field in
					 * the SCB is odd. (not word aligned)
					 */
#define ADAPTER_OPEN		0x0020  /* Command issued illegal with
					 * open adapter.
					 */
#define ADAPTER_CLOSE		0x0010  /* Command issued illegal with
					 * closed adapter.
					 */
#define SAME_COMMAND		0x0008  /* Command issued with same command
					 * already executing.
					 */

/* OPEN_COMPLETION values (SSB.Parm[0], MSB) */
#define NODE_ADDR_ERROR		0x0040  /* Wrong address or BIA read
					 * zero address.
					 */
#define LIST_SIZE_ERROR		0x0020  /* If List_Size value not in 0,
					 * 14, 20, 26.
					 */
#define BUF_SIZE_ERROR		0x0010  /* Not enough available memory for
					 * two buffers.
					 */
#define TX_BUF_COUNT_ERROR	0x0004  /* Remaining receive buffers less than
					 * two.
					 */
#define OPEN_ERROR		0x0002	/* Error during ring insertion; more
					 * information in bits 8-15.
					 */

/* Standard return codes */
#define GOOD_COMPLETION		0x0080  /* =OPEN_SUCCESSFULL */
#define INVALID_OPEN_OPTION	0x0001  /* OPEN options are not supported by
					 * the adapter.
					 */

/* OPEN phases; details of OPEN_ERROR (SSB.Parm[0], LSB)            */
#define OPEN_PHASES_MASK            0xF000  /* Check only the bits 8-11. */
#define LOBE_MEDIA_TEST             0x1000
#define PHYSICAL_INSERTION          0x2000
#define ADDRESS_VERIFICATION        0x3000
#define PARTICIPATION_IN_RING_POLL  0x4000
#define REQUEST_INITIALISATION      0x5000
#define FULLDUPLEX_CHECK            0x6000

/* OPEN error codes; details of OPEN_ERROR (SSB.Parm[0], LSB) */
#define OPEN_ERROR_CODES_MASK	0x0F00  /* Check only the bits 12-15. */
#define OPEN_FUNCTION_FAILURE   0x0100  /* Unable to transmit to itself or
					 * frames received before insertion.
					 */
#define OPEN_SIGNAL_LOSS	0x0200	/* Signal loss condition detected at
					 * receiver.
					 */
#define OPEN_TIMEOUT		0x0500	/* Insertion timer expired before
					 * logical insertion.
					 */
#define OPEN_RING_FAILURE	0x0600	/* Unable to receive own ring purge
					 * MAC frames.
					 */
#define OPEN_RING_BEACONING	0x0700	/* Beacon MAC frame received after
					 * ring insertion.
					 */
#define OPEN_DUPLICATE_NODEADDR	0x0800  /* Other station in ring found
					 * with the same address.
					 */
#define OPEN_REQUEST_INIT	0x0900	/* RPS present but does not respond. */
#define OPEN_REMOVE_RECEIVED    0x0A00  /* Adapter received a remove adapter
					 * MAC frame.
					 */
#define OPEN_FULLDUPLEX_SET	0x0D00	/* Got this with full duplex on when
					 * trying to connect to a normal ring.
					 */

/* SET_BRIDGE_PARMS return codes: */
#define BRIDGE_INVALID_MAX_LEN  0x4000  /* MAX_ROUTING_FIELD_LENGTH odd,
					 * less than 6 or > 30.
					 */
#define BRIDGE_INVALID_SRC_RING 0x2000  /* SOURCE_RING number zero, too large
					 * or = TARGET_RING.
					 */
#define BRIDGE_INVALID_TRG_RING 0x1000  /* TARGET_RING number zero, too large
					 * or = SOURCE_RING.
					 */
#define BRIDGE_INVALID_BRDGE_NO 0x0800  /* BRIDGE_NUMBER too large. */
#define BRIDGE_INVALID_OPTIONS  0x0400  /* Invalid bridge options. */
#define BRIDGE_DIAGS_FAILED     0x0200  /* Diagnostics of TMS380SRA failed. */
#define BRIDGE_NO_SRA           0x0100  /* The TMS380SRA does not exist in HW
					 * configuration.
					 */

/*
 * Bring Up Diagnostics error codes.
 */
#define BUD_INITIAL_ERROR       0x0
#define BUD_CHECKSUM_ERROR      0x1
#define BUD_ADAPTER_RAM_ERROR   0x2
#define BUD_INSTRUCTION_ERROR   0x3
#define BUD_CONTEXT_ERROR       0x4
#define BUD_PROTOCOL_ERROR      0x5
#define BUD_INTERFACE_ERROR	0x6

/* BUD constants */
#define BUD_MAX_RETRIES         3
#define BUD_MAX_LOOPCNT         6
#define BUD_TIMEOUT             3000

/* Initialization constants */
#define INIT_MAX_RETRIES        3	/* Maximum three retries. */
#define INIT_MAX_LOOPCNT        22      /* Maximum loop counts. */

/* RING STATUS field values (high/low) */
#define SIGNAL_LOSS             0x0080  /* Loss of signal on the ring
					 * detected.
					 */
#define HARD_ERROR              0x0040  /* Transmitting or receiving beacon
					 * frames.
					 */
#define SOFT_ERROR              0x0020  /* Report error MAC frame
					 * transmitted.
					 */
#define TRANSMIT_BEACON         0x0010  /* Transmitting beacon frames on the
					 * ring.
					 */
#define LOBE_WIRE_FAULT         0x0008  /* Open or short circuit in the
					 * cable to concentrator; adapter
					 * closed.
					 */
#define AUTO_REMOVAL_ERROR      0x0004  /* Lobe wrap test failed, deinserted;
					 * adapter closed.
					 */
#define REMOVE_RECEIVED         0x0001  /* Received a remove ring station MAC
					 * MAC frame request; adapter closed.
					 */
#define COUNTER_OVERFLOW        0x8000  /* Overflow of one of the adapters
					 * error counters; READ.ERROR.LOG.
					 */
#define SINGLE_STATION          0x4000  /* Adapter is the only station on the
					 * ring.
					 */
#define RING_RECOVERY           0x2000  /* Claim token MAC frames on the ring;
					 * reset after ring purge frame.
					 */

#define ADAPTER_CLOSED (LOBE_WIRE_FAULT | AUTO_REMOVAL_ERROR |\
                        REMOVE_RECEIVED)

/* Adapter_check_block.Status field bit assignments: */
#define DIO_PARITY              0x8000  /* Adapter detects bad parity
					 * through direct I/O access.
					 */
#define DMA_READ_ABORT          0x4000  /* Aborting DMA read operation
					 * from system Parm[0]: 0=timeout,
					 * 1=parity error, 2=bus error;
					 * Parm[1]: 32 bit pointer to host
					 * system address at failure.
					 */
#define DMA_WRITE_ABORT         0x2000  /* Aborting DMA write operation
					 * to system. (parameters analogous to
					 * DMA_READ_ABORT)
					 */
#define ILLEGAL_OP_CODE         0x1000  /* Illegal operation code in the
					 * the adapters firmware Parm[0]-2:
					 * communications processor registers
					 * R13-R15.
					 */
#define PARITY_ERRORS           0x0800  /* Adapter detects internal bus
					 * parity error.
					 */
#define RAM_DATA_ERROR          0x0080  /* Valid only during RAM testing;
					 * RAM data error Parm[0-1]: 32 bit
					 * pointer to RAM location.
					 */
#define RAM_PARITY_ERROR        0x0040  /* Valid only during RAM testing;
					 * RAM parity error Parm[0-1]: 32 bit
					 * pointer to RAM location.
					 */
#define RING_UNDERRUN           0x0020  /* Internal DMA underrun when
					 * transmitting onto ring.
					 */
#define INVALID_IRQ             0x0008  /* Unrecognized interrupt generated
					 * internal to adapter Parm[0-2]:
					 * adapter register R13-R15.
					 */
#define INVALID_ERROR_IRQ       0x0004  /* Unrecognized error interrupt
					 * generated Parm[0-2]: adapter register
					 * R13-R15.
					 */
#define INVALID_XOP             0x0002  /* Unrecognized XOP request in
					 * communication processor Parm[0-2]:
					 * adapter register R13-R15.
					 */
#define CHECKADDR               0x05E0  /* Adapter check status information
					 * address offset.
					 */
#define ROM_PAGE_0              0x0000  /* Adapter ROM page 0. */

/*
 * RECEIVE.STATUS interrupt result SSB values: (high-low)
 * (RECEIVE_COMPLETE field bit definitions in SSB.Parm[0])
 */
#define RX_COMPLETE             0x0080  /* SSB.Parm[0]; SSB.Parm[1]: 32
					 * bit pointer to last RPL.
					 */
#define RX_SUSPENDED            0x0040  /* SSB.Parm[0]; SSB.Parm[1]: 32
					 * bit pointer to RPL with odd
					 * forward pointer.
					 */

/* Valid receive CSTAT: */
#define RX_FRAME_CONTROL_BITS (RX_VALID | RX_START_FRAME | RX_END_FRAME | \
			       RX_FRAME_COMPLETE)
#define VALID_SINGLE_BUFFER_FRAME (RX_START_FRAME | RX_END_FRAME | \
				   RX_FRAME_COMPLETE)

typedef enum SKB_STAT SKB_STAT;
enum SKB_STAT {
	SKB_UNAVAILABLE,
	SKB_DMA_DIRECT,
	SKB_DATA_COPY
};

/* Receive Parameter List (RPL) The length of the RPLs has to be initialized 
 * in the OPL. (OPEN parameter list)
 */
#define RPL_NUM		3

#define RX_FRAG_NUM     1	/* Maximal number of used fragments in one RPL.
				 * (up to firmware v2.24: 3, now: up to 9)
				 */

#pragma pack(1)
typedef struct s_RPL RPL;
struct s_RPL {	/* Receive Parameter List */
	__be32 NextRPLAddr;		/* Pointer to next RPL in chain
					 * (normalized = physical 32 bit
					 * address) if pointer is odd: this
					 * is last RPL. Pointing to itself can
					 * cause problems!
					 */
	volatile u_int16_t Status;	/* Set by creation of Receive Parameter
					 * List RECEIVE_CSTAT_COMPLETE set by
					 * adapter in lists that start or end
					 * a frame.
					 */
	volatile __be16 FrameSize;	 /* Number of bytes received as a
					 * frame including AC/FC, Destination,
					 * Source, Routing field not including 
					 * CRC, FS (Frame Status), End Delimiter
					 * (valid only if START_FRAME bit in 
					 * CSTAT nonzero) must not be zero in
					 * any list; maximum value: (BUFFER_SIZE
					 * - 8) * TX_BUF_MAX sum of DataCount
					 * values in FragmentList must equal
					 * Frame_Size value in START_FRAME TPL!
					 * frame data fragment list
					 */

	/* TPL/RPL size in OPEN parameter list depending on maximal numbers
	 * of fragments used in one parameter list.
	 */
	Fragment FragList[RX_FRAG_NUM];	/* Maximum: nine frame fragments in
					 * one TPL. Actual version of firmware:
					 * 9 fragments possible.
					 */
#pragma pack()

	/* Special proprietary data and precalculations. */
	RPL *NextRPLPtr;	/* Logical pointer to next RPL in chain. */
	unsigned char *MData;
	struct sk_buff *Skb;
	SKB_STAT SkbStat;
	int RPLIndex;
	dma_addr_t DMABuff;		/* DMA IO bus address from dma_map */
};

/* Information that need to be kept for each board. */
typedef struct net_local {
#pragma pack(1)
	IPB ipb;	/* Initialization Parameter Block. */
	SCB scb;	/* System Command Block: system to adapter 
			 * communication.
			 */
	SSB ssb;	/* System Status Block: adapter to system 
			 * communication.
			 */
	OPB ocpl;	/* Open Options Parameter Block. */

	ERRORTAB errorlogtable;	/* Adapter statistic error counters.
				 * (read from adapter memory)
				 */
	unsigned char ProductID[PROD_ID_SIZE + 1]; /* Product ID */
#pragma pack()

	TPL Tpl[TPL_NUM];
	TPL *TplFree;
	TPL *TplBusy;
	unsigned char LocalTxBuffers[TPL_NUM][DEFAULT_PACKET_SIZE];

	RPL Rpl[RPL_NUM];
	RPL *RplHead;
	RPL *RplTail;
	unsigned char LocalRxBuffers[RPL_NUM][DEFAULT_PACKET_SIZE];

	struct device *pdev;
	int DataRate;
	unsigned char ScbInUse;
	unsigned short CMDqueue;

	unsigned long AdapterOpenFlag:1;
	unsigned long AdapterVirtOpenFlag:1;
	unsigned long OpenCommandIssued:1;
	unsigned long TransmitCommandActive:1;
	unsigned long TransmitHaltScheduled:1;
	unsigned long HaltInProgress:1;
	unsigned long LobeWireFaultLogged:1;
	unsigned long ReOpenInProgress:1;
	unsigned long Sleeping:1;

	unsigned long LastOpenStatus;
	unsigned short CurrentRingStatus;
	unsigned long MaxPacketSize;
	
	unsigned long StartTime;
	unsigned long LastSendTime;

	struct tr_statistics MacStat;	/* MAC statistics structure */

	unsigned long dmalimit; /* the max DMA address (ie, ISA) */
	dma_addr_t    dmabuffer; /* the DMA bus address corresponding to
				    priv. Might be different from virt_to_bus()
				    for architectures with IO MMU (Alpha) */

	struct timer_list timer;

	wait_queue_head_t  wait_for_tok_int;

	INTPTRS intptrs;	/* Internal adapter pointer. Must be read
				 * before OPEN command.
				 */
	unsigned short (*setnselout)(struct net_device *);
	unsigned short (*sifreadb)(struct net_device *, unsigned short);
	void (*sifwriteb)(struct net_device *, unsigned short, unsigned short);
	unsigned short (*sifreadw)(struct net_device *, unsigned short);
	void (*sifwritew)(struct net_device *, unsigned short, unsigned short);

	spinlock_t lock;                /* SMP protection */
	void *tmspriv;
} NET_LOCAL;

#endif	/* __KERNEL__ */
#endif	/* __LINUX_TMS380TR_H */
