Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Merge branch 'devel' into ide
[palacios.git] / palacios / src / devices / ramdisk.c
index cb92ca9..04602f7 100644 (file)
@@ -40,7 +40,7 @@
 #include <palacios/vmm.h>
 #include <devices/cdrom.h>
 #include <devices/ide.h>
-
+#include <devices/pci.h>
 
 #ifndef TRACE_RAMDISK
 #undef PrintTrace
@@ -498,15 +498,13 @@ static int read_data_port(ushort_t port, void * dst, uint_t length, struct vm_de
        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++;
@@ -531,7 +529,7 @@ static int read_data_port(ushort_t port, void * dst, uint_t length, struct vm_de
                if (controller->buffer_index >= 512) {
                    controller->status.drq = 0;
                }
-      
+               
                return length;
            }
        case 0xa0: //send packet cmd 
@@ -2239,14 +2237,6 @@ void rd_identify_ATAPI_drive(struct vm_device * dev, struct channel_t * channel)
        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;
 }
@@ -2304,6 +2294,33 @@ static void rd_command_aborted(struct vm_device * dev,
 }
 
 
+/*    
+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;
 
@@ -2364,6 +2381,8 @@ static int ramdisk_init_device(struct vm_device *dev) {
 
 
 
+
+
     return 0;
 
 }
@@ -2386,17 +2405,21 @@ static struct vm_device_ops dev_ops = {
 
 
 
-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;
 }
 
@@ -2415,28 +2438,7 @@ static void rd_print_state(struct ramdisk_t * ramdisk) {
       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++){