Module Name: src
Committed By: martin
Date: Tue Nov 11 09:06:32 UTC 2014
Modified Files:
src/sys/external/bsd/drm2/dist/drm/i915 [netbsd-7]: i915_dma.c
i915_drv.h intel_acpi.c intel_opregion.c
src/sys/external/bsd/drm2/i915drm [netbsd-7]: files.i915drmkms
src/sys/external/bsd/drm2/include/linux [netbsd-7]: acpi.h pci.h
Log Message:
Pull up following revision(s) (requested by nonaka in ticket #197):
sys/external/bsd/drm2/dist/drm/i915/i915_drv.h: revision 1.10
sys/external/bsd/drm2/include/linux/pci.h: revision 1.10
sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c: revision 1.3
sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c: revision 1.4
sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c: revision 1.5
sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c: revision 1.6
sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c: revision 1.7
sys/external/bsd/drm2/include/linux/acpi.h: revision 1.3
sys/external/bsd/drm2/dist/drm/i915/i915_dma.c: revision 1.12
sys/external/bsd/drm2/i915drm/files.i915drmkms: revision 1.8
i915drmkms(4): Enable CONFIG_ACPI if NACPICA > 0.
Now brightness can be adjusted via hotkey on Mouse Computer LB-J300X
(Clevo W330SU2).
Fix compilation (debug)
pci_attach_args of pci_find_device and match function is not the same thing.
fix PR/49372.
To generate a diff of this commit:
cvs rdiff -u -r1.10.2.1 -r1.10.2.2 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
cvs rdiff -u -r1.7.2.2 -r1.7.2.3 \
src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h
cvs rdiff -u -r1.2 -r1.2.4.1 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c
cvs rdiff -u -r1.5 -r1.5.2.1 \
src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c
cvs rdiff -u -r1.5.2.1 -r1.5.2.2 \
src/sys/external/bsd/drm2/i915drm/files.i915drmkms
cvs rdiff -u -r1.2 -r1.2.8.1 src/sys/external/bsd/drm2/include/linux/acpi.h
cvs rdiff -u -r1.7.2.2 -r1.7.2.3 \
src/sys/external/bsd/drm2/include/linux/pci.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.1 src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.2
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c:1.10.2.1 Mon Nov 10 19:45:54 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_dma.c Tue Nov 11 09:06:32 2014
@@ -1375,7 +1375,11 @@ static int i915_load_modeset_init(struct
goto out;
#endif
+#ifdef __NetBSD__
+ intel_register_dsm_handler(dev);
+#else
intel_register_dsm_handler();
+#endif
#ifndef __NetBSD__ /* XXX vga */
ret = vga_switcheroo_register_client(dev->pdev, &i915_switcheroo_ops, false);
Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.7.2.2 src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.7.2.3
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h:1.7.2.2 Mon Nov 10 19:45:54 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_drv.h Tue Nov 11 09:06:32 2014
@@ -30,6 +30,13 @@
#ifndef _I915_DRV_H_
#define _I915_DRV_H_
+#if defined(__NetBSD__) && (defined(i386) || defined(amd64))
+#include "acpica.h"
+#if (NACPICA > 0)
+#define CONFIG_ACPI
+#endif
+#endif
+
#include <uapi/drm/i915_drm.h>
#include "i915_reg.h"
@@ -2720,8 +2727,8 @@ extern void intel_i2c_reset(struct drm_d
/* intel_opregion.c */
struct intel_encoder;
-extern int intel_opregion_setup(struct drm_device *dev);
#ifdef CONFIG_ACPI
+extern int intel_opregion_setup(struct drm_device *dev);
extern void intel_opregion_init(struct drm_device *dev);
extern void intel_opregion_fini(struct drm_device *dev);
extern void intel_opregion_asle_intr(struct drm_device *dev);
@@ -2730,6 +2737,7 @@ extern int intel_opregion_notify_encoder
extern int intel_opregion_notify_adapter(struct drm_device *dev,
pci_power_t state);
#else
+static inline int intel_opregion_setup(struct drm_device *dev) { return 0; }
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; }
@@ -2747,10 +2755,22 @@ intel_opregion_notify_adapter(struct drm
/* intel_acpi.c */
#ifdef CONFIG_ACPI
+#ifdef __NetBSD__
+extern void intel_register_dsm_handler(struct drm_device *);
+#else
extern void intel_register_dsm_handler(void);
+#endif
extern void intel_unregister_dsm_handler(void);
#else
+#ifdef __NetBSD__
+static inline void
+intel_register_dsm_handler(struct drm_device *dev)
+{
+ return;
+}
+#else
static inline void intel_register_dsm_handler(void) { return; }
+#endif
static inline void intel_unregister_dsm_handler(void) { return; }
#endif /* CONFIG_ACPI */
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c:1.2 src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c:1.2.4.1
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c:1.2 Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_acpi.c Tue Nov 11 09:06:32 2014
@@ -9,11 +9,108 @@
#include <drm/drmP.h>
#include "i915_drv.h"
+#ifdef CONFIG_ACPI
+
+#ifdef __NetBSD__
+#include <dev/acpi/acpireg.h>
+#define _COMPONENT ACPI_BUTTON_COMPONENT
+ACPI_MODULE_NAME("acpi_intel_brightness")
+
+static ACPI_OBJECT *
+acpi_evaluate_dsm(ACPI_HANDLE handle, const uint8_t *uuid, int rev, int func,
+ ACPI_OBJECT *argv4)
+{
+ ACPI_OBJECT_LIST arg;
+ ACPI_OBJECT params[4];
+ ACPI_BUFFER buf;
+ ACPI_STATUS rv;
+
+ if (handle == NULL)
+ handle = ACPI_ROOT_OBJECT;
+
+ arg.Count = 4;
+ arg.Pointer = params;
+ params[0].Type = ACPI_TYPE_BUFFER;
+ params[0].Buffer.Length = 16;
+ params[0].Buffer.Pointer = (char *)__UNCONST(uuid);
+ params[1].Type = ACPI_TYPE_INTEGER;
+ params[1].Integer.Value = rev;
+ params[2].Type = ACPI_TYPE_INTEGER;
+ params[2].Integer.Value = func;
+ if (argv4 != NULL) {
+ params[3] = *argv4;
+ } else {
+ params[3].Type = ACPI_TYPE_PACKAGE;
+ params[3].Package.Count = 0;
+ params[3].Package.Elements = NULL;
+ }
+
+ buf.Pointer = NULL;
+ buf.Length = ACPI_ALLOCATE_LOCAL_BUFFER;
+
+ rv = AcpiEvaluateObject(handle, "_DSM", &arg, &buf);
+ if (ACPI_SUCCESS(rv))
+ return (ACPI_OBJECT *)buf.Pointer;
+ return NULL;
+}
+
+static inline ACPI_OBJECT *
+acpi_evaluate_dsm_typed(ACPI_HANDLE handle, const uint8_t *uuid, int rev,
+ int func, ACPI_OBJECT *argv4, ACPI_OBJECT_TYPE type)
+{
+ ACPI_OBJECT *obj;
+
+ obj = acpi_evaluate_dsm(handle, uuid, rev, func, argv4);
+ if (obj != NULL && obj->Type != type) {
+ ACPI_FREE(obj);
+ obj = NULL;
+ }
+ return obj;
+}
+
+#define ACPI_INIT_DSM_ARGV4(cnt, eles) \
+{ \
+ .Package.Type = ACPI_TYPE_PACKAGE, \
+ .Package.Count = (cnt), \
+ .Package.Elements = (eles) \
+}
+
+static bool
+acpi_check_dsm(ACPI_HANDLE handle, const uint8_t *uuid, int rev, uint64_t funcs)
+{
+ ACPI_OBJECT *obj;
+ uint64_t mask = 0;
+ int i;
+
+ if (funcs == 0)
+ return false;
+
+ obj = acpi_evaluate_dsm(handle, uuid, rev, 0, NULL);
+ if (obj == NULL)
+ return false;
+
+ if (obj->Type == ACPI_TYPE_INTEGER)
+ mask = obj->Integer.Value;
+ else if (obj->Type == ACPI_TYPE_BUFFER)
+ for (i = 0; i < obj->Buffer.Length && i < 8; i++)
+ mask |= (uint64_t)obj->Buffer.Pointer[i] << (i * 8);
+ ACPI_FREE(obj);
+
+ if ((mask & 0x1) == 0x1 && (mask & funcs) == funcs)
+ return true;
+ return false;
+}
+#endif
+
#define INTEL_DSM_REVISION_ID 1 /* For Calpella anyway... */
#define INTEL_DSM_FN_PLATFORM_MUX_INFO 1 /* No args */
static struct intel_dsm_priv {
+#ifdef __NetBSD__
+ ACPI_HANDLE dhandle;
+#else
acpi_handle dhandle;
+#endif
} intel_dsm_priv;
static const u8 intel_dsm_guid[] = {
@@ -79,7 +176,11 @@ static const char *intel_dsm_mux_type(u8
static void intel_dsm_platform_mux_info(void)
{
int i;
+#ifdef __NetBSD__
+ ACPI_OBJECT *pkg, *connector_count;
+#else
union acpi_object *pkg, *connector_count;
+#endif
pkg = acpi_evaluate_dsm_typed(intel_dsm_priv.dhandle, intel_dsm_guid,
INTEL_DSM_REVISION_ID, INTEL_DSM_FN_PLATFORM_MUX_INFO,
@@ -89,6 +190,26 @@ static void intel_dsm_platform_mux_info(
return;
}
+#ifdef __NetBSD__
+ connector_count = &pkg->Package.Elements[0];
+ DRM_DEBUG_DRIVER("MUX info connectors: %lld\n",
+ (unsigned long long)connector_count->Integer.Value);
+ for (i = 1; i < pkg->Package.Count; i++) {
+ ACPI_OBJECT *obj = &pkg->Package.Elements[i];
+ ACPI_OBJECT *connector_id = &obj->Package.Elements[0];
+ ACPI_OBJECT *info = &obj->Package.Elements[1];
+ DRM_DEBUG_DRIVER("Connector id: 0x%016llx\n",
+ (unsigned long long)connector_id->Integer.Value);
+ DRM_DEBUG_DRIVER(" port id: %s\n",
+ intel_dsm_port_name(info->Buffer.Pointer[0]));
+ DRM_DEBUG_DRIVER(" display mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[1]));
+ DRM_DEBUG_DRIVER(" aux/dc mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[2]));
+ DRM_DEBUG_DRIVER(" hpd mux info: %s\n",
+ intel_dsm_mux_type(info->Buffer.Pointer[3]));
+ }
+#else
connector_count = &pkg->package.elements[0];
DRM_DEBUG_DRIVER("MUX info connectors: %lld\n",
(unsigned long long)connector_count->integer.value);
@@ -107,15 +228,21 @@ static void intel_dsm_platform_mux_info(
DRM_DEBUG_DRIVER(" hpd mux info: %s\n",
intel_dsm_mux_type(info->buffer.pointer[3]));
}
-
+#endif
ACPI_FREE(pkg);
}
+#ifdef __NetBSD__
+static bool intel_dsm_pci_probe(ACPI_HANDLE dhandle)
+#else
static bool intel_dsm_pci_probe(struct pci_dev *pdev)
+#endif
{
+#ifndef __NetBSD__
acpi_handle dhandle;
dhandle = ACPI_HANDLE(&pdev->dev);
+#endif
if (!dhandle)
return false;
@@ -131,6 +258,52 @@ static bool intel_dsm_pci_probe(struct p
return true;
}
+#ifdef __NetBSD__
+
+static int vga_count;
+static bool has_dsm;
+
+/* XXX from sys/dev/pci/vga_pcivar.h */
+#define DEVICE_IS_VGA_PCI(class, id) \
+ (((PCI_CLASS(class) == PCI_CLASS_DISPLAY && \
+ PCI_SUBCLASS(class) == PCI_SUBCLASS_DISPLAY_VGA) || \
+ (PCI_CLASS(class) == PCI_CLASS_PREHISTORIC && \
+ PCI_SUBCLASS(class) == PCI_SUBCLASS_PREHISTORIC_VGA)) ? 1 : 0)
+
+static int
+intel_dsm_vga_match(const struct pci_attach_args *pa)
+{
+
+ if (!DEVICE_IS_VGA_PCI(pa->pa_class, pa->pa_id))
+ return 0;
+
+ vga_count++;
+ struct acpi_devnode *node = acpi_pcidev_find(0 /*XXX segment*/,
+ pa->pa_bus, pa->pa_device, pa->pa_function);
+ if (node != NULL)
+ has_dsm |= intel_dsm_pci_probe(node->ad_handle);
+ return 0;
+}
+
+static bool intel_dsm_detect(struct drm_device *dev)
+{
+ char acpi_method_name[255] = { 0 };
+
+ vga_count = 0;
+ has_dsm = false;
+ pci_find_device(&dev->pdev->pd_pa, intel_dsm_vga_match);
+
+ if (vga_count == 2 && has_dsm) {
+ const char *name = acpi_name(intel_dsm_priv.dhandle);
+ strlcpy(acpi_method_name, name, sizeof(acpi_method_name));
+ DRM_DEBUG_DRIVER("VGA switcheroo: detected DSM switching method %s handle\n",
+ acpi_method_name);
+ return true;
+ }
+
+ return false;
+}
+#else
static bool intel_dsm_detect(void)
{
char acpi_method_name[255] = { 0 };
@@ -153,13 +326,24 @@ static bool intel_dsm_detect(void)
return false;
}
+#endif
+#ifdef __NetBSD__
+void intel_register_dsm_handler(struct drm_device *dev)
+{
+ if (!intel_dsm_detect(dev))
+ return;
+}
+#else
void intel_register_dsm_handler(void)
{
if (!intel_dsm_detect())
return;
}
+#endif
void intel_unregister_dsm_handler(void)
{
}
+
+#endif /* CONFIG_ACPI */
Index: src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5 src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5.2.1
--- src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c:1.5 Wed Jul 16 20:56:25 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/intel_opregion.c Tue Nov 11 09:06:32 2014
@@ -27,6 +27,7 @@
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
+#include <linux/printk.h>
#include <linux/acpi.h>
#include <acpi/video.h>
#include <asm/io.h>
@@ -36,6 +37,8 @@
#include "i915_drv.h"
#include "intel_drv.h"
+#ifdef CONFIG_ACPI
+
#define PCI_ASLE 0xe4
#define PCI_ASLS 0xfc
#define PCI_SWSCI 0xe8
@@ -254,12 +257,12 @@ struct opregion_asle {
static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
{
struct drm_i915_private *dev_priv = dev->dev_private;
- struct opregion_swsci __iomem *swsci = dev_priv->opregion.swsci;
+ struct opregion_swsci __iomem *region_swsci = dev_priv->opregion.swsci;
u32 main_function, sub_function, scic;
u16 pci_swsci;
u32 dslp;
- if (!swsci)
+ if (!region_swsci)
return -ENODEV;
main_function = (function & SWSCI_SCIC_MAIN_FUNCTION_MASK) >>
@@ -279,7 +282,7 @@ static int swsci(struct drm_device *dev,
}
/* Driver sleep timeout in ms. */
- dslp = ioread32(&swsci->dslp);
+ dslp = ioread32(®ion_swsci->dslp);
if (!dslp) {
/* The spec says 2ms should be the default, but it's too small
* for some machines. */
@@ -292,7 +295,7 @@ static int swsci(struct drm_device *dev,
}
/* The spec tells us to do this, but we are the only user... */
- scic = ioread32(&swsci->scic);
+ scic = ioread32(®ion_swsci->scic);
if (scic & SWSCI_SCIC_INDICATOR) {
DRM_DEBUG_DRIVER("SWSCI request already in progress\n");
return -EBUSY;
@@ -300,8 +303,8 @@ static int swsci(struct drm_device *dev,
scic = function | SWSCI_SCIC_INDICATOR;
- iowrite32(parm, &swsci->parm);
- iowrite32(scic, &swsci->scic);
+ iowrite32(parm, ®ion_swsci->parm);
+ iowrite32(scic, ®ion_swsci->scic);
/* Ensure SCI event is selected and event trigger is cleared. */
pci_read_config_word(dev->pdev, PCI_SWSCI, &pci_swsci);
@@ -316,7 +319,7 @@ static int swsci(struct drm_device *dev,
pci_write_config_word(dev->pdev, PCI_SWSCI, pci_swsci);
/* Poll for the result. */
-#define C (((scic = ioread32(&swsci->scic)) & SWSCI_SCIC_INDICATOR) == 0)
+#define C (((scic = ioread32(®ion_swsci->scic)) & SWSCI_SCIC_INDICATOR) == 0)
if (wait_for(C, dslp)) {
DRM_DEBUG_DRIVER("SWSCI request timed out\n");
return -ETIMEDOUT;
@@ -332,7 +335,7 @@ static int swsci(struct drm_device *dev,
}
if (parm_out)
- *parm_out = ioread32(&swsci->parm);
+ *parm_out = ioread32(®ion_swsci->parm);
return 0;
@@ -588,6 +591,29 @@ void intel_opregion_asle_intr(struct drm
static struct intel_opregion *system_opregion;
+#ifdef __NetBSD__
+static void
+intel_opregion_video_event(ACPI_HANDLE hdl, uint32_t notify, void *opaque)
+{
+ device_t self = opaque;
+ struct opregion_acpi __iomem *acpi;
+
+ DRM_DEBUG_DRIVER("notify=0x%08x\n", notify);
+
+ if (!system_opregion)
+ return;
+
+ acpi = system_opregion->acpi;
+
+ if (notify != 0x80) {
+ aprint_error_dev(self, "unknown notify 0x%02x\n", notify);
+ } else if ((ioread32(&acpi->cevt) & 1) == 0) {
+ aprint_error_dev(self, "bad notify\n");
+ }
+
+ iowrite32(0, &acpi->csts);
+}
+#else /* !__NetBSD__ */
static int intel_opregion_video_event(struct notifier_block *nb,
unsigned long val, void *data)
{
@@ -620,6 +646,7 @@ static int intel_opregion_video_event(st
static struct notifier_block intel_opregion_notifier = {
.notifier_call = intel_opregion_video_event,
};
+#endif /* __NetBSD__ */
/*
* Initialise the DIDL field in opregion. This passes a list of devices to
@@ -632,13 +659,24 @@ static void intel_didl_outputs(struct dr
struct drm_i915_private *dev_priv = dev->dev_private;
struct intel_opregion *opregion = &dev_priv->opregion;
struct drm_connector *connector;
+#ifdef __NetBSD__
+ struct acpi_devnode *ad, *child;
+ ACPI_INTEGER device_id;
+ ACPI_STATUS status;
+#else
acpi_handle handle;
struct acpi_device *acpi_dev, *acpi_cdev, *acpi_video_bus = NULL;
unsigned long long device_id;
acpi_status status;
+#endif
u32 temp;
int i = 0;
+#ifdef __NetBSD__
+ ad = dev->pdev->pd_ad;
+ if (ad == NULL || !device_is_a(ad->ad_device, "acpivga"))
+ return;
+#else
handle = ACPI_HANDLE(&dev->pdev->dev);
if (!handle || acpi_bus_get_device(handle, &acpi_dev))
return;
@@ -658,16 +696,29 @@ static void intel_didl_outputs(struct dr
pr_warn("No ACPI video bus found\n");
return;
}
+#endif
+#ifdef __NetBSD__
+ SIMPLEQ_FOREACH(child, &ad->ad_child_head, ad_child_list) {
+#else
list_for_each_entry(acpi_cdev, &acpi_video_bus->children, node) {
+#endif
if (i >= 8) {
+#ifdef __NetBSD__
+ aprint_error_dev(dev->pdev->pd_dev,
+#else
dev_dbg(&dev->pdev->dev,
+#endif
"More than 8 outputs detected via ACPI\n");
return;
}
status =
+#ifdef __NetBSD__
+ acpi_eval_integer(child->ad_handle, "_ADR", &device_id);
+#else
acpi_evaluate_integer(acpi_cdev->handle, "_ADR",
NULL, &device_id);
+#endif
if (ACPI_SUCCESS(status)) {
if (!device_id)
goto blind_set;
@@ -688,7 +739,11 @@ blind_set:
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
int output_type = ACPI_OTHER_OUTPUT;
if (i >= 8) {
+#ifdef __NetBSD__
+ aprint_error_dev(dev->pdev->pd_dev,
+#else
dev_dbg(&dev->pdev->dev,
+#endif
"More than 8 outputs in connector list\n");
return;
}
@@ -762,7 +817,13 @@ void intel_opregion_init(struct drm_devi
iowrite32(1, &opregion->acpi->drdy);
system_opregion = opregion;
+#ifdef __NetBSD__
+ if (dev->pdev->pd_ad != NULL)
+ acpi_register_notify(dev->pdev->pd_ad,
+ intel_opregion_video_event);
+#else
register_acpi_notifier(&intel_opregion_notifier);
+#endif
}
if (opregion->asle) {
@@ -788,11 +849,20 @@ void intel_opregion_fini(struct drm_devi
iowrite32(0, &opregion->acpi->drdy);
system_opregion = NULL;
+#ifdef __NetBSD__
+ if (dev->pdev->pd_ad != NULL)
+ acpi_deregister_notify(dev->pdev->pd_ad);
+#else
unregister_acpi_notifier(&intel_opregion_notifier);
+#endif
}
/* just clear all opregion memory pointers now */
+#ifdef __NetBSD__
+ acpi_os_iounmap(opregion->header, OPREGION_SIZE);
+#else
iounmap(opregion->header);
+#endif
opregion->header = NULL;
opregion->acpi = NULL;
opregion->swsci = NULL;
@@ -925,3 +995,5 @@ err_out:
#endif
return err;
}
+
+#endif /* CONFIG_ACPI */
Index: src/sys/external/bsd/drm2/i915drm/files.i915drmkms
diff -u src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.5.2.1 src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.5.2.2
--- src/sys/external/bsd/drm2/i915drm/files.i915drmkms:1.5.2.1 Fri Aug 22 10:32:19 2014
+++ src/sys/external/bsd/drm2/i915drm/files.i915drmkms Tue Nov 11 09:06:32 2014
@@ -1,4 +1,4 @@
-# $NetBSD: files.i915drmkms,v 1.5.2.1 2014/08/22 10:32:19 martin Exp $
+# $NetBSD: files.i915drmkms,v 1.5.2.2 2014/11/11 09:06:32 martin Exp $
define intelfbbus { }
device i915drmkms: drmkms, drmkms_pci, intelfbbus
@@ -16,7 +16,6 @@ makeoptions i915drmkms "CWARNFLAGS.int
makeoptions i915drmkms "CWARNFLAGS.intel_pm.c"+="-Wno-shadow"
# XXX x86 kludge.
-#makeoptions i915drmkms CPPFLAGS+="-DCONFIG_ACPI"
makeoptions i915drmkms CPPFLAGS+="-DCONFIG_DRM_I915_FBDEV"
file external/bsd/drm2/dist/drm/i915/dvo_ch7017.c i915drmkms
@@ -45,7 +44,7 @@ file external/bsd/drm2/dist/drm/i915/i91
file external/bsd/drm2/dist/drm/i915/i915_suspend.c i915drmkms
file external/bsd/drm2/i915drm/i915_sysfs.c i915drmkms
file external/bsd/drm2/dist/drm/i915/i915_ums.c i915drmkms
-#file external/bsd/drm2/dist/drm/i915/intel_acpi.c i915drmkms
+file external/bsd/drm2/dist/drm/i915/intel_acpi.c i915drmkms
file external/bsd/drm2/dist/drm/i915/intel_bios.c i915drmkms
file external/bsd/drm2/dist/drm/i915/intel_crt.c i915drmkms
file external/bsd/drm2/dist/drm/i915/intel_ddi.c i915drmkms
Index: src/sys/external/bsd/drm2/include/linux/acpi.h
diff -u src/sys/external/bsd/drm2/include/linux/acpi.h:1.2 src/sys/external/bsd/drm2/include/linux/acpi.h:1.2.8.1
--- src/sys/external/bsd/drm2/include/linux/acpi.h:1.2 Tue Mar 18 18:20:43 2014
+++ src/sys/external/bsd/drm2/include/linux/acpi.h Tue Nov 11 09:06:32 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi.h,v 1.2 2014/03/18 18:20:43 riastradh Exp $ */
+/* $NetBSD: acpi.h,v 1.2.8.1 2014/11/11 09:06:32 martin Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -32,4 +32,6 @@
#ifndef _LINUX_ACPI_H_
#define _LINUX_ACPI_H_
+#include <dev/acpi/acpivar.h>
+
#endif /* _LINUX_ACPI_H_ */
Index: src/sys/external/bsd/drm2/include/linux/pci.h
diff -u src/sys/external/bsd/drm2/include/linux/pci.h:1.7.2.2 src/sys/external/bsd/drm2/include/linux/pci.h:1.7.2.3
--- src/sys/external/bsd/drm2/include/linux/pci.h:1.7.2.2 Fri Oct 17 07:14:33 2014
+++ src/sys/external/bsd/drm2/include/linux/pci.h Tue Nov 11 09:06:32 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: pci.h,v 1.7.2.2 2014/10/17 07:14:33 martin Exp $ */
+/* $NetBSD: pci.h,v 1.7.2.3 2014/11/11 09:06:32 martin Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -32,6 +32,12 @@
#ifndef _LINUX_PCI_H_
#define _LINUX_PCI_H_
+#if defined(i386) || defined(amd64)
+#include "acpica.h"
+#else /* !(i386 || amd64) */
+#define NACPICA 0
+#endif /* i386 || amd64 */
+
#include <sys/types.h>
#include <sys/param.h>
#include <sys/bus.h>
@@ -46,10 +52,15 @@
#include <dev/pci/pcivar.h>
#include <dev/pci/agpvar.h>
+#include <dev/acpi/acpivar.h>
+#include <dev/acpi/acpi_pci.h>
+
#include <linux/dma-mapping.h>
#include <linux/ioport.h>
-struct pci_bus;
+struct pci_bus {
+ u_int number;
+};
struct pci_device_id {
uint32_t vendor;
@@ -122,6 +133,7 @@ struct pci_dev {
void __pci_iomem *kva;
} pd_resources[PCI_NUM_RESOURCES];
struct pci_conf_state *pd_saved_state;
+ struct acpi_devnode *pd_ad;
struct device dev; /* XXX Don't believe me! */
struct pci_bus *bus;
uint32_t devfn;
@@ -152,7 +164,14 @@ linux_pci_dev_init(struct pci_dev *pdev,
pdev->pd_kludges = kludges;
pdev->pd_rom_vaddr = NULL;
pdev->pd_dev = dev;
- pdev->bus = NULL; /* XXX struct pci_dev::bus */
+#if (NACPICA > 0)
+ pdev->pd_ad = acpi_pcidev_find(0 /*XXX segment*/, pa->pa_bus,
+ pa->pa_device, pa->pa_function);
+#else
+ pdev->pd_ad = NULL;
+#endif
+ pdev->bus = kmem_zalloc(sizeof(struct pci_bus), KM_NOSLEEP);
+ pdev->bus->number = pa->pa_bus;
pdev->devfn = PCI_DEVFN(pa->pa_device, pa->pa_function);
pdev->vendor = PCI_VENDOR(pa->pa_id);
pdev->device = PCI_PRODUCT(pa->pa_id);