Index: Makefile =================================================================== --- Makefile (revision 321160) +++ Makefile (working copy) @@ -2,7 +2,7 @@ PORTNAME= libpciaccess PORTVERSION= 0.13.1 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= devel MAINTAINER= x11@FreeBSD.org Index: files/patch-src-freebsd_pci.c =================================================================== --- files/patch-src-freebsd_pci.c (revision 321160) +++ files/patch-src-freebsd_pci.c (working copy) @@ -1,5 +1,5 @@ --- src/freebsd_pci.c.orig 2012-04-09 13:02:57.000000000 -0400 -+++ src/freebsd_pci.c 2013-04-16 02:19:10.000000000 -0400 ++++ src/freebsd_pci.c 2013-06-18 16:50:10.000000000 -0400 @@ -1,6 +1,8 @@ /* * (C) Copyright Eric Anholt 2006 @@ -9,153 +9,177 @@ * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a -@@ -561,6 +563,138 @@ +@@ -37,6 +39,11 @@ + #include + #include + #include ++#if defined(__i386__) || defined(__amd64__) ++#include ++#else ++#include ++#endif + #include + #include + #include +@@ -561,6 +568,152 @@ freebsd_pci_sys = NULL; } -+#if defined(__i386__) || defined(__amd64__) -+#include -+#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) ++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__) -+ 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; ++#if 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; +#else ++ ret->fd = open( "/dev/io", O_RDWR | O_CLOEXEC ); ++ if ( ret->fd < 0 ) + return NULL; +#endif ++ ret->base = base; ++ ret->size = size; ++ return ret; +} + -+#if defined(__i386__) || defined(__amd64__) +static void -+pci_device_freebsd_close_io(struct pci_device *dev, struct pci_io_handle *handle) ++pci_device_freebsd_close_io( struct pci_device *dev, ++ struct pci_io_handle *handle ) +{ -+ if (handle->fd > -1) -+ close(handle->fd); ++ if ( handle->fd > -1 ) ++ close( handle->fd ); +} -+#endif + +static uint32_t -+pci_device_freebsd_read32(struct pci_io_handle *handle, uint32_t reg) ++pci_device_freebsd_read32( struct pci_io_handle *handle, uint32_t reg ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ return inl(handle->base + reg); ++#if defined(PCI_MAGIC_IO_RANGE) ++ return *(uint32_t *)((uintptr_t)handle->memory + reg); ++#elif defined(__i386__) || defined(__amd64__) ++ return inl( handle->base + reg ); +#else -+ return *(uint32_t *)((uintptr_t)handle->memory + reg); ++ struct iodev_pio_req req = { IODEV_PIO_READ, handle->base + reg, 4, 0 }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); ++ return req.val; +#endif +} + +static uint16_t -+pci_device_freebsd_read16(struct pci_io_handle *handle, uint32_t reg) ++pci_device_freebsd_read16( struct pci_io_handle *handle, uint32_t reg ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ return inw(handle->base + reg); ++#if defined(PCI_MAGIC_IO_RANGE) ++ return *(uint16_t *)((uintptr_t)handle->memory + reg); ++#elif defined(__i386__) || defined(__amd64__) ++ return inw( handle->base + reg ); +#else -+ return *(uint16_t *)((uintptr_t)handle->memory + reg); ++ struct iodev_pio_req req = { IODEV_PIO_READ, handle->base + reg, 2, 0 }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); ++ return req.val; +#endif +} + +static uint8_t -+pci_device_freebsd_read8(struct pci_io_handle *handle, uint32_t reg) ++pci_device_freebsd_read8( struct pci_io_handle *handle, uint32_t reg ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ return inb(handle->base + reg); ++#if defined(PCI_MAGIC_IO_RANGE) ++ return *(uint8_t *)((uintptr_t)handle->memory + reg); ++#elif defined(__i386__) || defined(__amd64__) ++ return inb( handle->base + reg ); +#else -+ return *(uint8_t *)((uintptr_t)handle->memory + reg); ++ struct iodev_pio_req req = { IODEV_PIO_READ, handle->base + reg, 1, 0 }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); ++ return req.val; +#endif +} + +static void -+pci_device_freebsd_write32(struct pci_io_handle *handle, uint32_t reg, -+ uint32_t data) ++pci_device_freebsd_write32( struct pci_io_handle *handle, uint32_t reg, ++ uint32_t data ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ outl(handle->base + reg, data); ++#if defined(PCI_MAGIC_IO_RANGE) ++ *(uint32_t *)((uintptr_t)handle->memory + reg) = data; ++#elif defined(__i386__) || defined(__amd64__) ++ outl( handle->base + reg, data ); +#else -+ *(uint16_t *)((uintptr_t)handle->memory + reg) = data; ++ struct iodev_pio_req req = { IODEV_PIO_WRITE, handle->base + reg, 4, data }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); +#endif +} + +static void -+pci_device_freebsd_write16(struct pci_io_handle *handle, uint32_t reg, -+ uint16_t data) ++pci_device_freebsd_write16( struct pci_io_handle *handle, uint32_t reg, ++ uint16_t data ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ outw(handle->base + reg, data); ++#if defined(PCI_MAGIC_IO_RANGE) ++ *(uint16_t *)((uintptr_t)handle->memory + reg) = data; ++#elif defined(__i386__) || defined(__amd64__) ++ outw( handle->base + reg, data ); +#else -+ *(uint8_t *)((uintptr_t)handle->memory + reg) = data; ++ struct iodev_pio_req req = { IODEV_PIO_WRITE, handle->base + reg, 2, data }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); +#endif +} + +static void -+pci_device_freebsd_write8(struct pci_io_handle *handle, uint32_t reg, -+ uint8_t data) ++pci_device_freebsd_write8( struct pci_io_handle *handle, uint32_t reg, ++ uint8_t data ) +{ -+#if defined(__i386__) || defined(__amd64__) -+ outb(handle->base + reg, data); ++#if defined(PCI_MAGIC_IO_RANGE) ++ *(uint8_t *)((uintptr_t)handle->memory + reg) = data; ++#elif defined(__i386__) || defined(__amd64__) ++ outb(handle->base + reg, data); +#else -+ *(uint32_t *)((uintptr_t)handle->memory + reg) = data; ++ struct iodev_pio_req req = { IODEV_PIO_WRITE, handle->base + reg, 1, data }; ++ if ( handle->fd > -1 ) ++ ioctl( handle->fd, IODEV_PIO, &req ); +#endif +} + +static int -+pci_device_freebsd_map_legacy(struct pci_device *dev, pciaddr_t base, -+ pciaddr_t size, unsigned map_flags, void **addr) ++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; ++ 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; ++ 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) ++pci_device_freebsd_unmap_legacy( struct pci_device *dev, void *addr, ++ pciaddr_t size) +{ -+ struct pci_device_mapping map; ++ struct pci_device_mapping map; + -+ map.memory = addr; -+ map.size = size; -+ map.flags = 0; -+ return pci_device_freebsd_unmap_range(dev, &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 +705,18 @@ +@@ -571,6 +725,16 @@ .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__) + .close_io = pci_device_freebsd_close_io, -+#endif + .read32 = pci_device_freebsd_read32, + .read16 = pci_device_freebsd_read16, + .read8 = pci_device_freebsd_read8,