Update miniglx support for new memory manager
authorDave Airlie <airliedfreedesktop.org>
Tue, 28 Nov 2006 04:50:07 +0000 (04:50 +0000)
committerDave Airlie <airliedfreedesktop.org>
Tue, 28 Nov 2006 04:50:07 +0000 (04:50 +0000)
src/mesa/drivers/dri/i915tex/server/i830_common.h
src/mesa/drivers/dri/i915tex/server/i830_dri.h
src/mesa/drivers/dri/i915tex/server/intel.h
src/mesa/drivers/dri/i915tex/server/intel_dri.c

index fb6ceaa52d43ff8b2d4f845dedf3abc038dc733e..06f28ed19a4a80fb1b46b7ccd63f1156d2e1c98d 100644 (file)
@@ -52,6 +52,8 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
 #define DRM_I830_INIT_HEAP                0x0a
 #define DRM_I830_CMDBUFFER                0x0b
 #define DRM_I830_DESTROY_HEAP             0x0c
+#define DRM_I830_SET_VBLANK_PIPE          0x0d
+#define DRM_I830_GET_VBLANK_PIPE          0x0e
 
 typedef struct {
    enum {
@@ -208,5 +210,11 @@ typedef struct {
        int region;
 } drmI830MemDestroyHeap;
 
+#define DRM_I830_VBLANK_PIPE_A  1
+#define DRM_I830_VBLANK_PIPE_B  2
+
+typedef struct {
+        int pipe;
+} drmI830VBlankPipe;
 
 #endif /* _I830_DRM_H_ */
index 6c9a70902152aa7eb3ca5e916f1e432026e09691..c2a3af8cbf7be1410ef4feb09bfa1b61506fc55f 100644 (file)
@@ -9,8 +9,8 @@
 #define I830_MAX_DRAWABLES 256
 
 #define I830_MAJOR_VERSION 1
-#define I830_MINOR_VERSION 3
-#define I830_PATCHLEVEL 0
+#define I830_MINOR_VERSION 7
+#define I830_PATCHLEVEL 2
 
 #define I830_REG_SIZE 0x80000
 
@@ -18,20 +18,20 @@ typedef struct _I830DRIRec {
    drm_handle_t regs;
    drmSize regsSize;
 
-   drmSize backbufferSize;
-   drm_handle_t backbuffer;
+   drmSize unused1; /* backbufferSize */
+   drm_handle_t unused2; /* backbuffer */
 
-   drmSize depthbufferSize;
-   drm_handle_t depthbuffer;
+   drmSize unused3; /* depthbufferSize */
+   drm_handle_t unused4; /* depthbuffer */
 
-   drmSize rotatedSize;
-   drm_handle_t rotatedbuffer;
+   drmSize unused5; /* rotatedSize */
+   drm_handle_t unused6; /* rotatedbuffer */
 
-   drm_handle_t textures;
-   int textureSize;
+   drm_handle_t unused7; /* textures */
+   int unused8; /* textureSize */
 
-   drm_handle_t agp_buffers;
-   drmSize agp_buf_size;
+   drm_handle_t unused9; /* agp_buffers */
+   drmSize unused10; /* agp_buf_size */
 
    int deviceID;
    int width;
@@ -40,20 +40,10 @@ typedef struct _I830DRIRec {
    int cpp;
    int bitsPerPixel;
 
-   int fbOffset;
-   int fbStride;
-
-   int backOffset;
-   int backPitch;
-
-   int depthOffset;
-   int depthPitch;
-
-   int rotatedOffset;
-   int rotatedPitch;
-
-   int logTextureGranularity;
-   int textureOffset;
+   int unused11[8]; /* was front/back/depth/rotated offset/pitch */
+   
+   int unused12; /* logTextureGranularity */
+   int unused13; /* textureOffset */
 
    int irq;
    int sarea_priv_offset;
index d7858a20c8de4e63c74f80892fdfc846106296e6..6ea72499c1cd772763b04c9adacc88819c1932cb 100644 (file)
@@ -75,6 +75,9 @@
 
 #define I830_GMCH_CTRL         0x52
 
+#define I830_GMCH_MEM_MASK      0x1
+#define I830_GMCH_MEM_64M       0x1
+#define I830_GMCH_MEM_128M      0
 
 #define I830_GMCH_GMS_MASK                     0x70
 #define I830_GMCH_GMS_DISABLED         0x00
@@ -141,7 +144,7 @@ typedef struct _I830Rec {
    unsigned char *MMIOBase;
    unsigned char *FbBase;
    int cpp;
-
+   uint32_t aper_size;
    unsigned int bios_version;
 
    /* These are set in PreInit and never changed. */
index 169fdbece3047234f06b85196668c4a3c01a564a..4d1ac09f644241bfac313061d87a6baec4101bf5 100644 (file)
@@ -292,15 +292,43 @@ static void I830SetupMemoryTiling(const DRIDriverContext *ctx, I830Rec *pI830)
 
 static int I830DetectMemory(const DRIDriverContext *ctx, I830Rec *pI830)
 {
-  struct pci_device host_bridge;
+  struct pci_device host_bridge, ig_dev;
   uint32_t gmch_ctrl;
   int memsize = 0;
   int range;
-
+  uint32_t aper_size;
+  uint32_t membase2 = 0;
+      
   memset(&host_bridge, 0, sizeof(host_bridge));
+  memset(&ig_dev, 0, sizeof(ig_dev));
+
+  ig_dev.dev = 2;
 
   pci_device_cfg_read_u32(&host_bridge, &gmch_ctrl, I830_GMCH_CTRL);
-  
+
+  if (IS_I830(pI830) || IS_845G(pI830)) {
+    if ((gmch_ctrl & I830_GMCH_MEM_MASK) == I830_GMCH_MEM_128M) {
+      aper_size = 0x80000000;
+    } else {
+      aper_size = 0x40000000;
+    }
+  } else {
+    if (IS_I9XX(pI830)) {
+      int ret;
+      ret = pci_device_cfg_read_u32(&ig_dev, &membase2, 0x18);
+      if (membase2 & 0x08000000)
+       aper_size = 0x8000000;
+      else
+       aper_size = 0x10000000;
+
+      fprintf(stderr,"aper size is %08X %08x %d\n", aper_size, membase2, ret);
+    } else
+      aper_size = 0x8000000;
+  }
+
+  pI830->aper_size = aper_size;
+
+
   /* We need to reduce the stolen size, by the GTT and the popup.
    * The GTT varying according the the FbMapSize and the popup is 4KB */
   range = (ctx->shared.fbSize / (1024*1024)) + 4;
@@ -576,7 +604,8 @@ I830AllocateMemory(const DRIDriverContext *ctx, I830Rec *pI830)
     fprintf(stderr,"unable to allocate context buffer %ld\n", ret);
     return FALSE;
   }
-  
+
+#if 0  
   memset(&(pI830->TexMem), 0, sizeof(pI830->TexMem));
   pI830->TexMem.Key = -1;
 
@@ -587,6 +616,7 @@ I830AllocateMemory(const DRIDriverContext *ctx, I830Rec *pI830)
     fprintf(stderr,"unable to allocate texture memory %ld\n", ret);
     return FALSE;
   }
+#endif
 
   return TRUE;
 }
@@ -604,12 +634,29 @@ I830BindMemory(const DRIDriverContext *ctx, I830Rec *pI830)
     return FALSE;
   if (!BindAgpRange(ctx, &pI830->ContextMem))
     return FALSE;
+#if 0
   if (!BindAgpRange(ctx, &pI830->TexMem))
     return FALSE;
-
+#endif
   return TRUE;
 }
 
+static void SetupDRIMM(const DRIDriverContext *ctx, I830Rec *pI830)
+{
+  unsigned long aperEnd = ROUND_DOWN_TO(pI830->aper_size, GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
+  unsigned long aperStart = ROUND_TO(pI830->aper_size - KB(32768), GTT_PAGE_SIZE) / GTT_PAGE_SIZE;
+
+  fprintf(stderr, "aper size is %08X\n", ctx->shared.fbSize);
+  if (drmMMInit(ctx->drmFD, aperStart, aperEnd - aperStart, DRM_BO_MEM_TT)) {
+      fprintf(stderr,
+             "DRM MM Initialization Failed\n");
+  } else {
+    fprintf(stderr,
+           "DRM MM Initialized at offset 0x%lx length %d page\n", aperStart, aperEnd-aperStart);
+  }
+
+}
+
 static Bool
 I830CleanupDma(const DRIDriverContext *ctx)
 {
@@ -809,6 +856,7 @@ I830DRIMapScreenRegions(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sar
    fprintf(stderr, "[drm] Depth Buffer = 0x%08x\n",
               sarea->depth_handle);
 
+#if 0
    if (drmAddMap(ctx->drmFD,
                 (drm_handle_t)sarea->tex_offset,
                 sarea->tex_size, DRM_AGP, 0,
@@ -819,7 +867,7 @@ I830DRIMapScreenRegions(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sar
    }
    fprintf(stderr, "[drm] textures = 0x%08x\n",
              sarea->tex_handle);
-
+#endif
    return TRUE;
 }
 
@@ -847,6 +895,7 @@ I830DRIUnmapScreenRegions(const DRIDriverContext *ctx, I830Rec *pI830, drmI830Sa
    }
 }
 
+#if 0
 static void
 I830InitTextureHeap(const DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
 {
@@ -869,6 +918,7 @@ I830InitTextureHeap(const DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *s
                      sarea->log_tex_granularity);
    }
 }
+#endif
 
 static Bool
 I830DRIDoMappings(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
@@ -891,8 +941,11 @@ I830DRIDoMappings(DRIDriverContext *ctx, I830Rec *pI830, drmI830Sarea *sarea)
    /* init to zero to be safe */
 
   I830DRIMapScreenRegions(ctx, pI830, sarea);
-  I830InitTextureHeap(ctx, pI830, sarea);
+  SetupDRIMM(ctx, pI830);
 
+#if 0
+  I830InitTextureHeap(ctx, pI830, sarea);
+#endif
    if (ctx->pciDevice != PCI_CHIP_845_G &&
        ctx->pciDevice != PCI_CHIP_I830_M) {
       I830SetParam(ctx, I830_SETPARAM_USE_MI_BATCHBUFFER_START, 1 );
@@ -1083,6 +1136,10 @@ I830ScreenInit(DRIDriverContext *ctx, I830Rec *pI830)
      return FALSE;
    }
 
+   pSAREAPriv->rotated_offset = -1;
+   pSAREAPriv->rotated_size = 0;
+   pSAREAPriv->rotated_pitch = ctx->shared.virtualWidth;
+
    pSAREAPriv->front_offset = pI830->FrontBuffer.Start;
    pSAREAPriv->front_size = pI830->FrontBuffer.Size;
    pSAREAPriv->width = ctx->shared.virtualWidth;
@@ -1094,8 +1151,10 @@ I830ScreenInit(DRIDriverContext *ctx, I830Rec *pI830)
    pSAREAPriv->back_size = pI830->BackBuffer.Size;
    pSAREAPriv->depth_offset = pI830->DepthBuffer.Start;
    pSAREAPriv->depth_size = pI830->DepthBuffer.Size;
+#if 0
    pSAREAPriv->tex_offset = pI830->TexMem.Start;
    pSAREAPriv->tex_size = pI830->TexMem.Size;
+#endif
    pSAREAPriv->log_tex_granularity = pI830->TexGranularity;
 
    ctx->driverClientMsg = malloc(sizeof(I830DRIRec));
@@ -1107,14 +1166,6 @@ I830ScreenInit(DRIDriverContext *ctx, I830Rec *pI830)
    pI830DRI->height = ctx->shared.virtualHeight;
    pI830DRI->mem = ctx->shared.fbSize;
    pI830DRI->cpp = ctx->cpp;
-   pI830DRI->backOffset = pI830->BackBuffer.Start;
-   pI830DRI->backPitch = pI830->BackBuffer.Pitch; 
-
-   pI830DRI->depthOffset = pI830->DepthBuffer.Start;
-   pI830DRI->depthPitch = pI830->DepthBuffer.Pitch; 
-
-   pI830DRI->fbOffset = pI830->FrontBuffer.Start;
-   pI830DRI->fbStride = pI830->FrontBuffer.Pitch;
 
    pI830DRI->bitsPerPixel = ctx->bpp;
    pI830DRI->sarea_priv_offset = sizeof(drm_sarea_t);