feat: start setup virtio
This commit is contained in:
46
kernel/drivers/pci/virtio/virtio-lock.c
Normal file
46
kernel/drivers/pci/virtio/virtio-lock.c
Normal file
@@ -0,0 +1,46 @@
|
||||
//
|
||||
// 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,
|
||||
};
|
||||
Reference in New Issue
Block a user