/* typhoon.h:	chip info for the 3Com 3CR990 family of controllers */
/*
	Written 2002-2003 by David Dillow <dave@thedillows.org>

	This software may be used and distributed according to the terms of
	the GNU General Public License (GPL), incorporated herein by reference.
	Drivers based on or derived from this code fall under the GPL and must
	retain the authorship, copyright and license notice.  This file is not
	a complete program and may only be used when the entire operating
	system is licensed under the GPL.

	This software is available on a public web site. It may enable
	cryptographic capabilities of the 3Com hardware, and may be
	exported from the United States under License Exception "TSU"
	pursuant to 15 C.F.R. Section 740.13(e).

	This work was funded by the National Library of Medicine under
	the Department of Energy project number 0274DD06D1 and NLM project
	number Y1-LM-2015-01.
*/

/* All Typhoon ring positions are specificed in bytes, and point to the
 * first "clean" entry in the ring -- ie the next entry we use for whatever
 * purpose.
 */

/* The Typhoon basic ring
 * ringBase:  where this ring lives (our virtual address)
 * lastWrite: the next entry we'll use
 */
struct basic_ring {
	u8 *ringBase;
	u32 lastWrite;
};

/* The Typhoon transmit ring -- same as a basic ring, plus:
 * lastRead:      where we're at in regard to cleaning up the ring
 * writeRegister: register to use for writing (different for Hi & Lo rings)
 */
struct transmit_ring {
	u8 *ringBase;
	u32 lastWrite;
	u32 lastRead;
	int writeRegister;
};

/* The host<->Typhoon ring index structure
 * This indicates the current positions in the rings
 *
 * All values must be in little endian format for the 3XP
 *
 * rxHiCleared:   entry we've cleared to in the Hi receive ring
 * rxLoCleared:   entry we've cleared to in the Lo receive ring
 * rxBuffReady:   next entry we'll put a free buffer in
 * respCleared:   entry we've cleared to in the response ring
 *
 * txLoCleared:   entry the NIC has cleared to in the Lo transmit ring
 * txHiCleared:   entry the NIC has cleared to in the Hi transmit ring
 * rxLoReady:     entry the NIC has filled to in the Lo receive ring
 * rxBuffCleared: entry the NIC has cleared in the free buffer ring
 * cmdCleared:    entry the NIC has cleared in the command ring
 * respReady:     entry the NIC has filled to in the response ring
 * rxHiReady:     entry the NIC has filled to in the Hi receive ring
 */
struct typhoon_indexes {
	/* The first four are written by the host, and read by the NIC */
	volatile __le32 rxHiCleared;
	volatile __le32 rxLoCleared;
	volatile __le32 rxBuffReady;
	volatile __le32 respCleared;

	/* The remaining are written by the NIC, and read by the host */
	volatile __le32 txLoCleared;
	volatile __le32 txHiCleared;
	volatile __le32 rxLoReady;
	volatile __le32 rxBuffCleared;
	volatile __le32 cmdCleared;
	volatile __le32 respReady;
	volatile __le32 rxHiReady;
} __packed;

/* The host<->Typhoon interface
 * Our means of communicating where things are
 *
 * All values must be in little endian format for the 3XP
 *
 * ringIndex:   64 bit bus address of the index structure
 * txLoAddr:    64 bit bus address of the Lo transmit ring
 * txLoSize:    size (in bytes) of the Lo transmit ring
 * txHi*:       as above for the Hi priority transmit ring
 * rxLo*:       as above for the Lo priority receive ring
 * rxBuff*:     as above for the free buffer ring
 * cmd*:        as above for the command ring
 * resp*:       as above for the response ring
 * zeroAddr:    64 bit bus address of a zero word (for DMA)
 * rxHi*:       as above for the Hi Priority receive ring
 *
 * While there is room for 64 bit addresses, current versions of the 3XP
 * only do 32 bit addresses, so the *Hi for each of the above will always
 * be zero.
 */
struct typhoon_interface {
	__le32 ringIndex;
	__le32 ringIndexHi;
	__le32 txLoAddr;
	__le32 txLoAddrHi;
	__le32 txLoSize;
	__le32 txHiAddr;
	__le32 txHiAddrHi;
	__le32 txHiSize;
	__le32 rxLoAddr;
	__le32 rxLoAddrHi;
	__le32 rxLoSize;
	__le32 rxBuffAddr;
	__le32 rxBuffAddrHi;
	__le32 rxBuffSize;
	__le32 cmdAddr;
	__le32 cmdAddrHi;
	__le32 cmdSize;
	__le32 respAddr;
	__le32 respAddrHi;
	__le32 respSize;
	__le32 zeroAddr;
	__le32 zeroAddrHi;
	__le32 rxHiAddr;
	__le32 rxHiAddrHi;
	__le32 rxHiSize;
} __packed;

/* The Typhoon transmit/fragment descriptor
 *
 * A packet is described by a packet descriptor, followed by option descriptors,
 * if any, then one or more fragment descriptors.
 *
 * Packet descriptor:
 * flags:	Descriptor type
 * len:i	zero, or length of this packet
 * addr*:	8 bytes of opaque data to the firmware -- for skb pointer
 * processFlags: Determine offload tasks to perform on this packet.
 *
 * Fragment descriptor:
 * flags:	Descriptor type
 * len:i	length of this fragment
 * addr:	low bytes of DMA address for this part of the packet
 * addrHi:	hi bytes of DMA address for this part of the packet
 * processFlags: must be zero
 *
 * TYPHOON_DESC_VALID is not mentioned in their docs, but their Linux
 * driver uses it.
 */
struct tx_desc {
	u8  flags;
#define TYPHOON_TYPE_MASK	0x07
#define 	TYPHOON_FRAG_DESC	0x00
#define 	TYPHOON_TX_DESC		0x01
#define 	TYPHOON_CMD_DESC	0x02
#define 	TYPHOON_OPT_DESC	0x03
#define 	TYPHOON_RX_DESC		0x04
#define 	TYPHOON_RESP_DESC	0x05
#define TYPHOON_OPT_TYPE_MASK	0xf0
#define 	TYPHOON_OPT_IPSEC	0x00
#define 	TYPHOON_OPT_TCP_SEG	0x10
#define TYPHOON_CMD_RESPOND	0x40
#define TYPHOON_RESP_ERROR	0x40
#define TYPHOON_RX_ERROR	0x40
#define TYPHOON_DESC_VALID	0x80
	u8  numDesc;
	__le16 len;
	union {
		struct {
			__le32 addr;
			__le32 addrHi;
		} frag;
		u64 tx_addr;	/* opaque for hardware, for TX_DESC */
	};
	__le32 processFlags;
#define TYPHOON_TX_PF_NO_CRC		cpu_to_le32(0x00000001)
#define TYPHOON_TX_PF_IP_CHKSUM		cpu_to_le32(0x00000002)
#define TYPHOON_TX_PF_TCP_CHKSUM	cpu_to_le32(0x00000004)
#define TYPHOON_TX_PF_TCP_SEGMENT	cpu_to_le32(0x00000008)
#define TYPHOON_TX_PF_INSERT_VLAN	cpu_to_le32(0x00000010)
#define TYPHOON_TX_PF_IPSEC		cpu_to_le32(0x00000020)
#define TYPHOON_TX_PF_VLAN_PRIORITY	cpu_to_le32(0x00000040)
#define TYPHOON_TX_PF_UDP_CHKSUM	cpu_to_le32(0x00000080)
#define TYPHOON_TX_PF_PAD_FRAME		cpu_to_le32(0x00000100)
#define TYPHOON_TX_PF_RESERVED		cpu_to_le32(0x00000e00)
#define TYPHOON_TX_PF_VLAN_MASK		cpu_to_le32(0x0ffff000)
#define TYPHOON_TX_PF_INTERNAL		cpu_to_le32(0xf0000000)
#define TYPHOON_TX_PF_VLAN_TAG_SHIFT	12
} __packed;

/* The TCP Segmentation offload option descriptor
 *
 * flags:	descriptor type
 * numDesc:	must be 1
 * mss_flags:	bits 0-11 (little endian) are MSS, 12 is first TSO descriptor
 *			13 is list TSO descriptor, set both if only one TSO
 * respAddrLo:	low bytes of address of the bytesTx field of this descriptor
 * bytesTx:	total number of bytes in this TSO request
 * status:	0 on completion
 */
struct tcpopt_desc {
	u8  flags;
	u8  numDesc;
	__le16 mss_flags;
#define TYPHOON_TSO_FIRST		cpu_to_le16(0x1000)
#define TYPHOON_TSO_LAST		cpu_to_le16(0x2000)
	__le32 respAddrLo;
	__le32 bytesTx;
	__le32 status;
} __packed;

/* The IPSEC Offload descriptor
 *
 * flags:	descriptor type
 * numDesc:	must be 1
 * ipsecFlags:	bit 0: 0 -- generate IV, 1 -- use supplied IV
 * sa1, sa2:	Security Association IDs for this packet
 * reserved:	set to 0
 */
struct ipsec_desc {
	u8  flags;
	u8  numDesc;
	__le16 ipsecFlags;
#define TYPHOON_IPSEC_GEN_IV	cpu_to_le16(0x0000)
#define TYPHOON_IPSEC_USE_IV	cpu_to_le16(0x0001)
	__le32 sa1;
	__le32 sa2;
	__le32 reserved;
} __packed;

/* The Typhoon receive descriptor (Updated by NIC)
 *
 * flags:         Descriptor type, error indication
 * numDesc:       Always zero
 * frameLen:      the size of the packet received
 * addr:          low 32 bytes of the virtual addr passed in for this buffer
 * addrHi:        high 32 bytes of the virtual addr passed in for this buffer
 * rxStatus:      Error if set in flags, otherwise result of offload processing
 * filterResults: results of filtering on packet, not used
 * ipsecResults:  Results of IPSEC processing
 * vlanTag:       the 801.2q TCI from the packet
 */
struct rx_desc {
	u8  flags;
	u8  numDesc;
	__le16 frameLen;
	u32 addr;	/* opaque, comes from virtAddr */
	u32 addrHi;	/* opaque, comes from virtAddrHi */
	__le32 rxStatus;
#define TYPHOON_RX_ERR_INTERNAL		cpu_to_le32(0x00000000)
#define TYPHOON_RX_ERR_FIFO_UNDERRUN	cpu_to_le32(0x00000001)
#define TYPHOON_RX_ERR_BAD_SSD		cpu_to_le32(0x00000002)
#define TYPHOON_RX_ERR_RUNT		cpu_to_le32(0x00000003)
#define TYPHOON_RX_ERR_CRC		cpu_to_le32(0x00000004)
#define TYPHOON_RX_ERR_OVERSIZE		cpu_to_le32(0x00000005)
#define TYPHOON_RX_ERR_ALIGN		cpu_to_le32(0x00000006)
#define TYPHOON_RX_ERR_DRIBBLE		cpu_to_le32(0x00000007)
#define TYPHOON_RX_PROTO_MASK		cpu_to_le32(0x00000003)
#define TYPHOON_RX_PROTO_UNKNOWN	cpu_to_le32(0x00000000)
#define TYPHOON_RX_PROTO_IP		cpu_to_le32(0x00000001)
#define TYPHOON_RX_PROTO_IPX		cpu_to_le32(0x00000002)
#define TYPHOON_RX_VLAN			cpu_to_le32(0x00000004)
#define TYPHOON_RX_IP_FRAG		cpu_to_le32(0x00000008)
#define TYPHOON_RX_IPSEC		cpu_to_le32(0x00000010)
#define TYPHOON_RX_IP_CHK_FAIL		cpu_to_le32(0x00000020)
#define TYPHOON_RX_TCP_CHK_FAIL		cpu_to_le32(0x00000040)
#define TYPHOON_RX_UDP_CHK_FAIL		cpu_to_le32(0x00000080)
#define TYPHOON_RX_IP_CHK_GOOD		cpu_to_le32(0x00000100)
#define TYPHOON_RX_TCP_CHK_GOOD		cpu_to_le32(0x00000200)
#define TYPHOON_RX_UDP_CHK_GOOD		cpu_to_le32(0x00000400)
	__le16 filterResults;
#define TYPHOON_RX_FILTER_MASK		cpu_to_le16(0x7fff)
#define TYPHOON_RX_FILTERED		cpu_to_le16(0x8000)
	__le16 ipsecResults;
#define TYPHOON_RX_OUTER_AH_GOOD	cpu_to_le16(0x0001)
#define TYPHOON_RX_OUTER_ESP_GOOD	cpu_to_le16(0x0002)
#define TYPHOON_RX_INNER_AH_GOOD	cpu_to_le16(0x0004)
#define TYPHOON_RX_INNER_ESP_GOOD	cpu_to_le16(0x0008)
#define TYPHOON_RX_OUTER_AH_FAIL	cpu_to_le16(0x0010)
#define TYPHOON_RX_OUTER_ESP_FAIL	cpu_to_le16(0x0020)
#define TYPHOON_RX_INNER_AH_FAIL	cpu_to_le16(0x0040)
#define TYPHOON_RX_INNER_ESP_FAIL	cpu_to_le16(0x0080)
#define TYPHOON_RX_UNKNOWN_SA		cpu_to_le16(0x0100)
#define TYPHOON_RX_ESP_FORMAT_ERR	cpu_to_le16(0x0200)
	__be32 vlanTag;
} __packed;

/* The Typhoon free buffer descriptor, used to give a buffer to the NIC
 *
 * physAddr:    low 32 bits of the bus address of the buffer
 * physAddrHi:  high 32 bits of the bus address of the buffer, always zero
 * virtAddr:    low 32 bits of the skb address
 * virtAddrHi:  high 32 bits of the skb address, always zero
 *
 * the virt* address is basically two 32 bit cookies, just passed back
 * from the NIC
 */
struct rx_free {
	__le32 physAddr;
	__le32 physAddrHi;
	u32 virtAddr;
	u32 virtAddrHi;
} __packed;

/* The Typhoon command descriptor, used for commands and responses
 *
 * flags:   descriptor type
 * numDesc: number of descriptors following in this command/response,
 *				ie, zero for a one descriptor command
 * cmd:     the command
 * seqNo:   sequence number (unused)
 * parm1:   use varies by command
 * parm2:   use varies by command
 * parm3:   use varies by command
 */
struct cmd_desc {
	u8  flags;
	u8  numDesc;
	__le16 cmd;
#define TYPHOON_CMD_TX_ENABLE		cpu_to_le16(0x0001)
#define TYPHOON_CMD_TX_DISABLE		cpu_to_le16(0x0002)
#define TYPHOON_CMD_RX_ENABLE		cpu_to_le16(0x0003)
#define TYPHOON_CMD_RX_DISABLE		cpu_to_le16(0x0004)
#define TYPHOON_CMD_SET_RX_FILTER	cpu_to_le16(0x0005)
#define TYPHOON_CMD_READ_STATS		cpu_to_le16(0x0007)
#define TYPHOON_CMD_XCVR_SELECT		cpu_to_le16(0x0013)
#define TYPHOON_CMD_SET_MAX_PKT_SIZE	cpu_to_le16(0x001a)
#define TYPHOON_CMD_READ_MEDIA_STATUS	cpu_to_le16(0x001b)
#define TYPHOON_CMD_GOTO_SLEEP		cpu_to_le16(0x0023)
#define TYPHOON_CMD_SET_MULTICAST_HASH	cpu_to_le16(0x0025)
#define TYPHOON_CMD_SET_MAC_ADDRESS	cpu_to_le16(0x0026)
#define TYPHOON_CMD_READ_MAC_ADDRESS	cpu_to_le16(0x0027)
#define TYPHOON_CMD_VLAN_TYPE_WRITE	cpu_to_le16(0x002b)
#define TYPHOON_CMD_CREATE_SA		cpu_to_le16(0x0034)
#define TYPHOON_CMD_DELETE_SA		cpu_to_le16(0x0035)
#define TYPHOON_CMD_READ_VERSIONS	cpu_to_le16(0x0043)
#define TYPHOON_CMD_IRQ_COALESCE_CTRL	cpu_to_le16(0x0045)
#define TYPHOON_CMD_ENABLE_WAKE_EVENTS	cpu_to_le16(0x0049)
#define TYPHOON_CMD_SET_OFFLOAD_TASKS	cpu_to_le16(0x004f)
#define TYPHOON_CMD_HELLO_RESP		cpu_to_le16(0x0057)
#define TYPHOON_CMD_HALT		cpu_to_le16(0x005d)
#define TYPHOON_CMD_READ_IPSEC_INFO	cpu_to_le16(0x005e)
#define TYPHOON_CMD_GET_IPSEC_ENABLE	cpu_to_le16(0x0067)
#define TYPHOON_CMD_GET_CMD_LVL		cpu_to_le16(0x0069)
	u16 seqNo;
	__le16 parm1;
	__le32 parm2;
	__le32 parm3;
} __packed;

/* The Typhoon response descriptor, see command descriptor for details
 */
struct resp_desc {
	u8  flags;
	u8  numDesc;
	__le16 cmd;
	__le16 seqNo;
	__le16 parm1;
	__le32 parm2;
	__le32 parm3;
} __packed;

#define INIT_COMMAND_NO_RESPONSE(x, command)				\
	do { struct cmd_desc *_ptr = (x);				\
		memset(_ptr, 0, sizeof(struct cmd_desc));		\
		_ptr->flags = TYPHOON_CMD_DESC | TYPHOON_DESC_VALID;	\
		_ptr->cmd = command;					\
	} while (0)

/* We set seqNo to 1 if we're expecting a response from this command */
#define INIT_COMMAND_WITH_RESPONSE(x, command)				\
	do { struct cmd_desc *_ptr = (x);				\
		memset(_ptr, 0, sizeof(struct cmd_desc));		\
		_ptr->flags = TYPHOON_CMD_RESPOND | TYPHOON_CMD_DESC;	\
		_ptr->flags |= TYPHOON_DESC_VALID; 			\
		_ptr->cmd = command;					\
		_ptr->seqNo = 1;					\
	} while (0)

/* TYPHOON_CMD_SET_RX_FILTER filter bits (cmd.parm1)
 */
#define TYPHOON_RX_FILTER_DIRECTED	cpu_to_le16(0x0001)
#define TYPHOON_RX_FILTER_ALL_MCAST	cpu_to_le16(0x0002)
#define TYPHOON_RX_FILTER_BROADCAST	cpu_to_le16(0x0004)
#define TYPHOON_RX_FILTER_PROMISCOUS	cpu_to_le16(0x0008)
#define TYPHOON_RX_FILTER_MCAST_HASH	cpu_to_le16(0x0010)

/* TYPHOON_CMD_READ_STATS response format
 */
struct stats_resp {
	u8  flags;
	u8  numDesc;
	__le16 cmd;
	__le16 seqNo;
	__le16 unused;
	__le32 txPackets;
	__le64 txBytes;
	__le32 txDeferred;
	__le32 txLateCollisions;
	__le32 txCollisions;
	__le32 txCarrierLost;
	__le32 txMultipleCollisions;
	__le32 txExcessiveCollisions;
	__le32 txFifoUnderruns;
	__le32 txMulticastTxOverflows;
	__le32 txFiltered;
	__le32 rxPacketsGood;
	__le64 rxBytesGood;
	__le32 rxFifoOverruns;
	__le32 BadSSD;
	__le32 rxCrcErrors;
	__le32 rxOversized;
	__le32 rxBroadcast;
	__le32 rxMulticast;
	__le32 rxOverflow;
	__le32 rxFiltered;
	__le32 linkStatus;
#define TYPHOON_LINK_STAT_MASK		cpu_to_le32(0x00000001)
#define TYPHOON_LINK_GOOD		cpu_to_le32(0x00000001)
#define TYPHOON_LINK_BAD		cpu_to_le32(0x00000000)
#define TYPHOON_LINK_SPEED_MASK		cpu_to_le32(0x00000002)
#define TYPHOON_LINK_100MBPS		cpu_to_le32(0x00000002)
#define TYPHOON_LINK_10MBPS		cpu_to_le32(0x00000000)
#define TYPHOON_LINK_DUPLEX_MASK	cpu_to_le32(0x00000004)
#define TYPHOON_LINK_FULL_DUPLEX	cpu_to_le32(0x00000004)
#define TYPHOON_LINK_HALF_DUPLEX	cpu_to_le32(0x00000000)
	__le32 unused2;
	__le32 unused3;
} __packed;

/* TYPHOON_CMD_XCVR_SELECT xcvr values (resp.parm1)
 */
#define TYPHOON_XCVR_10HALF	cpu_to_le16(0x0000)
#define TYPHOON_XCVR_10FULL	cpu_to_le16(0x0001)
#define TYPHOON_XCVR_100HALF	cpu_to_le16(0x0002)
#define TYPHOON_XCVR_100FULL	cpu_to_le16(0x0003)
#define TYPHOON_XCVR_AUTONEG	cpu_to_le16(0x0004)

/* TYPHOON_CMD_READ_MEDIA_STATUS (resp.parm1)
 */
#define TYPHOON_MEDIA_STAT_CRC_STRIP_DISABLE	cpu_to_le16(0x0004)
#define TYPHOON_MEDIA_STAT_COLLISION_DETECT	cpu_to_le16(0x0010)
#define TYPHOON_MEDIA_STAT_CARRIER_SENSE	cpu_to_le16(0x0020)
#define TYPHOON_MEDIA_STAT_POLARITY_REV		cpu_to_le16(0x0400)
#define TYPHOON_MEDIA_STAT_NO_LINK		cpu_to_le16(0x0800)

/* TYPHOON_CMD_SET_MULTICAST_HASH enable values (cmd.parm1)
 */
#define TYPHOON_MCAST_HASH_DISABLE	cpu_to_le16(0x0000)
#define TYPHOON_MCAST_HASH_ENABLE	cpu_to_le16(0x0001)
#define TYPHOON_MCAST_HASH_SET		cpu_to_le16(0x0002)

/* TYPHOON_CMD_CREATE_SA descriptor and settings
 */
struct sa_descriptor {
	u8  flags;
	u8  numDesc;
	u16 cmd;
	u16 seqNo;
	u16 mode;
#define TYPHOON_SA_MODE_NULL		cpu_to_le16(0x0000)
#define TYPHOON_SA_MODE_AH		cpu_to_le16(0x0001)
#define TYPHOON_SA_MODE_ESP		cpu_to_le16(0x0002)
	u8  hashFlags;
#define TYPHOON_SA_HASH_ENABLE		0x01
#define TYPHOON_SA_HASH_SHA1		0x02
#define TYPHOON_SA_HASH_MD5		0x04
	u8  direction;
#define TYPHOON_SA_DIR_RX		0x00
#define TYPHOON_SA_DIR_TX		0x01
	u8  encryptionFlags;
#define TYPHOON_SA_ENCRYPT_ENABLE	0x01
#define TYPHOON_SA_ENCRYPT_DES		0x02
#define TYPHOON_SA_ENCRYPT_3DES		0x00
#define TYPHOON_SA_ENCRYPT_3DES_2KEY	0x00
#define TYPHOON_SA_ENCRYPT_3DES_3KEY	0x04
#define TYPHOON_SA_ENCRYPT_CBC		0x08
#define TYPHOON_SA_ENCRYPT_ECB		0x00
	u8  specifyIndex;
#define TYPHOON_SA_SPECIFY_INDEX	0x01
#define TYPHOON_SA_GENERATE_INDEX	0x00
	u32 SPI;
	u32 destAddr;
	u32 destMask;
	u8  integKey[20];
	u8  confKey[24];
	u32 index;
	u32 unused;
	u32 unused2;
} __packed;

/* TYPHOON_CMD_SET_OFFLOAD_TASKS bits (cmd.parm2 (Tx) & cmd.parm3 (Rx))
 * This is all for IPv4.
 */
#define TYPHOON_OFFLOAD_TCP_CHKSUM	cpu_to_le32(0x00000002)
#define TYPHOON_OFFLOAD_UDP_CHKSUM	cpu_to_le32(0x00000004)
#define TYPHOON_OFFLOAD_IP_CHKSUM	cpu_to_le32(0x00000008)
#define TYPHOON_OFFLOAD_IPSEC		cpu_to_le32(0x00000010)
#define TYPHOON_OFFLOAD_BCAST_THROTTLE	cpu_to_le32(0x00000020)
#define TYPHOON_OFFLOAD_DHCP_PREVENT	cpu_to_le32(0x00000040)
#define TYPHOON_OFFLOAD_VLAN		cpu_to_le32(0x00000080)
#define TYPHOON_OFFLOAD_FILTERING	cpu_to_le32(0x00000100)
#define TYPHOON_OFFLOAD_TCP_SEGMENT	cpu_to_le32(0x00000200)

/* TYPHOON_CMD_ENABLE_WAKE_EVENTS bits (cmd.parm1)
 */
#define TYPHOON_WAKE_MAGIC_PKT		cpu_to_le16(0x01)
#define TYPHOON_WAKE_LINK_EVENT		cpu_to_le16(0x02)
#define TYPHOON_WAKE_ICMP_ECHO		cpu_to_le16(0x04)
#define TYPHOON_WAKE_ARP		cpu_to_le16(0x08)

/* These are used to load the firmware image on the NIC
 */
struct typhoon_file_header {
	u8  tag[8];
	__le32 version;
	__le32 numSections;
	__le32 startAddr;
	__le32 hmacDigest[5];
} __packed;

struct typhoon_section_header {
	__le32 len;
	u16 checksum;
	u16 reserved;
	__le32 startAddr;
} __packed;

/* The Typhoon Register offsets
 */
#define TYPHOON_REG_SOFT_RESET			0x00
#define TYPHOON_REG_INTR_STATUS			0x04
#define TYPHOON_REG_INTR_ENABLE			0x08
#define TYPHOON_REG_INTR_MASK			0x0c
#define TYPHOON_REG_SELF_INTERRUPT		0x10
#define TYPHOON_REG_HOST2ARM7			0x14
#define TYPHOON_REG_HOST2ARM6			0x18
#define TYPHOON_REG_HOST2ARM5			0x1c
#define TYPHOON_REG_HOST2ARM4			0x20
#define TYPHOON_REG_HOST2ARM3			0x24
#define TYPHOON_REG_HOST2ARM2			0x28
#define TYPHOON_REG_HOST2ARM1			0x2c
#define TYPHOON_REG_HOST2ARM0			0x30
#define TYPHOON_REG_ARM2HOST3			0x34
#define TYPHOON_REG_ARM2HOST2			0x38
#define TYPHOON_REG_ARM2HOST1			0x3c
#define TYPHOON_REG_ARM2HOST0			0x40

#define TYPHOON_REG_BOOT_DATA_LO		TYPHOON_REG_HOST2ARM5
#define TYPHOON_REG_BOOT_DATA_HI		TYPHOON_REG_HOST2ARM4
#define TYPHOON_REG_BOOT_DEST_ADDR		TYPHOON_REG_HOST2ARM3
#define TYPHOON_REG_BOOT_CHECKSUM		TYPHOON_REG_HOST2ARM2
#define TYPHOON_REG_BOOT_LENGTH			TYPHOON_REG_HOST2ARM1

#define TYPHOON_REG_DOWNLOAD_BOOT_ADDR		TYPHOON_REG_HOST2ARM1
#define TYPHOON_REG_DOWNLOAD_HMAC_0		TYPHOON_REG_HOST2ARM2
#define TYPHOON_REG_DOWNLOAD_HMAC_1		TYPHOON_REG_HOST2ARM3
#define TYPHOON_REG_DOWNLOAD_HMAC_2		TYPHOON_REG_HOST2ARM4
#define TYPHOON_REG_DOWNLOAD_HMAC_3		TYPHOON_REG_HOST2ARM5
#define TYPHOON_REG_DOWNLOAD_HMAC_4		TYPHOON_REG_HOST2ARM6

#define TYPHOON_REG_BOOT_RECORD_ADDR_HI		TYPHOON_REG_HOST2ARM2
#define TYPHOON_REG_BOOT_RECORD_ADDR_LO		TYPHOON_REG_HOST2ARM1

#define TYPHOON_REG_TX_LO_READY			TYPHOON_REG_HOST2ARM3
#define TYPHOON_REG_CMD_READY			TYPHOON_REG_HOST2ARM2
#define TYPHOON_REG_TX_HI_READY			TYPHOON_REG_HOST2ARM1

#define TYPHOON_REG_COMMAND			TYPHOON_REG_HOST2ARM0
#define TYPHOON_REG_HEARTBEAT			TYPHOON_REG_ARM2HOST3
#define TYPHOON_REG_STATUS			TYPHOON_REG_ARM2HOST0

/* 3XP Reset values (TYPHOON_REG_SOFT_RESET)
 */
#define TYPHOON_RESET_ALL	0x7f
#define TYPHOON_RESET_NONE	0x00

/* 3XP irq bits (TYPHOON_REG_INTR{STATUS,ENABLE,MASK})
 *
 * Some of these came from OpenBSD, as the 3Com docs have it wrong
 * (INTR_SELF) or don't list it at all (INTR_*_ABORT)
 *
 * Enabling irqs on the Heartbeat reg (ArmToHost3) gets you an irq
 * about every 8ms, so don't do it.
 */
#define TYPHOON_INTR_HOST_INT		0x00000001
#define TYPHOON_INTR_ARM2HOST0		0x00000002
#define TYPHOON_INTR_ARM2HOST1		0x00000004
#define TYPHOON_INTR_ARM2HOST2		0x00000008
#define TYPHOON_INTR_ARM2HOST3		0x00000010
#define TYPHOON_INTR_DMA0		0x00000020
#define TYPHOON_INTR_DMA1		0x00000040
#define TYPHOON_INTR_DMA2		0x00000080
#define TYPHOON_INTR_DMA3		0x00000100
#define TYPHOON_INTR_MASTER_ABORT	0x00000200
#define TYPHOON_INTR_TARGET_ABORT	0x00000400
#define TYPHOON_INTR_SELF		0x00000800
#define TYPHOON_INTR_RESERVED		0xfffff000

#define TYPHOON_INTR_BOOTCMD		TYPHOON_INTR_ARM2HOST0

#define TYPHOON_INTR_ENABLE_ALL		0xffffffef
#define TYPHOON_INTR_ALL		0xffffffff
#define TYPHOON_INTR_NONE		0x00000000

/* The commands for the 3XP chip (TYPHOON_REG_COMMAND)
 */
#define TYPHOON_BOOTCMD_BOOT			0x00
#define TYPHOON_BOOTCMD_WAKEUP			0xfa
#define TYPHOON_BOOTCMD_DNLD_COMPLETE		0xfb
#define TYPHOON_BOOTCMD_SEG_AVAILABLE		0xfc
#define TYPHOON_BOOTCMD_RUNTIME_IMAGE		0xfd
#define TYPHOON_BOOTCMD_REG_BOOT_RECORD		0xff

/* 3XP Status values (TYPHOON_REG_STATUS)
 */
#define TYPHOON_STATUS_WAITING_FOR_BOOT		0x07
#define TYPHOON_STATUS_SECOND_INIT		0x08
#define TYPHOON_STATUS_RUNNING			0x09
#define TYPHOON_STATUS_WAITING_FOR_HOST		0x0d
#define TYPHOON_STATUS_WAITING_FOR_SEGMENT	0x10
#define TYPHOON_STATUS_SLEEPING			0x11
#define TYPHOON_STATUS_HALTED			0x14
