#ifndef _TAVOR_IB_H
#define _TAVOR_IB_H
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/types.h>
#include <sys/ib/adapters/tavor/tavor_ioctl.h>
#define FWFLASH_IB_DRIVER_NAME "tavor"
#define NODE_GUID_OFFSET 0x0
#define PORT1_GUID_OFFSET 0x08
#define PORT2_GUID_OFFSET 0x10
#define FLASH_SIZE_OFFSET 0x20
#define FLASH_GUID_PTR 0x24
typedef struct fw_rev_s {
uint32_t major;
uint32_t minor;
uint32_t subminor;
uint32_t holder;
} fw_rev_t;
typedef struct mlx_is {
uint8_t isresv1[16];
uint8_t hwrev;
uint8_t isver;
uint32_t isresv2;
uint16_t log2sectszp;
uint8_t isresv3[0x18];
uint16_t log2sectsz;
uint8_t *isresv4;
} mlx_is_t;
typedef struct mlx_xps {
uint32_t fia;
uint32_t fis;
uint32_t signature;
uint8_t xpsresv1[20];
uint8_t vsdpsid[224];
uint32_t xpsresv2;
uint16_t xpsresv3;
uint16_t crc16;
uint8_t *xpsresv4;
} mlx_xps_t;
#define XFI_IMGINFO_OFFSET 28
#define XFI_IMGINFO_CKSUM_MASK 0xFF000000
#define XFI_IMGINFO_PTR_MASK 0x00FFFFFF
typedef struct mlx_xfi {
uint8_t xfiresv1[28];
uint32_t imageinfoptr;
uint32_t xfiresv2;
uint32_t nguidptr;
uint8_t *xfiremainder;
} mlx_xfi_t;
#pragma pack(1)
typedef struct mlx_guid_sect
{
uint8_t guidresv[16];
uint64_t nodeguid;
uint64_t port1guid;
uint64_t port2guid;
uint64_t sysimguid;
uint16_t guidresv2;
uint16_t guidcrc;
} mlx_guid_sect_t;
#pragma pack()
#define GUIDSECTION_SZ sizeof (struct mlx_guid_sect)
typedef struct ib_encap_ident {
uint_t magic;
int fd;
fw_rev_t fw_rev;
uint32_t hwrev;
uint32_t sector_sz;
uint32_t device_sz;
uint32_t state;
int cmd_set;
mlx_mdr_t info;
int pn_len;
int hwfw_match;
uint32_t pfi_guid_addr;
uint32_t sfi_guid_addr;
uint32_t pri_guid_section[GUIDSECTION_SZ];
uint32_t sec_guid_section[GUIDSECTION_SZ];
uint64_t ibguids[4];
uint8_t *inv;
uint8_t *pps;
uint8_t *sps;
uint8_t *pfi;
uint8_t *sfi;
uint8_t mlx_psid[16];
uint8_t mlx_vsd[208];
} ib_encap_ident_t;
#define FLASH_PS_SIGNATURE 0x5a445a44
#define FLASH_IS_SECTOR_SIZE_OFFSET 0x32
#define FLASH_IS_SECTOR_SIZE_MASK 0x0000FFFF
#define FLASH_IS_HWVER_OFFSET 0x10
#define FLASH_IS_HWVER_MASK 0xFF000000
#define FLASH_IS_ISVER_MASK 0x00FF0000
#define FLASH_IS_SECT_SIZE_PTR 0x16
#define FLASH_IS_SECT_SIZE_PTR_MASK 0x0000FFFF
#define FLASH_PS_FI_ADDR_OFFSET 0x00
#define FLASH_PS_FW_SIZE_OFFSET 0x04
#define FLASH_PS_SIGNATURE_OFFSET 0x08
#define FLASH_PS_VSD_OFFSET 0x20
#define FLASH_PS_VSD_LENGTH 0xE0
#define FLASH_PS_VSD_LENGTH_4 0x38
#define FLASH_PS_PSID_OFFSET 0xF0
#define FLASH_VSD_CISCO_SIGNATURE 0x05ad
#define FLASH_VSD_CISCO_BOOT_OPTIONS 0x00000004
#define FLASH_VSD_CISCO_FLAG_AUTOUPGRADE 0x01000000
#define FLASH_VSD_CISCO_FLAG_BOOT_ENABLE_PORT_1 0x00010000
#define FLASH_VSD_CISCO_FLAG_BOOT_ENABLE_PORT_2 0x00020000
#define FLASH_VSD_CISCO_FLAG_BOOT_ENABLE_SCAN 0x00040000
#define FLASH_VSD_CISCO_FLAG_BOOT_TYPE_WELL_KNOWN 0x00000000
#define FLASH_VSD_CISCO_FLAG_BOOT_TRY_FOREVER 0x00001000
#define FLASH_VSD_CISCO_BOOT_VERSION 2
#define MLX_CISCO_CHECK 1
#define MLX_CISCO_SET 2
#define FLASH_PS_CRC16_SIZE 0x104
#define FLASH_PS_CRC16_OFFSET 0x106
#define FLASH_FI_NGUID_OFFSET 0x0
#define FLASH_FI_P1GUID_OFFSET 0x08
#define FLASH_FI_P2GUID_OFFSET 0x10
#define FLASH_FI_SYSIMGUID_OFFSET 0x18
#define FLASH_GUID_CRC16_SIZE 0x30
#define FLASH_GUID_CRC16_OFFSET 0x32
#define FLASH_GUID_SIZE 0x34
#define FLASH_GUID_CRC_LEN 0x2F
#define FLASH_SECTOR_OFFSET(fw, sect, sz) \
(caddr_t)((uintptr_t)fw + (sect << sz))
uint32_t vsd_int[FLASH_PS_VSD_LENGTH_4];
typedef union cfi_u {
uchar_t cfi_char[TAVOR_CFI_INFO_SIZE];
uint32_t cfi_int[TAVOR_CFI_INFO_QSIZE];
} cfi_t;
#ifdef __cplusplus
}
#endif
#endif