summaryrefslogtreecommitdiff
path: root/src/glamo-kms-output.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2009-07-26 18:40:29 +0100
committerThomas White <taw@bitwiz.org.uk>2009-07-26 18:40:29 +0100
commitb6eb663a8d35db3119dba0e644a94d99f922046f (patch)
treee86297fc302f5230cf5d0516f76051ff596aad68 /src/glamo-kms-output.c
parent32f339919420e04b16142a8d862ab280fdd6cbb1 (diff)
Make everything up to glamo-kms-exa.c compile
Diffstat (limited to 'src/glamo-kms-output.c')
-rw-r--r--src/glamo-kms-output.c324
1 files changed, 169 insertions, 155 deletions
diff --git a/src/glamo-kms-output.c b/src/glamo-kms-output.c
index 1f95a2f..991a8be 100644
--- a/src/glamo-kms-output.c
+++ b/src/glamo-kms-output.c
@@ -1,4 +1,11 @@
/*
+ * KMS Support for the SMedia Glamo3362 X.org Driver
+ *
+ * Modified: 2009 by Thomas White <taw@bitwiz.org.uk>
+ *
+ * Based on output.c from xf86-video-modesetting, to which the following
+ * notice applies:
+ *
* Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
* All Rights Reserved.
*
@@ -27,6 +34,7 @@
*
*/
+
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
@@ -43,13 +51,13 @@
#include <string.h>
#include <sys/stat.h>
#include <sys/types.h>
-
#define DPMS_SERVER
#include <X11/extensions/dpms.h>
+#include <X11/Xatom.h>
+#include <xf86drmMode.h>
-#include "X11/Xatom.h"
+#include "glamo.h"
-#include "driver.h"
static char *connector_enum_list[] = {
"Unknown",
@@ -67,226 +75,232 @@ static char *connector_enum_list[] = {
"HDMI Type B",
};
-static void
-dpms(xf86OutputPtr output, int mode)
+
+static void dpms(xf86OutputPtr output, int mode)
{
}
-static void
-save(xf86OutputPtr output)
+
+static void save(xf86OutputPtr output)
{
}
-static void
-restore(xf86OutputPtr output)
+
+static void restore(xf86OutputPtr output)
{
}
-static int
-mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
+
+static int mode_valid(xf86OutputPtr output, DisplayModePtr pMode)
{
- return MODE_OK;
+ return MODE_OK;
}
-static Bool
-mode_fixup(xf86OutputPtr output, DisplayModePtr mode,
- DisplayModePtr adjusted_mode)
+
+static Bool mode_fixup(xf86OutputPtr output, DisplayModePtr mode,
+ DisplayModePtr adjusted_mode)
{
- return TRUE;
+ return TRUE;
}
-static void
-prepare(xf86OutputPtr output)
+
+static void prepare(xf86OutputPtr output)
{
- dpms(output, DPMSModeOff);
+ dpms(output, DPMSModeOff);
}
-static void
-mode_set(xf86OutputPtr output, DisplayModePtr mode,
+
+static void mode_set(xf86OutputPtr output, DisplayModePtr mode,
DisplayModePtr adjusted_mode)
{
}
-static void
-commit(xf86OutputPtr output)
+
+static void commit(xf86OutputPtr output)
{
- dpms(output, DPMSModeOn);
+ dpms(output, DPMSModeOn);
- if (output->scrn->pScreen != NULL)
- xf86_reload_cursors(output->scrn->pScreen);
+ if (output->scrn->pScreen != NULL)
+ xf86_reload_cursors(output->scrn->pScreen);
}
-static xf86OutputStatus
-detect(xf86OutputPtr output)
+
+static xf86OutputStatus detect(xf86OutputPtr output)
{
- drmModeConnectorPtr drm_connector = output->driver_private;
-
- switch (drm_connector->connection) {
- case DRM_MODE_CONNECTED:
- return XF86OutputStatusConnected;
- case DRM_MODE_DISCONNECTED:
- return XF86OutputStatusDisconnected;
- default:
- return XF86OutputStatusUnknown;
- }
+ drmModeConnectorPtr drm_connector = output->driver_private;
+
+ switch (drm_connector->connection) {
+ case DRM_MODE_CONNECTED:
+ return XF86OutputStatusConnected;
+ case DRM_MODE_DISCONNECTED:
+ return XF86OutputStatusDisconnected;
+ default:
+ return XF86OutputStatusUnknown;
+ }
}
-static DisplayModePtr
-get_modes(xf86OutputPtr output)
+
+static DisplayModePtr get_modes(xf86OutputPtr output)
{
- drmModeConnectorPtr drm_connector = output->driver_private;
- struct drm_mode_modeinfo *drm_mode = NULL;
- DisplayModePtr modes = NULL, mode = NULL;
- int i;
-
- for (i = 0; i < drm_connector->count_modes; i++) {
- drm_mode = &drm_connector->modes[i];
- if (drm_mode) {
- mode = xcalloc(1, sizeof(DisplayModeRec));
- if (!mode)
- continue;
- mode->type = 0;
- mode->Clock = drm_mode->clock;
- mode->HDisplay = drm_mode->hdisplay;
- mode->HSyncStart = drm_mode->hsync_start;
- mode->HSyncEnd = drm_mode->hsync_end;
- mode->HTotal = drm_mode->htotal;
- mode->VDisplay = drm_mode->vdisplay;
- mode->VSyncStart = drm_mode->vsync_start;
- mode->VSyncEnd = drm_mode->vsync_end;
- mode->VTotal = drm_mode->vtotal;
- mode->Flags = drm_mode->flags;
- mode->HSkew = drm_mode->hskew;
- mode->VScan = drm_mode->vscan;
- mode->VRefresh = xf86ModeVRefresh(mode);
- mode->Private = (void *)drm_mode;
- xf86SetModeDefaultName(mode);
- modes = xf86ModesAdd(modes, mode);
- xf86PrintModeline(0, mode);
+ drmModeConnectorPtr drm_connector = output->driver_private;
+ drmModeModeInfoPtr drm_mode = NULL;
+ DisplayModePtr modes = NULL, mode = NULL;
+ int i;
+
+ for (i = 0; i < drm_connector->count_modes; i++) {
+ drm_mode = &drm_connector->modes[i];
+ if (drm_mode) {
+ mode = xcalloc(1, sizeof(DisplayModeRec));
+ if (!mode)
+ continue;
+ mode->type = 0;
+ mode->Clock = drm_mode->clock;
+ mode->HDisplay = drm_mode->hdisplay;
+ mode->HSyncStart = drm_mode->hsync_start;
+ mode->HSyncEnd = drm_mode->hsync_end;
+ mode->HTotal = drm_mode->htotal;
+ mode->VDisplay = drm_mode->vdisplay;
+ mode->VSyncStart = drm_mode->vsync_start;
+ mode->VSyncEnd = drm_mode->vsync_end;
+ mode->VTotal = drm_mode->vtotal;
+ mode->Flags = drm_mode->flags;
+ mode->HSkew = drm_mode->hskew;
+ mode->VScan = drm_mode->vscan;
+ mode->VRefresh = xf86ModeVRefresh(mode);
+ mode->Private = (void *)drm_mode;
+ xf86SetModeDefaultName(mode);
+ modes = xf86ModesAdd(modes, mode);
+ xf86PrintModeline(0, mode);
+ }
}
- }
- return modes;
+ return modes;
}
-static void
-destroy(xf86OutputPtr output)
+
+static void destroy(xf86OutputPtr output)
{
- drmModeFreeConnector(output->driver_private);
+ drmModeFreeConnector(output->driver_private);
}
-static void
-create_resources(xf86OutputPtr output)
+
+static void create_resources(xf86OutputPtr output)
{
#ifdef RANDR_12_INTERFACE
#endif /* RANDR_12_INTERFACE */
}
+
#ifdef RANDR_12_INTERFACE
-static Bool
-set_property(xf86OutputPtr output, Atom property, RRPropertyValuePtr value)
+static Bool set_property(xf86OutputPtr output, Atom property,
+ RRPropertyValuePtr value)
{
- return TRUE;
+ return TRUE;
}
#endif /* RANDR_12_INTERFACE */
+
#ifdef RANDR_13_INTERFACE
-static Bool
-get_property(xf86OutputPtr output, Atom property)
+static Bool get_property(xf86OutputPtr output, Atom property)
{
- return TRUE;
+ return TRUE;
}
#endif /* RANDR_13_INTERFACE */
+
#ifdef RANDR_GET_CRTC_INTERFACE
-static xf86CrtcPtr
-get_crtc(xf86OutputPtr output)
+static xf86CrtcPtr get_crtc(xf86OutputPtr output)
{
- return NULL;
+ return NULL;
}
#endif
+
static const xf86OutputFuncsRec output_funcs = {
- .create_resources = create_resources,
- .dpms = dpms,
- .save = save,
- .restore = restore,
- .mode_valid = mode_valid,
- .mode_fixup = mode_fixup,
- .prepare = prepare,
- .mode_set = mode_set,
- .commit = commit,
- .detect = detect,
- .get_modes = get_modes,
+ .create_resources = create_resources,
+ .dpms = dpms,
+ .save = save,
+ .restore = restore,
+ .mode_valid = mode_valid,
+ .mode_fixup = mode_fixup,
+ .prepare = prepare,
+ .mode_set = mode_set,
+ .commit = commit,
+ .detect = detect,
+ .get_modes = get_modes,
#ifdef RANDR_12_INTERFACE
- .set_property = set_property,
+ .set_property = set_property,
#endif
#ifdef RANDR_13_INTERFACE
- .get_property = get_property,
+ .get_property = get_property,
#endif
- .destroy = destroy,
+ .destroy = destroy,
#ifdef RANDR_GET_CRTC_INTERFACE
- .get_crtc = get_crtc,
+ .get_crtc = get_crtc,
#endif
};
-void
-output_init(ScrnInfoPtr pScrn)
+
+void output_init(ScrnInfoPtr pScrn)
{
- modesettingPtr ms = modesettingPTR(pScrn);
- xf86OutputPtr output;
- drmModeResPtr res;
- drmModeConnectorPtr drm_connector = NULL;
- drmModeEncoderPtr drm_encoder = NULL;
- drmModeCrtcPtr crtc;
- char *name;
- int c, v, p;
-
- res = drmModeGetResources(ms->fd);
- if (res == 0) {
- DRV_ERROR("Failed drmModeGetResources\n");
- return;
- }
-
- for (c = 0; c < res->count_connectors; c++) {
- drm_connector = drmModeGetConnector(ms->fd, res->connectors[c]);
- if (!drm_connector)
- goto out;
-
- for (p = 0; p < drm_connector->count_props; p++) {
- drmModePropertyPtr prop;
-
- prop = drmModeGetProperty(ms->fd, drm_connector->props[p]);
-
- name = NULL;
- if (prop) {
- ErrorF("VALUES %d\n", prop->count_values);
-
- for (v = 0; v < prop->count_values; v++)
- ErrorF("%s %lld\n", prop->name, prop->values[v]);
- }
+ GlamoPtr pGlamo = GlamoPTR(pScrn);
+ xf86OutputPtr output;
+ drmModeResPtr res;
+ drmModeConnectorPtr drm_connector = NULL;
+ drmModeEncoderPtr drm_encoder = NULL;
+ char *name;
+ int c, v, p;
+
+ res = drmModeGetResources(pGlamo->drm_fd);
+ if (res == 0) {
+ xf86DrvMsg(pScrn->scrnIndex, X_ERROR,
+ "Failed drmModeGetResources\n");
+ return;
}
- name = connector_enum_list[drm_connector->connector_type];
-
- output = xf86OutputCreate(pScrn, &output_funcs, name);
- if (!output)
- continue;
-
- drm_encoder = drmModeGetEncoder(ms->fd, drm_connector->encoders[0]);
- if (drm_encoder) {
- output->possible_crtcs = drm_encoder->crtcs;
- output->possible_clones = drm_encoder->clones;
- } else {
- output->possible_crtcs = 0;
- output->possible_clones = 0;
+ for (c = 0; c < res->count_connectors; c++) {
+ drm_connector = drmModeGetConnector(pGlamo->drm_fd,
+ res->connectors[c]);
+ if (!drm_connector)
+ goto out;
+
+ for (p = 0; p < drm_connector->count_props; p++) {
+ drmModePropertyPtr prop;
+
+ prop = drmModeGetProperty(pGlamo->drm_fd,
+ drm_connector->props[p]);
+
+ name = NULL;
+ if (prop) {
+ ErrorF("VALUES %d\n", prop->count_values);
+ for (v = 0; v < prop->count_values; v++) {
+ ErrorF("%s %lld\n", prop->name,
+ prop->values[v]);
+ }
+ }
+ }
+
+ name = connector_enum_list[drm_connector->connector_type];
+
+ output = xf86OutputCreate(pScrn, &output_funcs, name);
+ if (!output)
+ continue;
+
+ drm_encoder = drmModeGetEncoder(pGlamo->drm_fd,
+ drm_connector->encoders[0]);
+ if (drm_encoder) {
+ output->possible_crtcs = drm_encoder->possible_crtcs;
+ output->possible_clones = drm_encoder->possible_clones;
+ } else {
+ output->possible_crtcs = 0;
+ output->possible_clones = 0;
+ }
+ output->driver_private = drm_connector;
+ output->subpixel_order = SubPixelHorizontalRGB;
+ output->interlaceAllowed = FALSE;
+ output->doubleScanAllowed = FALSE;
}
- output->driver_private = drm_connector;
- output->subpixel_order = SubPixelHorizontalRGB;
- output->interlaceAllowed = FALSE;
- output->doubleScanAllowed = FALSE;
- }
-
- out:
- drmModeFreeResources(res);
+
+out:
+ drmModeFreeResources(res);
}