summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjsg <jsg@openbsd.org>2013-03-21 08:27:32 +0000
committerjsg <jsg@openbsd.org>2013-03-21 08:27:32 +0000
commit55e1ced531bb0cd2eb67519eb5a6230d0a37c8d0 (patch)
tree191e01e3a0b88e33aa3bf37e234f148781be6eff
parentDo not install the dev/pci/drm/i915 directory to /usr/include (diff)
downloadwireguard-openbsd-55e1ced531bb0cd2eb67519eb5a6230d0a37c8d0.tar.xz
wireguard-openbsd-55e1ced531bb0cd2eb67519eb5a6230d0a37c8d0.zip
Enable the opregion code but keep the parts that try to talk to acpi
disabled for now. Makes the brightness keys on my x230 work.
-rw-r--r--sys/dev/pci/drm/i915/i915_drv.h20
-rw-r--r--sys/dev/pci/drm/i915/i915_irq.c24
-rw-r--r--sys/dev/pci/drm/i915/intel_opregion.c49
3 files changed, 38 insertions, 55 deletions
diff --git a/sys/dev/pci/drm/i915/i915_drv.h b/sys/dev/pci/drm/i915/i915_drv.h
index 66fbd20a693..85a193d2997 100644
--- a/sys/dev/pci/drm/i915/i915_drv.h
+++ b/sys/dev/pci/drm/i915/i915_drv.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: i915_drv.h,v 1.2 2013/03/20 12:37:41 jsg Exp $ */
+/* $OpenBSD: i915_drv.h,v 1.3 2013/03/21 08:27:32 jsg Exp $ */
/* i915_drv.h -- Private header for the I915 driver -*- linux-c -*-
*/
/*
@@ -41,6 +41,8 @@
#include <dev/wscons/wsdisplayvar.h>
#include <dev/rasops/rasops.h>
+#include "acpi.h"
+
/* General customization:
*/
@@ -1012,6 +1014,7 @@ void i915_enable_pipestat(struct inteldrm_softc *, int, u_int32_t);
void i915_disable_pipestat(struct inteldrm_softc *, int, u_int32_t);
void intel_irq_init(struct drm_device *dev);
void i915_hangcheck_elapsed(void *);
+void intel_enable_asle(struct drm_device *);
extern void intel_gt_init(struct drm_device *dev);
extern void intel_gt_reset(struct drm_device *dev);
@@ -1221,10 +1224,19 @@ int i915_mutex_lock_interruptible(struct drm_device *dev);
/* intel_opregion.c */
int intel_opregion_setup(struct drm_device *dev);
-extern int intel_opregion_init(struct drm_device *dev);
+#if NACPI > 0
+extern void intel_opregion_init(struct drm_device *dev);
extern void intel_opregion_fini(struct drm_device *dev);
-extern void opregion_asle_intr(struct drm_device *dev);
-extern void opregion_enable_asle(struct drm_device *dev);
+extern void intel_opregion_asle_intr(struct drm_device *dev);
+extern void intel_opregion_gse_intr(struct drm_device *dev);
+extern void intel_opregion_enable_asle(struct drm_device *dev);
+#else
+static inline void intel_opregion_init(struct drm_device *dev) { return; }
+static inline void intel_opregion_fini(struct drm_device *dev) { return; }
+static inline void intel_opregion_asle_intr(struct drm_device *dev) { return; }
+static inline void intel_opregion_gse_intr(struct drm_device *dev) { return; }
+static inline void intel_opregion_enable_asle(struct drm_device *dev) { return; }
+#endif
/* i915_gem_gtt.c */
void i915_gem_cleanup_aliasing_ppgtt(struct drm_device *dev);
diff --git a/sys/dev/pci/drm/i915/i915_irq.c b/sys/dev/pci/drm/i915/i915_irq.c
index b78578035d4..2ade5520e0d 100644
--- a/sys/dev/pci/drm/i915/i915_irq.c
+++ b/sys/dev/pci/drm/i915/i915_irq.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: i915_irq.c,v 1.2 2013/03/20 12:37:41 jsg Exp $ */
+/* $OpenBSD: i915_irq.c,v 1.3 2013/03/21 08:27:32 jsg Exp $ */
/* i915_irq.c -- IRQ support for the I915 -*- linux-c -*-
*/
/*
@@ -785,10 +785,8 @@ ivybridge_intr(void *arg)
de_iir = I915_READ(DEIIR);
if (de_iir) {
-#ifdef notyet
if (de_iir & DE_GSE_IVB)
intel_opregion_gse_intr(dev);
-#endif
for (i = 0; i < 3; i++) {
if (de_iir & (DE_PIPEA_VBLANK_IVB << (5 * i)))
@@ -869,10 +867,8 @@ ironlake_intr(void *arg)
else
snb_gt_irq_handler(dev, dev_priv, gt_iir);
-#ifdef notyet
if (de_iir & DE_GSE)
intel_opregion_gse_intr(dev);
-#endif
if (de_iir & DE_PIPEA_VBLANK)
drm_handle_vblank(dev, 0);
@@ -2398,11 +2394,7 @@ i915_irq_postinstall(struct drm_device *dev)
/* Unmask the interrupts that we always want on. */
dev_priv->irq_mask =
-#ifdef notyet
~(I915_ASLE_INTERRUPT |
-#else
- ~(
-#endif
I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
I915_DISPLAY_PLANE_A_FLIP_PENDING_INTERRUPT |
@@ -2410,9 +2402,7 @@ i915_irq_postinstall(struct drm_device *dev)
I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT);
enable_mask =
-#ifdef notyet
I915_ASLE_INTERRUPT |
-#endif
I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
I915_RENDER_COMMAND_PARSER_ERROR_INTERRUPT |
@@ -2452,7 +2442,7 @@ i915_irq_postinstall(struct drm_device *dev)
I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
}
-// intel_opregion_enable_asle(dev);
+ intel_opregion_enable_asle(dev);
return 0;
}
@@ -2544,10 +2534,8 @@ i915_intr(void *arg)
blc_event = true;
}
-#ifdef notyet
if (blc_event || (iir & I915_ASLE_INTERRUPT))
intel_opregion_asle_intr(dev);
-#endif
/* With MSI, interrupts are only generated when iir
* transitions from zero to nonzero. If another bit got
@@ -2624,11 +2612,7 @@ i965_irq_postinstall(struct drm_device *dev)
u32 error_mask;
/* Unmask the interrupts that we always want on. */
-#ifdef notyet
dev_priv->irq_mask = ~(I915_ASLE_INTERRUPT |
-#else
- dev_priv->irq_mask = ~(
-#endif
I915_DISPLAY_PORT_INTERRUPT |
I915_DISPLAY_PIPE_A_EVENT_INTERRUPT |
I915_DISPLAY_PIPE_B_EVENT_INTERRUPT |
@@ -2699,9 +2683,7 @@ i965_irq_postinstall(struct drm_device *dev)
I915_WRITE(PORT_HOTPLUG_EN, hotplug_en);
-#ifdef notyet
intel_opregion_enable_asle(dev);
-#endif
return 0;
}
@@ -2796,10 +2778,8 @@ i965_intr(void *arg)
}
-#ifdef notyet
if (blc_event || (iir & I915_ASLE_INTERRUPT))
intel_opregion_asle_intr(dev);
-#endif
/* With MSI, interrupts are only generated when iir
* transitions from zero to nonzero. If another bit got
diff --git a/sys/dev/pci/drm/i915/intel_opregion.c b/sys/dev/pci/drm/i915/intel_opregion.c
index 9255bdfe1e7..075a5cd1b08 100644
--- a/sys/dev/pci/drm/i915/intel_opregion.c
+++ b/sys/dev/pci/drm/i915/intel_opregion.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: intel_opregion.c,v 1.1 2013/03/18 12:36:52 jsg Exp $ */
+/* $OpenBSD: intel_opregion.c,v 1.2 2013/03/21 08:27:32 jsg Exp $ */
/*
* Copyright 2008 Intel Corporation <hong.liu@intel.com>
* Copyright 2008 Red Hat <mjg@redhat.com>
@@ -33,6 +33,8 @@
#include <dev/isa/isareg.h>
#include <dev/isa/isavar.h>
+
+#include "acpi.h"
#include <dev/acpi/acpivar.h>
#define PCI_ASLE 0xe4
@@ -146,7 +148,15 @@ struct opregion_asle {
#define ACPI_DIGITAL_OUTPUT (3<<8)
#define ACPI_LVDS_OUTPUT (4<<8)
-#ifdef CONFIG_ACPI
+u32 asle_set_backlight(struct drm_device *, u32);
+u32 asle_set_als_illum(struct drm_device *, u32);
+u32 asle_set_pwm_freq(struct drm_device *, u32);
+u32 asle_set_pfit(struct drm_device *, u32);
+void intel_opregion_asle_intr(struct drm_device *);
+void intel_opregion_gse_intr(struct drm_device *);
+void intel_didl_outputs(struct drm_device *);
+
+#if NACPI > 0
u32
asle_set_backlight(struct drm_device *dev, u32 bclp)
{
@@ -299,6 +309,7 @@ intel_opregion_enable_asle(struct drm_device *dev)
static struct intel_opregion *system_opregion;
+#ifdef notyet
int
intel_opregion_video_event(struct notifier_block *nb, unsigned long val,
void *data)
@@ -330,6 +341,7 @@ intel_opregion_video_event(struct notifier_block *nb, unsigned long val,
static struct notifier_block intel_opregion_notifier = {
.notifier_call = intel_opregion_video_event,
};
+#endif
/*
* Initialise the DIDL field in opregion. This passes a list of devices to
@@ -340,6 +352,7 @@ static struct notifier_block intel_opregion_notifier = {
void
intel_didl_outputs(struct drm_device *dev)
{
+#ifdef notyet
struct inteldrm_softc *dev_priv = dev->dev_private;
struct intel_opregion *opregion = &dev_priv->opregion;
struct drm_connector *connector;
@@ -427,6 +440,7 @@ blind_set:
i++;
}
goto end;
+#endif
}
void
@@ -449,7 +463,9 @@ intel_opregion_init(struct drm_device *dev)
opregion->acpi->drdy = 1;
system_opregion = opregion;
+#ifdef notyet
register_acpi_notifier(&intel_opregion_notifier);
+#endif
}
if (opregion->asle)
@@ -469,37 +485,12 @@ intel_opregion_fini(struct drm_device *dev)
opregion->acpi->drdy = 0;
system_opregion = NULL;
+#ifdef notyet
unregister_acpi_notifier(&intel_opregion_notifier);
+#endif
}
/* just clear all opregion memory pointers now */
- iounmap(opregion->header);
- opregion->header = NULL;
- opregion->acpi = NULL;
- opregion->swsci = NULL;
- opregion->asle = NULL;
- opregion->vbt = NULL;
-}
-#else
-int
-intel_opregion_init(struct drm_device *dev)
-{
-
- return (0);
-}
-
-void
-intel_opregion_fini(struct drm_device *dev)
-{
- struct inteldrm_softc *dev_priv;
- struct intel_opregion *opregion;
-
- dev_priv = dev->dev_private;
- opregion = &dev_priv->opregion;
-
- if (opregion->header == NULL)
- return;
-
bus_space_unmap(dev_priv->bst, dev_priv->opregion_ioh, OPREGION_SIZE);
opregion->header = NULL;
opregion->acpi = NULL;