Use glibc's in/out routines
Let's let glibc do the right thing for dense/sparse selection.
The _alpha_iobase code has been unused since the switch to libpciaccess. It
really should have been killed by fba700f1f6
.
Signed-off-by: Matt Turner <mattst88@gmail.com>
Tested-by: Michael Cree <mcree@orcon.net.nz>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
0ef15ca9d2
commit
fb95090730
|
@ -316,46 +316,47 @@ static __inline__ void stw_u(uint16_t val, uint16_t *p)
|
|||
/* note that the appropriate setup via "ioperm" needs to be done */
|
||||
/* *before* any inx/outx is done. */
|
||||
|
||||
extern _X_EXPORT void (*_alpha_outb)(char val, unsigned long port);
|
||||
extern _X_EXPORT void _outb(unsigned char val, unsigned long port);
|
||||
extern _X_EXPORT void _outw(unsigned short val, unsigned long port);
|
||||
extern _X_EXPORT void _outl(unsigned int val, unsigned long port);
|
||||
extern _X_EXPORT unsigned int _inb(unsigned long port);
|
||||
extern _X_EXPORT unsigned int _inw(unsigned long port);
|
||||
extern _X_EXPORT unsigned int _inl(unsigned long port);
|
||||
|
||||
static __inline__ void
|
||||
outb(unsigned long port, unsigned char val)
|
||||
{
|
||||
_alpha_outb(val, port);
|
||||
_outb(val, port);
|
||||
}
|
||||
|
||||
extern _X_EXPORT void (*_alpha_outw)(short val, unsigned long port);
|
||||
static __inline__ void
|
||||
outw(unsigned long port, unsigned short val)
|
||||
{
|
||||
_alpha_outw(val, port);
|
||||
_outw(val, port);
|
||||
}
|
||||
|
||||
extern _X_EXPORT void (*_alpha_outl)(int val, unsigned long port);
|
||||
static __inline__ void
|
||||
outl(unsigned long port, unsigned int val)
|
||||
{
|
||||
_alpha_outl(val, port);
|
||||
_outl(val, port);
|
||||
}
|
||||
|
||||
extern _X_EXPORT unsigned int (*_alpha_inb)(unsigned long port);
|
||||
static __inline__ unsigned int
|
||||
inb(unsigned long port)
|
||||
{
|
||||
return _alpha_inb(port);
|
||||
return _inb(port);
|
||||
}
|
||||
|
||||
extern _X_EXPORT unsigned int (*_alpha_inw)(unsigned long port);
|
||||
static __inline__ unsigned int
|
||||
inw(unsigned long port)
|
||||
{
|
||||
return _alpha_inw(port);
|
||||
return _inw(port);
|
||||
}
|
||||
|
||||
extern _X_EXPORT unsigned int (*_alpha_inl)(unsigned long port);
|
||||
static __inline__ unsigned int
|
||||
inl(unsigned long port)
|
||||
{
|
||||
return _alpha_inl(port);
|
||||
return _inl(port);
|
||||
}
|
||||
|
||||
# endif /* linux */
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
|
||||
#ifdef HAVE_XORG_CONFIG_H
|
||||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
||||
#ifndef LNX_H_
|
||||
# ifdef __alpha__
|
||||
extern unsigned long _bus_base __P ((void)) __attribute__ ((const));
|
||||
extern unsigned long _bus_base_sparse __P ((void)) __attribute__ ((const));
|
||||
extern int iopl __P ((int __level));
|
||||
|
||||
/* new pciconfig_iobase syscall added in 2.2.15 and 2.3.99 */
|
||||
# include <linux/unistd.h>
|
||||
extern long (*_iobase)(unsigned, int, int, int);
|
||||
|
||||
/*
|
||||
* _iobase deals with the case the __NR_pciconfig_iobase is either undefined
|
||||
* or unsupported by the kernel, but we need to make sure that the `which'
|
||||
* argument symbols are defined.
|
||||
*/
|
||||
# ifndef IOBASE_HOSE
|
||||
# define IOBASE_HOSE 0
|
||||
# endif
|
||||
# ifndef IOBASE_SPARSE_MEM
|
||||
# define IOBASE_SPARSE_MEM 1
|
||||
# endif
|
||||
# ifndef IOBASE_DENSE_MEM
|
||||
# define IOBASE_DENSE_MEM 2
|
||||
# endif
|
||||
# ifndef IOBASE_SPARSE_IO
|
||||
# define IOBASE_SPARSE_IO 3
|
||||
# endif
|
||||
# ifndef IOBASE_DENSE_IO
|
||||
# define IOBASE_DENSE_IO 4
|
||||
# endif
|
||||
# ifndef IOBASE_ROOT_BUS
|
||||
# define IOBASE_ROOT_BUS 5
|
||||
# endif
|
||||
# ifndef IOBASE_FROM_HOSE
|
||||
# define IOBASE_FROM_HOSE 0x10000
|
||||
# endif
|
||||
# endif /* __alpha__ */
|
||||
|
||||
#define LNX_H_
|
||||
|
||||
#endif
|
|
@ -4,10 +4,7 @@
|
|||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <X11/X.h>
|
||||
#include "os.h"
|
||||
#include "xf86.h"
|
||||
#include "xf86Priv.h"
|
||||
#include "shared/xf86Axp.h"
|
||||
|
||||
axpDevice lnxGetAXP(void);
|
||||
|
@ -102,86 +99,3 @@ lnxGetAXP(void)
|
|||
count++;
|
||||
} while (1);
|
||||
}
|
||||
|
||||
/*
|
||||
* pciconfig_iobase wrappers and dynamic i/o selection
|
||||
*/
|
||||
#include "lnx.h"
|
||||
#include <unistd.h>
|
||||
#include <errno.h>
|
||||
|
||||
/* glibc versions (single hose only) */
|
||||
extern void _outb(char val, unsigned long port);
|
||||
extern void _outw(short val, unsigned long port);
|
||||
extern void _outl(int val, unsigned long port);
|
||||
extern unsigned int _inb(unsigned long port);
|
||||
extern unsigned int _inw(unsigned long port);
|
||||
extern unsigned int _inl(unsigned long port);
|
||||
|
||||
extern void _dense_outb(char, unsigned long);
|
||||
extern void _dense_outw(short, unsigned long);
|
||||
extern void _dense_outl(int, unsigned long);
|
||||
extern unsigned int _dense_inb(unsigned long);
|
||||
extern unsigned int _dense_inw(unsigned long);
|
||||
extern unsigned int _dense_inl(unsigned long);
|
||||
|
||||
_X_EXPORT void (*_alpha_outb)(char, unsigned long) = _outb;
|
||||
_X_EXPORT void (*_alpha_outw)(short, unsigned long) = _outw;
|
||||
_X_EXPORT void (*_alpha_outl)(int, unsigned long) = _outl;
|
||||
_X_EXPORT unsigned int (*_alpha_inb)(unsigned long) = _inb;
|
||||
_X_EXPORT unsigned int (*_alpha_inw)(unsigned long) = _inw;
|
||||
_X_EXPORT unsigned int (*_alpha_inl)(unsigned long) = _inl;
|
||||
|
||||
static long _alpha_iobase_query(unsigned, int, int, int);
|
||||
long (*_iobase)(unsigned, int, int, int) = _alpha_iobase_query;
|
||||
|
||||
static long
|
||||
_alpha_iobase(unsigned flags, int hose, int bus, int devfn)
|
||||
{
|
||||
if (bus < 0) {
|
||||
bus = hose;
|
||||
flags |= IOBASE_FROM_HOSE;
|
||||
}
|
||||
|
||||
return syscall(__NR_pciconfig_iobase, flags, bus, devfn);
|
||||
}
|
||||
|
||||
static long
|
||||
_alpha_iobase_legacy(unsigned flags, int hose, int bus, int devfn)
|
||||
{
|
||||
if (hose > 0) return -ENODEV;
|
||||
if (flags & IOBASE_DENSE_MEM) return _bus_base();
|
||||
if (flags & IOBASE_SPARSE_MEM) return _bus_base_sparse();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long
|
||||
_alpha_iobase_query(unsigned flags, int hose, int bus, int devfn)
|
||||
{
|
||||
/*
|
||||
* Only use iobase if the syscall is supported *and* it's
|
||||
* a dense io system
|
||||
*/
|
||||
if (_alpha_iobase(IOBASE_DENSE_IO, 0, 0, 0) > 0) {
|
||||
/*
|
||||
* The syscall worked and it's a dense io system - take over the
|
||||
* io subsystem
|
||||
*/
|
||||
_iobase = _alpha_iobase;
|
||||
|
||||
/*
|
||||
* Only take over the inx/outx functions if this is a dense I/O
|
||||
* system *and* addressing domains are being used. The dense I/O
|
||||
* routines expect I/O to be mapped (as done in xf86MapLegacyIO)
|
||||
*/
|
||||
_alpha_outb = _dense_outb;
|
||||
_alpha_outw = _dense_outw;
|
||||
_alpha_outl = _dense_outl;
|
||||
_alpha_inb = _dense_inb;
|
||||
_alpha_inw = _dense_inw;
|
||||
_alpha_inl = _dense_inl;
|
||||
} else _iobase = _alpha_iobase_legacy;
|
||||
|
||||
return _iobase(flags, hose, bus, devfn);
|
||||
}
|
||||
|
||||
|
|
|
@ -3,15 +3,8 @@
|
|||
#include <xorg-config.h>
|
||||
#endif
|
||||
|
||||
#include <X11/X.h>
|
||||
#include "input.h"
|
||||
#include "scrnintstr.h"
|
||||
#include "compiler.h"
|
||||
|
||||
#include "xf86.h"
|
||||
#include "xf86Priv.h"
|
||||
#include "xf86_OSlib.h"
|
||||
#include "xf86OSpriv.h"
|
||||
#include "compiler.h"
|
||||
|
||||
int readDense8(pointer Base, register unsigned long Offset);
|
||||
int readDense16(pointer Base, register unsigned long Offset);
|
||||
|
@ -88,67 +81,3 @@ writeDense32(int Value, pointer Base, register unsigned long Offset)
|
|||
write_mem_barrier();
|
||||
*(volatile CARD32 *)((unsigned long)Base+(Offset)) = Value;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void
|
||||
_dense_outb(char val, unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) {
|
||||
_outb(val, port);
|
||||
} else {
|
||||
write_mem_barrier();
|
||||
*(volatile CARD8 *)port = val;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_dense_outw(short val, unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) {
|
||||
_outw(val, port);
|
||||
} else {
|
||||
write_mem_barrier();
|
||||
*(volatile CARD16 *)port = val;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
_dense_outl(int val, unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) {
|
||||
_outl(val, port);
|
||||
} else {
|
||||
write_mem_barrier();
|
||||
*(volatile CARD32 *)port = val;
|
||||
}
|
||||
}
|
||||
|
||||
unsigned int
|
||||
_dense_inb(unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) return _inb(port);
|
||||
|
||||
mem_barrier();
|
||||
return *(volatile CARD8 *)port;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
_dense_inw(unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) return _inw(port);
|
||||
|
||||
mem_barrier();
|
||||
return *(volatile CARD16 *)port;
|
||||
}
|
||||
|
||||
unsigned int
|
||||
_dense_inl(unsigned long port)
|
||||
{
|
||||
if ((port & ~0xffff) == 0) return _inl(port);
|
||||
|
||||
mem_barrier();
|
||||
return *(volatile CARD32 *)port;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -73,15 +73,9 @@ extern int iopl(int __level);
|
|||
#endif
|
||||
|
||||
#ifdef __alpha__
|
||||
|
||||
extern void sethae(unsigned long hae);
|
||||
|
||||
# define BUS_BASE bus_base
|
||||
|
||||
#else
|
||||
|
||||
#define BUS_BASE (0)
|
||||
|
||||
#endif /* __alpha__ */
|
||||
|
||||
/***************************************************************************/
|
||||
|
@ -91,6 +85,10 @@ extern void sethae(unsigned long hae);
|
|||
static pointer mapVidMem(int, unsigned long, unsigned long, int);
|
||||
static void unmapVidMem(int, pointer, unsigned long);
|
||||
#if defined (__alpha__)
|
||||
extern void sethae(unsigned long hae);
|
||||
extern unsigned long _bus_base __P ((void)) __attribute__ ((const));
|
||||
extern unsigned long _bus_base_sparse __P ((void)) __attribute__ ((const));
|
||||
|
||||
static pointer mapVidMemSparse(int, unsigned long, unsigned long, int);
|
||||
extern axpDevice lnxGetAXP(void);
|
||||
static void unmapVidMemSparse(int, pointer, unsigned long);
|
||||
|
@ -99,7 +97,6 @@ static Bool needSparse;
|
|||
static unsigned long hae_thresh;
|
||||
static unsigned long hae_mask;
|
||||
static unsigned long bus_base;
|
||||
static unsigned long sparse_size;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_MTRR_SUPPORT
|
||||
|
@ -375,7 +372,6 @@ xf86OSInitVidMem(VidMemInfoPtr pVidMem)
|
|||
if ((needSparse = (_bus_base_sparse() > 0))) {
|
||||
hae_thresh = xf86AXPParams[axpSystem].hae_thresh;
|
||||
hae_mask = xf86AXPParams[axpSystem].hae_mask;
|
||||
sparse_size = xf86AXPParams[axpSystem].size;
|
||||
}
|
||||
bus_base = _bus_base();
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user