Newer
Older
tree-os / src / kernel / drivers / pci / hardDrive / hardDrive.c
#include <_stdio.h>
#include <alloc.h>
#include <hardDrive.h>
#include <pci.h>
#include <ports.h>

void scanHardDrives() {
    ListElement *drives = NULL;
    for (ListElement *current = *getPciDevices(); current;
         current = current->next) {
        PciDevice *pciDevice = current->data;
        if (pciDevice->class != 1) {
            continue;
        }
        switch (pciDevice->subclass) {
        case 1:
            initializeIdeController(pciDevice, &drives);
            break;
        case 6:
            initializeSataController(pciDevice, &drives);
            break;
        }
    }
    void *buffer = malloc(2000);
    for (ListElement *current = drives; current; current = current->next) {
        HardDrive *hardDrive = current->data;
        hardDrive->access(hardDrive, 0, buffer, 1, 0);
        printf("data: %x %x %s\n", *(uint32_t *)buffer,
               *((uint32_t *)buffer + 1), buffer);
    }
    free(buffer);
}