xf86-video-intel: Branch 'modesetting' - src/i830_driver.c src/i830.h src/i830_memory.c

Eric Anholt anholt at kemper.freedesktop.org
Mon May 1 22:35:42 EEST 2006


 src/i830.h        |    8 -
 src/i830_driver.c |  360 ------------------------------------------------------
 src/i830_memory.c |   17 --
 3 files changed, 1 insertion(+), 384 deletions(-)

New commits:
diff-tree a66f2c01f7d557d860883346671fb864807dbdca (from a555e28e5afc81969ef7b28482e654cc26b3a446)
Author: Eric Anholt <anholt at FreeBSD.org>
Date:   Mon May 1 12:35:21 2006 -0700

    Stop doing the BIOS memory size tweaking now that we don't ask the BIOS about
    what modes are available.

diff --git a/src/i830.h b/src/i830.h
index d72b72b..7c4d50c 100644
--- a/src/i830.h
+++ b/src/i830.h
@@ -245,8 +245,6 @@ typedef struct _I830Rec {
    long FbMapSize;
    long TotalVideoRam;
    I830MemRange StolenMemory;		/* pre-allocated memory */
-   long BIOSMemorySize;			/* min stolen pool size */
-   int BIOSMemSizeLoc;
 
    /* These change according to what has been allocated. */
    long FreeMemory;
@@ -384,12 +382,6 @@ typedef struct _I830Rec {
    VbeInfoBlock *vbeInfo;
    VESAPtr vesa;
 
-   Bool overrideBIOSMemSize;
-   int saveBIOSMemSize;
-   int newBIOSMemSize;
-   Bool useSWF1;
-   int saveSWF1;
-
    Bool swfSaved;
    CARD32 saveSWF0;
    CARD32 saveSWF4;
diff --git a/src/i830_driver.c b/src/i830_driver.c
index dcb1acf..3eb3205 100644
--- a/src/i830_driver.c
+++ b/src/i830_driver.c
@@ -871,291 +871,6 @@ I830UnmapMem(ScrnInfoPtr pScrn)
    return TRUE;
 }
 
-#ifndef HAVE_GET_PUT_BIOSMEMSIZE
-#define HAVE_GET_PUT_BIOSMEMSIZE 1
-#endif
-
-#if HAVE_GET_PUT_BIOSMEMSIZE
-/*
- * Tell the BIOS how much video memory is available.  The BIOS call used
- * here won't always be available.
- */
-static Bool
-PutBIOSMemSize(ScrnInfoPtr pScrn, int memSize)
-{
-   vbeInfoPtr pVbe = I830PTR(pScrn)->pVbe;
-
-   DPRINTF(PFX, "PutBIOSMemSize: %d kB\n", memSize / 1024);
-
-   pVbe->pInt10->num = 0x10;
-   pVbe->pInt10->ax = 0x5f11;
-   pVbe->pInt10->bx = 0;
-   pVbe->pInt10->cx = memSize / GTT_PAGE_SIZE;
-
-   xf86ExecX86int10_wrapper(pVbe->pInt10, pScrn);
-   return Check5fStatus(pScrn, 0x5f11, pVbe->pInt10->ax);
-}
-
-/*
- * This reports what the previous VBEGetVBEInfo() found.  Be sure to call
- * VBEGetVBEInfo() after changing the BIOS memory size view.  If
- * a separate BIOS call is added for this, it can be put here.  Only
- * return a valid value if the funtionality for PutBIOSMemSize()
- * is available.
- */
-static int
-GetBIOSMemSize(ScrnInfoPtr pScrn)
-{
-   I830Ptr pI830 = I830PTR(pScrn);
-   int memSize = KB(pI830->vbeInfo->TotalMemory * 64);
-
-   DPRINTF(PFX, "GetBIOSMemSize\n");
-
-   if (PutBIOSMemSize(pScrn, memSize))
-      return memSize;
-   else
-      return -1;
-}
-#endif
-
-/*
- * These three functions allow the video BIOS's view of the available video
- * memory to be changed.  This is currently implemented only for the 830
- * and 845G, which can do this via a BIOS scratch register that holds the
- * BIOS's view of the (pre-reserved) memory size.  If another mechanism
- * is available in the future, it can be plugged in here.  
- *
- * The mapping used for the 830/845G scratch register's low 4 bits is:
- *
- *             320k => 0
- *             832k => 1
- *            8000k => 8
- *
- * The "unusual" values are the 512k, 1M, 8M pre-reserved memory, less
- * overhead, rounded down to the BIOS-reported 64k granularity.
- */
-
-static Bool
-SaveBIOSMemSize(ScrnInfoPtr pScrn)
-{
-   I830Ptr pI830 = I830PTR(pScrn);
-
-   DPRINTF(PFX, "SaveBIOSMemSize\n");
-
-   if (!I830IsPrimary(pScrn))
-      return FALSE;
-
-   pI830->useSWF1 = FALSE;
-
-#if HAVE_GET_PUT_BIOSMEMSIZE
-   if ((pI830->saveBIOSMemSize = GetBIOSMemSize(pScrn)) != -1)
-      return TRUE;
-#endif
-
-   if (IS_I830(pI830) || IS_845G(pI830)) {
-      pI830->useSWF1 = TRUE;
-      pI830->saveSWF1 = INREG(SWF1) & 0x0f;
-
-      /*
-       * This is for sample purposes only.  pI830->saveBIOSMemSize isn't used
-       * when pI830->useSWF1 is TRUE.
-       */
-      switch (pI830->saveSWF1) {
-      case 0:
-	 pI830->saveBIOSMemSize = KB(320);
-	 break;
-      case 1:
-	 pI830->saveBIOSMemSize = KB(832);
-	 break;
-      case 8:
-	 pI830->saveBIOSMemSize = KB(8000);
-	 break;
-      default:
-	 pI830->saveBIOSMemSize = 0;
-	 break;
-      }
-      return TRUE;
-   }
-   return FALSE;
-}
-
-/*
- * TweakMemorySize() tweaks the BIOS image to set the correct size.
- * Original implementation by Christian Zietz in a stand-alone tool.
- */
-static CARD32
-TweakMemorySize(ScrnInfoPtr pScrn, CARD32 newsize, Bool preinit)
-{
-#define SIZE 0x10000
-#define _855_IDOFFSET (-23)
-#define _845_IDOFFSET (-19)
-    
-    const char *MAGICstring = "Total time for VGA POST:";
-    const int len = strlen(MAGICstring);
-    I830Ptr pI830 = I830PTR(pScrn);
-    volatile char *position;
-    char *biosAddr;
-    CARD32 oldsize;
-    CARD32 oldpermission;
-    CARD32 ret = 0;
-    int i,j = 0;
-    int reg = (IS_845G(pI830) || IS_I865G(pI830)) ? _845_DRAM_RW_CONTROL
-	: _855_DRAM_RW_CONTROL;
-    
-    PCITAG tag =pciTag(0,0,0);
-
-    if (!I830IsPrimary(pScrn))
-       return 0;
-
-    if(!pI830->PciInfo 
-       || !(IS_845G(pI830) || IS_I85X(pI830) || IS_I865G(pI830)))
-	return 0;
-
-    if (!pI830->pVbe)
-	return 0;
-
-    biosAddr = xf86int10Addr(pI830->pVbe->pInt10, 
-				    pI830->pVbe->pInt10->BIOSseg << 4);
-
-    if (!pI830->BIOSMemSizeLoc) {
-	if (!preinit)
-	    return 0;
-
-	/* Search for MAGIC string */
-	for (i = 0; i < SIZE; i++) {
-	    if (biosAddr[i] == MAGICstring[j]) {
-		if (++j == len)
-		    break;
-	    } else {
-		i -= j;
-		j = 0;
-	    }
-	}
-	if (j < len) return 0;
-
-	pI830->BIOSMemSizeLoc =  (i - j + 1 + (IS_845G(pI830)
-					    ? _845_IDOFFSET : _855_IDOFFSET));
-    }
-    
-    position = biosAddr + pI830->BIOSMemSizeLoc;
-    oldsize = *(CARD32 *)position;
-
-    ret = oldsize - 0x21000;
-    
-    /* verify that register really contains current size */
-    if (preinit && ((ret >> 16) !=  pI830->vbeInfo->TotalMemory))
-	return 0;
-
-    oldpermission = pciReadLong(tag, reg);
-    pciWriteLong(tag, reg, DRAM_WRITE | (oldpermission & 0xffff)); 
-    
-    *(CARD32 *)position = newsize + 0x21000;
-
-    if (preinit) {
-	/* reinitialize VBE for new size */
-	if (I830IsPrimary(pScrn)) {
-	   VBEFreeVBEInfo(pI830->vbeInfo);
-	   vbeFree(pI830->pVbe);
-	   pI830->pVbe = VBEInit(NULL, pI830->pEnt->index);
-	   pI830->vbeInfo = VBEGetVBEInfo(pI830->pVbe);
-	} else {
-           I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
-           pI830->pVbe = pI8301->pVbe;
-           pI830->vbeInfo = pI8301->vbeInfo;
-	}
-	
-	/* verify that change was successful */
-	if (pI830->vbeInfo->TotalMemory != (newsize >> 16)){
-	    ret = 0;
-	    *(CARD32 *)position = oldsize;
-	} else {
-	    pI830->BIOSMemorySize = KB(pI830->vbeInfo->TotalMemory * 64);
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO, 
-		       "Tweak BIOS image to %d kB VideoRAM\n",
-		       (int)(pI830->BIOSMemorySize / 1024));
-	}
-    }
-
-    pciWriteLong(tag, reg, oldpermission);
-
-     return ret;
-}
-
-static void
-RestoreBIOSMemSize(ScrnInfoPtr pScrn)
-{
-   I830Ptr pI830 = I830PTR(pScrn);
-   CARD32 swf1;
-
-   DPRINTF(PFX, "RestoreBIOSMemSize\n");
-
-   if (!I830IsPrimary(pScrn))
-      return;
-
-   if (TweakMemorySize(pScrn, pI830->saveBIOSMemSize,FALSE))
-      return;
-
-   if (!pI830->overrideBIOSMemSize)
-      return;
-
-#if HAVE_GET_PUT_BIOSMEMSIZE
-   if (!pI830->useSWF1) {
-      PutBIOSMemSize(pScrn, pI830->saveBIOSMemSize);
-      return;
-   }
-#endif
-
-   if ((IS_I830(pI830) || IS_845G(pI830)) && pI830->useSWF1) {
-      swf1 = INREG(SWF1);
-      swf1 &= ~0x0f;
-      swf1 |= (pI830->saveSWF1 & 0x0f);
-      OUTREG(SWF1, swf1);
-   }
-}
-
-static void
-SetBIOSMemSize(ScrnInfoPtr pScrn, int newSize)
-{
-   I830Ptr pI830 = I830PTR(pScrn);
-   unsigned long swf1;
-   Bool mapped;
-
-   DPRINTF(PFX, "SetBIOSMemSize: %d kB\n", newSize / 1024);
-
-   if (!pI830->overrideBIOSMemSize)
-      return;
-
-#if HAVE_GET_PUT_BIOSMEMSIZE
-   if (!pI830->useSWF1) {
-      PutBIOSMemSize(pScrn, newSize);
-      return;
-   }
-#endif
-
-   if ((IS_I830(pI830) || IS_845G(pI830)) && pI830->useSWF1) {
-      unsigned long newSWF1;
-
-      /* Need MMIO access here. */
-      mapped = (pI830->MMIOBase != NULL);
-      if (!mapped)
-	 I830MapMMIO(pScrn);
-
-      if (newSize <= KB(832))
-	 newSWF1 = 1;
-      else
-	 newSWF1 = 8;
-
-      swf1 = INREG(SWF1);
-      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "Before: SWF1 is 0x%08lx\n", swf1);
-      swf1 &= ~0x0f;
-      swf1 |= (newSWF1 & 0x0f);
-      xf86DrvMsg(pScrn->scrnIndex, X_INFO, "After: SWF1 is 0x%08lx\n", swf1);
-      OUTREG(SWF1, swf1);
-      if (!mapped)
-	 I830UnmapMMIO(pScrn);
-   }
-}
-
 static CARD32 val8[256];
 
 static void
@@ -1509,7 +1224,6 @@ PreInitCleanup(ScrnInfoPtr pScrn)
       if (pI830->entityPrivate)
          pI830->entityPrivate->pScrn_2 = NULL;
    }
-   RestoreBIOSMemSize(pScrn);
    if (pI830->swfSaved) {
       OUTREG(SWF0, pI830->saveSWF0);
       OUTREG(SWF4, pI830->saveSWF4);
@@ -2423,67 +2137,6 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int f
 		    pScrn->videoRam);
    }
 
-   if (mem > 0) {
-      /*
-       * If the reserved (BIOS accessible) memory is less than the desired
-       * amount, try to increase it.  So far this is only implemented for
-       * the 845G and 830, but those details are handled in SetBIOSMemSize().
-       * 
-       * The BIOS-accessible amount is only important for setting video
-       * modes.  The maximum amount we try to set is limited to what would
-       * be enough for 1920x1440 with a 2048 pitch.
-       *
-       * If ALLOCATE_ALL_BIOSMEM is enabled in i830_memory.c, all of the
-       * BIOS-aware memory will get allocated.  If it isn't then it may
-       * not be, and in that case there is an assumption that the video
-       * BIOS won't attempt to access memory beyond what is needed for
-       * modes that are actually used.  ALLOCATE_ALL_BIOSMEM is enabled by
-       * default.
-       */
-
-      /* Try to keep HW cursor and Overlay amounts separate from this. */
-      int reserve = (HWCURSOR_SIZE + HWCURSOR_SIZE_ARGB + OVERLAY_SIZE) / 1024;
-
-      if (pScrn->videoRam - reserve >= I830_MAXIMUM_VBIOS_MEM)
-	 pI830->newBIOSMemSize = KB(I830_MAXIMUM_VBIOS_MEM);
-      else 
-	 pI830->newBIOSMemSize =
-			KB(ROUND_DOWN_TO(pScrn->videoRam - reserve, 64));
-      if (pI830->vbeInfo->TotalMemory * 64 < pI830->newBIOSMemSize / 1024) {
-
-	 xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		    "Will attempt to tell the BIOS that there is "
-		    "%d kB VideoRAM\n", pI830->newBIOSMemSize / 1024);
-	 if (SaveBIOSMemSize(pScrn)) {
-	    pI830->overrideBIOSMemSize = TRUE;
-	    SetBIOSMemSize(pScrn, pI830->newBIOSMemSize);
-
-	    if (I830IsPrimary(pScrn)) {
-	       VBEFreeVBEInfo(pI830->vbeInfo);
-	       vbeFree(pI830->pVbe);
-	       pI830->pVbe = VBEInit(NULL, pI830->pEnt->index);
-	       pI830->vbeInfo = VBEGetVBEInfo(pI830->pVbe);
-	    } else {
-               I830Ptr pI8301 = I830PTR(pI830->entityPrivate->pScrn_1);
-	       pI830->pVbe = pI8301->pVbe;
-	       pI830->vbeInfo = pI8301->vbeInfo;
-	    }
-
-	    pI830->BIOSMemorySize = KB(pI830->vbeInfo->TotalMemory * 64);
-	    xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-		       "BIOS now sees %ld kB VideoRAM\n",
-		       pI830->BIOSMemorySize / 1024);
- 	 } else if ((pI830->saveBIOSMemSize
-		 = TweakMemorySize(pScrn, pI830->newBIOSMemSize,TRUE)) != 0) 
-	     pI830->overrideBIOSMemSize = TRUE;
-	 else {
-	     xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-			"BIOS view of memory size can't be changed "
-			"(this is not an error).\n");
-	 }
-      }
-   }
-
    xf86DrvMsg(pScrn->scrnIndex, X_PROBED,
 	      "Pre-allocated VideoRAM: %ld kByte\n",
 	      pI830->StolenMemory.Size / 1024);
@@ -2923,9 +2576,6 @@ I830BIOSPreInit(ScrnInfoPtr pScrn, int f
 
    I830PrintModes(pScrn);
 
-   /* PreInit shouldn't leave any state changes, so restore this. */
-   RestoreBIOSMemSize(pScrn);
-
    /* Don't need MMIO access anymore. */
    if (pI830->swfSaved) {
       OUTREG(SWF0, pI830->saveSWF0);
@@ -3870,11 +3520,6 @@ I830BIOSScreenInit(int scrnIndex, Screen
       pI830->pVbe = pI8301->pVbe;
    }
 
-   if (I830IsPrimary(pScrn)) {
-      if (!TweakMemorySize(pScrn, pI830->newBIOSMemSize,FALSE))
-         SetBIOSMemSize(pScrn, pI830->newBIOSMemSize);
-   }
-
    if (!pI830->pVbe)
       return FALSE;
 
@@ -4298,7 +3943,6 @@ I830BIOSLeaveVT(int scrnIndex, int flags
    ResetState(pScrn, TRUE);
 
    RestoreHWState(pScrn);
-   RestoreBIOSMemSize(pScrn);
    if (I830IsPrimary(pScrn))
       I830UnbindAGPMemory(pScrn);
    if (pI830->AccelInfoRec)
@@ -4487,10 +4131,6 @@ I830BIOSEnterVT(int scrnIndex, int flags
          return FALSE;
 
    CheckInheritedState(pScrn);
-   if (I830IsPrimary(pScrn)) {
-      if (!TweakMemorySize(pScrn, pI830->newBIOSMemSize,FALSE))
-         SetBIOSMemSize(pScrn, pI830->newBIOSMemSize);
-   }
 
    ResetState(pScrn, FALSE);
    SetHWOperatingState(pScrn);
diff --git a/src/i830_memory.c b/src/i830_memory.c
index 433aa47..2d8610a 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -65,10 +65,6 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN
 static int nextTile = 0;
 static unsigned int tileGeneration = -1;
 
-#ifndef ALLOCATE_ALL_BIOSMEM
-#define ALLOCATE_ALL_BIOSMEM 1
-#endif
-
 static unsigned long
 GetBestTileAlignment(unsigned long size)
 {
@@ -252,11 +248,7 @@ I830FreeVidMem(ScrnInfoPtr pScrn, I830Me
        * USE CAUTION when changing anything here...
        */
       I830MemPool *Pool = range->Pool;
-      if (pI830->overrideBIOSMemSize &&
-          pI830->BIOSMemorySize > pI830->StolenMemory.Size) 
-         Pool->Total.End = pI830->BIOSMemorySize;
-      else 
-         Pool->Total.End = pI830->StolenMemory.End;
+      Pool->Total.End = pI830->StolenMemory.End;
 
       if (pI830->StolenOnly)
          Pool->Free.End += range->Size;
@@ -1078,13 +1070,6 @@ I830ResetAllocations(ScrnInfoPtr pScrn, 
    pI830->MemoryAperture.Size = pI830->FbMapSize - pI830->StolenMemory.Size;
    pI830->StolenPool.Fixed = pI830->StolenMemory;
    pI830->StolenPool.Total = pI830->StolenMemory;
-#if ALLOCATE_ALL_BIOSMEM
-   if (pI830->overrideBIOSMemSize &&
-       pI830->BIOSMemorySize > pI830->StolenMemory.Size) {
-      pI830->StolenPool.Total.End = pI830->BIOSMemorySize;
-      pI830->StolenPool.Total.Size = pI830->BIOSMemorySize;
-   }
-#endif
    pI830->StolenPool.Free = pI830->StolenPool.Total;
    pI830->FreeMemory = pI830->TotalVideoRam - pI830->StolenPool.Total.Size;
    pI830->allocatedMemory = 0;



More information about the xorg-commit mailing list