linux: Refactor xf86{En,Dis}ableIO
Pull platform methods into their own sections for legibility, and rewrite the ifdefs to be more concise. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Reviewed-by: Simon Farnsworth <simon.farnsworth@onelan.co.uk> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
f0bad69edd
commit
048674a6ae
@ -479,39 +479,36 @@ volatile unsigned char *ioBase = NULL;
|
|||||||
#define __NR_pciconfig_iobase 200
|
#define __NR_pciconfig_iobase 200
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
static Bool
|
||||||
|
hwEnableIO(void)
|
||||||
Bool
|
|
||||||
xf86EnableIO(void)
|
|
||||||
{
|
{
|
||||||
#if defined(__powerpc__)
|
|
||||||
int fd;
|
int fd;
|
||||||
unsigned int ioBase_phys;
|
unsigned int ioBase_phys = syscall(__NR_pciconfig_iobase, 2, 0, 0);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (ExtendedEnabled)
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
#if defined(__powerpc__)
|
|
||||||
ioBase_phys = syscall(__NR_pciconfig_iobase, 2, 0, 0);
|
|
||||||
|
|
||||||
fd = open("/dev/mem", O_RDWR);
|
fd = open("/dev/mem", O_RDWR);
|
||||||
if (ioBase == NULL) {
|
if (ioBase == NULL) {
|
||||||
ioBase = (volatile unsigned char *) mmap(0, 0x20000,
|
ioBase = (volatile unsigned char *) mmap(0, 0x20000,
|
||||||
PROT_READ | PROT_WRITE,
|
PROT_READ | PROT_WRITE,
|
||||||
MAP_SHARED, fd, ioBase_phys);
|
MAP_SHARED, fd, ioBase_phys);
|
||||||
/* Should this be fatal or just a warning? */
|
|
||||||
#if 0
|
|
||||||
if (ioBase == MAP_FAILED) {
|
|
||||||
xf86Msg(X_WARNING,
|
|
||||||
"xf86EnableIOPorts: Failed to map iobase (%s)\n",
|
|
||||||
strerror(errno));
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
close(fd);
|
close(fd);
|
||||||
#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__s390__) && !defined(__arm__) && !defined(__m32r__) && !defined(__nds32__)
|
|
||||||
|
return ioBase != MAP_FAILED;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
hwDisableIO(void)
|
||||||
|
{
|
||||||
|
munmap(ioBase, 0x20000);
|
||||||
|
ioBase = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
#elif defined(__i386__) || defined(__x86_64__) || defined(__ia64__) || \
|
||||||
|
defined(__alpha__)
|
||||||
|
|
||||||
|
static Bool
|
||||||
|
hwEnableIO(void)
|
||||||
|
{
|
||||||
if (ioperm(0, 1024, 1) || iopl(3)) {
|
if (ioperm(0, 1024, 1) || iopl(3)) {
|
||||||
if (errno == ENODEV)
|
if (errno == ENODEV)
|
||||||
ErrorF("xf86EnableIOPorts: no I/O ports found\n");
|
ErrorF("xf86EnableIOPorts: no I/O ports found\n");
|
||||||
@ -526,27 +523,44 @@ xf86EnableIO(void)
|
|||||||
ioperm(0x40, 4, 0); /* trap access to the timer chip */
|
ioperm(0x40, 4, 0); /* trap access to the timer chip */
|
||||||
ioperm(0x60, 4, 0); /* trap access to the keyboard controller */
|
ioperm(0x60, 4, 0); /* trap access to the keyboard controller */
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
ExtendedEnabled = TRUE;
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
hwDisableIO(void)
|
||||||
|
{
|
||||||
|
iopl(0);
|
||||||
|
ioperm(0, 1024, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* non-IO architectures */
|
||||||
|
|
||||||
|
#define hwEnableIO() TRUE
|
||||||
|
#define hwDisableIO() do {} while (0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Bool
|
||||||
|
xf86EnableIO(void)
|
||||||
|
{
|
||||||
|
if (ExtendedEnabled)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
ExtendedEnabled = hwEnableIO();
|
||||||
|
|
||||||
|
return ExtendedEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
xf86DisableIO(void)
|
xf86DisableIO(void)
|
||||||
{
|
{
|
||||||
if (!ExtendedEnabled)
|
if (!ExtendedEnabled)
|
||||||
return;
|
return;
|
||||||
#if defined(__powerpc__)
|
|
||||||
munmap(ioBase, 0x20000);
|
|
||||||
ioBase = NULL;
|
|
||||||
#elif !defined(__mc68000__) && !defined(__sparc__) && !defined(__mips__) && !defined(__sh__) && !defined(__hppa__) && !defined(__arm__) && !defined(__s390__) && !defined(__m32r__) && !defined(__nds32__)
|
|
||||||
iopl(0);
|
|
||||||
ioperm(0, 1024, 0);
|
|
||||||
#endif
|
|
||||||
ExtendedEnabled = FALSE;
|
|
||||||
|
|
||||||
return;
|
hwDisableIO();
|
||||||
|
|
||||||
|
ExtendedEnabled = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__alpha__)
|
#if defined (__alpha__)
|
||||||
|
Loading…
Reference in New Issue
Block a user