Author: mmel
Date: Sun Nov 13 13:31:23 2016
New Revision: 308612
URL: https://svnweb.freebsd.org/changeset/base/308612

Log:
  Allow DRM2 code to be built on platforms without AGP.
  This patch is taken from original drm-3.8 code.
  
  Differential Revision: https://reviews.freebsd.org/D8454
  MFC after: 3 weeks

Modified:
  head/sys/dev/drm2/drmP.h
  head/sys/dev/drm2/drm_memory.c
  head/sys/dev/drm2/drm_os_freebsd.c
  head/sys/dev/drm2/drm_os_freebsd.h
  head/sys/dev/drm2/ttm/ttm_bo_util.c

Modified: head/sys/dev/drm2/drmP.h
==============================================================================
--- head/sys/dev/drm2/drmP.h    Sun Nov 13 12:06:25 2016        (r308611)
+++ head/sys/dev/drm2/drmP.h    Sun Nov 13 13:31:23 2016        (r308612)
@@ -1204,17 +1204,6 @@ int      drm_mmap_single(struct cdev *kdev, v
            vm_size_t size, struct vm_object **obj_res, int nprot);
 d_poll_t drm_poll;
 
-                               /* Memory management support (drm_memory.h) */
-extern void drm_free_agp(DRM_AGP_MEM * handle, int pages);
-extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
-#ifdef FREEBSD_NOTYET
-extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
-                                      struct page **pages,
-                                      unsigned long num_pages,
-                                      uint32_t gtt_offset,
-                                      uint32_t type);
-#endif /* FREEBSD_NOTYET */
-extern int drm_unbind_agp(DRM_AGP_MEM * handle);
 
                                /* Misc. IOCTL support (drm_ioctl.h) */
 extern int drm_irq_by_busid(struct drm_device *dev, void *data,
@@ -1363,32 +1352,6 @@ extern void drm_vblank_post_modeset(stru
 extern int drm_modeset_ctl(struct drm_device *dev, void *data,
                           struct drm_file *file_priv);
 
-                               /* AGP/GART support (drm_agpsupport.h) */
-extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
-extern int drm_agp_acquire(struct drm_device *dev);
-extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
-                                struct drm_file *file_priv);
-extern int drm_agp_release(struct drm_device *dev);
-extern int drm_agp_release_ioctl(struct drm_device *dev, void *data,
-                                struct drm_file *file_priv);
-extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
-extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
-                               struct drm_file *file_priv);
-extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
-extern int drm_agp_info_ioctl(struct drm_device *dev, void *data,
-                       struct drm_file *file_priv);
-extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer 
*request);
-extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
-                        struct drm_file *file_priv);
-extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer 
*request);
-extern int drm_agp_free_ioctl(struct drm_device *dev, void *data,
-                       struct drm_file *file_priv);
-extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding 
*request);
-extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
-                         struct drm_file *file_priv);
-extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding 
*request);
-extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
-                       struct drm_file *file_priv);
 
                                /* Stub support (drm_stub.h) */
 extern int drm_setmaster_ioctl(struct drm_device *dev, void *data,
@@ -1814,5 +1777,175 @@ int ttm_bo_mmap_single(struct ttm_bo_dev
 struct ttm_buffer_object;
 void ttm_bo_release_mmap(struct ttm_buffer_object *bo);
 
+#if  __OS_HAS_AGP
+                               /* Memory management support (drm_memory.h) */
+extern void drm_free_agp(DRM_AGP_MEM * handle, int pages);
+extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
+#ifdef FREEBSD_NOTYET
+extern DRM_AGP_MEM *drm_agp_bind_pages(struct drm_device *dev,
+                                      struct page **pages,
+                                      unsigned long num_pages,
+                                      uint32_t gtt_offset,
+                                      uint32_t type);
+#endif /* FREEBSD_NOTYET */
+extern int drm_unbind_agp(DRM_AGP_MEM * handle);
+
+                               /* AGP/GART support (drm_agpsupport.h) */
+extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
+extern int drm_agp_acquire(struct drm_device *dev);
+extern int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
+extern int drm_agp_release(struct drm_device *dev);
+extern int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+                                struct drm_file *file_priv);
+extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
+extern int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+                               struct drm_file *file_priv);
+extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info);
+extern int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer 
*request);
+extern int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+                        struct drm_file *file_priv);
+extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer 
*request);
+extern int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding 
*request);
+extern int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+                         struct drm_file *file_priv);
+extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding 
*request);
+extern int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+                       struct drm_file *file_priv);
+
+#else
+
+static inline void drm_free_agp(DRM_AGP_MEM * handle, int pages)
+{
+}
+
+static inline int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start)
+{
+       return -ENODEV;
+}
+
+static inline int drm_unbind_agp(DRM_AGP_MEM * handle)
+{
+       return -ENODEV;
+}
+#ifdef FREEBSD_NOTYET
+static inline struct agp_memory *drm_agp_bind_pages(struct drm_device *dev,
+                                             struct page **pages,
+                                             unsigned long num_pages,
+                                             uint32_t gtt_offset,
+                                             uint32_t type)
+{
+       return NULL;
+}
+#endif
+static inline struct drm_agp_head *drm_agp_init(struct drm_device *dev)
+{
+       return NULL;
+}
+
+static inline void drm_agp_clear(struct drm_device *dev)
+{
+}
+
+static inline int drm_agp_acquire(struct drm_device *dev)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_acquire_ioctl(struct drm_device *dev, void *data,
+                                       struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_release(struct drm_device *dev)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_release_ioctl(struct drm_device *dev, void *data,
+                                       struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_enable(struct drm_device *dev,
+                                struct drm_agp_mode mode)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_enable_ioctl(struct drm_device *dev, void *data,
+                                      struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_info(struct drm_device *dev,
+                              struct drm_agp_info *info)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_info_ioctl(struct drm_device *dev, void *data,
+                                    struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_alloc(struct drm_device *dev,
+                               struct drm_agp_buffer *request)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_alloc_ioctl(struct drm_device *dev, void *data,
+                                     struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_free(struct drm_device *dev,
+                              struct drm_agp_buffer *request)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_free_ioctl(struct drm_device *dev, void *data,
+                                    struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_unbind(struct drm_device *dev,
+                                struct drm_agp_binding *request)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_unbind_ioctl(struct drm_device *dev, void *data,
+                                      struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_bind(struct drm_device *dev,
+                              struct drm_agp_binding *request)
+{
+       return -ENODEV;
+}
+
+static inline int drm_agp_bind_ioctl(struct drm_device *dev, void *data,
+                                    struct drm_file *file_priv)
+{
+       return -ENODEV;
+}
+
+#endif /* __OS_HAS_AGP */
+
 #endif                         /* __KERNEL__ */
 #endif

Modified: head/sys/dev/drm2/drm_memory.c
==============================================================================
--- head/sys/dev/drm2/drm_memory.c      Sun Nov 13 12:06:25 2016        
(r308611)
+++ head/sys/dev/drm2/drm_memory.c      Sun Nov 13 13:31:23 2016        
(r308612)
@@ -38,6 +38,8 @@ __FBSDID("$FreeBSD$");
 
 #include <dev/drm2/drmP.h>
 
+#define        vunmap(handle)
+
 #if __OS_HAS_AGP
 static void *agp_remap(unsigned long offset, unsigned long size,
                       struct drm_device * dev)
@@ -50,8 +52,6 @@ static void *agp_remap(unsigned long off
        return NULL;
 }
 
-#define        vunmap(handle)
-
 /** Wrapper around agp_free_memory() */
 void drm_free_agp(DRM_AGP_MEM * handle, int pages)
 {

Modified: head/sys/dev/drm2/drm_os_freebsd.c
==============================================================================
--- head/sys/dev/drm2/drm_os_freebsd.c  Sun Nov 13 12:06:25 2016        
(r308611)
+++ head/sys/dev/drm2/drm_os_freebsd.c  Sun Nov 13 13:31:23 2016        
(r308612)
@@ -347,6 +347,7 @@ dmi_check_system(const struct dmi_system
        return (res);
 }
 
+#if __OS_HAS_MTRR
 int
 drm_mtrr_add(unsigned long offset, unsigned long size, unsigned int flags)
 {
@@ -375,6 +376,7 @@ drm_mtrr_del(int handle __unused, unsign
        strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner));
        return (-mem_range_attr_set(&mrdesc, &act));
 }
+#endif
 
 void
 drm_clflush_pages(vm_page_t *pages, unsigned long num_pages)

Modified: head/sys/dev/drm2/drm_os_freebsd.h
==============================================================================
--- head/sys/dev/drm2/drm_os_freebsd.h  Sun Nov 13 12:06:25 2016        
(r308611)
+++ head/sys/dev/drm2/drm_os_freebsd.h  Sun Nov 13 13:31:23 2016        
(r308612)
@@ -592,8 +592,10 @@ typedef struct drm_pci_id_list
 #define        CONFIG_COMPAT
 #endif
 
+#ifndef __arm__
 #define        CONFIG_AGP      1
 #define        CONFIG_MTRR     1
+#endif
 
 #define        CONFIG_FB       1
 extern const char *fb_mode_option;

Modified: head/sys/dev/drm2/ttm/ttm_bo_util.c
==============================================================================
--- head/sys/dev/drm2/ttm/ttm_bo_util.c Sun Nov 13 12:06:25 2016        
(r308611)
+++ head/sys/dev/drm2/ttm/ttm_bo_util.c Sun Nov 13 13:31:23 2016        
(r308612)
@@ -439,7 +439,8 @@ ttm_buffer_object_transfer(struct ttm_bu
 vm_memattr_t
 ttm_io_prot(uint32_t caching_flags)
 {
-#if defined(__i386__) || defined(__amd64__) || defined(__powerpc__)
+#if defined(__i386__) || defined(__amd64__) || defined(__powerpc__) ||         
\
+ defined(__arm__)
        if (caching_flags & TTM_PL_FLAG_WC)
                return (VM_MEMATTR_WRITE_COMBINING);
        else
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to