/* 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 Typoon 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
