/* Broadcom NetXtreme-C/E network driver.
 *
 * Copyright (c) 2014-2016 Broadcom Corporation
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 */

#ifndef __BNXT_FW_HDR_H__
#define __BNXT_FW_HDR_H__

#define BNXT_FIRMWARE_BIN_SIGNATURE     0x1a4d4342	/* "BCM"+0x1a */
#define BNXT_UCODE_TRAILER_SIGNATURE	0x726c7254	/* "Trlr" */

enum SUPPORTED_FAMILY {
	DEVICE_5702_3_4_FAMILY,		/* 0  - Denali, Vinson, K2 */
	DEVICE_5705_FAMILY,		/* 1  - Bachelor */
	DEVICE_SHASTA_FAMILY,		/* 2  - 5751 */
	DEVICE_5706_FAMILY,		/* 3  - Teton */
	DEVICE_5714_FAMILY,		/* 4  - Hamilton */
	DEVICE_STANFORD_FAMILY,		/* 5  - 5755 */
	DEVICE_STANFORD_ME_FAMILY,	/* 6  - 5756 */
	DEVICE_SOLEDAD_FAMILY,		/* 7  - 5761[E] */
	DEVICE_CILAI_FAMILY,		/* 8  - 57780/60/90/91 */
	DEVICE_ASPEN_FAMILY,		/* 9  - 57781/85/61/65/91/95 */
	DEVICE_ASPEN_PLUS_FAMILY,	/* 10 - 57786 */
	DEVICE_LOGAN_FAMILY,		/* 11 - Any device in the Logan family
					 */
	DEVICE_LOGAN_5762,		/* 12 - Logan Enterprise (aka Columbia)
					 */
	DEVICE_LOGAN_57767,		/* 13 - Logan Client */
	DEVICE_LOGAN_57787,		/* 14 - Logan Consumer */
	DEVICE_LOGAN_5725,		/* 15 - Logan Server (TruManage-enabled)
					 */
	DEVICE_SAWTOOTH_FAMILY,		/* 16 - 5717/18 */
	DEVICE_COTOPAXI_FAMILY,		/* 17 - 5719 */
	DEVICE_SNAGGLETOOTH_FAMILY,	/* 18 - 5720 */
	DEVICE_CUMULUS_FAMILY,		/* 19 - Cumulus/Whitney */
	MAX_DEVICE_FAMILY
};

enum SUPPORTED_CODE {
	CODE_ASF1,		/* 0  - ASF VERSION 1.03 <deprecated> */
	CODE_ASF2,		/* 1  - ASF VERSION 2.00 <deprecated> */
	CODE_PASSTHRU,		/* 2  - PassThru         <deprecated> */
	CODE_PT_SEC,		/* 3  - PassThru with security <deprecated> */
	CODE_UMP,		/* 4  - UMP                     <deprecated> */
	CODE_BOOT,		/* 5  - Bootcode */
	CODE_DASH,		/* 6  - TruManage (DASH + ASF + PMCI)
				 *	Management firmwares
				 */
	CODE_MCTP_PASSTHRU,	/* 7  - NCSI / MCTP Passt-hrough firmware */
	CODE_PM_OFFLOAD,	/* 8  - Power-Management Proxy Offload firmwares
				 */
	CODE_MDNS_SD_OFFLOAD,	/* 9  - Multicast DNS Service Discovery Proxys
				 *	Offload firmware
				 */
	CODE_DISC_OFFLOAD,	/* 10 - Discovery Offload firmware */
	CODE_MUSTANG,		/* 11 - I2C Error reporting APE firmwares
				 *	<deprecated>
				 */
	CODE_ARP_BATCH,		/* 12 - ARP Batch firmware */
	CODE_SMASH,		/* 13 - TruManage (SMASH + DCMI/IPMI + PMCI)
				 *	Management firmware
				 */
	CODE_APE_DIAG,		/* 14 - APE Test Diag firmware */
	CODE_APE_PATCH,		/* 15 - APE Patch firmware */
	CODE_TANG_PATCH,	/* 16 - TANG Patch firmware */
	CODE_KONG_FW,		/* 17 - KONG firmware */
	CODE_KONG_PATCH,	/* 18 - KONG Patch firmware */
	CODE_BONO_FW,		/* 19 - BONO firmware */
	CODE_BONO_PATCH,	/* 20 - BONO Patch firmware */
	CODE_CHIMP_PATCH,	/* 21 - ChiMP Patch firmware */

	MAX_CODE_TYPE,
};

enum SUPPORTED_MEDIA {
	MEDIA_COPPER,		/* 0 */
	MEDIA_FIBER,		/* 1 */
	MEDIA_NONE,		/* 2 */
	MEDIA_COPPER_FIBER,	/* 3 */
	MAX_MEDIA_TYPE,
};

struct bnxt_fw_header {
	__le32 signature;	/* constains the constant value of
				 * BNXT_FIRMWARE_BIN_SIGNATURE
				 */
	u8 flags;		/* reserved for ChiMP use */
	u8 code_type;		/* enum SUPPORTED_CODE */
	u8 device;		/* enum SUPPORTED_FAMILY */
	u8 media;		/* enum SUPPORTED_MEDIA */
	u8 version[16];		/* the null terminated version string to
				 * indicate the version of the
				 * file, this will be copied from the binary
				 * file version string
				 */
	u8 build;
	u8 revision;
	u8 minor_ver;
	u8 major_ver;
};

/* Microcode and pre-boot software/firmware trailer: */
struct bnxt_ucode_trailer {
	u8 rsa_sig[256];
	__le16 flags;
	u8 version_format;
	u8 version_length;
	u8 version[16];
	__le16 dir_type;
	__le16 trailer_length;
	__le32 sig;		/* BNXT_UCODE_TRAILER_SIGNATURE */
	__le32 chksum;		/* CRC-32 */
};

#endif
