#include <alloc.h>
#include <dri/ata_pio/ata_pio.h>
#include <dri/ide/ide.h>
#include <log.h>
#include <task.h>

struct ide_thread_data
{
	struct pci_device dev;
	uchar bus, slot, func;
};

bool ide_supports(struct pci_device *dev)
{
	return dev->class == 1 && dev->subclass == 1;
}

void ide_print_device(struct ide_device *dev)
{
	kprintf(INFO "IDE device dma=%b\n", dev->supports_dma);
}

void ide_thread(struct ide_thread_data *data)
{
	struct ide_device dev;

	uchar p = data->dev.prog_if;
	dev.channel_mode[0] = p & 1;
	dev.channel_mode_modifiable[0] = p & (1 << 1);
	dev.channel_mode[1] = p & (1 << 2);
	dev.channel_mode_modifiable[1] = p & (1 << 3);
	dev.supports_dma = p & (1 << 7);

	ide_print_device(&dev);

	// TODO: pass ATA PIO driver information about the IDE device (i.e. what
	// ports to use)
	init_ata_pio();

	kprintf(OKAY "Set up ATA PIO\n");

	free(data);
}

void ide_init(struct pci_device dev, uchar bus, uchar slot, uchar func)
{
	struct ide_thread_data *data = malloc(sizeof(struct ide_thread_data));
	data->dev = dev;
	data->bus = bus;
	data->slot = slot;
	data->func = func;

	ide_thread(data);
}

void ide_register()
{
	struct pci_device_driver dri = {
		.supports = ide_supports,
		.init = ide_init,
		.generic_name = "IDE Controller",
	};

	pci_register_device_driver(dri);
}
