#include <palacios/vmm.h>
#include <devices/cdrom.h>
#include <devices/ide.h>
-
+#include <devices/pci.h>
#ifndef TRACE_RAMDISK
#undef PrintTrace
case 0xec: // IDENTIFY DEVICE
case 0xa1:
{
-
-
controller->status.busy = 0;
controller->status.drive_ready = 1;
controller->status.write_fault = 0;
controller->status.seek_complete = 1;
controller->status.corrected_data = 0;
controller->status.err = 0;
-
+
/*
value32 = controller->buffer[index];
index++;
if (controller->buffer_index >= 512) {
controller->status.drq = 0;
}
-
+
return length;
}
case 0xa0: //send packet cmd
drive->id_drive[i] = 0;
}
- // now convert the id_drive array (native 256 word format) to
- // the controller buffer (512 bytes)
- Bit16u temp16;
- for (i = 0; i <= 255; i++) {
- temp16 = drive->id_drive[i];
- controller->buffer[i * 2] = temp16 & 0x00ff;
- controller->buffer[i * 2 + 1] = temp16 >> 8;
- }
return;
}
}
+/*
+static void init_pci(struct ramdisk_t * ramdisk) {
+struct v3_pci_bar bars[6];
+ struct pci_device * pci_dev;
+ int i;
+
+ for (i = 0; i < 6; i++) {
+ bars[i].type = PCI_BAR_NONE;
+ bars[i].mem_hook = 0;
+ bars[i].num_pages = 0;
+ bars[i].bar_update = NULL;
+ }
+
+ bars[4].type = PCI_BAR_MEM32;
+ bars[4].mem_hook = 0;
+ bars[4].num_pages = 1;
+ bars[4].bar_update = NULL;
+
+ pci_dev = v3_pci_register_device(ramdisk->pci, PCI_STD_DEVICE, 0, "IDE", -1, bars, NULL, NULL, NULL, NULL);
+
+
+ pci_dev->config_header.vendor_id = 0x8086;
+ pci_dev->config_header.device_id = 0x2421;
+
+
+}
+ */
static int ramdisk_init_device(struct vm_device *dev) {
struct ramdisk_t *ramdisk= (struct ramdisk_t *)dev->private_data;
+
+
return 0;
}
-struct vm_device * v3_create_ramdisk()
+struct vm_device * v3_create_ramdisk(struct vm_device * pci)
{
struct ramdisk_t *ramdisk;
ramdisk = (struct ramdisk_t *)V3_Malloc(sizeof(struct ramdisk_t));
V3_ASSERT(ramdisk != NULL);
+ // ramdisk->pci = pci;
+
PrintDebug("[create_ramdisk]\n");
struct vm_device * device = v3_create_device("RAMDISK", &dev_ops, ramdisk);
+
+
return device;
}
memset((char *)(channels + channel), 0, sizeof(struct channel_t));
}
*/
- PrintDebug("sizeof(*channels) = %d\n", sizeof(*channels));
- PrintDebug("sizeof(channles->drives[0].controller) = %d\n", sizeof((channels->drives[0].controller)));
- PrintDebug("sizeof(channles->drives[0].cdrom) = %d\n", sizeof((channels->drives[0].cdrom)));
- PrintDebug("sizeof(channles->drives[0].sense) = %d\n", sizeof((channels->drives[0].sense)));
- PrintDebug("sizeof(channles->drives[0].atapi) = %d\n", sizeof((channels->drives[0].atapi)));
-
-
- PrintDebug("sizeof(channles->drives[0].controller.status) = %d\n",
- sizeof((channels->drives[0].controller.status)));
- PrintDebug("sizeof(channles->drives[0].controller.sector_count) = %d\n",
- sizeof((channels->drives[0].controller.sector_count)));
- PrintDebug("sizeof(channles->drives[0].controller.interrupt_reason) = %d\n",
- sizeof((channels->drives[0].controller.interrupt_reason)));
-
- PrintDebug("sizeof(channles->drives[0].controller.cylinder_no) = %d\n",
- sizeof((channels->drives[0].controller.cylinder_no)));
- PrintDebug("sizeof(channles->drives[0].controller.byte_count) = %d\n",
- sizeof((channels->drives[0].controller.byte_count)));
-
- PrintDebug("sizeof(channles->drives[0].controller.control) = %d\n",
- sizeof((channels->drives[0].controller.control)));
for (channel = 0; channel < MAX_ATA_CHANNEL; channel++){