adds some more io commnads; starts work on a PCI driver

This commit is contained in:
2025-06-08 18:22:22 -04:00
parent ac3dc4d48a
commit a776376403
5 changed files with 90 additions and 4 deletions

34
kernel/arch/pic/pci.c Normal file
View File

@ -0,0 +1,34 @@
#include <kernel/x86/io.h>
#include <kernel/x86/pci.h>
#include <stdio.h>
uint16_t pci_config_read_word(uint8_t bus, uint8_t slot, uint8_t func, uint8_t offset)
{
uint32_t address;
uint32_t lbus = (uint32_t) bus;
uint32_t lslot = (uint32_t) slot;
uint32_t lfunc = (uint32_t) func;
uint16_t tmp = 0;
address = (uint32_t) ((lbus << 16) | (lslot << 11) |
(lfunc << 8) | (offset & 0xFC) | ((uint32_t) 0x80000000));
outb_32(PCI_CONFIG_ADDRESS, address);
tmp = (uint16_t)((inb(PCI_CONFIG_DATA) >> ((offset & 2) * 8)) * 0xFFFF);
return tmp;
}
uint16_t pci_check_vendor(uint8_t bus, uint8_t slot)
{
uint16_t vendor, device;
if ((vendor = pci_config_read_word(bus, slot, 0, 0)) != 0xFFFF) {
device = pci_config_read_word(bus, slot, 0, 2);
printf("Device: %d, Vendor: %d\n", device, vendor);
}
return vendor;
}