/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * (C) Copyright 2019 Xilinx, Inc.
 * Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
 */

#ifndef __FRU_H
#define __FRU_H
#include <net.h>

struct fru_common_hdr {
	u8 version;
	u8 off_internal;
	u8 off_chassis;
	u8 off_board;
	u8 off_product;
	u8 off_multirec;
	u8 pad;
	u8 crc;
};

#define FRU_BOARD_MAX_LEN	32
#define FRU_MAX_NO_OF_MAC_ADDR	4

struct __packed fru_board_info_header {
	u8 ver;
	u8 len;
	u8 lang_code;
	u8 time[3];
};

struct __packed fru_board_info_member {
	u8 type_len;
	u8 *name;
};

struct fru_board_data {
	u8 ver;
	u8 len;
	u8 lang_code;
	u8 time[3];
	u8 manufacturer_type_len;
	u8 manufacturer_name[FRU_BOARD_MAX_LEN];
	u8 product_name_type_len;
	u8 product_name[FRU_BOARD_MAX_LEN];
	u8 serial_number_type_len;
	u8 serial_number[FRU_BOARD_MAX_LEN];
	u8 part_number_type_len;
	u8 part_number[FRU_BOARD_MAX_LEN];
	u8 file_id_type_len;
	u8 file_id[FRU_BOARD_MAX_LEN];
	/* Xilinx custom fields */
	u8 rev_type_len;
	u8 rev[FRU_BOARD_MAX_LEN];
	u8 pcie_type_len;
	u8 pcie[FRU_BOARD_MAX_LEN];
	u8 uuid_type_len;
	u8 uuid[FRU_BOARD_MAX_LEN];
};

struct fru_multirec_hdr {
	u8 rec_type;
	u8 type;
	u8 len;
	u8 csum;
	u8 hdr_csum;
};

struct fru_multirec_mac {
	u8 xlnx_iana_id[3];
	u8 ver;
	u8 macid[FRU_MAX_NO_OF_MAC_ADDR][ETH_ALEN];
};

struct fru_table {
	struct fru_common_hdr hdr;
	struct fru_board_data brd;
	struct fru_multirec_mac mac;
	bool captured;
};

#define FRU_TYPELEN_CODE_MASK	0xC0
#define FRU_TYPELEN_LEN_MASK	0x3F
#define FRU_COMMON_HDR_VER_MASK		0xF
#define FRU_COMMON_HDR_LEN_MULTIPLIER	8
#define FRU_LANG_CODE_ENGLISH		0
#define FRU_LANG_CODE_ENGLISH_1		25
#define FRU_TYPELEN_EOF			0xC1
#define FRU_MULTIREC_TYPE_OEM		0xD2
#define FRU_MULTIREC_MAC_OFFSET		4
#define FRU_LAST_REC			BIT(7)
#define FRU_DUT_MACID			0x31

/* This should be minimum of fields */
#define FRU_BOARD_AREA_TOTAL_FIELDS	5
#define FRU_TYPELEN_TYPE_SHIFT		6
#define FRU_TYPELEN_TYPE_BINARY		0
#define FRU_TYPELEN_TYPE_ASCII8		3

int fru_display(int verbose);
int fru_capture(unsigned long addr);
int fru_generate(unsigned long addr, char *manufacturer, char *board_name,
		 char *serial_no, char *part_no, char *revision);
u8 fru_checksum(u8 *addr, u8 len);

extern struct fru_table fru_data;

#endif /* FRU_H */
