diff options
author | wiz <wiz@pkgsrc.org> | 2013-05-18 13:46:35 +0000 |
---|---|---|
committer | wiz <wiz@pkgsrc.org> | 2013-05-18 13:46:35 +0000 |
commit | 4cdc480c94818cbd11df1f22469e104f4cab6f75 (patch) | |
tree | 68b5b5cfbf6a8e5667e394e3d54076d8fb4b2728 /sysutils | |
parent | 5708b1d3711b154217b073b330ae4757b3fdae6e (diff) | |
download | pkgsrc-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')
-rw-r--r-- | sysutils/libpciaccess/Makefile | 4 | ||||
-rw-r--r-- | sysutils/libpciaccess/distinfo | 3 | ||||
-rw-r--r-- | sysutils/libpciaccess/patches/patch-src_freebsd__pci.c | 174 |
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, + }; + + /** |