rpms/libpciaccess/devel libpciaccess-vga-arbiter.patch, 1.2, 1.3 libpciaccess.spec, 1.22, 1.23
Dave Airlie
airlied at fedoraproject.org
Mon Aug 3 00:00:31 UTC 2009
Author: airlied
Update of /cvs/pkgs/rpms/libpciaccess/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv28466
Modified Files:
libpciaccess-vga-arbiter.patch libpciaccess.spec
Log Message:
* Mon Aug 03 2009 Dave Airlie <airlied at redhat.com> 0.10.6-4
- Add support for default vga arb device selection
- Update libpciaccess VGA arb code for newer kernel API
libpciaccess-vga-arbiter.patch:
include/pciaccess.h | 54 ++++++++
src/Makefile.am | 7 +
src/common_interface.c | 15 ++
src/common_vgaarb.c | 314 +++++++++++++++++++++++++++++++++++++++++++++++
src/common_vgaarb_stub.c | 73 ++++++++++
src/linux_sysfs.c | 21 +++
src/pciaccess_private.h | 5
7 files changed, 489 insertions(+)
Index: libpciaccess-vga-arbiter.patch
===================================================================
RCS file: /cvs/pkgs/rpms/libpciaccess/devel/libpciaccess-vga-arbiter.patch,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -p -r1.2 -r1.3
--- libpciaccess-vga-arbiter.patch 31 Jul 2009 01:31:29 -0000 1.2
+++ libpciaccess-vga-arbiter.patch 3 Aug 2009 00:00:31 -0000 1.3
@@ -1,12 +1,34 @@
-diff -up libpciaccess-0.10.6/include/pciaccess.h.da libpciaccess-0.10.6/include/pciaccess.h
---- libpciaccess-0.10.6/include/pciaccess.h.da 2009-07-31 11:29:24.000000000 +1000
-+++ libpciaccess-0.10.6/include/pciaccess.h 2009-07-31 11:29:36.000000000 +1000
-@@ -21,6 +21,31 @@
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
+diff -up libpciaccess-0.10.6/src/common_interface.c.da libpciaccess-0.10.6/src/common_interface.c
+--- libpciaccess-0.10.6/src/common_interface.c.da 2009-08-03 09:57:13.000000000 +1000
++++ libpciaccess-0.10.6/src/common_interface.c 2009-08-03 09:57:21.000000000 +1000
+@@ -124,6 +124,21 @@ pci_device_is_boot_vga( struct pci_devic
+ }
+
+ /**
++ * Probe a PCI device to determine if a kernel driver is attached.
++ *
++ * \param dev Device to query
++ * \return
++ * Zero if no driver attached, 1 if attached kernel drviver
++ */
++int
++pci_device_has_kernel_driver( struct pci_device * dev )
++{
++ if (!pci_sys->methods->has_kernel_driver)
++ return 0;
++ return pci_sys->methods->has_kernel_driver( dev );
++}
++
++/**
+ * Probe a PCI device to learn information about the device.
+ *
+ * Probes a PCI device to learn various information about the device. Before
+diff -up /dev/null libpciaccess-0.10.6/src/common_vgaarb_stub.c
+--- /dev/null 2009-08-03 09:43:13.273251881 +1000
++++ libpciaccess-0.10.6/src/common_vgaarb_stub.c 2009-08-03 09:57:21.000000000 +1000
+@@ -0,0 +1,73 @@
+/*
-+ * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
++ * Copyright (c) 2009 Tiago Vignatti
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation
@@ -30,85 +52,100 @@ diff -up libpciaccess-0.10.6/include/pci
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ */
-
- /**
- * \file pciaccess.h
-@@ -50,6 +75,8 @@ struct pci_slot_match;
- extern "C" {
- #endif
-
-+int pci_device_has_kernel_driver(struct pci_device *dev);
+
- int pci_device_is_boot_vga(struct pci_device *dev);
-
- int pci_device_read_rom(struct pci_device *dev, void *buffer);
-@@ -350,6 +377,11 @@ struct pci_device {
- * the \c pci_device structure.
- */
- intptr_t user_data;
++#include <stdio.h>
++#include "pciaccess.h"
+
-+ /**
-+ * Used by the VGA arbiter. Type of resource decoded by the device and
-+ * the file descriptor (/dev/vga_arbiter). */
-+ int vgaarb_rsrc;
- };
-
-
-@@ -449,4 +481,25 @@ struct pci_pcmcia_bridge_info {
-
- };
-
++int
++pci_device_vgaarb_init(struct pci_device *dev)
++{
++#ifdef DEBUG
++ fprintf(stderr, "%s: You're using VGA arbiter stub functions!\n",
++ __FUNCTION__);
++#endif
++ return 0;
++}
+
-+/**
-+ * VGA Arbiter definitions, functions and related.
-+ */
++void
++pci_device_vgaarb_fini(struct pci_device *dev)
++{
++}
+
-+/* Legacy VGA regions */
-+#define VGA_ARB_RSRC_NONE 0x00
-+#define VGA_ARB_RSRC_LEGACY_IO 0x01
-+#define VGA_ARB_RSRC_LEGACY_MEM 0x02
-+/* Non-legacy access */
-+#define VGA_ARB_RSRC_NORMAL_IO 0x04
-+#define VGA_ARB_RSRC_NORMAL_MEM 0x08
++int
++pci_device_vgaarb_set_target(struct pci_device *dev)
++{
++ return 0;
++}
+
-+int pci_device_vgaarb_init (void);
-+void pci_device_vgaarb_fini (void);
-+int pci_device_vgaarb_set_target (struct pci_device *dev);
-+int pci_device_vgaarb_decodes (struct pci_device *dev, int new_vga_rsrc);
-+int pci_device_vgaarb_lock (struct pci_device *dev);
-+int pci_device_vgaarb_trylock (struct pci_device *dev);
-+int pci_device_vgaarb_unlock (struct pci_device *dev);
++int
++pci_device_vgaarb_decodes(struct pci_device *dev)
++{
++ return 0;
++}
+
- #endif /* PCIACCESS_H */
-diff -up libpciaccess-0.10.6/src/common_interface.c.da libpciaccess-0.10.6/src/common_interface.c
---- libpciaccess-0.10.6/src/common_interface.c.da 2009-07-31 11:29:24.000000000 +1000
-+++ libpciaccess-0.10.6/src/common_interface.c 2009-07-31 11:29:36.000000000 +1000
-@@ -124,6 +124,21 @@ pci_device_is_boot_vga( struct pci_devic
- }
-
- /**
-+ * Probe a PCI device to determine if a kernel driver is attached.
-+ *
-+ * \param dev Device to query
-+ * \return
-+ * Zero if no driver attached, 1 if attached kernel drviver
-+ */
+int
-+pci_device_has_kernel_driver( struct pci_device * dev )
++pci_device_vgaarb_lock(struct pci_device *dev)
+{
-+ if (!pci_sys->methods->has_kernel_driver)
-+ return 0;
-+ return pci_sys->methods->has_kernel_driver( dev );
++ return 0;
+}
+
-+/**
- * Probe a PCI device to learn information about the device.
- *
- * Probes a PCI device to learn various information about the device. Before
++int
++pci_device_vgaarb_trylock(struct pci_device *dev)
++{
++ return 0;
++}
++
++int
++pci_device_vgaarb_unlock(struct pci_device *dev)
++{
++ return 0;
++}
+diff -up libpciaccess-0.10.6/src/linux_sysfs.c.da libpciaccess-0.10.6/src/linux_sysfs.c
+--- libpciaccess-0.10.6/src/linux_sysfs.c.da 2009-08-03 09:57:13.000000000 +1000
++++ libpciaccess-0.10.6/src/linux_sysfs.c 2009-08-03 09:57:21.000000000 +1000
+@@ -78,6 +78,7 @@ static int pci_device_linux_sysfs_write(
+ pciaddr_t * bytes_written );
+
+ static int pci_device_linux_sysfs_boot_vga( struct pci_device * dev );
++static int pci_device_linux_sysfs_has_kernel_driver(struct pci_device *dev);
+
+ static const struct pci_system_methods linux_sysfs_methods = {
+ .destroy = pci_device_linux_sysfs_destroy,
+@@ -93,6 +94,7 @@ static const struct pci_system_methods l
+ .fill_capabilities = pci_fill_capabilities_generic,
+ .enable = pci_device_linux_sysfs_enable,
+ .boot_vga = pci_device_linux_sysfs_boot_vga,
++ .has_kernel_driver = pci_device_linux_sysfs_has_kernel_driver,
+ };
+
+ #define SYS_BUS_PCI "/sys/bus/pci/devices"
+@@ -761,3 +763,22 @@ out:
+ close(fd);
+ return ret;
+ }
++
++static int pci_device_linux_sysfs_has_kernel_driver(struct pci_device *dev)
++{
++ char name[256];
++ struct stat dummy;
++ int ret;
++
++ snprintf( name, 255, "%s/%04x:%02x:%02x.%1u/driver",
++ SYS_BUS_PCI,
++ dev->domain,
++ dev->bus,
++ dev->dev,
++ dev->func );
++
++ ret = stat(name, &dummy);
++ if (ret < 0)
++ return 0;
++ return 1;
++}
diff -up /dev/null libpciaccess-0.10.6/src/common_vgaarb.c
---- /dev/null 2009-07-28 15:36:51.159175345 +1000
-+++ libpciaccess-0.10.6/src/common_vgaarb.c 2009-07-31 11:29:36.000000000 +1000
-@@ -0,0 +1,245 @@
+--- /dev/null 2009-08-03 09:43:13.273251881 +1000
++++ libpciaccess-0.10.6/src/common_vgaarb.c 2009-08-03 09:57:21.000000000 +1000
+@@ -0,0 +1,314 @@
+/*
+ * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
+ * 2009 Tiago Vignatti
@@ -149,13 +186,108 @@ diff -up /dev/null libpciaccess-0.10.6/s
+
+#define BUFSIZE 64
+
++static int
++parse_string_to_decodes_rsrc(char *input, int *vga_count, struct pci_slot_match *match)
++{
++ char *tok;
++ char *input_sp, *count_sp, *pci_sp;
++ char tmp[32];
++
++ tok = strtok_r(input,",",&input_sp);
++ if (!tok)
++ goto fail;
++
++ strncpy(tmp, input, 15);
++ tmp[15] = 0;
++
++ tok = strtok_r(tmp,":",&count_sp);
++ if (!tok)
++ goto fail;
++ tok = strtok_r(NULL, ":",&count_sp);
++ if (!tok)
++ goto fail;
++
++ *vga_count = strtoul(tok, NULL, 10);
++ if (*vga_count == LONG_MAX)
++ goto fail;
++
++#ifdef DEBUG
++ fprintf(stderr,"vga count is %d\n", *vga_count);
++#endif
++
++ tok = strtok_r(NULL, ",",&input_sp);
++ if (!tok)
++ goto fail;
++
++ if (match) {
++ strncpy(tmp, tok, 32);
++ tmp[31] = 0;
++ tok = strtok_r(tmp, ":", &pci_sp);
++ if (!tok)
++ goto fail;
++ tok = strtok_r(NULL, ":", &pci_sp);
++ if (!tok)
++ goto fail;
++ match->domain = strtoul(tok, NULL, 16);
++
++ tok = strtok_r(NULL, ":", &pci_sp);
++ if (!tok)
++ goto fail;
++ match->bus = strtoul(tok, NULL, 16);
++
++ tok = strtok_r(NULL, ".", &pci_sp);
++ if (!tok)
++ goto fail;
++ match->dev = strtoul(tok, NULL, 16);
++
++ tok = strtok_r(NULL, ".", &pci_sp);
++ if (!tok)
++ goto fail;
++ match->func = strtoul(tok, NULL, 16);
++ }
++
++ tok = strtok_r(NULL, ",",&input_sp);
++ if (!tok)
++ goto fail;
++ tok = strtok_r(tok, "=", &input_sp);
++ if (!tok)
++ goto fail;
++ tok = strtok_r(NULL, "=", &input_sp);
++ if (!tok)
++ goto fail;
++
++ if (!strncmp(tok, "io+mem", 6))
++ return VGA_ARB_RSRC_LEGACY_IO | VGA_ARB_RSRC_LEGACY_MEM;
++ if (!strncmp(tok, "io", 2))
++ return VGA_ARB_RSRC_LEGACY_IO;
++ if (!strncmp(tok, "mem", 3))
++ return VGA_ARB_RSRC_LEGACY_MEM;
++fail:
++ return VGA_ARB_RSRC_NONE;
++}
++
+int
+pci_device_vgaarb_init(void)
+{
++ struct pci_slot_match match;
++ char buf[BUFSIZE];
++ int ret, rsrc;
+ if ((pci_sys->vgaarb_fd = open ("/dev/vga_arbiter", O_RDWR)) < 0) {
+ return errno;
+ }
+
++ ret = read(pci_sys->vgaarb_fd, buf, BUFSIZE);
++ if (ret <= 0)
++ return -1;
++
++ memset(&match, 0xff, sizeof(match));
++ /* need to find the device to go back to and what it was decoding */
++ rsrc = parse_string_to_decodes_rsrc(buf, &pci_sys->vga_count, &match);
++
++ pci_sys->vga_default_dev = pci_device_find_by_slot(match.domain, match.bus, match.dev, match.func);
++
++ if (pci_sys->vga_default_dev)
++ pci_sys->vga_default_dev->vgaarb_rsrc = rsrc;
+ return 0;
+}
+
@@ -211,53 +343,6 @@ diff -up /dev/null libpciaccess-0.10.6/s
+ return 0;
+}
+
-+static int
-+parse_string_to_decodes_rsrc(char *input, int *vga_count)
-+{
-+ char *tok;
-+ char count[16];
-+
-+ strncpy(count, input, 10);
-+ count[11] = 0;
-+
-+ tok = strtok(count,":");
-+ if (!tok)
-+ goto fail;
-+ tok = strtok(NULL, "");
-+ if (!tok)
-+ goto fail;
-+
-+ *vga_count = strtoul(tok, NULL, 10);
-+ if (*vga_count == LONG_MAX)
-+ goto fail;
-+
-+#ifdef DEBUG
-+ fprintf(stderr,"vga count is %d\n", *vga_count);
-+#endif
-+
-+ tok = strtok(input, ",");
-+ if (!tok)
-+ goto fail;
-+
-+ tok = strtok(NULL, ",");
-+ if (!tok)
-+ goto fail;
-+ tok = strtok(tok, "=");
-+ if (!tok)
-+ goto fail;
-+ tok = strtok(NULL, "=");
-+ if (!tok)
-+ goto fail;
-+
-+ if (!strncmp(tok, "io+mem", 6))
-+ return VGA_ARB_RSRC_LEGACY_IO | VGA_ARB_RSRC_LEGACY_MEM;
-+ if (!strncmp(tok, "io", 2))
-+ return VGA_ARB_RSRC_LEGACY_IO;
-+ if (!strncmp(tok, "mem", 3))
-+ return VGA_ARB_RSRC_LEGACY_MEM;
-+fail:
-+ return VGA_ARB_RSRC_NONE;
-+}
+
+static const char *
+rsrc_to_str(int iostate)
@@ -281,7 +366,12 @@ diff -up /dev/null libpciaccess-0.10.6/s
+ char buf[BUFSIZE];
+ int ret;
+
-+ len = snprintf(buf, BUFSIZE, "target PCI:%d:%d:%d.%d",
++ if (!dev)
++ dev = pci_sys->vga_default_dev;
++ if (!dev)
++ return -1;
++
++ len = snprintf(buf, BUFSIZE, "target PCI:%04x:%02x:%02x.%x",
+ dev->domain, dev->bus, dev->dev, dev->func);
+
+ ret = vgaarb_write(pci_sys->vgaarb_fd, buf, len);
@@ -292,17 +382,21 @@ diff -up /dev/null libpciaccess-0.10.6/s
+ if (ret <= 0)
+ return -1;
+
-+ dev->vgaarb_rsrc = parse_string_to_decodes_rsrc(buf, &pci_sys->vga_count);
++ dev->vgaarb_rsrc = parse_string_to_decodes_rsrc(buf, &pci_sys->vga_count, NULL);
++ pci_sys->vga_target = dev;
+ return 0;
+}
+
+int
-+pci_device_vgaarb_decodes(struct pci_device *dev, int new_vgaarb_rsrc)
++pci_device_vgaarb_decodes(int new_vgaarb_rsrc)
+{
+ int len;
+ char buf[BUFSIZE];
+ int ret;
++ struct pci_device *dev = pci_sys->vga_target;
+
++ if (!dev)
++ return -1;
+ if (dev->vgaarb_rsrc == new_vgaarb_rsrc)
+ return 0;
+
@@ -314,10 +408,14 @@ diff -up /dev/null libpciaccess-0.10.6/s
+}
+
+int
-+pci_device_vgaarb_lock(struct pci_device *dev)
++pci_device_vgaarb_lock(void)
+{
+ int len;
+ char buf[BUFSIZE];
++ struct pci_device *dev = pci_sys->vga_target;
++
++ if (!dev)
++ return -1;
+
+ if (dev->vgaarb_rsrc == 0 || pci_sys->vga_count == 1)
+ return 0;
@@ -328,10 +426,14 @@ diff -up /dev/null libpciaccess-0.10.6/s
+}
+
+int
-+pci_device_vgaarb_trylock(struct pci_device *dev)
++pci_device_vgaarb_trylock(void)
+{
+ int len;
+ char buf[BUFSIZE];
++ struct pci_device *dev = pci_sys->vga_target;
++
++ if (!dev)
++ return -1;
+
+ if (dev->vgaarb_rsrc == 0 || pci_sys->vga_count == 1)
+ return 0;
@@ -342,10 +444,14 @@ diff -up /dev/null libpciaccess-0.10.6/s
+}
+
+int
-+pci_device_vgaarb_unlock(struct pci_device *dev)
++pci_device_vgaarb_unlock(void)
+{
+ int len;
+ char buf[BUFSIZE];
++ struct pci_device *dev = pci_sys->vga_target;
++
++ if (!dev)
++ return -1;
+
+ if (dev->vgaarb_rsrc == 0 || pci_sys->vga_count == 1)
+ return 0;
@@ -354,128 +460,9 @@ diff -up /dev/null libpciaccess-0.10.6/s
+
+ return vgaarb_write(pci_sys->vgaarb_fd, buf, len);
+}
-diff -up /dev/null libpciaccess-0.10.6/src/common_vgaarb_stub.c
---- /dev/null 2009-07-28 15:36:51.159175345 +1000
-+++ libpciaccess-0.10.6/src/common_vgaarb_stub.c 2009-07-31 11:29:36.000000000 +1000
-@@ -0,0 +1,73 @@
-+/*
-+ * Copyright (c) 2009 Tiago Vignatti
-+ *
-+ * Permission is hereby granted, free of charge, to any person
-+ * obtaining a copy of this software and associated documentation
-+ * files (the "Software"), to deal in the Software without
-+ * restriction, including without limitation the rights to use,
-+ * copy, modify, merge, publish, distribute, sublicense, and/or sell
-+ * copies of the Software, and to permit persons to whom the
-+ * Software is furnished to do so, subject to the following
-+ * conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be
-+ * included in all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
-+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
-+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
-+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-+ * OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ */
-+
-+#include <stdio.h>
-+#include "pciaccess.h"
-+
-+int
-+pci_device_vgaarb_init(struct pci_device *dev)
-+{
-+#ifdef DEBUG
-+ fprintf(stderr, "%s: You're using VGA arbiter stub functions!\n",
-+ __FUNCTION__);
-+#endif
-+ return 0;
-+}
-+
-+void
-+pci_device_vgaarb_fini(struct pci_device *dev)
-+{
-+}
-+
-+int
-+pci_device_vgaarb_set_target(struct pci_device *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+pci_device_vgaarb_decodes(struct pci_device *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+pci_device_vgaarb_lock(struct pci_device *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+pci_device_vgaarb_trylock(struct pci_device *dev)
-+{
-+ return 0;
-+}
-+
-+int
-+pci_device_vgaarb_unlock(struct pci_device *dev)
-+{
-+ return 0;
-+}
-diff -up libpciaccess-0.10.6/src/linux_sysfs.c.da libpciaccess-0.10.6/src/linux_sysfs.c
---- libpciaccess-0.10.6/src/linux_sysfs.c.da 2009-07-31 11:29:24.000000000 +1000
-+++ libpciaccess-0.10.6/src/linux_sysfs.c 2009-07-31 11:29:36.000000000 +1000
-@@ -78,6 +78,7 @@ static int pci_device_linux_sysfs_write(
- pciaddr_t * bytes_written );
-
- static int pci_device_linux_sysfs_boot_vga( struct pci_device * dev );
-+static int pci_device_linux_sysfs_has_kernel_driver(struct pci_device *dev);
-
- static const struct pci_system_methods linux_sysfs_methods = {
- .destroy = pci_device_linux_sysfs_destroy,
-@@ -93,6 +94,7 @@ static const struct pci_system_methods l
- .fill_capabilities = pci_fill_capabilities_generic,
- .enable = pci_device_linux_sysfs_enable,
- .boot_vga = pci_device_linux_sysfs_boot_vga,
-+ .has_kernel_driver = pci_device_linux_sysfs_has_kernel_driver,
- };
-
- #define SYS_BUS_PCI "/sys/bus/pci/devices"
-@@ -761,3 +763,22 @@ out:
- close(fd);
- return ret;
- }
-+
-+static int pci_device_linux_sysfs_has_kernel_driver(struct pci_device *dev)
-+{
-+ char name[256];
-+ struct stat dummy;
-+ int ret;
-+
-+ snprintf( name, 255, "%s/%04x:%02x:%02x.%1u/driver",
-+ SYS_BUS_PCI,
-+ dev->domain,
-+ dev->bus,
-+ dev->dev,
-+ dev->func );
-+
-+ ret = stat(name, &dummy);
-+ if (ret < 0)
-+ return 0;
-+ return 1;
-+}
diff -up libpciaccess-0.10.6/src/Makefile.am.da libpciaccess-0.10.6/src/Makefile.am
--- libpciaccess-0.10.6/src/Makefile.am.da 2009-04-18 15:01:36.000000000 +1000
-+++ libpciaccess-0.10.6/src/Makefile.am 2009-07-31 11:29:36.000000000 +1000
++++ libpciaccess-0.10.6/src/Makefile.am 2009-08-03 09:57:21.000000000 +1000
@@ -45,6 +45,12 @@ if SOLARIS
OS_SUPPORT = solx_devfs.c pci_tools.h
endif
@@ -498,8 +485,8 @@ diff -up libpciaccess-0.10.6/src/Makefil
INCLUDES = -I$(top_srcdir)/include
diff -up libpciaccess-0.10.6/src/pciaccess_private.h.da libpciaccess-0.10.6/src/pciaccess_private.h
---- libpciaccess-0.10.6/src/pciaccess_private.h.da 2009-07-31 11:29:24.000000000 +1000
-+++ libpciaccess-0.10.6/src/pciaccess_private.h 2009-07-31 11:29:36.000000000 +1000
+--- libpciaccess-0.10.6/src/pciaccess_private.h.da 2009-08-03 09:57:13.000000000 +1000
++++ libpciaccess-0.10.6/src/pciaccess_private.h 2009-08-03 09:57:21.000000000 +1000
@@ -61,6 +61,7 @@ struct pci_system_methods {
int (*fill_capabilities)( struct pci_device * dev );
void (*enable)( struct pci_device *dev );
@@ -508,12 +495,97 @@ diff -up libpciaccess-0.10.6/src/pciacce
};
struct pci_device_mapping {
-@@ -131,6 +132,8 @@ struct pci_system {
+@@ -131,6 +132,10 @@ struct pci_system {
#ifdef HAVE_MTRR
int mtrr_fd;
#endif
+ int vgaarb_fd;
+ int vga_count;
++ struct pci_device *vga_target;
++ struct pci_device *vga_default_dev;
};
extern struct pci_system * pci_sys;
+diff -up libpciaccess-0.10.6/include/pciaccess.h.da libpciaccess-0.10.6/include/pciaccess.h
+--- libpciaccess-0.10.6/include/pciaccess.h.da 2009-08-03 09:57:13.000000000 +1000
++++ libpciaccess-0.10.6/include/pciaccess.h 2009-08-03 09:57:21.000000000 +1000
+@@ -21,6 +21,31 @@
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
++/*
++ * Copyright (c) 2007 Paulo R. Zanoni, Tiago Vignatti
++ *
++ * Permission is hereby granted, free of charge, to any person
++ * obtaining a copy of this software and associated documentation
++ * files (the "Software"), to deal in the Software without
++ * restriction, including without limitation the rights to use,
++ * copy, modify, merge, publish, distribute, sublicense, and/or sell
++ * copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following
++ * conditions:
++ *
++ * The above copyright notice and this permission notice shall be
++ * included in all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
++ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
++ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
++ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
++ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
+
+ /**
+ * \file pciaccess.h
+@@ -50,6 +75,8 @@ struct pci_slot_match;
+ extern "C" {
+ #endif
+
++int pci_device_has_kernel_driver(struct pci_device *dev);
++
+ int pci_device_is_boot_vga(struct pci_device *dev);
+
+ int pci_device_read_rom(struct pci_device *dev, void *buffer);
+@@ -350,6 +377,11 @@ struct pci_device {
+ * the \c pci_device structure.
+ */
+ intptr_t user_data;
++
++ /**
++ * Used by the VGA arbiter. Type of resource decoded by the device and
++ * the file descriptor (/dev/vga_arbiter). */
++ int vgaarb_rsrc;
+ };
+
+
+@@ -449,4 +481,26 @@ struct pci_pcmcia_bridge_info {
+
+ };
+
++
++/**
++ * VGA Arbiter definitions, functions and related.
++ */
++
++/* Legacy VGA regions */
++#define VGA_ARB_RSRC_NONE 0x00
++#define VGA_ARB_RSRC_LEGACY_IO 0x01
++#define VGA_ARB_RSRC_LEGACY_MEM 0x02
++/* Non-legacy access */
++#define VGA_ARB_RSRC_NORMAL_IO 0x04
++#define VGA_ARB_RSRC_NORMAL_MEM 0x08
++
++int pci_device_vgaarb_init (void);
++void pci_device_vgaarb_fini (void);
++int pci_device_vgaarb_set_target (struct pci_device *dev);
++/* use the targetted device */
++int pci_device_vgaarb_decodes (int new_vga_rsrc);
++int pci_device_vgaarb_lock (void);
++int pci_device_vgaarb_trylock (void);
++int pci_device_vgaarb_unlock (void);
++
+ #endif /* PCIACCESS_H */
Index: libpciaccess.spec
===================================================================
RCS file: /cvs/pkgs/rpms/libpciaccess/devel/libpciaccess.spec,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -p -r1.22 -r1.23
--- libpciaccess.spec 31 Jul 2009 03:23:53 -0000 1.22
+++ libpciaccess.spec 3 Aug 2009 00:00:31 -0000 1.23
@@ -3,7 +3,7 @@
Name: libpciaccess
Version: 0.10.6
-Release: 3%{?dist}
+Release: 4%{?dist}
Summary: PCI access library
Group: System Environment/Libraries
@@ -74,6 +74,10 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/pkgconfig/pciaccess.pc
%changelog
+* Mon Aug 03 2009 Dave Airlie <airlied at redhat.com> 0.10.6-4
+- Add support for default vga arb device selection
+- Update libpciaccess VGA arb code for newer kernel API
+
* Fri Jul 31 2009 Dave Airlie <airlied at redhat.com> 0.10.6-3
- enable autoreconf to rebuild configure properly
More information about the fedora-extras-commits
mailing list