#ifdef HAVE_XORG_CONFIG_H
#include <xorg-config.h>
#endif
#include <fcntl.h>
#include <unistd.h>
#include <signal.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <linux/pci.h>
#include "compiler.h"
#include "460gxPCI.h"
#include "e8870PCI.h"
#include "zx1PCI.h"
#include "altixPCI.h"
#include "Pci.h"
#include "ia64Pci.h"
static int ia64_port_to_fd(unsigned long port)
{
return (port >> 24) & 0xffffffff;
}
_X_EXPORT void outb(unsigned long port, unsigned char val)
{
int fd = ia64_port_to_fd(port);
if (!fd) {
_outb(val, port & 0xffff);
goto out;
}
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
goto out;
}
if (write(fd, &val, 1) != 1) {
ErrorF("I/O write failed\n");
goto out;
}
out:
return;
}
_X_EXPORT void outw(unsigned long port, unsigned short val)
{
int fd = ia64_port_to_fd(port);
if (!fd) {
_outw(val, port & 0xffff);
goto out;
}
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
goto out;
}
if (write(fd, &val, 2) != 2) {
ErrorF("I/O write failed\n");
goto out;
}
out:
return;
}
_X_EXPORT void outl(unsigned long port, unsigned int val)
{
int fd = ia64_port_to_fd(port);
if (!fd) {
_outl(val, port & 0xffff);
goto out;
}
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
goto out;
}
if (write(fd, &val, 4) != 4) {
ErrorF("I/O write failed\n");
goto out;
}
out:
return;
}
_X_EXPORT unsigned int inb(unsigned long port)
{
int fd = ia64_port_to_fd(port);
unsigned char val;
if (!fd)
return _inb(port & 0xffff);
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
val = -1;
goto out;
}
if (read(fd, &val, 1) != 1) {
ErrorF("I/O read failed\n");
val = -1;
goto out;
}
out:
return val;
}
_X_EXPORT unsigned int inw(unsigned long port)
{
int fd = ia64_port_to_fd(port);
unsigned short val;
if (!fd)
return _inw(port & 0xffff);
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
val = -1;
goto out;
}
if (read(fd, &val, 2) != 2) {
ErrorF("I/O read failed\n");
val = -1;
goto out;
}
out:
return val;
}
_X_EXPORT unsigned int inl(unsigned long port)
{
int fd = ia64_port_to_fd(port);
unsigned int val;
if (!fd)
return _inl(port & 0xffff);
if (lseek(fd, port & 0xffff, SEEK_SET) == -1) {
ErrorF("I/O lseek failed\n");
val = -1;
goto out;
}
if (read(fd, &val, 4) != 4) {
ErrorF("I/O read failed\n");
val = -1;
goto out;
}
out:
return val;
}
void
ia64ScanPCIWrapper(scanpciWrapperOpt flags)
{
static IA64Chipset chipset = NONE_CHIPSET;
if (flags == SCANPCI_INIT) {
if (xorgProbe460GX(flags)) {
chipset = I460GX_CHIPSET;
xf86PreScan460GX();
return;
} else if (xorgProbeE8870(flags)) {
chipset = E8870_CHIPSET;
xf86PreScanE8870();
return;
}
#ifdef OS_PROBE_PCI_CHIPSET
chipset = OS_PROBE_PCI_CHIPSET(flags);
switch (chipset) {
case ZX1_CHIPSET:
xf86PreScanZX1();
return;
case ALTIX_CHIPSET:
xf86PreScanAltix();
return;
default:
return;
}
#endif
} else {
switch (chipset) {
case I460GX_CHIPSET:
xf86PostScan460GX();
return;
case E8870_CHIPSET:
xf86PostScanE8870();
return;
case ZX1_CHIPSET:
xf86PostScanZX1();
return;
case ALTIX_CHIPSET:
xf86PostScanAltix();
return;
default:
return;
}
}
}