41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
|
#include <stdio.h>
|
||
|
#include "umka.h"
|
||
|
|
||
|
struct devices_dat_entry {
|
||
|
uint8_t fun:3;
|
||
|
uint8_t dev:5;
|
||
|
uint8_t bus;
|
||
|
uint16_t pad1;
|
||
|
uint16_t vendor_id;
|
||
|
uint16_t device_id;
|
||
|
uint32_t irq;
|
||
|
uint32_t pad2;
|
||
|
};
|
||
|
|
||
|
STDCALL void*
|
||
|
dump_devices_dat_iter(struct pci_dev *node, void *arg) {
|
||
|
FILE *f = arg;
|
||
|
if (node->gsi) {
|
||
|
fwrite(&(struct devices_dat_entry){.dev = node->dev,
|
||
|
.fun = node->fun,
|
||
|
.bus = node->parent->bus,
|
||
|
.vendor_id = node->vendor_id,
|
||
|
.device_id = node->device_id,
|
||
|
.irq = node->gsi},
|
||
|
1, sizeof(struct devices_dat_entry), f);
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
void dump_devices_dat(const char *filename) {
|
||
|
FILE *f = fopen(filename, "w");
|
||
|
if (!f) {
|
||
|
perror("Can't open file devices.dat");
|
||
|
return;
|
||
|
}
|
||
|
kos_pci_walk_tree(kos_pci_root, NULL, dump_devices_dat_iter, f);
|
||
|
// dump_devices_dat_iter(kos_pci_root, f);
|
||
|
fwrite(&(uint32_t){0xffffffffu}, 1, 4, f);
|
||
|
fclose(f);
|
||
|
}
|