File: [local] / openbsd / fw_update / gen_firmware_patterns.c (download)
Revision 1.1, Wed Dec 22 03:54:55 2021 UTC (2 years, 5 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;
}