// SPDX-License-Identifier: GPL-2.0
#include <linux/kobject.h>
#include <boot_param.h>

static ssize_t boardinfo_show(struct kobject *kobj,
			      struct kobj_attribute *attr, char *buf)
{
	char board_manufacturer[64] = {0};
	char *tmp_board_manufacturer = board_manufacturer;
	char bios_vendor[64] = {0};
	char *tmp_bios_vendor = bios_vendor;

	strcpy(board_manufacturer, eboard->name);
	strcpy(bios_vendor, einter->description);

	return sprintf(buf,
		       "Board Info\n"
		       "Manufacturer\t\t: %s\n"
		       "Board Name\t\t: %s\n"
		       "Family\t\t\t: LOONGSON3\n\n"
		       "BIOS Info\n"
		       "Vendor\t\t\t: %s\n"
		       "Version\t\t\t: %s\n"
		       "ROM Size\t\t: %d KB\n"
		       "Release Date\t\t: %s\n",
		       strsep(&tmp_board_manufacturer, "-"),
		       eboard->name,
		       strsep(&tmp_bios_vendor, "-"),
		       einter->description,
		       einter->size,
		       especial->special_name);
}
static struct kobj_attribute boardinfo_attr = __ATTR(boardinfo, 0444,
						     boardinfo_show, NULL);

static int __init boardinfo_init(void)
{
	struct kobject *lefi_kobj;

	lefi_kobj = kobject_create_and_add("lefi", firmware_kobj);
	if (!lefi_kobj) {
		pr_err("lefi: Firmware registration failed.\n");
		return -ENOMEM;
	}

	return sysfs_create_file(lefi_kobj, &boardinfo_attr.attr);
}
late_initcall(boardinfo_init);
