1 /* SPDX-License-Identifier: GPL-2.0+ */
3 * (C) Copyright 2019 Xilinx, Inc.
4 * Siva Durga Prasad Paladugu <siva.durga.paladugu@xilinx.com>
10 struct fru_common_hdr {
21 #define FRU_BOARD_MAX_LEN 32
23 struct __packed fru_board_info_header {
30 struct __packed fru_board_info_member {
35 struct fru_board_data {
40 u8 manufacturer_type_len;
41 u8 manufacturer_name[FRU_BOARD_MAX_LEN];
42 u8 product_name_type_len;
43 u8 product_name[FRU_BOARD_MAX_LEN];
44 u8 serial_number_type_len;
45 u8 serial_number[FRU_BOARD_MAX_LEN];
46 u8 part_number_type_len;
47 u8 part_number[FRU_BOARD_MAX_LEN];
49 u8 file_id[FRU_BOARD_MAX_LEN];
50 /* Xilinx custom fields */
52 u8 rev[FRU_BOARD_MAX_LEN];
57 struct fru_common_hdr hdr;
58 struct fru_board_data brd;
61 #define FRU_TYPELEN_CODE_MASK 0xC0
62 #define FRU_TYPELEN_LEN_MASK 0x3F
63 #define FRU_COMMON_HDR_VER_MASK 0xF
64 #define FRU_COMMON_HDR_LEN_MULTIPLIER 8
65 #define FRU_LANG_CODE_ENGLISH 0
66 #define FRU_LANG_CODE_ENGLISH_1 25
67 #define FRU_TYPELEN_EOF 0xC1
69 /* This should be minimum of fields */
70 #define FRU_BOARD_AREA_TOTAL_FIELDS 5
71 #define FRU_TYPELEN_TYPE_SHIFT 6
72 #define FRU_TYPELEN_TYPE_BINARY 0
73 #define FRU_TYPELEN_TYPE_ASCII8 3
75 int fru_display(int verbose);
76 int fru_capture(unsigned long addr);
77 int fru_generate(unsigned long addr, char *manufacturer, char *board_name,
78 char *serial_no, char *part_no, char *revision);
79 u8 fru_checksum(u8 *addr, u8 len);
81 extern struct fru_table fru_data;