[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [v5][PATCH 1/5] xen, gfx passthrough: basic graphics passthrough support
- To: Tiejun Chen <tiejun.chen@xxxxxxxxx>, anthony.perard@xxxxxxxxxx, stefano.stabellini@xxxxxxxxxxxxx, mst@xxxxxxxxxx, Kelly.Zytaruk@xxxxxxx
- From: Paolo Bonzini <pbonzini@xxxxxxxxxx>
- Date: Wed, 25 Jun 2014 08:21:15 +0200
- Cc: peter.maydell@xxxxxxxxxx, xen-devel@xxxxxxxxxxxxxxxxxxx, allen.m.kay@xxxxxxxxx, qemu-devel@xxxxxxxxxx, anthony@xxxxxxxxxxxxx, yang.z.zhang@xxxxxxxxx
- Delivery-date: Wed, 25 Jun 2014 06:21:27 +0000
- List-id: Xen developer discussion <xen-devel.lists.xen.org>
Il 25/06/2014 04:17, Tiejun Chen ha scritto:
+static int get_vgabios(unsigned char *buf, XenHostPCIDevice *dev)
+{
+ char rom_file[64];
+ FILE *fp;
+ uint8_t val;
+ struct stat st;
+ uint16_t magic = 0;
+ int ret = 0;
+
+ snprintf(rom_file, sizeof(rom_file),
+ "/sys/bus/pci/devices/%04x:%02x:%02x.%d/rom",
+ dev->domain, dev->bus, dev->dev,
+ dev->func);
+
+ if (stat(rom_file, &st)) {
+ return -ENODEV;
+ }
+
+ if (access(rom_file, F_OK)) {
+ XEN_PT_ERR(NULL, "pci-assign: Insufficient privileges for %s",
+ rom_file);
+ return -ENODEV;
+ }
These two checks (stat and access) are useless.
+ /* Write "1" to the ROM file to enable it */
+ fp = fopen(rom_file, "r+");
+ if (fp == NULL) {
+ return -EACCES;
+ }
+ val = 1;
+ if (fwrite(&val, 1, 1, fp) != 1) {
+ XEN_PT_LOG("%s\n", "Failed to enable pci-sysfs rom file");
+ ret = -EIO;
+ goto close_rom;
+ }
+ fseek(fp, 0, SEEK_SET);
+
+ /*
+ * Check if it a real bios extension.
+ * The magic number is 0xAA55.
+ */
+ if (!fread(&magic, sizeof(magic), 1, fp)) {
+ XEN_PT_ERR(NULL, "VGA: can't get magic.\n");
+ ret = -ENODEV;
+ goto close_rom;
+ }
+ if (magic != 0xAA55) {
+ XEN_PT_ERR(NULL, "VGA: wrong magic %x.\n", magic);
+ ret = -ENODEV;
+ goto close_rom;
+ }
+ fseek(fp, 0, SEEK_SET);
+
+ if (!fread(buf, 1, st.st_size, fp)) {
+ XEN_PT_ERR(NULL, "VGA: pci-assign: Cannot read from host %s",
rom_file);
+ XEN_PT_LOG(NULL, "VGA: Device option ROM contents are probably invalid
"
+ "(check dmesg).\nSkip option ROM probe with rombar=0, "
+ "or load from file with romfile=\n");
+ }
+
Why is this graphics passthrough specific? Should QEMU's Xen PCI
passthrough read ROM BAR contents from network cards too, for example?
Paolo
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|