xf86-video-intel: Branch 'intel-kernelmode' - 2 commits - src/drmmode_display.c src/drmmode_display.h src/i810_driver.c src/i830_memory.c

Dave Airlie airlied at kemper.freedesktop.org
Tue Jun 3 19:55:21 PDT 2008


 src/drmmode_display.c |   47 +++++++++++++++++++++++++++++++----------------
 src/drmmode_display.h |    3 ++-
 src/i810_driver.c     |   17 ++++++++++++++++-
 src/i830_memory.c     |    7 +++----
 4 files changed, 52 insertions(+), 22 deletions(-)

New commits:
commit 63b6f540fb9260b11da44d7e4acf5ed3bdd80b92
Author: Dave Airlie <airlied at redhat.com>
Date:   Mon Jun 2 13:12:54 2008 +1000

    modeset: move to new drm modesetting interface.
    
    This code is for intel which encoder + connector is all we get

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 5317e1d..b08e46f 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -159,7 +159,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
 			continue;
 
 		drmmode_output = output->driver_private;
-		output_ids[output_count] = drmmode_output->mode_output->output_id;
+		output_ids[output_count] = drmmode_output->mode_output->connector_id;
 		output_count++;
 	}
 
@@ -389,9 +389,9 @@ drmmode_output_detect(xf86OutputPtr output)
 	drmmode_output_private_ptr drmmode_output = output->driver_private;
 	drmmode_ptr drmmode = drmmode_output->drmmode;
 	xf86OutputStatus status;
-	drmModeFreeOutput(drmmode_output->mode_output);
+	drmModeFreeConnector(drmmode_output->mode_output);
 	
-	drmmode_output->mode_output = drmModeGetOutput(drmmode->fd, drmmode_output->output_id);
+	drmmode_output->mode_output = drmModeGetConnector(drmmode->fd, drmmode_output->output_id);
 	
 	switch (drmmode_output->mode_output->connection) {
 	case DRM_MODE_CONNECTED:
@@ -418,7 +418,7 @@ static DisplayModePtr
 drmmode_output_get_modes(xf86OutputPtr output)
 {
 	drmmode_output_private_ptr drmmode_output = output->driver_private;
-	drmModeOutputPtr koutput = drmmode_output->mode_output;
+	drmModeConnectorPtr koutput = drmmode_output->mode_output;
 	drmmode_ptr drmmode = drmmode_output->drmmode;
 	int i;
 	DisplayModePtr Modes = NULL, Mode;
@@ -460,7 +460,7 @@ drmmode_output_destroy(xf86OutputPtr output)
 
 	if (drmmode_output->edid_blob)
 		drmModeFreePropertyBlob(drmmode_output->edid_blob);
-	drmModeFreeOutput(drmmode_output->mode_output);
+	drmModeFreeConnector(drmmode_output->mode_output);
 	xfree(drmmode_output);
 	output->driver_private = NULL;
 }
@@ -506,26 +506,41 @@ static void
 drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num)
 {
 	xf86OutputPtr output;
-	drmModeOutputPtr koutput;
+	drmModeConnectorPtr koutput;
+	drmModeEncoderPtr kencoder;
 	drmmode_output_private_ptr drmmode_output;
 	char name[32];
 
-	koutput = drmModeGetOutput(drmmode->fd, drmmode->mode_res->outputs[num]);
+	koutput = drmModeGetConnector(drmmode->fd, drmmode->mode_res->connectors[num]);
 	if (!koutput)
 		return;
 
-	snprintf(name, 32, "%s%d", output_names[koutput->output_type], koutput->output_type_id);
+	snprintf(name, 32, "%s%d", output_names[koutput->connector_type], koutput->connector_id);
+
+	kencoder = drmModeGetEncoder(drmmode->fd, koutput->encoder);
+	if (!kencoder) {
+		drmModeFreeConnector(koutput);
+		return;
+	}
+
 	output = xf86OutputCreate (pScrn, &drmmode_output_funcs, name);
-	if (!output)
+	if (!output) {
+		drmModeFreeEncoder(kencoder);
+		drmModeFreeConnector(koutput);
 		return;
+	}
+
 	drmmode_output = xcalloc(sizeof(drmmode_output_private_rec), 1);
 	if (!drmmode_output) {
 		xf86OutputDestroy(output);
-		drmModeFreeOutput(koutput);
+		drmModeFreeConnector(koutput);
+		drmModeFreeEncoder(kencoder);
 		return;
 	}
-	drmmode_output->output_id = drmmode->mode_res->outputs[num];
+
+	drmmode_output->output_id = drmmode->mode_res->connectors[num];
 	drmmode_output->mode_output = koutput;
+	drmmode_output->mode_encoder = kencoder;
 	drmmode_output->drmmode = drmmode;
 	output->mm_width = koutput->mmWidth;
 	output->mm_height = koutput->mmHeight;
@@ -533,8 +548,8 @@ drmmode_output_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num)
 	output->subpixel_order = subpixel_conv_table[koutput->subpixel];
 	output->driver_private = drmmode_output;
 
-	output->possible_crtcs = koutput->crtcs;
-	output->possible_clones = koutput->clones;
+	output->possible_crtcs = kencoder->crtcs;
+	output->possible_clones = kencoder->clones;
 	return;
 }
 
@@ -568,7 +583,7 @@ Bool drmmode_pre_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, char *busId, char
 	for (i = 0; i < drmmode->mode_res->count_crtcs; i++)
 		drmmode_crtc_init(pScrn, drmmode, i);
 
-	for (i = 0; i < drmmode->mode_res->count_outputs; i++)
+	for (i = 0; i < drmmode->mode_res->count_connectors; i++)
 		drmmode_output_init(pScrn, drmmode, i);
 
 	xf86InitialConfiguration(pScrn, TRUE);
@@ -649,7 +664,7 @@ static Bool drmmode_resize_fb(ScrnInfoPtr scrn, drmmode_ptr drmmode, int width,
 	drmModeFreeFB(drmmode->mode_fb);
 	drmmode->mode_fb = drmModeGetFB(drmmode->fd, drmmode->fb_id);
 	if (!drmmode->mode_fb)
-		return;
+		return FALSE;
 	
 	return TRUE;
 }
diff --git a/src/drmmode_display.h b/src/drmmode_display.h
index dc68892..dda799a 100644
--- a/src/drmmode_display.h
+++ b/src/drmmode_display.h
@@ -54,7 +54,8 @@ typedef struct {
 typedef struct {
     drmmode_ptr drmmode;
     int output_id;
-    drmModeOutputPtr mode_output;
+    drmModeConnectorPtr mode_output;
+    drmModeEncoderPtr mode_encoder;
     drmModePropertyBlobPtr edid_blob;
 } drmmode_output_private_rec, *drmmode_output_private_ptr;
 
commit a3cead83d72d60b37bb636f3b0e414b3edc012b1
Author: Dave Airlie <airlied at redhat.com>
Date:   Mon May 12 16:33:14 2008 +1000

    make driver not need root

diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index 52a41e8..5317e1d 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -371,7 +371,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, drmmode_ptr drmmode, int num)
 
 	/* allocate cursor BO for this crtc */
 	mask = DRM_BO_FLAG_READ | DRM_BO_FLAG_WRITE | DRM_BO_FLAG_MAPPABLE |
-	       DRM_BO_FLAG_MEM_VRAM | DRM_BO_FLAG_NO_EVICT;
+	       DRM_BO_FLAG_MEM_VRAM /*| DRM_BO_FLAG_NO_EVICT*/;
 	ret  = drmBOCreate(drmmode->fd, cursor_size, 0, NULL,
 			   mask, 0, &drmmode_crtc->cursor_bo);
 
diff --git a/src/i810_driver.c b/src/i810_driver.c
index 53121a6..3fadb01 100644
--- a/src/i810_driver.c
+++ b/src/i810_driver.c
@@ -158,6 +158,21 @@ static const struct pci_id_match intel_device_match[] = {
 
 #endif /* XSERVER_LIBPCIACCESS */
 
+static Bool
+I810DriverFunc(ScrnInfoPtr pScrn, xorgDriverFuncOp op, pointer ptr)
+{
+    xorgHWFlags *flag;
+
+    switch (op) {
+        case GET_REQUIRED_HW_INTERFACES:
+            flag = (CARD32*)ptr;
+            (*flag) = 0;
+            return TRUE;
+        default:
+            return FALSE;
+    }
+}
+
 _X_EXPORT DriverRec I810 = {
    I810_VERSION,
    I810_DRIVER_NAME,
@@ -170,7 +185,7 @@ _X_EXPORT DriverRec I810 = {
    I810AvailableOptions,
    NULL,
    0,
-   NULL,
+   I810DriverFunc,
 #if XSERVER_LIBPCIACCESS
    intel_device_match,
    intel_pci_probe
diff --git a/src/i830_memory.c b/src/i830_memory.c
index 4cba5e6..4ef7e0c 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -172,14 +172,13 @@ i830_bind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
 	else
 	   flags |= DRM_BO_FLAG_MEM_TT;
 
-	flags |= DRM_BO_FLAG_NO_EVICT;
+	//flags |= DRM_BO_FLAG_NO_EVICT;
 
 	ret = drmBOSetStatus(pI830->drmSubFD, &mem->bo,
 			     flags,
 			     DRM_BO_MASK_MEM |
 			     DRM_BO_FLAG_READ |
-			     DRM_BO_FLAG_WRITE |
-			     DRM_BO_FLAG_NO_EVICT,
+			     DRM_BO_FLAG_WRITE,
 			     0, 0, 0);
 	if (ret != 0)
 	    return FALSE;
@@ -246,7 +245,7 @@ i830_unbind_memory(ScrnInfoPtr pScrn, i830_memory *mem)
 	int ret;
 
 	ret = drmBOSetStatus(pI830->drmSubFD, &mem->bo,
-			     0, DRM_BO_FLAG_NO_EVICT,
+			     0, 0,
 			     0, 0, 0);
 
 	if (ret == 0) {


More information about the xorg-commit mailing list