Move drm_ioctl to drm_ioctl.c. Previously it was in drm_drv.c upstream, which we overrode; then it got moved to drm_ioctl.c and drm_drv.c got deleted, so we no longer need to maintain a separate copy of the table in what we now call drm_cdevsw.c.diff -r1.5 -r1.6 src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c
(riastradh)
--- src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c 2018/08/27 04:58:19 1.5
+++ src/sys/external/bsd/drm2/dist/drm/drm_ioctl.c 2018/08/27 06:50:58 1.6
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: drm_ioctl.c,v 1.5 2018/08/27 04:58:19 riastradh Exp $ */ | 1 | /* $NetBSD: drm_ioctl.c,v 1.6 2018/08/27 06:50:58 riastradh Exp $ */ | |
2 | 2 | |||
3 | /* | 3 | /* | |
4 | * Created: Fri Jan 8 09:01:26 1999 by faith@valinux.com | 4 | * Created: Fri Jan 8 09:01:26 1999 by faith@valinux.com | |
5 | * | 5 | * | |
6 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | 6 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | |
7 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | 7 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | |
8 | * All Rights Reserved. | 8 | * All Rights Reserved. | |
9 | * | 9 | * | |
10 | * Author Rickard E. (Rik) Faith <faith@valinux.com> | 10 | * Author Rickard E. (Rik) Faith <faith@valinux.com> | |
11 | * Author Gareth Hughes <gareth@valinux.com> | 11 | * Author Gareth Hughes <gareth@valinux.com> | |
12 | * | 12 | * | |
13 | * Permission is hereby granted, free of charge, to any person obtaining a | 13 | * Permission is hereby granted, free of charge, to any person obtaining a | |
14 | * copy of this software and associated documentation files (the "Software"), | 14 | * copy of this software and associated documentation files (the "Software"), | |
@@ -21,40 +21,61 @@ | @@ -21,40 +21,61 @@ | |||
21 | * paragraph) shall be included in all copies or substantial portions of the | 21 | * paragraph) shall be included in all copies or substantial portions of the | |
22 | * Software. | 22 | * Software. | |
23 | * | 23 | * | |
24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | 24 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
25 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | 25 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
26 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | 26 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
27 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | 27 | * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
28 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | 28 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
29 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | 29 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
30 | * OTHER DEALINGS IN THE SOFTWARE. | 30 | * OTHER DEALINGS IN THE SOFTWARE. | |
31 | */ | 31 | */ | |
32 | 32 | |||
33 | #include <sys/cdefs.h> | 33 | #include <sys/cdefs.h> | |
34 | __KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.5 2018/08/27 04:58:19 riastradh Exp $"); | 34 | __KERNEL_RCSID(0, "$NetBSD: drm_ioctl.c,v 1.6 2018/08/27 06:50:58 riastradh Exp $"); | |
35 | 35 | |||
36 | #include <drm/drmP.h> | 36 | #include <drm/drmP.h> | |
37 | #include <drm/drm_core.h> | 37 | #include <drm/drm_core.h> | |
38 | #include "drm_legacy.h" | 38 | #include "drm_legacy.h" | |
39 | #include "drm_internal.h" | 39 | #include "drm_internal.h" | |
40 | #include "drm_crtc_internal.h" | 40 | #include "drm_crtc_internal.h" | |
41 | 41 | |||
42 | #include <linux/pci.h> | 42 | #include <linux/pci.h> | |
43 | #include <linux/export.h> | 43 | #include <linux/export.h> | |
44 | 44 | |||
45 | static int drm_version(struct drm_device *dev, void *data, | 45 | static int drm_version(struct drm_device *dev, void *data, | |
46 | struct drm_file *file_priv); | 46 | struct drm_file *file_priv); | |
47 | 47 | |||
48 | #if IS_ENABLED(CONFIG_AGP) | |||
49 | /* XXX Kludge for AGP. */ | |||
50 | static drm_ioctl_t drm_agp_acquire_hook_ioctl; | |||
51 | static drm_ioctl_t drm_agp_release_hook_ioctl; | |||
52 | static drm_ioctl_t drm_agp_enable_hook_ioctl; | |||
53 | static drm_ioctl_t drm_agp_info_hook_ioctl; | |||
54 | static drm_ioctl_t drm_agp_alloc_hook_ioctl; | |||
55 | static drm_ioctl_t drm_agp_free_hook_ioctl; | |||
56 | static drm_ioctl_t drm_agp_bind_hook_ioctl; | |||
57 | static drm_ioctl_t drm_agp_unbind_hook_ioctl; | |||
58 | ||||
59 | #define drm_agp_acquire_ioctl drm_agp_acquire_hook_ioctl | |||
60 | #define drm_agp_release_ioctl drm_agp_release_hook_ioctl | |||
61 | #define drm_agp_enable_ioctl drm_agp_enable_hook_ioctl | |||
62 | #define drm_agp_info_ioctl drm_agp_info_hook_ioctl | |||
63 | #define drm_agp_alloc_ioctl drm_agp_alloc_hook_ioctl | |||
64 | #define drm_agp_free_ioctl drm_agp_free_hook_ioctl | |||
65 | #define drm_agp_bind_ioctl drm_agp_bind_hook_ioctl | |||
66 | #define drm_agp_unbind_ioctl drm_agp_unbind_hook_ioctl | |||
67 | #endif | |||
68 | ||||
48 | /* | 69 | /* | |
49 | * Get the bus id. | 70 | * Get the bus id. | |
50 | * | 71 | * | |
51 | * \param inode device inode. | 72 | * \param inode device inode. | |
52 | * \param file_priv DRM file private. | 73 | * \param file_priv DRM file private. | |
53 | * \param cmd command. | 74 | * \param cmd command. | |
54 | * \param arg user argument, pointing to a drm_unique structure. | 75 | * \param arg user argument, pointing to a drm_unique structure. | |
55 | * \return zero on success or a negative number on failure. | 76 | * \return zero on success or a negative number on failure. | |
56 | * | 77 | * | |
57 | * Copies the bus id from drm_device::unique into user space. | 78 | * Copies the bus id from drm_device::unique into user space. | |
58 | */ | 79 | */ | |
59 | static int drm_getunique(struct drm_device *dev, void *data, | 80 | static int drm_getunique(struct drm_device *dev, void *data, | |
60 | struct drm_file *file_priv) | 81 | struct drm_file *file_priv) | |
@@ -516,27 +537,31 @@ static int drm_version(struct drm_device | @@ -516,27 +537,31 @@ static int drm_version(struct drm_device | |||
516 | /* | 537 | /* | |
517 | * drm_ioctl_permit - Check ioctl permissions against caller | 538 | * drm_ioctl_permit - Check ioctl permissions against caller | |
518 | * | 539 | * | |
519 | * @flags: ioctl permission flags. | 540 | * @flags: ioctl permission flags. | |
520 | * @file_priv: Pointer to struct drm_file identifying the caller. | 541 | * @file_priv: Pointer to struct drm_file identifying the caller. | |
521 | * | 542 | * | |
522 | * Checks whether the caller is allowed to run an ioctl with the | 543 | * Checks whether the caller is allowed to run an ioctl with the | |
523 | * indicated permissions. If so, returns zero. Otherwise returns an | 544 | * indicated permissions. If so, returns zero. Otherwise returns an | |
524 | * error code suitable for ioctl return. | 545 | * error code suitable for ioctl return. | |
525 | */ | 546 | */ | |
526 | int drm_ioctl_permit(u32 flags, struct drm_file *file_priv) | 547 | int drm_ioctl_permit(u32 flags, struct drm_file *file_priv) | |
527 | { | 548 | { | |
528 | /* ROOT_ONLY is only for CAP_SYS_ADMIN */ | 549 | /* ROOT_ONLY is only for CAP_SYS_ADMIN */ | |
550 | #ifdef __NetBSD__ | |||
551 | if (unlikely((flags & DRM_ROOT_ONLY) && !DRM_SUSER())) | |||
552 | #else | |||
529 | if (unlikely((flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN))) | 553 | if (unlikely((flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN))) | |
554 | #endif | |||
530 | return -EACCES; | 555 | return -EACCES; | |
531 | 556 | |||
532 | /* AUTH is only for authenticated or render client */ | 557 | /* AUTH is only for authenticated or render client */ | |
533 | if (unlikely((flags & DRM_AUTH) && !drm_is_render_client(file_priv) && | 558 | if (unlikely((flags & DRM_AUTH) && !drm_is_render_client(file_priv) && | |
534 | !file_priv->authenticated)) | 559 | !file_priv->authenticated)) | |
535 | return -EACCES; | 560 | return -EACCES; | |
536 | 561 | |||
537 | /* MASTER is only for master or control clients */ | 562 | /* MASTER is only for master or control clients */ | |
538 | if (unlikely((flags & DRM_MASTER) && !file_priv->is_master && | 563 | if (unlikely((flags & DRM_MASTER) && !file_priv->is_master && | |
539 | !drm_is_control_client(file_priv))) | 564 | !drm_is_control_client(file_priv))) | |
540 | return -EACCES; | 565 | return -EACCES; | |
541 | 566 | |||
542 | /* Control clients must be explicitly allowed */ | 567 | /* Control clients must be explicitly allowed */ | |
@@ -679,26 +704,91 @@ static const struct drm_ioctl_desc drm_i | @@ -679,26 +704,91 @@ static const struct drm_ioctl_desc drm_i | |||
679 | 704 | |||
680 | /** | 705 | /** | |
681 | * drm_ioctl - ioctl callback implementation for DRM drivers | 706 | * drm_ioctl - ioctl callback implementation for DRM drivers | |
682 | * @filp: file this ioctl is called on | 707 | * @filp: file this ioctl is called on | |
683 | * @cmd: ioctl cmd number | 708 | * @cmd: ioctl cmd number | |
684 | * @arg: user argument | 709 | * @arg: user argument | |
685 | * | 710 | * | |
686 | * Looks up the ioctl function in the ::ioctls table, checking for root | 711 | * Looks up the ioctl function in the ::ioctls table, checking for root | |
687 | * previleges if so required, and dispatches to the respective function. | 712 | * previleges if so required, and dispatches to the respective function. | |
688 | * | 713 | * | |
689 | * Returns: | 714 | * Returns: | |
690 | * Zero on success, negative error code on failure. | 715 | * Zero on success, negative error code on failure. | |
691 | */ | 716 | */ | |
717 | #ifdef __NetBSD__ | |||
718 | #include <sys/file.h> | |||
719 | int | |||
720 | drm_ioctl(struct file *fp, unsigned long cmd, void *data) | |||
721 | { | |||
722 | struct drm_file *const file = fp->f_data; | |||
723 | const unsigned int nr = DRM_IOCTL_NR(cmd); | |||
724 | int error; | |||
725 | ||||
726 | switch (cmd) { | |||
727 | case FIONBIO: | |||
728 | case FIOASYNC: | |||
729 | return 0; | |||
730 | default: | |||
731 | break; | |||
732 | } | |||
733 | ||||
734 | if (IOCGROUP(cmd) != DRM_IOCTL_BASE) | |||
735 | return EINVAL; | |||
736 | ||||
737 | KASSERT(file != NULL); | |||
738 | KASSERT(file->minor != NULL); | |||
739 | KASSERT(file->minor->dev != NULL); | |||
740 | struct drm_device *const dev = file->minor->dev; | |||
741 | const struct drm_ioctl_desc *ioctl; | |||
742 | ||||
743 | if (drm_device_is_unplugged(dev)) | |||
744 | return ENXIO; | |||
745 | ||||
746 | const bool is_driver_ioctl = | |||
747 | (DRM_COMMAND_BASE <= nr) && (nr < DRM_COMMAND_END); | |||
748 | ||||
749 | if (is_driver_ioctl) { | |||
750 | const unsigned int driver_nr = nr - DRM_COMMAND_BASE; | |||
751 | if (driver_nr >= dev->driver->num_ioctls) | |||
752 | return EINVAL; | |||
753 | ioctl = &dev->driver->ioctls[driver_nr]; | |||
754 | } else if (nr < __arraycount(drm_ioctls)) { | |||
755 | ioctl = &drm_ioctls[nr]; | |||
756 | } else { | |||
757 | ioctl = NULL; | |||
758 | } | |||
759 | ||||
760 | if ((ioctl == NULL) || (ioctl->func == NULL)) | |||
761 | return EINVAL; | |||
762 | ||||
763 | /* XXX errno Linux->NetBSD */ | |||
764 | error = -drm_ioctl_permit(ioctl->flags, file); | |||
765 | if (error) | |||
766 | return error; | |||
767 | ||||
768 | if ((drm_core_check_feature(dev, DRIVER_MODESET) && is_driver_ioctl) || | |||
769 | ISSET(ioctl->flags, DRM_UNLOCKED)) { | |||
770 | /* XXX errno Linux->NetBSD */ | |||
771 | error = -(*ioctl->func)(dev, data, file); | |||
772 | } else { | |||
773 | mutex_lock(&drm_global_mutex); | |||
774 | /* XXX errno Linux->NetBSD */ | |||
775 | error = -(*ioctl->func)(dev, data, file); | |||
776 | mutex_unlock(&drm_global_mutex); | |||
777 | } | |||
778 | ||||
779 | return error; | |||
780 | } | |||
781 | #else | |||
692 | long drm_ioctl(struct file *filp, | 782 | long drm_ioctl(struct file *filp, | |
693 | unsigned int cmd, unsigned long arg) | 783 | unsigned int cmd, unsigned long arg) | |
694 | { | 784 | { | |
695 | struct drm_file *file_priv = filp->private_data; | 785 | struct drm_file *file_priv = filp->private_data; | |
696 | struct drm_device *dev; | 786 | struct drm_device *dev; | |
697 | const struct drm_ioctl_desc *ioctl = NULL; | 787 | const struct drm_ioctl_desc *ioctl = NULL; | |
698 | drm_ioctl_t *func; | 788 | drm_ioctl_t *func; | |
699 | unsigned int nr = DRM_IOCTL_NR(cmd); | 789 | unsigned int nr = DRM_IOCTL_NR(cmd); | |
700 | int retcode = -EINVAL; | 790 | int retcode = -EINVAL; | |
701 | char stack_kdata[128]; | 791 | char stack_kdata[128]; | |
702 | char *kdata = NULL; | 792 | char *kdata = NULL; | |
703 | unsigned int usize, asize, drv_size; | 793 | unsigned int usize, asize, drv_size; | |
704 | bool is_driver_ioctl; | 794 | bool is_driver_ioctl; | |
@@ -789,39 +879,129 @@ long drm_ioctl(struct file *filp, | @@ -789,39 +879,129 @@ long drm_ioctl(struct file *filp, | |||
789 | err_i1: | 879 | err_i1: | |
790 | if (!ioctl) | 880 | if (!ioctl) | |
791 | DRM_DEBUG("invalid ioctl: pid=%d, dev=0x%lx, auth=%d, cmd=0x%02x, nr=0x%02x\n", | 881 | DRM_DEBUG("invalid ioctl: pid=%d, dev=0x%lx, auth=%d, cmd=0x%02x, nr=0x%02x\n", | |
792 | task_pid_nr(current), | 882 | task_pid_nr(current), | |
793 | (long)old_encode_dev(file_priv->minor->kdev->devt), | 883 | (long)old_encode_dev(file_priv->minor->kdev->devt), | |
794 | file_priv->authenticated, cmd, nr); | 884 | file_priv->authenticated, cmd, nr); | |
795 | 885 | |||
796 | if (kdata != stack_kdata) | 886 | if (kdata != stack_kdata) | |
797 | kfree(kdata); | 887 | kfree(kdata); | |
798 | if (retcode) | 888 | if (retcode) | |
799 | DRM_DEBUG("ret = %d\n", retcode); | 889 | DRM_DEBUG("ret = %d\n", retcode); | |
800 | return retcode; | 890 | return retcode; | |
801 | } | 891 | } | |
892 | #endif | |||
802 | EXPORT_SYMBOL(drm_ioctl); | 893 | EXPORT_SYMBOL(drm_ioctl); | |
803 | 894 | |||
804 | /** | 895 | /** | |
805 | * drm_ioctl_flags - Check for core ioctl and return ioctl permission flags | 896 | * drm_ioctl_flags - Check for core ioctl and return ioctl permission flags | |
806 | * @nr: ioctl number | 897 | * @nr: ioctl number | |
807 | * @flags: where to return the ioctl permission flags | 898 | * @flags: where to return the ioctl permission flags | |
808 | * | 899 | * | |
809 | * This ioctl is only used by the vmwgfx driver to augment the access checks | 900 | * This ioctl is only used by the vmwgfx driver to augment the access checks | |
810 | * done by the drm core and insofar a pretty decent layering violation. This | 901 | * done by the drm core and insofar a pretty decent layering violation. This | |
811 | * shouldn't be used by any drivers. | 902 | * shouldn't be used by any drivers. | |
812 | * | 903 | * | |
813 | * Returns: | 904 | * Returns: | |
814 | * True if the @nr corresponds to a DRM core ioctl numer, false otherwise. | 905 | * True if the @nr corresponds to a DRM core ioctl numer, false otherwise. | |
815 | */ | 906 | */ | |
816 | bool drm_ioctl_flags(unsigned int nr, unsigned int *flags) | 907 | bool drm_ioctl_flags(unsigned int nr, unsigned int *flags) | |
817 | { | 908 | { | |
818 | if (nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END) | 909 | if (nr >= DRM_COMMAND_BASE && nr < DRM_COMMAND_END) | |
819 | return false; | 910 | return false; | |
820 | 911 | |||
821 | if (nr >= DRM_CORE_IOCTL_COUNT) | 912 | if (nr >= DRM_CORE_IOCTL_COUNT) | |
822 | return false; | 913 | return false; | |
823 | 914 | |||
824 | *flags = drm_ioctls[nr].flags; | 915 | *flags = drm_ioctls[nr].flags; | |
825 | return true; | 916 | return true; | |
826 | } | 917 | } | |
827 | EXPORT_SYMBOL(drm_ioctl_flags); | 918 | EXPORT_SYMBOL(drm_ioctl_flags); | |
919 | ||||
920 | /* XXX Kludge to allow agp to be implemented in another kernel module. */ | |||
921 | #ifdef __NetBSD__ | |||
922 | ||||
923 | #include <sys/atomic.h> | |||
924 | ||||
925 | static const struct drm_agp_hooks *volatile drm_current_agp_hooks; | |||
926 | ||||
927 | int | |||
928 | drm_agp_register(const struct drm_agp_hooks *hooks) | |||
929 | { | |||
930 | ||||
931 | membar_producer(); | |||
932 | if (atomic_cas_ptr(&drm_current_agp_hooks, NULL, __UNCONST(hooks)) | |||
933 | != NULL) | |||
934 | return EBUSY; | |||
935 | ||||
936 | return 0; | |||
937 | } | |||
938 | ||||
939 | void | |||
940 | drm_agp_deregister(const struct drm_agp_hooks *hooks) | |||
941 | { | |||
942 | ||||
943 | if (atomic_cas_ptr(&drm_current_agp_hooks, __UNCONST(hooks), NULL) | |||
944 | != hooks) | |||
945 | panic("%s: wrong hooks: %p != %p", __func__, | |||
946 | hooks, drm_current_agp_hooks); | |||
947 | } | |||
948 | ||||
949 | static void __dead | |||
950 | drm_noagp_panic(struct drm_device *dev) | |||
951 | { | |||
952 | if ((dev != NULL) && | |||
953 | (dev->control != NULL) && | |||
954 | (dev->control->kdev != NULL)) | |||
955 | panic("%s: no agp loaded", device_xname(dev->control->kdev)); | |||
956 | else | |||
957 | panic("drm_device %p: no agp loaded", dev); | |||
958 | } | |||
959 | ||||
960 | int | |||
961 | drm_agp_release_hook(struct drm_device *dev) | |||
962 | { | |||
963 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; | |||
964 | ||||
965 | if (hooks == NULL) | |||
966 | drm_noagp_panic(dev); | |||
967 | membar_consumer(); | |||
968 | return (*hooks->agph_release)(dev); | |||
969 | } | |||
970 | ||||
971 | void | |||
972 | drm_agp_clear_hook(struct drm_device *dev) | |||
973 | { | |||
974 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; | |||
975 | ||||
976 | if (hooks == NULL) | |||
977 | drm_noagp_panic(dev); | |||
978 | membar_consumer(); | |||
979 | (*hooks->agph_clear)(dev); | |||
980 | } | |||
981 | ||||
982 | #if IS_ENABLED(CONFIG_AGP) | |||
983 | ||||
984 | #define DEFINE_AGP_HOOK_IOCTL(NAME, HOOK) \ | |||
985 | static int \ | |||
986 | NAME(struct drm_device *dev, void *data, struct drm_file *file) \ | |||
987 | { \ | |||
988 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; \ | |||
989 | \ | |||
990 | if (hooks == NULL) \ | |||
991 | return -ENODEV; \ | |||
992 | membar_consumer(); \ | |||
993 | return (*hooks->HOOK)(dev, data, file); \ | |||
994 | } | |||
995 | ||||
996 | DEFINE_AGP_HOOK_IOCTL(drm_agp_acquire_hook_ioctl, agph_acquire_ioctl) | |||
997 | DEFINE_AGP_HOOK_IOCTL(drm_agp_release_hook_ioctl, agph_release_ioctl) | |||
998 | DEFINE_AGP_HOOK_IOCTL(drm_agp_enable_hook_ioctl, agph_enable_ioctl) | |||
999 | DEFINE_AGP_HOOK_IOCTL(drm_agp_info_hook_ioctl, agph_info_ioctl) | |||
1000 | DEFINE_AGP_HOOK_IOCTL(drm_agp_alloc_hook_ioctl, agph_alloc_ioctl) | |||
1001 | DEFINE_AGP_HOOK_IOCTL(drm_agp_free_hook_ioctl, agph_free_ioctl) | |||
1002 | DEFINE_AGP_HOOK_IOCTL(drm_agp_bind_hook_ioctl, agph_bind_ioctl) | |||
1003 | DEFINE_AGP_HOOK_IOCTL(drm_agp_unbind_hook_ioctl, agph_unbind_ioctl) | |||
1004 | ||||
1005 | #endif | |||
1006 | ||||
1007 | #endif |
--- src/sys/external/bsd/drm2/dist/include/drm/Attic/drmP.h 2018/08/27 06:43:24 1.19
+++ src/sys/external/bsd/drm2/dist/include/drm/Attic/drmP.h 2018/08/27 06:50:58 1.20
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: drmP.h,v 1.19 2018/08/27 06:43:24 riastradh Exp $ */ | 1 | /* $NetBSD: drmP.h,v 1.20 2018/08/27 06:50:58 riastradh Exp $ */ | |
2 | 2 | |||
3 | /* | 3 | /* | |
4 | * Internal Header for the Direct Rendering Manager | 4 | * Internal Header for the Direct Rendering Manager | |
5 | * | 5 | * | |
6 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | 6 | * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. | |
7 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | 7 | * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. | |
8 | * Copyright (c) 2009-2010, Code Aurora Forum. | 8 | * Copyright (c) 2009-2010, Code Aurora Forum. | |
9 | * All rights reserved. | 9 | * All rights reserved. | |
10 | * | 10 | * | |
11 | * Author: Rickard E. (Rik) Faith <faith@valinux.com> | 11 | * Author: Rickard E. (Rik) Faith <faith@valinux.com> | |
12 | * Author: Gareth Hughes <gareth@valinux.com> | 12 | * Author: Gareth Hughes <gareth@valinux.com> | |
13 | * | 13 | * | |
14 | * Permission is hereby granted, free of charge, to any person obtaining a | 14 | * Permission is hereby granted, free of charge, to any person obtaining a | |
@@ -973,34 +973,36 @@ static inline bool drm_is_control_client | @@ -973,34 +973,36 @@ static inline bool drm_is_control_client | |||
973 | return file_priv->minor->type == DRM_MINOR_CONTROL; | 973 | return file_priv->minor->type == DRM_MINOR_CONTROL; | |
974 | } | 974 | } | |
975 | 975 | |||
976 | static inline bool drm_is_primary_client(const struct drm_file *file_priv) | 976 | static inline bool drm_is_primary_client(const struct drm_file *file_priv) | |
977 | { | 977 | { | |
978 | return file_priv->minor->type == DRM_MINOR_LEGACY; | 978 | return file_priv->minor->type == DRM_MINOR_LEGACY; | |
979 | } | 979 | } | |
980 | 980 | |||
981 | /******************************************************************/ | 981 | /******************************************************************/ | |
982 | /** \name Internal function definitions */ | 982 | /** \name Internal function definitions */ | |
983 | /*@{*/ | 983 | /*@{*/ | |
984 | 984 | |||
985 | /* Driver support (drm_drv.h) */ | 985 | /* Driver support (drm_drv.h) */ | |
986 | #ifndef __NetBSD__ | |||
987 | extern int drm_ioctl_permit(u32 flags, struct drm_file *file_priv); | 986 | extern int drm_ioctl_permit(u32 flags, struct drm_file *file_priv); | |
987 | #ifdef __NetBSD__ | |||
988 | extern int drm_ioctl(struct file *, unsigned long, void *); | |||
989 | #else | |||
988 | extern long drm_ioctl(struct file *filp, | 990 | extern long drm_ioctl(struct file *filp, | |
989 | unsigned int cmd, unsigned long arg); | 991 | unsigned int cmd, unsigned long arg); | |
990 | extern long drm_compat_ioctl(struct file *filp, | 992 | extern long drm_compat_ioctl(struct file *filp, | |
991 | unsigned int cmd, unsigned long arg); | 993 | unsigned int cmd, unsigned long arg); | |
992 | extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags); | |||
993 | #endif | 994 | #endif | |
995 | extern bool drm_ioctl_flags(unsigned int nr, unsigned int *flags); | |||
994 | 996 | |||
995 | /* Device support (drm_fops.h) */ | 997 | /* Device support (drm_fops.h) */ | |
996 | #ifdef __NetBSD__ | 998 | #ifdef __NetBSD__ | |
997 | extern int drm_open_file(struct drm_file *, void *, struct drm_minor *); | 999 | extern int drm_open_file(struct drm_file *, void *, struct drm_minor *); | |
998 | extern void drm_close_file(struct drm_file *); | 1000 | extern void drm_close_file(struct drm_file *); | |
999 | #else | 1001 | #else | |
1000 | extern int drm_open(struct inode *inode, struct file *filp); | 1002 | extern int drm_open(struct inode *inode, struct file *filp); | |
1001 | extern ssize_t drm_read(struct file *filp, char __user *buffer, | 1003 | extern ssize_t drm_read(struct file *filp, char __user *buffer, | |
1002 | size_t count, loff_t *offset); | 1004 | size_t count, loff_t *offset); | |
1003 | extern int drm_release(struct inode *inode, struct file *filp); | 1005 | extern int drm_release(struct inode *inode, struct file *filp); | |
1004 | #endif | 1006 | #endif | |
1005 | extern int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv); | 1007 | extern int drm_new_set_master(struct drm_device *dev, struct drm_file *fpriv); | |
1006 | 1008 |
--- src/sys/external/bsd/drm2/drm/drm_cdevsw.c 2018/08/27 06:49:01 1.3
+++ src/sys/external/bsd/drm2/drm/drm_cdevsw.c 2018/08/27 06:50:58 1.4
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | /* $NetBSD: drm_cdevsw.c,v 1.3 2018/08/27 06:49:01 riastradh Exp $ */ | 1 | /* $NetBSD: drm_cdevsw.c,v 1.4 2018/08/27 06:50:58 riastradh Exp $ */ | |
2 | 2 | |||
3 | /*- | 3 | /*- | |
4 | * Copyright (c) 2013 The NetBSD Foundation, Inc. | 4 | * Copyright (c) 2013 The NetBSD Foundation, Inc. | |
5 | * All rights reserved. | 5 | * All rights reserved. | |
6 | * | 6 | * | |
7 | * This code is derived from software contributed to The NetBSD Foundation | 7 | * This code is derived from software contributed to The NetBSD Foundation | |
8 | * by Taylor R. Campbell. | 8 | * by Taylor R. Campbell. | |
9 | * | 9 | * | |
10 | * Redistribution and use in source and binary forms, with or without | 10 | * Redistribution and use in source and binary forms, with or without | |
11 | * modification, are permitted provided that the following conditions | 11 | * modification, are permitted provided that the following conditions | |
12 | * are met: | 12 | * are met: | |
13 | * 1. Redistributions of source code must retain the above copyright | 13 | * 1. Redistributions of source code must retain the above copyright | |
14 | * notice, this list of conditions and the following disclaimer. | 14 | * notice, this list of conditions and the following disclaimer. | |
@@ -20,27 +20,27 @@ | @@ -20,27 +20,27 @@ | |||
20 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | 20 | * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED | |
21 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | 21 | * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | 22 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS | |
23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 23 | * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | |
24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 24 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | |
25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 25 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | |
26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | 26 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN | |
27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 27 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | |
28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | 28 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE | |
29 | * POSSIBILITY OF SUCH DAMAGE. | 29 | * POSSIBILITY OF SUCH DAMAGE. | |
30 | */ | 30 | */ | |
31 | 31 | |||
32 | #include <sys/cdefs.h> | 32 | #include <sys/cdefs.h> | |
33 | __KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.3 2018/08/27 06:49:01 riastradh Exp $"); | 33 | __KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c,v 1.4 2018/08/27 06:50:58 riastradh Exp $"); | |
34 | 34 | |||
35 | #include <sys/param.h> | 35 | #include <sys/param.h> | |
36 | #include <sys/types.h> | 36 | #include <sys/types.h> | |
37 | #include <sys/conf.h> | 37 | #include <sys/conf.h> | |
38 | #include <sys/device.h> | 38 | #include <sys/device.h> | |
39 | #include <sys/file.h> | 39 | #include <sys/file.h> | |
40 | #include <sys/filedesc.h> | 40 | #include <sys/filedesc.h> | |
41 | #include <sys/ioccom.h> | 41 | #include <sys/ioccom.h> | |
42 | #include <sys/kauth.h> | 42 | #include <sys/kauth.h> | |
43 | #ifndef _MODULE | 43 | #ifndef _MODULE | |
44 | /* XXX Mega-kludge because modules are broken. */ | 44 | /* XXX Mega-kludge because modules are broken. */ | |
45 | #include <sys/once.h> | 45 | #include <sys/once.h> | |
46 | #endif | 46 | #endif | |
@@ -62,175 +62,30 @@ __KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c | @@ -62,175 +62,30 @@ __KERNEL_RCSID(0, "$NetBSD: drm_cdevsw.c | |||
62 | 62 | |||
63 | static dev_type_open(drm_open); | 63 | static dev_type_open(drm_open); | |
64 | 64 | |||
65 | static int drm_firstopen(struct drm_device *); | 65 | static int drm_firstopen(struct drm_device *); | |
66 | 66 | |||
67 | static int drm_close(struct file *); | 67 | static int drm_close(struct file *); | |
68 | static int drm_read(struct file *, off_t *, struct uio *, kauth_cred_t, | 68 | static int drm_read(struct file *, off_t *, struct uio *, kauth_cred_t, | |
69 | int); | 69 | int); | |
70 | static int drm_dequeue_event(struct drm_file *, size_t, | 70 | static int drm_dequeue_event(struct drm_file *, size_t, | |
71 | struct drm_pending_event **, int); | 71 | struct drm_pending_event **, int); | |
72 | static int drm_poll(struct file *, int); | 72 | static int drm_poll(struct file *, int); | |
73 | static int drm_kqfilter(struct file *, struct knote *); | 73 | static int drm_kqfilter(struct file *, struct knote *); | |
74 | static int drm_stat(struct file *, struct stat *); | 74 | static int drm_stat(struct file *, struct stat *); | |
75 | static int drm_ioctl(struct file *, unsigned long, void *); | |||
76 | static int drm_fop_mmap(struct file *, off_t *, size_t, int, int *, int *, | 75 | static int drm_fop_mmap(struct file *, off_t *, size_t, int, int *, int *, | |
77 | struct uvm_object **, int *); | 76 | struct uvm_object **, int *); | |
78 | static int drm_version_string(char *, size_t *, const char *); | |||
79 | static paddr_t drm_mmap(dev_t, off_t, int); | 77 | static paddr_t drm_mmap(dev_t, off_t, int); | |
80 | 78 | |||
81 | static drm_ioctl_t drm_version; | |||
82 | ||||
83 | #define DRM_IOCTL_DEF(IOCTL, FUNC, FLAGS) \ | |||
84 | [DRM_IOCTL_NR(IOCTL)] = { \ | |||
85 | .cmd = (IOCTL), \ | |||
86 | .flags = (FLAGS), \ | |||
87 | .func = (FUNC), \ | |||
88 | .name = #IOCTL, \ | |||
89 | } | |||
90 | ||||
91 | #if __OS_HAS_AGP | |||
92 | /* XXX Kludge for AGP. */ | |||
93 | static drm_ioctl_t drm_agp_acquire_hook_ioctl; | |||
94 | static drm_ioctl_t drm_agp_release_hook_ioctl; | |||
95 | static drm_ioctl_t drm_agp_enable_hook_ioctl; | |||
96 | static drm_ioctl_t drm_agp_info_hook_ioctl; | |||
97 | static drm_ioctl_t drm_agp_alloc_hook_ioctl; | |||
98 | static drm_ioctl_t drm_agp_free_hook_ioctl; | |||
99 | static drm_ioctl_t drm_agp_bind_hook_ioctl; | |||
100 | static drm_ioctl_t drm_agp_unbind_hook_ioctl; | |||
101 | ||||
102 | #define drm_agp_acquire_ioctl drm_agp_acquire_hook_ioctl | |||
103 | #define drm_agp_release_ioctl drm_agp_release_hook_ioctl | |||
104 | #define drm_agp_enable_ioctl drm_agp_enable_hook_ioctl | |||
105 | #define drm_agp_info_ioctl drm_agp_info_hook_ioctl | |||
106 | #define drm_agp_alloc_ioctl drm_agp_alloc_hook_ioctl | |||
107 | #define drm_agp_free_ioctl drm_agp_free_hook_ioctl | |||
108 | #define drm_agp_bind_ioctl drm_agp_bind_hook_ioctl | |||
109 | #define drm_agp_unbind_ioctl drm_agp_unbind_hook_ioctl | |||
110 | #endif | |||
111 | ||||
112 | /* Table copied verbatim from dist/drm/drm_drv.c. */ | |||
113 | static const struct drm_ioctl_desc drm_ioctls[] = { | |||
114 | DRM_IOCTL_DEF(DRM_IOCTL_VERSION, drm_version, DRM_UNLOCKED|DRM_RENDER_ALLOW), | |||
115 | DRM_IOCTL_DEF(DRM_IOCTL_GET_UNIQUE, drm_getunique, 0), | |||
116 | DRM_IOCTL_DEF(DRM_IOCTL_GET_MAGIC, drm_getmagic, 0), | |||
117 | DRM_IOCTL_DEF(DRM_IOCTL_IRQ_BUSID, drm_irq_by_busid, DRM_MASTER|DRM_ROOT_ONLY), | |||
118 | DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, DRM_UNLOCKED), | |||
119 | DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, DRM_UNLOCKED), | |||
120 | DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, DRM_UNLOCKED), | |||
121 | DRM_IOCTL_DEF(DRM_IOCTL_GET_CAP, drm_getcap, DRM_UNLOCKED|DRM_RENDER_ALLOW), | |||
122 | DRM_IOCTL_DEF(DRM_IOCTL_SET_CLIENT_CAP, drm_setclientcap, 0), | |||
123 | DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER), | |||
124 | ||||
125 | DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
126 | DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
127 | DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
128 | DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER), | |||
129 | ||||
130 | DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
131 | DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH), | |||
132 | ||||
133 | DRM_IOCTL_DEF(DRM_IOCTL_SET_SAREA_CTX, drm_setsareactx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
134 | DRM_IOCTL_DEF(DRM_IOCTL_GET_SAREA_CTX, drm_getsareactx, DRM_AUTH), | |||
135 | ||||
136 | DRM_IOCTL_DEF(DRM_IOCTL_SET_MASTER, drm_setmaster_ioctl, DRM_ROOT_ONLY), | |||
137 | DRM_IOCTL_DEF(DRM_IOCTL_DROP_MASTER, drm_dropmaster_ioctl, DRM_ROOT_ONLY), | |||
138 | ||||
139 | DRM_IOCTL_DEF(DRM_IOCTL_ADD_CTX, drm_addctx, DRM_AUTH|DRM_ROOT_ONLY), | |||
140 | DRM_IOCTL_DEF(DRM_IOCTL_RM_CTX, drm_rmctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
141 | DRM_IOCTL_DEF(DRM_IOCTL_MOD_CTX, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
142 | DRM_IOCTL_DEF(DRM_IOCTL_GET_CTX, drm_getctx, DRM_AUTH), | |||
143 | DRM_IOCTL_DEF(DRM_IOCTL_SWITCH_CTX, drm_switchctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
144 | DRM_IOCTL_DEF(DRM_IOCTL_NEW_CTX, drm_newctx, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
145 | DRM_IOCTL_DEF(DRM_IOCTL_RES_CTX, drm_resctx, DRM_AUTH), | |||
146 | ||||
147 | DRM_IOCTL_DEF(DRM_IOCTL_ADD_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
148 | DRM_IOCTL_DEF(DRM_IOCTL_RM_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
149 | ||||
150 | DRM_IOCTL_DEF(DRM_IOCTL_LOCK, drm_lock, DRM_AUTH), | |||
151 | DRM_IOCTL_DEF(DRM_IOCTL_UNLOCK, drm_unlock, DRM_AUTH), | |||
152 | ||||
153 | DRM_IOCTL_DEF(DRM_IOCTL_FINISH, drm_noop, DRM_AUTH), | |||
154 | ||||
155 | DRM_IOCTL_DEF(DRM_IOCTL_ADD_BUFS, drm_addbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
156 | DRM_IOCTL_DEF(DRM_IOCTL_MARK_BUFS, drm_markbufs, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
157 | DRM_IOCTL_DEF(DRM_IOCTL_INFO_BUFS, drm_infobufs, DRM_AUTH), | |||
158 | DRM_IOCTL_DEF(DRM_IOCTL_MAP_BUFS, drm_mapbufs, DRM_AUTH), | |||
159 | DRM_IOCTL_DEF(DRM_IOCTL_FREE_BUFS, drm_freebufs, DRM_AUTH), | |||
160 | DRM_IOCTL_DEF(DRM_IOCTL_DMA, drm_dma_ioctl, DRM_AUTH), | |||
161 | ||||
162 | DRM_IOCTL_DEF(DRM_IOCTL_CONTROL, drm_control, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
163 | ||||
164 | #if __OS_HAS_AGP | |||
165 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_ACQUIRE, drm_agp_acquire_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
166 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_RELEASE, drm_agp_release_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
167 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_ENABLE, drm_agp_enable_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
168 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_INFO, drm_agp_info_ioctl, DRM_AUTH), | |||
169 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_ALLOC, drm_agp_alloc_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
170 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_FREE, drm_agp_free_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
171 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_BIND, drm_agp_bind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
172 | DRM_IOCTL_DEF(DRM_IOCTL_AGP_UNBIND, drm_agp_unbind_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
173 | #endif | |||
174 | ||||
175 | DRM_IOCTL_DEF(DRM_IOCTL_SG_ALLOC, drm_sg_alloc, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
176 | DRM_IOCTL_DEF(DRM_IOCTL_SG_FREE, drm_sg_free, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
177 | ||||
178 | DRM_IOCTL_DEF(DRM_IOCTL_WAIT_VBLANK, drm_wait_vblank, DRM_UNLOCKED), | |||
179 | ||||
180 | DRM_IOCTL_DEF(DRM_IOCTL_MODESET_CTL, drm_modeset_ctl, 0), | |||
181 | ||||
182 | DRM_IOCTL_DEF(DRM_IOCTL_UPDATE_DRAW, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY), | |||
183 | ||||
184 | DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_UNLOCKED|DRM_RENDER_ALLOW), | |||
185 | DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH|DRM_UNLOCKED), | |||
186 | DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH|DRM_UNLOCKED), | |||
187 | ||||
188 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
189 | ||||
190 | #ifndef __NetBSD__ /* XXX drm prime */ | |||
191 | DRM_IOCTL_DEF(DRM_IOCTL_PRIME_HANDLE_TO_FD, drm_prime_handle_to_fd_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), | |||
192 | DRM_IOCTL_DEF(DRM_IOCTL_PRIME_FD_TO_HANDLE, drm_prime_fd_to_handle_ioctl, DRM_AUTH|DRM_UNLOCKED|DRM_RENDER_ALLOW), | |||
193 | #endif | |||
194 | ||||
195 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANERESOURCES, drm_mode_getplane_res, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
196 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCRTC, drm_mode_getcrtc, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
197 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETCRTC, drm_mode_setcrtc, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
198 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPLANE, drm_mode_getplane, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
199 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPLANE, drm_mode_setplane, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
200 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR, drm_mode_cursor_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
201 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETGAMMA, drm_mode_gamma_get_ioctl, DRM_UNLOCKED), | |||
202 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETGAMMA, drm_mode_gamma_set_ioctl, DRM_MASTER|DRM_UNLOCKED), | |||
203 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETENCODER, drm_mode_getencoder, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
204 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETCONNECTOR, drm_mode_getconnector, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
205 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_ATTACHMODE, drm_noop, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
206 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_DETACHMODE, drm_noop, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
207 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPERTY, drm_mode_getproperty_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
208 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_SETPROPERTY, drm_mode_connector_property_set_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
209 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETPROPBLOB, drm_mode_getblob_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
210 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETFB, drm_mode_getfb, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
211 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB, drm_mode_addfb, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
212 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_ADDFB2, drm_mode_addfb2, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
213 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_RMFB, drm_mode_rmfb, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
214 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_PAGE_FLIP, drm_mode_page_flip_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
215 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_DIRTYFB, drm_mode_dirtyfb_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
216 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_CREATE_DUMB, drm_mode_create_dumb_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
217 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_MAP_DUMB, drm_mode_mmap_dumb_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
218 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_DESTROY_DUMB, drm_mode_destroy_dumb_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
219 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_GETPROPERTIES, drm_mode_obj_get_properties_ioctl, DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
220 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_OBJ_SETPROPERTY, drm_mode_obj_set_property_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
221 | DRM_IOCTL_DEF(DRM_IOCTL_MODE_CURSOR2, drm_mode_cursor2_ioctl, DRM_MASTER|DRM_CONTROL_ALLOW|DRM_UNLOCKED), | |||
222 | }; | |||
223 | ||||
224 | const struct cdevsw drm_cdevsw = { | 79 | const struct cdevsw drm_cdevsw = { | |
225 | .d_open = drm_open, | 80 | .d_open = drm_open, | |
226 | .d_close = noclose, | 81 | .d_close = noclose, | |
227 | .d_read = noread, | 82 | .d_read = noread, | |
228 | .d_write = nowrite, | 83 | .d_write = nowrite, | |
229 | .d_ioctl = noioctl, | 84 | .d_ioctl = noioctl, | |
230 | .d_stop = nostop, | 85 | .d_stop = nostop, | |
231 | .d_tty = notty, | 86 | .d_tty = notty, | |
232 | .d_poll = nopoll, | 87 | .d_poll = nopoll, | |
233 | .d_mmap = drm_mmap, | 88 | .d_mmap = drm_mmap, | |
234 | .d_kqfilter = nokqfilter, | 89 | .d_kqfilter = nokqfilter, | |
235 | .d_discard = nodiscard, | 90 | .d_discard = nodiscard, | |
236 | /* XXX was D_TTY | D_NEGOFFSAFE */ | 91 | /* XXX was D_TTY | D_NEGOFFSAFE */ | |
@@ -585,248 +440,43 @@ drm_stat(struct file *fp, struct stat *s | @@ -585,248 +440,43 @@ drm_stat(struct file *fp, struct stat *s | |||
585 | 440 | |||
586 | st->st_dev = devno; | 441 | st->st_dev = devno; | |
587 | st->st_ino = 0; /* XXX (dev,ino) uniqueness bleh */ | 442 | st->st_ino = 0; /* XXX (dev,ino) uniqueness bleh */ | |
588 | st->st_uid = kauth_cred_geteuid(fp->f_cred); | 443 | st->st_uid = kauth_cred_geteuid(fp->f_cred); | |
589 | st->st_gid = kauth_cred_getegid(fp->f_cred); | 444 | st->st_gid = kauth_cred_getegid(fp->f_cred); | |
590 | st->st_mode = S_IFCHR; /* XXX what? */ | 445 | st->st_mode = S_IFCHR; /* XXX what? */ | |
591 | st->st_rdev = devno; | 446 | st->st_rdev = devno; | |
592 | /* XXX what else? */ | 447 | /* XXX what else? */ | |
593 | 448 | |||
594 | return 0; | 449 | return 0; | |
595 | } | 450 | } | |
596 | 451 | |||
597 | static int | 452 | static int | |
598 | drm_ioctl(struct file *fp, unsigned long cmd, void *data) | |||
599 | { | |||
600 | struct drm_file *const file = fp->f_data; | |||
601 | const unsigned int nr = DRM_IOCTL_NR(cmd); | |||
602 | int error; | |||
603 | ||||
604 | switch (cmd) { | |||
605 | case FIONBIO: | |||
606 | case FIOASYNC: | |||
607 | return 0; | |||
608 | ||||
609 | #if 0 /* XXX why? */ | |||
610 | case SIOCSPGRP: | |||
611 | case TIOCSPGRP: | |||
612 | case FIOSETOWN: | |||
613 | return fsetown(&dev->buf_pgid, cmd, data); | |||
614 | ||||
615 | case SIOCGPGRP: | |||
616 | case TIOCGPGRP: | |||
617 | case FIOGETOWN: | |||
618 | return fgetown(&dev->buf_pgid, cmd, data); | |||
619 | #endif | |||
620 | ||||
621 | default: | |||
622 | break; | |||
623 | } | |||
624 | ||||
625 | if (IOCGROUP(cmd) != DRM_IOCTL_BASE) | |||
626 | return EINVAL; | |||
627 | ||||
628 | KASSERT(file != NULL); | |||
629 | KASSERT(file->minor != NULL); | |||
630 | KASSERT(file->minor->dev != NULL); | |||
631 | struct drm_device *const dev = file->minor->dev; | |||
632 | const struct drm_ioctl_desc *ioctl; | |||
633 | ||||
634 | if ((DRM_COMMAND_BASE <= nr) && (nr < DRM_COMMAND_END)) { | |||
635 | const unsigned int driver_nr = nr - DRM_COMMAND_BASE; | |||
636 | if (driver_nr >= dev->driver->num_ioctls) | |||
637 | return EINVAL; | |||
638 | ioctl = &dev->driver->ioctls[driver_nr]; | |||
639 | } else if (nr < __arraycount(drm_ioctls)) { | |||
640 | ioctl = &drm_ioctls[nr]; | |||
641 | } else { | |||
642 | ioctl = NULL; | |||
643 | } | |||
644 | ||||
645 | if ((ioctl == NULL) || (ioctl->func == NULL)) | |||
646 | return EINVAL; | |||
647 | ||||
648 | /* XXX Synchronize with drm_ioctl_permit in upstream drm_drv.c. */ | |||
649 | if (ISSET(ioctl->flags, DRM_ROOT_ONLY) && !DRM_SUSER()) | |||
650 | return EACCES; | |||
651 | ||||
652 | if (ISSET(ioctl->flags, DRM_AUTH) && | |||
653 | (file->minor->type != DRM_MINOR_RENDER) && | |||
654 | !file->authenticated) | |||
655 | return EACCES; | |||
656 | ||||
657 | if (ISSET(ioctl->flags, DRM_MASTER) && | |||
658 | (file->master == NULL) && | |||
659 | (file->minor->type != DRM_MINOR_CONTROL)) | |||
660 | return EACCES; | |||
661 | ||||
662 | if (!ISSET(ioctl->flags, DRM_CONTROL_ALLOW) && | |||
663 | (file->minor->type == DRM_MINOR_CONTROL)) | |||
664 | return EACCES; | |||
665 | ||||
666 | if (!ISSET(ioctl->flags, DRM_RENDER_ALLOW) && | |||
667 | (file->minor->type == DRM_MINOR_RENDER)) | |||
668 | return EACCES; | |||
669 | ||||
670 | if (!ISSET(ioctl->flags, DRM_UNLOCKED)) | |||
671 | mutex_lock(&drm_global_mutex); | |||
672 | ||||
673 | /* XXX errno Linux->NetBSD */ | |||
674 | error = -(*ioctl->func)(dev, data, file); | |||
675 | ||||
676 | if (!ISSET(ioctl->flags, DRM_UNLOCKED)) | |||
677 | mutex_unlock(&drm_global_mutex); | |||
678 | ||||
679 | return error; | |||
680 | } | |||
681 | ||||
682 | static int | |||
683 | drm_fop_mmap(struct file *fp, off_t *offp, size_t len, int prot, int *flagsp, | 453 | drm_fop_mmap(struct file *fp, off_t *offp, size_t len, int prot, int *flagsp, | |
684 | int *advicep, struct uvm_object **uobjp, int *maxprotp) | 454 | int *advicep, struct uvm_object **uobjp, int *maxprotp) | |
685 | { | 455 | { | |
686 | struct drm_file *const file = fp->f_data; | 456 | struct drm_file *const file = fp->f_data; | |
687 | struct drm_device *const dev = file->minor->dev; | 457 | struct drm_device *const dev = file->minor->dev; | |
688 | int error; | 458 | int error; | |
689 | 459 | |||
690 | KASSERT(fp == file->filp); | 460 | KASSERT(fp == file->filp); | |
691 | error = (*dev->driver->mmap_object)(dev, *offp, len, prot, uobjp, | 461 | error = (*dev->driver->mmap_object)(dev, *offp, len, prot, uobjp, | |
692 | offp, file->filp); | 462 | offp, file->filp); | |
693 | *maxprotp = prot; | 463 | *maxprotp = prot; | |
694 | *advicep = UVM_ADV_RANDOM; | 464 | *advicep = UVM_ADV_RANDOM; | |
695 | return -error; | 465 | return -error; | |
696 | } | 466 | } | |
697 | 467 | |||
698 | static int | |||
699 | drm_version_string(char *target, size_t *lenp, const char *source) | |||
700 | { | |||
701 | const size_t len = strlen(source); | |||
702 | const size_t trunc_len = MIN(len, *lenp); | |||
703 | ||||
704 | *lenp = len; | |||
705 | if ((trunc_len > 0) && (target != NULL)) | |||
706 | /* copyoutstr takes a buffer size, not a string length. */ | |||
707 | /* XXX errno NetBSD->Linux */ | |||
708 | return -copyoutstr(source, target, trunc_len+1, NULL); | |||
709 | ||||
710 | return 0; | |||
711 | } | |||
712 | ||||
713 | static int | |||
714 | drm_version(struct drm_device *dev, void *data, struct drm_file *file) | |||
715 | { | |||
716 | struct drm_version *v = data; | |||
717 | int error; | |||
718 | ||||
719 | v->version_major = dev->driver->major; | |||
720 | v->version_minor = dev->driver->minor; | |||
721 | v->version_patchlevel = dev->driver->patchlevel; | |||
722 | ||||
723 | error = drm_version_string(v->name, &v->name_len, dev->driver->name); | |||
724 | if (error) | |||
725 | goto out; | |||
726 | error = drm_version_string(v->date, &v->date_len, dev->driver->date); | |||
727 | if (error) | |||
728 | goto out; | |||
729 | error = drm_version_string(v->desc, &v->desc_len, dev->driver->desc); | |||
730 | if (error) | |||
731 | goto out; | |||
732 | ||||
733 | out: return error; | |||
734 | } | |||
735 | ||||
736 | static paddr_t | 468 | static paddr_t | |
737 | drm_mmap(dev_t d, off_t offset, int prot) | 469 | drm_mmap(dev_t d, off_t offset, int prot) | |
738 | { | 470 | { | |
739 | struct drm_minor *dminor; | 471 | struct drm_minor *dminor; | |
740 | paddr_t paddr; | 472 | paddr_t paddr; | |
741 | 473 | |||
742 | dminor = drm_minor_acquire(minor(d)); | 474 | dminor = drm_minor_acquire(minor(d)); | |
743 | if (IS_ERR(dminor)) | 475 | if (IS_ERR(dminor)) | |
744 | return (paddr_t)-1; | 476 | return (paddr_t)-1; | |
745 | 477 | |||
746 | paddr = drm_mmap_paddr(dminor->dev, offset, prot); | 478 | paddr = drm_mmap_paddr(dminor->dev, offset, prot); | |
747 | 479 | |||
748 | drm_minor_release(dminor); | 480 | drm_minor_release(dminor); | |
749 | return paddr; | 481 | return paddr; | |
750 | } | 482 | } | |
751 | ||||
752 | static const struct drm_agp_hooks *volatile drm_current_agp_hooks; | |||
753 | ||||
754 | int | |||
755 | drm_agp_register(const struct drm_agp_hooks *hooks) | |||
756 | { | |||
757 | ||||
758 | membar_producer(); | |||
759 | if (atomic_cas_ptr(&drm_current_agp_hooks, NULL, __UNCONST(hooks)) | |||
760 | != NULL) | |||
761 | return EBUSY; | |||
762 | ||||
763 | return 0; | |||
764 | } | |||
765 | ||||
766 | void | |||
767 | drm_agp_deregister(const struct drm_agp_hooks *hooks) | |||
768 | { | |||
769 | ||||
770 | if (atomic_cas_ptr(&drm_current_agp_hooks, __UNCONST(hooks), NULL) | |||
771 | != hooks) | |||
772 | panic("%s: wrong hooks: %p != %p", __func__, | |||
773 | hooks, drm_current_agp_hooks); | |||
774 | } | |||
775 | ||||
776 | static void __dead | |||
777 | drm_noagp_panic(struct drm_device *dev) | |||
778 | { | |||
779 | if ((dev != NULL) && | |||
780 | (dev->control != NULL) && | |||
781 | (dev->control->kdev != NULL)) | |||
782 | panic("%s: no agp loaded", device_xname(dev->control->kdev)); | |||
783 | else | |||
784 | panic("drm_device %p: no agp loaded", dev); | |||
785 | } | |||
786 | ||||
787 | int | |||
788 | drm_agp_release_hook(struct drm_device *dev) | |||
789 | { | |||
790 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; | |||
791 | ||||
792 | if (hooks == NULL) | |||
793 | drm_noagp_panic(dev); | |||
794 | membar_consumer(); | |||
795 | return (*hooks->agph_release)(dev); | |||
796 | } | |||
797 | ||||
798 | void | |||
799 | drm_agp_clear_hook(struct drm_device *dev) | |||
800 | { | |||
801 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; | |||
802 | ||||
803 | if (hooks == NULL) | |||
804 | drm_noagp_panic(dev); | |||
805 | membar_consumer(); | |||
806 | (*hooks->agph_clear)(dev); | |||
807 | } | |||
808 | ||||
809 | #if __OS_HAS_AGP | |||
810 | ||||
811 | #define DEFINE_AGP_HOOK_IOCTL(NAME, HOOK) \ | |||
812 | static int \ | |||
813 | NAME(struct drm_device *dev, void *data, struct drm_file *file) \ | |||
814 | { \ | |||
815 | const struct drm_agp_hooks *const hooks = drm_current_agp_hooks; \ | |||
816 | \ | |||
817 | if (hooks == NULL) \ | |||
818 | return -ENODEV; \ | |||
819 | membar_consumer(); \ | |||
820 | return (*hooks->HOOK)(dev, data, file); \ | |||
821 | } | |||
822 | ||||
823 | DEFINE_AGP_HOOK_IOCTL(drm_agp_acquire_hook_ioctl, agph_acquire_ioctl) | |||
824 | DEFINE_AGP_HOOK_IOCTL(drm_agp_release_hook_ioctl, agph_release_ioctl) | |||
825 | DEFINE_AGP_HOOK_IOCTL(drm_agp_enable_hook_ioctl, agph_enable_ioctl) | |||
826 | DEFINE_AGP_HOOK_IOCTL(drm_agp_info_hook_ioctl, agph_info_ioctl) | |||
827 | DEFINE_AGP_HOOK_IOCTL(drm_agp_alloc_hook_ioctl, agph_alloc_ioctl) | |||
828 | DEFINE_AGP_HOOK_IOCTL(drm_agp_free_hook_ioctl, agph_free_ioctl) | |||
829 | DEFINE_AGP_HOOK_IOCTL(drm_agp_bind_hook_ioctl, agph_bind_ioctl) | |||
830 | DEFINE_AGP_HOOK_IOCTL(drm_agp_unbind_hook_ioctl, agph_unbind_ioctl) | |||
831 | ||||
832 | #endif |
--- src/sys/external/bsd/drm2/drm/files.drmkms 2018/08/27 06:50:45 1.23
+++ src/sys/external/bsd/drm2/drm/files.drmkms 2018/08/27 06:50:58 1.24
@@ -1,14 +1,14 @@ | @@ -1,14 +1,14 @@ | |||
1 | # $NetBSD: files.drmkms,v 1.23 2018/08/27 06:50:45 riastradh Exp $ | 1 | # $NetBSD: files.drmkms,v 1.24 2018/08/27 06:50:58 riastradh Exp $ | |
2 | 2 | |||
3 | include "external/bsd/drm2/linux/files.drmkms_linux" | 3 | include "external/bsd/drm2/linux/files.drmkms_linux" | |
4 | 4 | |||
5 | # i2c code is not separated out, but it is marked so that it could be | 5 | # i2c code is not separated out, but it is marked so that it could be | |
6 | # if we wanted. Not clear that this provides as much advantage as | 6 | # if we wanted. Not clear that this provides as much advantage as | |
7 | # separating out PCI code, which will be necessary for, e.g., PCIless | 7 | # separating out PCI code, which will be necessary for, e.g., PCIless | |
8 | # ARM SoC graphics drivers. | 8 | # ARM SoC graphics drivers. | |
9 | define drmkms_i2c: drmkms_linux | 9 | define drmkms_i2c: drmkms_linux | |
10 | 10 | |||
11 | define drmkms: drmkms_linux, drmkms_i2c, linux | 11 | define drmkms: drmkms_linux, drmkms_i2c, linux | |
12 | 12 | |||
13 | defflag opt_drmkms.h DRMKMS_DEBUG | 13 | defflag opt_drmkms.h DRMKMS_DEBUG | |
14 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/include" | 14 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/include" | |
@@ -18,26 +18,27 @@ makeoptions drmkms CPPFLAGS+="-I$S/exte | @@ -18,26 +18,27 @@ makeoptions drmkms CPPFLAGS+="-I$S/exte | |||
18 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/include/drm" | 18 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/include/drm" | |
19 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/uapi" | 19 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist/uapi" | |
20 | 20 | |||
21 | # Must come last because some header file names are repeated in | 21 | # Must come last because some header file names are repeated in | |
22 | # dist/drm (I'm looking ta you, drm_legacy.h), while others sometimes | 22 | # dist/drm (I'm looking ta you, drm_legacy.h), while others sometimes | |
23 | # explicitly write <uapi/...>. (Maybe that should have been imported | 23 | # explicitly write <uapi/...>. (Maybe that should have been imported | |
24 | # under dist/include/uapi rather than dist/uapi.) | 24 | # under dist/include/uapi rather than dist/uapi.) | |
25 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist" | 25 | makeoptions drmkms CPPFLAGS+="-I$S/external/bsd/drm2/dist" | |
26 | 26 | |||
27 | makeoptions drmkms "CWARNFLAGS.drm_atomic_helper.c"+="-Wno-shadow" | 27 | makeoptions drmkms "CWARNFLAGS.drm_atomic_helper.c"+="-Wno-shadow" | |
28 | makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-shadow" | 28 | makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-shadow" | |
29 | makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-missing-field-initializers" | 29 | makeoptions drmkms "CWARNFLAGS.drm_crtc.c"+="-Wno-missing-field-initializers" | |
30 | makeoptions drmkms "CWARNFLAGS.drm_edid.c"+="-Wno-shadow" | 30 | makeoptions drmkms "CWARNFLAGS.drm_edid.c"+="-Wno-shadow" | |
31 | makeoptions drmkms "CWARNFLAGS.drm_ioctl.c"+="-Wno-shadow" | |||
31 | 32 | |||
32 | # XXX Should probably be in a header file. opt_drmkms.h? | 33 | # XXX Should probably be in a header file. opt_drmkms.h? | |
33 | makeoptions drmkms CPPFLAGS+="-D__KERNEL__" | 34 | makeoptions drmkms CPPFLAGS+="-D__KERNEL__" | |
34 | 35 | |||
35 | makeoptions drmkms CPPFLAGS+="-DCONFIG_FB=0" | 36 | makeoptions drmkms CPPFLAGS+="-DCONFIG_FB=0" | |
36 | makeoptions drmkms CPPFLAGS+="-DCONFIG_BACKLIGHT_CLASS_DEVICE=0" | 37 | makeoptions drmkms CPPFLAGS+="-DCONFIG_BACKLIGHT_CLASS_DEVICE=0" | |
37 | makeoptions drmkms CPPFLAGS+="-DCONFIG_BACKLIGHT_CLASS_DEVICE_MODULE=0" | 38 | makeoptions drmkms CPPFLAGS+="-DCONFIG_BACKLIGHT_CLASS_DEVICE_MODULE=0" | |
38 | 39 | |||
39 | file external/bsd/drm2/drm/drm_cdevsw.c drmkms | 40 | file external/bsd/drm2/drm/drm_cdevsw.c drmkms | |
40 | file external/bsd/drm2/drm/drm_gem_vm.c drmkms | 41 | file external/bsd/drm2/drm/drm_gem_vm.c drmkms | |
41 | file external/bsd/drm2/drm/drm_gem_cma_helper.c drmkms | 42 | file external/bsd/drm2/drm/drm_gem_cma_helper.c drmkms | |
42 | file external/bsd/drm2/drm/drm_module.c drmkms | 43 | file external/bsd/drm2/drm/drm_module.c drmkms | |
43 | file external/bsd/drm2/drm/drm_sysctl.c drmkms | 44 | file external/bsd/drm2/drm/drm_sysctl.c drmkms |