/*
 * eexpress.h: Intel EtherExpress16 defines
 */

/*
 * EtherExpress card register addresses
 * as offsets from the base IO region (dev->base_addr)
 */

#define DATAPORT      0x0000
#define WRITE_PTR     0x0002
#define READ_PTR      0x0004
#define SIGNAL_CA     0x0006
#define SET_IRQ       0x0007
#define SM_PTR        0x0008
#define	MEM_Dec	      0x000a
#define MEM_Ctrl      0x000b
#define MEM_Page_Ctrl 0x000c
#define Config        0x000d
#define EEPROM_Ctrl   0x000e
#define ID_PORT       0x000f
#define	MEM_ECtrl     0x000f

/*
 * card register defines
 */

/* SET_IRQ */
#define SIRQ_en       0x08
#define SIRQ_dis      0x00

/* EEPROM_Ctrl */
#define EC_Clk        0x01
#define EC_CS         0x02
#define EC_Wr         0x04
#define EC_Rd         0x08
#define ASIC_RST      0x40
#define i586_RST      0x80

#define eeprom_delay() { udelay(40); }

/*
 * i82586 Memory Configuration
 */

/* (System Configuration Pointer) System start up block, read after 586_RST */
#define SCP_START 0xfff6

/* Intermediate System Configuration Pointer */
#define ISCP_START 0x0000

/* System Command Block */
#define SCB_START 0x0008

/* Start of buffer region.  Everything before this is used for control
 * structures and the CU configuration program.  The memory layout is
 * determined in eexp_hw_probe(), once we know how much memory is
 * available on the card.
 */

#define TX_BUF_START 0x0100

#define TX_BUF_SIZE ((24+ETH_FRAME_LEN+31)&~0x1f)
#define RX_BUF_SIZE ((32+ETH_FRAME_LEN+31)&~0x1f)

/*
 * SCB defines
 */

/* these functions take the SCB status word and test the relevant status bit */
#define SCB_complete(s) (((s) & 0x8000) != 0)
#define SCB_rxdframe(s) (((s) & 0x4000) != 0)
#define SCB_CUdead(s)   (((s) & 0x2000) != 0)
#define SCB_RUdead(s)   (((s) & 0x1000) != 0)
#define SCB_ack(s)      ((s) & 0xf000)

/* Command unit status: 0=idle, 1=suspended, 2=active */
#define SCB_CUstat(s)   (((s)&0x0300)>>8)

/* Receive unit status: 0=idle, 1=suspended, 2=out of resources, 4=ready */
#define SCB_RUstat(s)   (((s)&0x0070)>>4)

/* SCB commands */
#define SCB_CUnop       0x0000
#define SCB_CUstart     0x0100
#define SCB_CUresume    0x0200
#define SCB_CUsuspend   0x0300
#define SCB_CUabort     0x0400
#define SCB_resetchip   0x0080

#define SCB_RUnop       0x0000
#define SCB_RUstart     0x0010
#define SCB_RUresume    0x0020
#define SCB_RUsuspend   0x0030
#define SCB_RUabort     0x0040

/*
 * Command block defines
 */

#define Stat_Done(s)    (((s) & 0x8000) != 0)
#define Stat_Busy(s)    (((s) & 0x4000) != 0)
#define Stat_OK(s)      (((s) & 0x2000) != 0)
#define Stat_Abort(s)   (((s) & 0x1000) != 0)
#define Stat_STFail     (((s) & 0x0800) != 0)
#define Stat_TNoCar(s)  (((s) & 0x0400) != 0)
#define Stat_TNoCTS(s)  (((s) & 0x0200) != 0)
#define Stat_TNoDMA(s)  (((s) & 0x0100) != 0)
#define Stat_TDefer(s)  (((s) & 0x0080) != 0)
#define Stat_TColl(s)   (((s) & 0x0040) != 0)
#define Stat_TXColl(s)  (((s) & 0x0020) != 0)
#define Stat_NoColl(s)  ((s) & 0x000f)

/* Cmd_END will end AFTER the command if this is the first
 * command block after an SCB_CUstart, but BEFORE the command
 * for all subsequent commands. Best strategy is to place
 * Cmd_INT on the last command in the sequence, followed by a
 * dummy Cmd_Nop with Cmd_END after this.
 */

#define Cmd_END     0x8000
#define Cmd_SUS     0x4000
#define Cmd_INT     0x2000

#define Cmd_Nop     0x0000
#define Cmd_SetAddr 0x0001
#define Cmd_Config  0x0002
#define Cmd_MCast   0x0003
#define Cmd_Xmit    0x0004
#define Cmd_TDR     0x0005
#define Cmd_Dump    0x0006
#define Cmd_Diag    0x0007


/*
 * Frame Descriptor (Receive block) defines
 */

#define FD_Done(s)  (((s) & 0x8000) != 0)
#define FD_Busy(s)  (((s) & 0x4000) != 0)
#define FD_OK(s)    (((s) & 0x2000) != 0)

#define FD_CRC(s)   (((s) & 0x0800) != 0)
#define FD_Align(s) (((s) & 0x0400) != 0)
#define FD_Resrc(s) (((s) & 0x0200) != 0)
#define FD_DMA(s)   (((s) & 0x0100) != 0)
#define FD_Short(s) (((s) & 0x0080) != 0)
#define FD_NoEOF(s) (((s) & 0x0040) != 0)

struct rfd_header {
	volatile unsigned long flags;
	volatile unsigned short link;
	volatile unsigned short rbd_offset;
	volatile unsigned short dstaddr1;
	volatile unsigned short dstaddr2;
	volatile unsigned short dstaddr3;
	volatile unsigned short srcaddr1;
	volatile unsigned short srcaddr2;
	volatile unsigned short srcaddr3;
	volatile unsigned short length;

	/* This is actually a Receive Buffer Descriptor.  The way we
	 * arrange memory means that an RBD always follows the RFD that
	 * points to it, so they might as well be in the same structure.
	 */
	volatile unsigned short actual_count;
	volatile unsigned short next_rbd;
	volatile unsigned short buf_addr1;
	volatile unsigned short buf_addr2;
	volatile unsigned short size;
};

/* Returned data from the Time Domain Reflectometer */

#define TDR_LINKOK       (1<<15)
#define TDR_XCVRPROBLEM  (1<<14)
#define TDR_OPEN         (1<<13)
#define TDR_SHORT        (1<<12)
#define TDR_TIME         0x7ff
