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