/* SPDX-License-Identifier: GPL-2.0-only */

#include <device/device.h>
#include <device/pci_ids.h>
#include <smbios.h>

#include "wifi_private.h"

static int smbios_write_intel_wifi(struct device *dev, int *handle, unsigned long *current)
{
	if (dev->vendor != PCI_VID_INTEL)
		return 0;

	struct smbios_type_intel_wifi {
		struct smbios_header header;
		u8 str;
		u8 eos[2];
	} __packed;

	struct smbios_type_intel_wifi *t = smbios_carve_table(*current, 0x85,
							      sizeof(*t), *handle);

	/* Intel wifi driver expects this string to be in the table 0x85. */
	t->str = smbios_add_string(t->eos, "KHOIHGIUCCHHII");

	const int len = smbios_full_table_len(&t->header, t->eos);
	*current += len;
	*handle += 1;
	return len;
}

int smbios_write_wifi_pcie(struct device *dev, int *handle, unsigned long *current)
{
	int len = smbios_write_intel_wifi(dev, handle, current);
	len += get_smbios_data(dev, handle, current);
	return len;
}

int smbios_write_wifi_cnvi(struct device *dev, int *handle, unsigned long *current)
{
	return smbios_write_wifi_pcie(dev->upstream->dev, handle, current);
}
