Deleted Added
full compact
1,5c1,3
< /*-
< *Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
< * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
< * Copyright (c) 2011 The FreeBSD Foundation
< * All rights reserved.
---
> /**
> * \file drm_memory.c
> * Memory management wrappers for DRM
7,8c5,10
< * Portions of this software were developed by Konstantin Belousov
< * under sponsorship from the FreeBSD Foundation.
---
> * \author Rickard E. (Rik) Faith <faith@valinux.com>
> * \author Gareth Hughes <gareth@valinux.com>
> */
>
> /*
> * Created: Thu Feb 4 14:00:34 1999 by faith@valinux.com
9a12,15
> * Copyright 1999 Precision Insight, Inc., Cedar Park, Texas.
> * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California.
> * All Rights Reserved.
> *
28,32d33
< *
< * Authors:
< * Rickard E. (Rik) Faith <faith@valinux.com>
< * Gareth Hughes <gareth@valinux.com>
< *
36c37
< __FBSDID("$FreeBSD: head/sys/dev/drm2/drm_memory.c 277487 2015-01-21 16:10:37Z kib $");
---
> __FBSDID("$FreeBSD: head/sys/dev/drm2/drm_memory.c 280183 2015-03-17 18:50:33Z dumbbell $");
38,45d38
< /** @file drm_memory.c
< * Wrappers for kernel memory allocation routines, and MTRR management support.
< *
< * This file previously implemented a memory consumption tracking system using
< * the "area" argument for various different types of allocations, but that
< * has been stripped out for now.
< */
<
48,71c41,43
< MALLOC_DEFINE(DRM_MEM_DMA, "drm_dma", "DRM DMA Data Structures");
< MALLOC_DEFINE(DRM_MEM_SAREA, "drm_sarea", "DRM SAREA Data Structures");
< MALLOC_DEFINE(DRM_MEM_DRIVER, "drm_driver", "DRM DRIVER Data Structures");
< MALLOC_DEFINE(DRM_MEM_MAGIC, "drm_magic", "DRM MAGIC Data Structures");
< MALLOC_DEFINE(DRM_MEM_IOCTLS, "drm_ioctls", "DRM IOCTL Data Structures");
< MALLOC_DEFINE(DRM_MEM_MAPS, "drm_maps", "DRM MAP Data Structures");
< MALLOC_DEFINE(DRM_MEM_BUFS, "drm_bufs", "DRM BUFFER Data Structures");
< MALLOC_DEFINE(DRM_MEM_SEGS, "drm_segs", "DRM SEGMENTS Data Structures");
< MALLOC_DEFINE(DRM_MEM_PAGES, "drm_pages", "DRM PAGES Data Structures");
< MALLOC_DEFINE(DRM_MEM_FILES, "drm_files", "DRM FILE Data Structures");
< MALLOC_DEFINE(DRM_MEM_QUEUES, "drm_queues", "DRM QUEUE Data Structures");
< MALLOC_DEFINE(DRM_MEM_CMDS, "drm_cmds", "DRM COMMAND Data Structures");
< MALLOC_DEFINE(DRM_MEM_MAPPINGS, "drm_mapping", "DRM MAPPING Data Structures");
< MALLOC_DEFINE(DRM_MEM_BUFLISTS, "drm_buflists", "DRM BUFLISTS Data Structures");
< MALLOC_DEFINE(DRM_MEM_AGPLISTS, "drm_agplists", "DRM AGPLISTS Data Structures");
< MALLOC_DEFINE(DRM_MEM_CTXBITMAP, "drm_ctxbitmap",
< "DRM CTXBITMAP Data Structures");
< MALLOC_DEFINE(DRM_MEM_SGLISTS, "drm_sglists", "DRM SGLISTS Data Structures");
< MALLOC_DEFINE(DRM_MEM_DRAWABLE, "drm_drawable", "DRM DRAWABLE Data Structures");
< MALLOC_DEFINE(DRM_MEM_MM, "drm_sman", "DRM MEMORY MANAGER Data Structures");
< MALLOC_DEFINE(DRM_MEM_HASHTAB, "drm_hashtab", "DRM HASHTABLE Data Structures");
< MALLOC_DEFINE(DRM_MEM_KMS, "drm_kms", "DRM KMS Data Structures");
<
< void drm_mem_init(void)
---
> #if __OS_HAS_AGP
> static void *agp_remap(unsigned long offset, unsigned long size,
> struct drm_device * dev)
72a45,50
> /*
> * FIXME Linux<->FreeBSD: Not implemented. This is never called
> * on FreeBSD anyway, because drm_agp_mem->cant_use_aperture is
> * set to 0.
> */
> return NULL;
75,77c53
< void drm_mem_uninit(void)
< {
< }
---
> #define vunmap(handle)
79c55,56
< void *drm_ioremap_wc(struct drm_device *dev, drm_local_map_t *map)
---
> /** Wrapper around agp_free_memory() */
> void drm_free_agp(DRM_AGP_MEM * handle, int pages)
81,82c58
< return pmap_mapdev_attr(map->offset, map->size, VM_MEMATTR_WRITE_COMBINING);
< }
---
> device_t agpdev;
84,86c60,64
< void *drm_ioremap(struct drm_device *dev, drm_local_map_t *map)
< {
< return pmap_mapdev(map->offset, map->size);
---
> agpdev = agp_find_device();
> if (!agpdev || !handle)
> return;
>
> agp_free_memory(agpdev, handle);
87a66
> EXPORT_SYMBOL(drm_free_agp);
89c68,69
< void drm_ioremapfree(drm_local_map_t *map)
---
> /** Wrapper around agp_bind_memory() */
> int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start)
91c71,77
< pmap_unmapdev((vm_offset_t) map->virtual, map->size);
---
> device_t agpdev;
>
> agpdev = agp_find_device();
> if (!agpdev || !handle)
> return -EINVAL;
>
> return -agp_bind_memory(agpdev, handle, start * PAGE_SIZE);
94,95c80,81
< int
< drm_mtrr_add(unsigned long offset, size_t size, int flags)
---
> /** Wrapper around agp_unbind_memory() */
> int drm_unbind_agp(DRM_AGP_MEM * handle)
97,98c83
< int act;
< struct mem_range_desc mrdesc;
---
> device_t agpdev;
100,105c85,89
< mrdesc.mr_base = offset;
< mrdesc.mr_len = size;
< mrdesc.mr_flags = flags;
< act = MEMRANGE_SET_UPDATE;
< strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner));
< return mem_range_attr_set(&mrdesc, &act);
---
> agpdev = agp_find_device();
> if (!agpdev || !handle)
> return -EINVAL;
>
> return -agp_unbind_memory(agpdev, handle);
106a91
> EXPORT_SYMBOL(drm_unbind_agp);
108,109c93,95
< int
< drm_mtrr_del(int __unused handle, unsigned long offset, size_t size, int flags)
---
> #else /* __OS_HAS_AGP */
> static inline void *agp_remap(unsigned long offset, unsigned long size,
> struct drm_device * dev)
111,119c97
< int act;
< struct mem_range_desc mrdesc;
<
< mrdesc.mr_base = offset;
< mrdesc.mr_len = size;
< mrdesc.mr_flags = flags;
< act = MEMRANGE_SET_REMOVE;
< strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner));
< return mem_range_attr_set(&mrdesc, &act);
---
> return NULL;
122,123c100,102
< void
< drm_clflush_pages(vm_page_t *pages, unsigned long num_pages)
---
> #endif /* agp */
>
> void drm_core_ioremap(struct drm_local_map *map, struct drm_device *dev)
124a104,110
> if (drm_core_has_AGP(dev) &&
> dev->agp && dev->agp->cant_use_aperture && map->type == _DRM_AGP)
> map->handle = agp_remap(map->offset, map->size, dev);
> else
> map->handle = pmap_mapdev(map->offset, map->size);
> }
> EXPORT_SYMBOL(drm_core_ioremap);
126c112,119
< pmap_invalidate_cache_pages(pages, num_pages);
---
> void drm_core_ioremap_wc(struct drm_local_map *map, struct drm_device *dev)
> {
> if (drm_core_has_AGP(dev) &&
> dev->agp && dev->agp->cant_use_aperture && map->type == _DRM_AGP)
> map->handle = agp_remap(map->offset, map->size, dev);
> else
> map->handle = pmap_mapdev_attr(map->offset, map->size,
> VM_MEMATTR_WRITE_COMBINING);
127a121
> EXPORT_SYMBOL(drm_core_ioremap_wc);
129,130c123
< void
< drm_clflush_virt_range(char *addr, unsigned long length)
---
> void drm_core_ioremapfree(struct drm_local_map *map, struct drm_device *dev)
131a125,126
> if (!map->handle || !map->size)
> return;
133,134c128,132
< pmap_invalidate_cache_range((vm_offset_t)addr,
< (vm_offset_t)addr + length, TRUE);
---
> if (drm_core_has_AGP(dev) &&
> dev->agp && dev->agp->cant_use_aperture && map->type == _DRM_AGP)
> vunmap(map->handle);
> else
> pmap_unmapdev((vm_offset_t)map->handle, map->size);
135a134
> EXPORT_SYMBOL(drm_core_ioremapfree);