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.


added atapi handlers
[palacios.git] / palacios / src / devices / ramdisk.c
index 14d1dc9..3595c36 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
@@ -1924,11 +1924,11 @@ int handle_atapi_packet_command(struct vm_device * dev, struct channel_t * chann
                }
            case 0x42:  // read sub-channel
                {
-                   //bool msf = get_packet_field(channel,1, 1, 1);
-                   bool sub_q = get_packet_field(channel,2, 6, 1);
-                   //uint8_t data_format = get_packet_byte(channel,3);
-                   //uint8_t track_number = get_packet_byte(channel,6);
-                   uint16_t alloc_length = get_packet_word(channel,7);
+                   //bool msf = get_packet_field(channel, 1, 1, 1);
+                   bool sub_q = get_packet_field(channel, 2, 6, 1);
+                   //uint8_t data_format = get_packet_byte(channel, 3);
+                   //uint8_t track_number = get_packet_byte(channel, 6);
+                   uint16_t alloc_length = get_packet_word(channel, 7);
        
 
                    /*
@@ -2239,14 +2239,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 +2296,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 +2383,8 @@ static int ramdisk_init_device(struct vm_device *dev) {
 
 
 
+
+
     return 0;
 
 }
@@ -2386,17 +2407,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;
 }