summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-09-29 17:37:28 -0700
committerKeith Packard <keithp@keithp.com>2008-10-01 16:39:01 -0700
commit8304b405e0dc2f31fd2d2fd82e150ba502ab74e2 (patch)
treed44cf78d0876a4103ec2177ea80c9e824d445bf5
parentab2b70f831314f81a581bfb1e48d059a3a2b0b06 (diff)
Eliminate INT10 call to get BIOS contents
libpciaccess (and the old X server PCI code as well) provides a function to get the ROM contents. Code to use that was already present in the driver and used if the INT10 function failed. Skip the INT10 and just use libpciaccess as that eliminates several module loads and scary use of vm86. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/common.h17
-rw-r--r--src/i810.h3
-rw-r--r--src/i810_driver.c10
-rw-r--r--src/i830.h2
-rw-r--r--src/i830_bios.c41
-rw-r--r--src/i830_driver.c9
-rw-r--r--src/i830_modes.c1
7 files changed, 22 insertions, 61 deletions
diff --git a/src/common.h b/src/common.h
index 840d30ab..acd5f4a2 100644
--- a/src/common.h
+++ b/src/common.h
@@ -81,8 +81,6 @@ extern void I830InitpScrn(ScrnInfoPtr pScrn);
extern int I830EntityIndex;
extern const char *I810vgahwSymbols[];
extern const char *I810ramdacSymbols[];
-extern const char *I810int10Symbols[];
-extern const char *I810vbeSymbols[];
extern const char *I810ddcSymbols[];
extern const char *I810fbSymbols[];
extern const char *I810xaaSymbols[];
@@ -106,21 +104,6 @@ extern void I830DPRINTF_stub(const char *filename, int line,
#define RecPtr pI810
#endif
-/* BIOS debug macro */
-#define xf86ExecX86int10_wrapper(pInt, pScrn) do { \
- ErrorF("Executing (ax == 0x%x) BIOS call at %s:%d\n", pInt->ax, __FILE__, __LINE__); \
- if (I810_DEBUG & DEBUG_VERBOSE_BIOS) { \
- ErrorF("Checking Error state before execution\n"); \
- PrintErrorState(pScrn); \
- } \
- xf86ExecX86int10(pInt); \
- if(I810_DEBUG & DEBUG_VERBOSE_BIOS) { \
- ErrorF("Checking Error state after execution\n"); \
- usleep(50000); \
- PrintErrorState(pScrn); \
- } \
-} while (0)
-
static inline void memset_volatile(volatile void *b, int c, size_t len)
{
int i;
diff --git a/src/i810.h b/src/i810.h
index e7331f6d..7ea20439 100644
--- a/src/i810.h
+++ b/src/i810.h
@@ -47,7 +47,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "xaa.h"
#include "xf86Cursor.h"
#include "xf86xv.h"
-#include "xf86int10.h"
#include "vbe.h"
#include "vgaHW.h"
@@ -276,6 +275,8 @@ typedef struct _I810Rec {
int drmMinor;
} I810Rec;
+extern const char *I810vbeSymbols[];
+
#define I810PTR(p) ((I810Ptr)((p)->driverPrivate))
#define I810_SELECT_FRONT 0
diff --git a/src/i810_driver.c b/src/i810_driver.c
index a7f408c4..cc28ad8b 100644
--- a/src/i810_driver.c
+++ b/src/i810_driver.c
@@ -342,14 +342,6 @@ const char *I810ddcSymbols[] = {
NULL
};
-const char *I810int10Symbols[] = {
- "xf86ExecX86int10",
- "xf86InitInt10",
- "xf86Int10AllocPages",
- "xf86int10Addr",
- NULL
-};
-
const char *I810xaaSymbols[] = {
"XAACreateInfoRec",
"XAADestroyInfoRec",
@@ -518,7 +510,7 @@ i810Setup(pointer module, pointer opts, int *errmaj, int *errmin)
#endif
I810shadowFBSymbols,
I810vbeSymbols, vbeOptionalSymbols,
- I810ddcSymbols, I810int10Symbols, NULL);
+ I810ddcSymbols, NULL);
/*
* The return value must be non-NULL on success even though there
diff --git a/src/i830.h b/src/i830.h
index 491dfd00..5b782369 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -56,8 +56,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "xaa.h"
#include "xf86Cursor.h"
#include "xf86xv.h"
-#include "xf86int10.h"
-#include "vbe.h"
#include "vgaHW.h"
#include "xf86Crtc.h"
#include "xf86RandR12.h"
diff --git a/src/i830_bios.c b/src/i830_bios.c
index 2cb0b07b..726fe30f 100644
--- a/src/i830_bios.c
+++ b/src/i830_bios.c
@@ -47,9 +47,6 @@
(bios[_addr + 2] << 16) \
(bios[_addr + 3] << 24))
-/* XXX */
-#define INTEL_VBIOS_SIZE (64 * 1024)
-
static void *
find_section(struct bdb_header *bdb, int section_id)
{
@@ -180,34 +177,34 @@ i830_bios_init(ScrnInfoPtr pScrn)
struct bdb_header *bdb;
int vbt_off, bdb_off;
unsigned char *bios;
- vbeInfoPtr pVbe;
- pointer pVBEModule = NULL;
+ int ret;
+ int size;
- bios = xalloc(INTEL_VBIOS_SIZE);
+#if XSERVER_LIBPCIACCESS
+ size = pI830->PciInfo->rom_size;
+#else
+#define INTEL_VBIOS_SIZE (64 * 1024) /* XXX */
+ size = INTEL_VBIOS_SIZE;
+#endif
+ if (size == 0)
+ return -1;
+ bios = xalloc(size);
if (bios == NULL)
return -1;
- /* Load vbe module */
- if (!(pVBEModule = xf86LoadSubModule(pScrn, "vbe")))
- return FALSE;
- xf86LoaderReqSymLists(I810vbeSymbols, NULL);
-
- pVbe = VBEInit(NULL, pI830->pEnt->index);
- if (pVbe != NULL) {
- memcpy(bios, xf86int10Addr(pVbe->pInt10,
- pVbe->pInt10->BIOSseg << 4),
- INTEL_VBIOS_SIZE);
- vbeFree (pVbe);
- } else {
#if XSERVER_LIBPCIACCESS
- pci_device_read_rom (pI830->PciInfo, bios);
+ ret = pci_device_read_rom (pI830->PciInfo, bios);
+ if (ret != 0)
+ return -1;
#else
- xf86ReadPciBIOS(0, pI830->PciTag, 0, bios, INTEL_VBIOS_SIZE);
+ /* xf86ReadPciBIOS returns the length read */
+ ret = xf86ReadPciBIOS(0, pI830->PciTag, 0, bios, size);
+ if (ret <= 0)
+ return -1;
#endif
- }
vbt_off = INTEL_BIOS_16(0x1a);
- if (vbt_off >= INTEL_VBIOS_SIZE) {
+ if (vbt_off >= size) {
xf86DrvMsg(pScrn->scrnIndex, X_ERROR, "Bad VBT offset: 0x%x\n",
vbt_off);
xfree(bios);
diff --git a/src/i830_driver.c b/src/i830_driver.c
index 53219c39..3a2a9a40 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -191,7 +191,6 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "dixstruct.h"
#include "xf86xv.h"
#include <X11/extensions/Xv.h>
-#include "vbe.h"
#include "shadow.h"
#include "i830.h"
#include "i830_display.h"
@@ -441,9 +440,6 @@ I830DetectMemory(ScrnInfoPtr pScrn)
uint16_t gmch_ctrl;
int memsize = 0, gtt_size;
int range;
-#if 0
- VbeInfoBlock *vbeInfo;
-#endif
#if XSERVER_LIBPCIACCESS
struct pci_device *bridge = intel_host_bridge ();
@@ -1420,11 +1416,6 @@ I830LoadSyms(ScrnInfoPtr pScrn)
if (pI830->use_drm_mode)
return TRUE;
- /* Load int10 module */
- if (!xf86LoadSubModule(pScrn, "int10"))
- return FALSE;
- xf86LoaderReqSymLists(I810int10Symbols, NULL);
-
/* The vgahw module should be loaded here when needed */
if (!xf86LoadSubModule(pScrn, "vgahw"))
return FALSE;
diff --git a/src/i830_modes.c b/src/i830_modes.c
index 06921a50..4aa493ea 100644
--- a/src/i830_modes.c
+++ b/src/i830_modes.c
@@ -31,7 +31,6 @@
* Authors: David Dawes <dawes@xfree86.org>
* Eric Anholt <eric.anholt@intel.com>
*
- * $XFree86: xc/programs/Xserver/hw/xfree86/os-support/vbe/vbeModes.c,v 1.6 2002/11/02 01:38:25 dawes Exp $
*/
/*
* Modified by Alan Hourihane <alanh@tungstengraphics.com>