#ifndef _LICENSE_H
#define _LICENSE_H
#include "bcmtype.h"
#if !defined(LITTLE_ENDIAN) && !defined(BIG_ENDIAN)
#error "Missing either LITTLE_ENDIAN or BIG_ENDIAN definition."
#endif
#define HASH_VALUE_SIZE 12
typedef struct _license_key_b
{
u8_t digest[HASH_VALUE_SIZE];
#define KEY_VALID_PATTERN_BYTE 0x5a
#define KEY_VALID_PATTERN_DWORD 0x5a5a5a5a
u8_t key_type;
#define KEY_TYPE_ENUM_BCM5706 0x0
#define KEY_TYPE_ENUM_BCM5710 0x2
u8_t version;
#define VERSION_CURRENT 0x0
u8_t dword_length;
u8_t oem_id;
#define OEM_ID_BRCM 0
#define OEM_ID_HPQ 0x3c
u16_t capability;
#define CAP_RESERVED 0x0001
#define CAP_USER_RDMA 0x0002
#define CAP_TOE 0x0004
#define CAP_ISCSI_INIT 0x0008
#define CAP_ISCSI_TRGT 0x0010
#define CAP_ISER_INIT 0x0020
#define CAP_ISER_TRGT 0x0040
#define CAP_ISCSI_BOOT 0x0080
#define CAP_ISCSI_FULL_ACCL 0x0100
#define CAP_ISCSI_HDR_DGST 0x0200
#define CAP_ISCSI_BODY_DGST 0x0400
#define CAP_SERDES_2_5G 0x0800
#define CAP_SPEED_12G 0x0800
#define CAP_SPEED_12_5G 0x1000
#define CAP_SPEED_13G 0x2000
#define CAP_SPEED_15G 0x4000
#define CAP_SPEED_16G 0x8000
u16_t max_toe_conn;
#define CONN_UNLIMITED 0xffff
u16_t reserved;
u16_t max_um_rdma_conn;
u16_t max_iscsi_init_conn;
u16_t max_iscsi_trgt_conn;
u16_t max_iser_init_conn;
u16_t max_iser_trgt_conn;
u32_t reserved_a[3];
u32_t sn;
u16_t reserved_b;
u16_t expiration;
#define EXPIRATION_NEVER 0xffff
} license_key_b_t;
#define KEY_VALID_PATTERN_BYTE 0x5a
#define KEY_VALID_PATTERN_DWORD 0x5a5a5a5a
typedef struct _license_key_l
{
u8_t digest[HASH_VALUE_SIZE];
u8_t oem_id;
#define OEM_ID_BRCM 0
#define OEM_ID_HPQ 0x3c
u8_t dword_length;
u8_t version;
#define VERSION_CURRENT 0x0
u8_t key_type;
#define KEY_TYPE_ENUM_BCM5706 0x0
#define KEY_TYPE_ENUM_BCM5710 0x2
u16_t max_toe_conn;
#define CONN_UNLIMITED 0xffff
u16_t capability;
#define CAP_RESERVED 0x0001
#define CAP_USER_RDMA 0x0002
#define CAP_TOE 0x0004
#define CAP_ISCSI_INIT 0x0008
#define CAP_ISCSI_TRGT 0x0010
#define CAP_ISER_INIT 0x0020
#define CAP_ISER_TRGT 0x0040
#define CAP_ISCSI_BOOT 0x0080
#define CAP_ISCSI_FULL_ACCL 0x0100
#define CAP_ISCSI_HDR_DGST 0x0200
#define CAP_ISCSI_BODY_DGST 0x0400
#define CAP_SERDES_2_5G 0x0800
#define CAP_SPEED_12G 0x0800
#define CAP_SPEED_12_5G 0x1000
#define CAP_SPEED_13G 0x2000
#define CAP_SPEED_15G 0x4000
#define CAP_SPEED_16G 0x8000
u16_t max_um_rdma_conn;
u16_t reserved;
u16_t max_iscsi_trgt_conn;
u16_t max_iscsi_init_conn;
u16_t max_iser_trgt_conn;
u16_t max_iser_init_conn;
u32_t reserved_a[3];
u32_t sn;
u16_t expiration;
#define EXPIRATION_NEVER 0xffff
u16_t reserved_b;
} license_key_l_t;
#define FW_ENCODE_32BIT_PATTERN 0x1e1e1e1e
#define FW_ENCODE_16BIT_PATTERN 0x1e1e
#define FW_ENCODE_8BIT_PATTERN 0x1e
#if defined(BIG_ENDIAN)
typedef license_key_b_t license_key_t;
#elif defined(LITTLE_ENDIAN)
typedef license_key_l_t license_key_t;
#endif
#endif