Files
my-kern/kernel/drivers/pci/virtio/virtio-lock.c
2022-09-01 20:45:40 +02:00

46 lines
1.9 KiB
C

//
// Created by rick on 14-5-22.
//
#include <endian.h>
#include <myke/drivers/pci/pci.h>
#include <myke/drivers/pci/virtio.h>
uint8_t att_used virtio_pci_block_validate(const pci_device *pci_device) {
uint32_t capacity_l = pci_config_read_double_word(pci_device->bus, pci_device->slot, pci_device->func, 0x14);
uint32_t capacity_h = pci_config_read_double_word(pci_device->bus, pci_device->slot, pci_device->func, 0x18);
uint32_t segment_size_max = pci_config_read_double_word(pci_device->bus, pci_device->slot, pci_device->func, 0x1c);
uint32_t segment_count_max = pci_config_read_double_word(pci_device->bus, pci_device->slot, pci_device->func, 0x20);
uint16_t cylinder_count = pci_config_read_word(pci_device->bus, pci_device->slot, pci_device->func, 0x24);
uint8_t head_count = pci_config_read_byte(pci_device->bus, pci_device->slot, pci_device->func, 0x26);
uint8_t sector_count = pci_config_read_byte(pci_device->bus, pci_device->slot, pci_device->func, 0x27);
uint32_t block_length = pci_config_read_double_word(pci_device->bus, pci_device->slot, pci_device->func, 0x28);
capacity_l = leu32_to_native(capacity_l);
capacity_h = leu32_to_native(capacity_h);
uint64_t capacity = ((uint64_t) capacity_h) >> 32 | capacity_l;
return PCI_VALIDATE_FAIL;
}
uint8_t att_used virtio_pci_block_initialize(pci_device *pci_device) {
return PCI_INIT_FAIL;
}
PCI_DRIVER(900) = {
.name = "pci-virtio-block",
.description = "Para-virtualized Block Device",
.validatable = true,
.initialisable = true,
.match.class = PCI_CLASS_MASS_STORAGE,
.match.subclass = PCI_SUB_CLASS_MASS_SCSI,
.match.vendor = PCI_VENDOR_VIRTIO,
.match.device = PCI_DEVICE_VIRTIO_BLOCK,
.mask.class = true,
.mask.subclass = true,
.mask.vendor = true,
.mask.device = true,
.validate = virtio_pci_block_validate,
.initialize = virtio_pci_block_initialize,
};