mirror of
https://git.freebsd.org/ports.git
synced 2025-06-14 09:10:32 -04:00
Update gccmakedep to 1.0.3. Update imake to 1.0.7. Update libpciaccess to 0.13.3. Update libdrm to 2.4.60. Update bitmap to 1.0.8. Update fstobdf to 1.0.6. Update iceauth to 1.0.7. Update libXdmcp to 1.1.2. Update libXp to 1.0.3. Update libXvMC to 1.0.9. Update libXxf86vm to 1.1.4. Update libxshmfence to 1.2. Update randrproto to 1.4.1. Update rgb to 1.0.6. Update sessreg to 1.1.0. Update xcb-util-cursor to 0.1.2. Update xedit to 1.2.2. Update xkbcomp to 1.3.0. Update xkeyboard-config to 2.14. Update xproto to 7.0.27. Update xf86-input-mouse to 1.9.1. Update xf86-input-synaptics to 1.8.2. Update xf86-video-i710 to 1.3.5. Update xf86-video-mga to 1.6.4. Update xf86-video-tdfx to 1.4.6. Update xf86-video-vmware to 13.1.0. Update bdftopcf to 1.0.5. Update font-util to 1.3.1. Update fslsfonts to 1.0.5. Update mkfontscale to 1.1.2. Update showfont to 1.0.5. Update xfs to 1.1.4. Update xfsinfo to 1.0.5. Remove :keepla from USES=libtool for X libraries in bsd.xorg.mk, and bump all affected ports. PR: 199400 Obtained from: Xorg-devel repo
359 lines
10 KiB
C
359 lines
10 KiB
C
--- src/freebsd_pci.c.orig 2015-02-03 23:59:14 UTC
|
|
+++ src/freebsd_pci.c
|
|
@@ -39,6 +39,11 @@
|
|
#include <unistd.h>
|
|
#include <fcntl.h>
|
|
#include <errno.h>
|
|
+#if defined(__i386__) || defined(__amd64__)
|
|
+#include <machine/cpufunc.h>
|
|
+#else
|
|
+#include <dev/io/iodev.h>
|
|
+#endif
|
|
#include <sys/types.h>
|
|
#include <sys/param.h>
|
|
#include <sys/pciio.h>
|
|
@@ -74,6 +79,10 @@
|
|
#define PCIM_BAR_MEM_SPACE 0
|
|
#define PCIM_BAR_IO_SPACE 1
|
|
|
|
+#if defined(__sparc64__)
|
|
+static int screenfd;
|
|
+#endif
|
|
+
|
|
/**
|
|
* FreeBSD private pci_system structure that extends the base pci_system
|
|
* structure.
|
|
@@ -105,12 +114,18 @@ pci_device_freebsd_map_range(struct pci_
|
|
{
|
|
const int prot = ((map->flags & PCI_DEV_MAP_FLAG_WRITABLE) != 0)
|
|
? (PROT_READ | PROT_WRITE) : PROT_READ;
|
|
+#if !defined(__sparc64__)
|
|
struct mem_range_desc mrd;
|
|
struct mem_range_op mro;
|
|
+#endif
|
|
|
|
int fd, err = 0;
|
|
|
|
+#if defined(__sparc64__)
|
|
+ fd = screenfd;
|
|
+#else
|
|
fd = open("/dev/mem", O_RDWR | O_CLOEXEC);
|
|
+#endif
|
|
if (fd == -1)
|
|
return errno;
|
|
|
|
@@ -120,6 +135,7 @@ pci_device_freebsd_map_range(struct pci_
|
|
err = errno;
|
|
}
|
|
|
|
+#if !defined(__sparc64__)
|
|
mrd.mr_base = map->base;
|
|
mrd.mr_len = map->size;
|
|
strncpy(mrd.mr_owner, "pciaccess", sizeof(mrd.mr_owner));
|
|
@@ -140,6 +156,7 @@ pci_device_freebsd_map_range(struct pci_
|
|
}
|
|
|
|
close(fd);
|
|
+#endif
|
|
|
|
return err;
|
|
}
|
|
@@ -148,6 +165,7 @@ static int
|
|
pci_device_freebsd_unmap_range( struct pci_device *dev,
|
|
struct pci_device_mapping *map )
|
|
{
|
|
+#if !defined(__sparc64__)
|
|
struct mem_range_desc mrd;
|
|
struct mem_range_op mro;
|
|
int fd;
|
|
@@ -173,6 +191,7 @@ pci_device_freebsd_unmap_range( struct p
|
|
fprintf(stderr, "Failed to open /dev/mem\n");
|
|
}
|
|
}
|
|
+#endif
|
|
|
|
return pci_device_generic_unmap_range(dev, map);
|
|
}
|
|
@@ -295,7 +314,11 @@ pci_device_freebsd_read_rom( struct pci_
|
|
}
|
|
|
|
printf("Using rom_base = 0x%lx\n", (long)rom_base);
|
|
+#if defined(__sparc64__)
|
|
+ memfd = screenfd;
|
|
+#else
|
|
memfd = open( "/dev/mem", O_RDONLY | O_CLOEXEC );
|
|
+#endif
|
|
if ( memfd == -1 )
|
|
return errno;
|
|
|
|
@@ -308,7 +331,9 @@ pci_device_freebsd_read_rom( struct pci_
|
|
memcpy( buffer, bios, dev->rom_size );
|
|
|
|
munmap( bios, dev->rom_size );
|
|
+#if !defined(__sparc64__)
|
|
close( memfd );
|
|
+#endif
|
|
|
|
if (pci_rom) {
|
|
pci_device_cfg_write_u32( dev, PCIR_BIOS, rom );
|
|
@@ -343,7 +368,6 @@ pci_device_freebsd_get_num_regions( stru
|
|
static int
|
|
pci_device_freebsd_probe( struct pci_device * dev )
|
|
{
|
|
- struct pci_device_private *priv = (struct pci_device_private *) dev;
|
|
struct pci_bar_io bar;
|
|
uint8_t irq;
|
|
int err, i;
|
|
@@ -563,138 +587,153 @@ pci_system_freebsd_destroy(void)
|
|
freebsd_pci_sys = NULL;
|
|
}
|
|
|
|
-#if defined(__i386__) || defined(__amd64__)
|
|
-#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)
|
|
+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;
|
|
- ret->is_legacy = 1;
|
|
- 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;
|
|
- ret->is_legacy = 1;
|
|
- return ret;
|
|
+#if defined(__sparc64__)
|
|
+ ret->memory = mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED,
|
|
+ screenfd, 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;
|
|
+ ret->is_legacy = 1;
|
|
+ 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 !defined(__sparc64__)
|
|
+ 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(__sparc64__)
|
|
+ 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(__sparc64__)
|
|
+ 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(__sparc64__)
|
|
+ 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(__sparc64__)
|
|
+ *(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(__sparc64__)
|
|
+ *(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(__sparc64__)
|
|
+ *(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;
|
|
-
|
|
- map.base = base;
|
|
- map.size = size;
|
|
- map.flags = map_flags;
|
|
- map.memory = NULL;
|
|
- err = pci_device_freebsd_map_range(dev, &map);
|
|
- *addr = map.memory;
|
|
+ struct pci_device_mapping map;
|
|
+ int err;
|
|
|
|
- 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 = {
|
|
@@ -708,9 +747,7 @@ static const struct pci_system_methods f
|
|
.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,
|
|
@@ -792,3 +829,11 @@ pci_system_freebsd_create( void )
|
|
|
|
return 0;
|
|
}
|
|
+
|
|
+void
|
|
+pci_system_freebsd_init_dev_mem(int fd)
|
|
+{
|
|
+#if defined(__sparc64__)
|
|
+ screenfd = fd;
|
|
+#endif
|
|
+}
|