[BACK]Return to gen_firmware_patterns.c CVS log [TXT][DIR] Up to [local] / openbsd / fw_update

File: [local] / openbsd / fw_update / gen_firmware_patterns.c (download)

Revision 1.1, Wed Dec 22 03:54:55 2021 UTC (2 years, 4 months ago) by afresh1
Branch: MAIN
CVS Tags: HEAD

Add some C that will regen the firmware_patterns

All the good stuff here is from jsg at, I just munged it up to make it print
the other stuff.  Really this is just terrible but I am very much not a C
programmer.

#include <sys/types.h>
#include <stdio.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcidevs.h>
#include <dev/pci/pcidevs_data.h>

struct pci_matchid {
	pci_vendor_id_t		pm_vid;
	pci_product_id_t	pm_pid;
};

#include "amdgpu_devlist.h"
#include "i915_devlist.h"
#include "radeon_devlist.h"

#define nitems(_a)	(sizeof((_a)) / sizeof((_a)[0]))

const char *
pci_findvendor(pci_vendor_id_t vendor)
{
	const struct pci_known_vendor *kdp;

	kdp = pci_known_vendors;
        while (kdp->vendorname != NULL) {	/* all have vendor name */
                if (kdp->vendor == vendor)
                        break;
		kdp++;
	}
        return (kdp->vendorname);
}

const char *
pci_findproduct(pci_vendor_id_t vendor, pci_product_id_t product)
{
	const struct pci_known_product *pkp;

	pkp = pci_known_products;
	while (pkp->productname != NULL) {	/* all have product name */
		if (pkp->vendor == vendor && pkp->product == product)
			break;
		pkp++;
	}
	return (pkp->productname);
}

void
print_devices(char driver[], const struct pci_matchid devices[], int items)
{
	int i;
	const char *v, *p;
	for (i = 0; i < items; i++) {
		v = pci_findvendor(devices[i].pm_vid);
		p = pci_findproduct(devices[i].pm_vid,
		    devices[i].pm_pid);
		/*
		printf("%04x:%04x ", devices[i].pm_vid,
		    devices[i].pm_pid);
		*/
		if ( v && p )
		    printf("%s \"%s %s\"\n", driver, v ? v : "", p ? p : "");
	}
}

int
main(void)
{
	printf("%s\n", "acx");
	printf("%s\n", "amdgpu");
	print_devices("amdgpu", amdgpu_devices, nitems(amdgpu_devices));
	printf("%s\n", "athn");
	printf("%s\n", "bwfm");
	printf("%s\n", "bwi");
	printf("%s\n", "intel");
	printf("%s\n", "intel ^cpu0: Intel");
	printf("%s\n", "inteldrm");
	print_devices("inteldrm", i915_devices, nitems(i915_devices));
	printf("%s\n", "ipw");
	printf("%s\n", "iwi");
	printf("%s\n", "iwm");
	printf("%s\n", "iwn");
	printf("%s\n", "iwx");
	printf("%s\n", "malo");
	printf("%s\n", "ogx");
	printf("%s\n", "otus");
	printf("%s\n", "pgt");
	printf("%s\n", "radeondrm");
	print_devices("radeondrm", radeon_devices, nitems(radeon_devices));
	printf("%s\n", "rsu");
	printf("%s\n", "rtwn");
	printf("%s\n", "uath");
	printf("%s\n", "upgt");
	printf("%s\n", "urtwn");
	printf("%s\n", "uvideo");
	printf("%s\n", "vmm");
	printf("%s\n", "wpi");

	return 0;
}