Example #1
0
void
SVGA_SetMode(vgavmware_handle_t *dev, uint32 width,   // IN
             uint32 height,  // IN
             uint32 bpp)     // IN
{
   SVGA_WriteReg(dev, SVGA_REG_WIDTH, width);
   SVGA_WriteReg(dev, SVGA_REG_HEIGHT, height);
   SVGA_WriteReg(dev, SVGA_REG_BITS_PER_PIXEL, bpp);
   SVGA_WriteReg(dev, SVGA_REG_ENABLE, 1);
   dev->pitch = SVGA_ReadReg(dev, SVGA_REG_BYTES_PER_LINE);
}
Example #2
0
fs_node_t *vga_vmware_init(int width, int height, int bpp)
{
	// Find the device and get it's BAR addresses
	fs_node_t *pci = 0;
	pci = pci_get_device(PCI_VENDOR_ID_VMWARE, PCI_DEVICE_ID_VMWARE_SVGA2);
	if (pci == 0)
		return 0;
	
	// Create new handle
	vgavmware_handle_t *dev;
	dev = (vgavmware_handle_t *)dev_alloc("vga", sizeof(vgavmware_handle_t));

	// Fill universal fields
	dev->vga.set_mode = vga_vmware_set_mode;
	dev->vga.unset_mode = vga_vmware_unset_mode;
	dev->vga.fs.blocksize = 1;

	// Fill custom fields
	dev->vga.width = width;
	dev->vga.height = height;
	dev->vga.bpp = bpp;
	dev->pci = pci;
	
	//pci_enable_mem(dev->pci);
	dev->iobase = pci_get_bar_address(dev->pci, 0);
	dev->fb = pci_get_bar_address(dev->pci, 1);
	dev->vga.offset = (void *)dev->fb;
	dev->fifo = pci_get_bar_address(dev->pci, 2);
	
	// Negotiate device version
	dev->version = SVGA_ID_2;
	do
	{
		SVGA_WriteReg(dev, SVGA_REG_ID, dev->version);
		if (SVGA_ReadReg(dev, SVGA_REG_ID) == dev->version)
			break;
		else
			dev->version--;
	} while (dev->version >= SVGA_ID_0);
	
	assert(dev->version >= SVGA_ID_0);

	// Get FIFO size and FB size
	dev->fbsize = SVGA_ReadReg(dev, SVGA_REG_FB_SIZE);
	dev->fifosize = SVGA_ReadReg(dev, SVGA_REG_MEM_SIZE);
	assert(dev->fbsize >= 0x100000);
	//assert(dev->fifosize < 0x20000);

	kprintf(2, "found VMWare VGA device\n", 0);
	return (fs_node_t *)dev;
}
Example #3
0
void
GMR_Define(uint32 gmrId,
           SVGAGuestMemDescriptor *descArray,
           uint32 numDescriptors)
{
   PPN desc = GMR_AllocDescriptor(descArray, numDescriptors);

   /*
    * Define/undefine the GMR. Defining an empty GMR is equivalent to
    * undefining a GMR.
    */

   SVGA_WriteReg(SVGA_REG_GMR_ID, gmrId);
   SVGA_WriteReg(SVGA_REG_GMR_DESCRIPTOR, desc);

   if (desc) {
      /*
       * Clobber the first page, to verify that the device reads our
       * descriptors synchronously when we write the GMR registers.
       */
      Heap_DiscardPages(desc, 1);
   }
}
Example #4
0
void vga_vmware_unset_mode(vga_handle_t *dev)
{
   SVGA_WriteReg((vgavmware_handle_t *)dev, SVGA_REG_ENABLE, 0);
}