summaryrefslogtreecommitdiff
path: root/sysutils/libpciaccess
diff options
context:
space:
mode:
authorwiz <wiz@pkgsrc.org>2013-05-18 13:46:35 +0000
committerwiz <wiz@pkgsrc.org>2013-05-18 13:46:35 +0000
commit4cdc480c94818cbd11df1f22469e104f4cab6f75 (patch)
tree68b5b5cfbf6a8e5667e394e3d54076d8fb4b2728 /sysutils/libpciaccess
parent5708b1d3711b154217b073b330ae4757b3fdae6e (diff)
downloadpkgsrc-4cdc480c94818cbd11df1f22469e104f4cab6f75.tar.gz
Fix Dragonfly with Radeon 4350. From
https://bugs.freedesktop.org/attachment.cgi?id=78130 via David Shao in PR 47828. Bump PKGREVISION.
Diffstat (limited to 'sysutils/libpciaccess')
-rw-r--r--sysutils/libpciaccess/Makefile4
-rw-r--r--sysutils/libpciaccess/distinfo3
-rw-r--r--sysutils/libpciaccess/patches/patch-src_freebsd__pci.c174
3 files changed, 178 insertions, 3 deletions
diff --git a/sysutils/libpciaccess/Makefile b/sysutils/libpciaccess/Makefile
index c2dcec67d78..708615d8508 100644
--- a/sysutils/libpciaccess/Makefile
+++ b/sysutils/libpciaccess/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.14 2013/05/15 03:20:15 richard Exp $
+# $NetBSD: Makefile,v 1.15 2013/05/18 13:46:35 wiz Exp $
#
DISTNAME= libpciaccess-0.13.1
-PKGREVISION= 1
+PKGREVISION= 2
CATEGORIES= sysutils x11
MASTER_SITES= ${MASTER_SITE_XORG:=lib/}
EXTRACT_SUFX= .tar.bz2
diff --git a/sysutils/libpciaccess/distinfo b/sysutils/libpciaccess/distinfo
index 93b032d6097..a7f2dbde491 100644
--- a/sysutils/libpciaccess/distinfo
+++ b/sysutils/libpciaccess/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.18 2013/05/15 17:56:52 richard Exp $
+$NetBSD: distinfo,v 1.19 2013/05/18 13:46:35 wiz Exp $
SHA1 (libpciaccess-0.13.1.tar.bz2) = ae4dcf27a1b52c6a1fd90b21165fbaecae34e8ac
RMD160 (libpciaccess-0.13.1.tar.bz2) = 2e4c94bd782e98d360664cc0ce3d5ad2d1b0045c
@@ -9,6 +9,7 @@ SHA1 (patch-scanpci_Makefile.am) = 086fead04b4a2e506a35aca5d5fe82395708e90c
SHA1 (patch-scanpci_scanpci.c) = 795d0572af9afb13af60f878f9f44d40edb33463
SHA1 (patch-src_common__bridge.c) = 658815c38b4f2e318bf083bc81b9042f88d04b2f
SHA1 (patch-src_common__init.c) = 2e866fbb6278e84dfa295f55a9f30563489ae12d
+SHA1 (patch-src_freebsd__pci.c) = 6b96f4c60a386a129069c3cd4593ba27938346e4
SHA1 (patch-src_pciaccess__private.h) = 56853598f50e5656ff7ba190b31f2940d66ec468
SHA1 (patch-src_solx__devfs.c) = 924649d561bc9922b6ee8335ffe5e997b1cb8c3c
SHA1 (patch-src_x86__pci.c) = b9820f8ff9306c18d040444e57270f520f95a58f
diff --git a/sysutils/libpciaccess/patches/patch-src_freebsd__pci.c b/sysutils/libpciaccess/patches/patch-src_freebsd__pci.c
new file mode 100644
index 00000000000..58b27b7257c
--- /dev/null
+++ b/sysutils/libpciaccess/patches/patch-src_freebsd__pci.c
@@ -0,0 +1,174 @@
+$NetBSD: patch-src_freebsd__pci.c,v 1.1 2013/05/18 13:46:35 wiz Exp $
+
+https://bugs.freedesktop.org/attachment.cgi?id=78130
+
+--- src/freebsd_pci.c.orig 2013-05-17 21:55:52.935930000 +0000
++++ src/freebsd_pci.c
+@@ -1,6 +1,8 @@
+ /*
+ * (C) Copyright Eric Anholt 2006
+ * (C) Copyright IBM Corporation 2006
++ * (C) Copyright Mark Kettenis 2011
++ * (C) Copyright Robert Millan 2012
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+@@ -561,6 +563,139 @@ pci_system_freebsd_destroy(void)
+ freebsd_pci_sys = NULL;
+ }
+
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++#include <machine/cpufunc.h>
++#endif
++
++static struct pci_io_handle *
++pci_device_freebsd_open_legacy_io(struct pci_io_handle *ret,
++ struct pci_device *dev, pciaddr_t base, pciaddr_t size)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ ret->fd = open("/dev/io", O_RDWR | O_CLOEXEC);
++
++ if (ret->fd < 0)
++ return NULL;
++
++ ret->base = base;
++ ret->size = size;
++ return ret;
++#elif defined(PCI_MAGIC_IO_RANGE)
++ ret->memory = mmap(NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
++ aperturefd, PCI_MAGIC_IO_RANGE + base);
++ if (ret->memory == MAP_FAILED)
++ return NULL;
++
++ ret->base = base;
++ ret->size = size;
++ return ret;
++#else
++ return NULL;
++#endif
++}
++
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++static void
++pci_device_freebsd_close_io(struct pci_device *dev, struct pci_io_handle *handle)
++{
++ if (handle->fd > -1)
++ close(handle->fd);
++}
++#endif
++
++static uint32_t
++pci_device_freebsd_read32(struct pci_io_handle *handle, uint32_t reg)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ return inl(handle->base + reg);
++#else
++ return *(uint32_t *)((uintptr_t)handle->memory + reg);
++#endif
++}
++
++static uint16_t
++pci_device_freebsd_read16(struct pci_io_handle *handle, uint32_t reg)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ return inw(handle->base + reg);
++#else
++ return *(uint16_t *)((uintptr_t)handle->memory + reg);
++#endif
++}
++
++static uint8_t
++pci_device_freebsd_read8(struct pci_io_handle *handle, uint32_t reg)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ return inb(handle->base + reg);
++#else
++ return *(uint8_t *)((uintptr_t)handle->memory + reg);
++#endif
++}
++
++static void
++pci_device_freebsd_write32(struct pci_io_handle *handle, uint32_t reg,
++ uint32_t data)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ outl(handle->base + reg, data);
++#else
++ *(uint16_t *)((uintptr_t)handle->memory + reg) = data;
++#endif
++}
++
++static void
++pci_device_freebsd_write16(struct pci_io_handle *handle, uint32_t reg,
++ uint16_t data)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ outw(handle->base + reg, data);
++#else
++ *(uint8_t *)((uintptr_t)handle->memory + reg) = data;
++#endif
++}
++
++static void
++pci_device_freebsd_write8(struct pci_io_handle *handle, uint32_t reg,
++ uint8_t data)
++{
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ outb(handle->base + reg, data);
++#else
++ *(uint32_t *)((uintptr_t)handle->memory + reg) = data;
++#endif
++}
++
++static int
++pci_device_freebsd_map_legacy(struct pci_device *dev, pciaddr_t base,
++ pciaddr_t size, unsigned map_flags, void **addr)
++{
++ struct pci_device_mapping map;
++ int err;
++
++ map.base = base;
++ map.size = size;
++ map.flags = map_flags;
++ map.memory = NULL;
++ err = pci_device_freebsd_map_range(dev, &map);
++ *addr = map.memory;
++
++ return err;
++}
++
++static int
++pci_device_freebsd_unmap_legacy(struct pci_device *dev, void *addr,
++ pciaddr_t size)
++{
++ struct pci_device_mapping map;
++
++ map.memory = addr;
++ map.size = size;
++ map.flags = 0;
++ return pci_device_freebsd_unmap_range(dev, &map);
++}
++
++
+ static const struct pci_system_methods freebsd_pci_methods = {
+ .destroy = pci_system_freebsd_destroy,
+ .destroy_device = NULL, /* nothing to do for this */
+@@ -571,6 +706,18 @@ static const struct pci_system_methods f
+ .read = pci_device_freebsd_read,
+ .write = pci_device_freebsd_write,
+ .fill_capabilities = pci_fill_capabilities_generic,
++ .open_legacy_io = pci_device_freebsd_open_legacy_io,
++#if defined(__i386__) || defined(__amd64__) || defined(__x86_64__)
++ .close_io = pci_device_freebsd_close_io,
++#endif
++ .read32 = pci_device_freebsd_read32,
++ .read16 = pci_device_freebsd_read16,
++ .read8 = pci_device_freebsd_read8,
++ .write32 = pci_device_freebsd_write32,
++ .write16 = pci_device_freebsd_write16,
++ .write8 = pci_device_freebsd_write8,
++ .map_legacy = pci_device_freebsd_map_legacy,
++ .unmap_legacy = pci_device_freebsd_unmap_legacy,
+ };
+
+ /**