Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/sys/external/bsd/drm2/pci Add drm_pci_set_unique.
details: https://anonhg.NetBSD.org/src/rev/21ffd84f8b3a
branches: trunk
changeset: 992830:21ffd84f8b3a
user: riastradh <riastradh%NetBSD.org@localhost>
date: Mon Aug 27 07:55:59 2018 +0000
description:
Add drm_pci_set_unique.
diffstat:
sys/external/bsd/drm2/pci/drm_pci.c | 37 ++++++++++++++++++++++++++++++++++---
1 files changed, 34 insertions(+), 3 deletions(-)
diffs (56 lines):
diff -r a8592162e61c -r 21ffd84f8b3a sys/external/bsd/drm2/pci/drm_pci.c
--- a/sys/external/bsd/drm2/pci/drm_pci.c Mon Aug 27 07:55:49 2018 +0000
+++ b/sys/external/bsd/drm2/pci/drm_pci.c Mon Aug 27 07:55:59 2018 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: drm_pci.c,v 1.23 2018/08/27 07:54:54 riastradh Exp $ */
+/* $NetBSD: drm_pci.c,v 1.24 2018/08/27 07:55:59 riastradh Exp $ */
/*-
* Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.23 2018/08/27 07:54:54 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: drm_pci.c,v 1.24 2018/08/27 07:55:59 riastradh Exp $");
#include <sys/types.h>
#include <sys/errno.h>
@@ -280,5 +280,36 @@
drm_irq_by_busid(struct drm_device *dev, void *data, struct drm_file *file)
{
- return -ENOSYS;
+ return -ENODEV;
}
+
+int
+drm_pci_set_unique(struct drm_device *dev, struct drm_master *master,
+ struct drm_unique *unique)
+{
+ char kbuf[64], ubuf[64];
+ int ret;
+
+ /* Reject excessively long unique strings. */
+ if (unique->unique_len > sizeof(ubuf) - 1)
+ return -EINVAL;
+
+ /* Copy in the alleged unique string, NUL-terminated. */
+ ret = -copyin(unique->unique, ubuf, unique->unique_len);
+ if (ret)
+ return ret;
+ ubuf[unique->unique_len] = '\0';
+
+ /* Make sure it matches what we expect. */
+ snprintf(kbuf, sizeof kbuf, "PCI:%d:%ld:%ld", dev->pdev->bus->number,
+ PCI_SLOT(dev->pdev->devfn), PCI_FUNC(dev->pdev->devfn));
+ if (strncmp(kbuf, ubuf, sizeof(kbuf)) != 0)
+ return -EINVAL;
+
+ /* Remember it. */
+ master->unique = kstrdup(ubuf, GFP_KERNEL);
+ master->unique_len = strlen(master->unique);
+
+ /* Success! */
+ return 0;
+}
Home |
Main Index |
Thread Index |
Old Index