1235783Skib/*- 2235783Skib *Copyright 1999 Precision Insight, Inc., Cedar Park, Texas. 3235783Skib * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 4235783Skib * Copyright (c) 2011 The FreeBSD Foundation 5235783Skib * All rights reserved. 6235783Skib * 7235783Skib * Portions of this software were developed by Konstantin Belousov 8235783Skib * under sponsorship from the FreeBSD Foundation. 9235783Skib * 10235783Skib * Permission is hereby granted, free of charge, to any person obtaining a 11235783Skib * copy of this software and associated documentation files (the "Software"), 12235783Skib * to deal in the Software without restriction, including without limitation 13235783Skib * the rights to use, copy, modify, merge, publish, distribute, sublicense, 14235783Skib * and/or sell copies of the Software, and to permit persons to whom the 15235783Skib * Software is furnished to do so, subject to the following conditions: 16235783Skib * 17235783Skib * The above copyright notice and this permission notice (including the next 18235783Skib * paragraph) shall be included in all copies or substantial portions of the 19235783Skib * Software. 20235783Skib * 21235783Skib * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 22235783Skib * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 23235783Skib * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 24235783Skib * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 25235783Skib * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 26235783Skib * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 27235783Skib * OTHER DEALINGS IN THE SOFTWARE. 28235783Skib * 29235783Skib * Authors: 30235783Skib * Rickard E. (Rik) Faith <faith@valinux.com> 31235783Skib * Gareth Hughes <gareth@valinux.com> 32235783Skib * 33235783Skib */ 34235783Skib 35235783Skib#include <sys/cdefs.h> 36235783Skib__FBSDID("$FreeBSD$"); 37235783Skib 38235783Skib/** @file drm_memory.c 39235783Skib * Wrappers for kernel memory allocation routines, and MTRR management support. 40235783Skib * 41235783Skib * This file previously implemented a memory consumption tracking system using 42235783Skib * the "area" argument for various different types of allocations, but that 43235783Skib * has been stripped out for now. 44235783Skib */ 45235783Skib 46235783Skib#include <dev/drm2/drmP.h> 47235783Skib 48235783SkibMALLOC_DEFINE(DRM_MEM_DMA, "drm_dma", "DRM DMA Data Structures"); 49235783SkibMALLOC_DEFINE(DRM_MEM_SAREA, "drm_sarea", "DRM SAREA Data Structures"); 50235783SkibMALLOC_DEFINE(DRM_MEM_DRIVER, "drm_driver", "DRM DRIVER Data Structures"); 51235783SkibMALLOC_DEFINE(DRM_MEM_MAGIC, "drm_magic", "DRM MAGIC Data Structures"); 52235783SkibMALLOC_DEFINE(DRM_MEM_IOCTLS, "drm_ioctls", "DRM IOCTL Data Structures"); 53235783SkibMALLOC_DEFINE(DRM_MEM_MAPS, "drm_maps", "DRM MAP Data Structures"); 54235783SkibMALLOC_DEFINE(DRM_MEM_BUFS, "drm_bufs", "DRM BUFFER Data Structures"); 55235783SkibMALLOC_DEFINE(DRM_MEM_SEGS, "drm_segs", "DRM SEGMENTS Data Structures"); 56235783SkibMALLOC_DEFINE(DRM_MEM_PAGES, "drm_pages", "DRM PAGES Data Structures"); 57235783SkibMALLOC_DEFINE(DRM_MEM_FILES, "drm_files", "DRM FILE Data Structures"); 58235783SkibMALLOC_DEFINE(DRM_MEM_QUEUES, "drm_queues", "DRM QUEUE Data Structures"); 59235783SkibMALLOC_DEFINE(DRM_MEM_CMDS, "drm_cmds", "DRM COMMAND Data Structures"); 60235783SkibMALLOC_DEFINE(DRM_MEM_MAPPINGS, "drm_mapping", "DRM MAPPING Data Structures"); 61235783SkibMALLOC_DEFINE(DRM_MEM_BUFLISTS, "drm_buflists", "DRM BUFLISTS Data Structures"); 62235783SkibMALLOC_DEFINE(DRM_MEM_AGPLISTS, "drm_agplists", "DRM AGPLISTS Data Structures"); 63235783SkibMALLOC_DEFINE(DRM_MEM_CTXBITMAP, "drm_ctxbitmap", 64235783Skib "DRM CTXBITMAP Data Structures"); 65235783SkibMALLOC_DEFINE(DRM_MEM_SGLISTS, "drm_sglists", "DRM SGLISTS Data Structures"); 66235783SkibMALLOC_DEFINE(DRM_MEM_DRAWABLE, "drm_drawable", "DRM DRAWABLE Data Structures"); 67235783SkibMALLOC_DEFINE(DRM_MEM_MM, "drm_sman", "DRM MEMORY MANAGER Data Structures"); 68235783SkibMALLOC_DEFINE(DRM_MEM_HASHTAB, "drm_hashtab", "DRM HASHTABLE Data Structures"); 69235783SkibMALLOC_DEFINE(DRM_MEM_KMS, "drm_kms", "DRM KMS Data Structures"); 70235783Skib 71235783Skibvoid drm_mem_init(void) 72235783Skib{ 73235783Skib} 74235783Skib 75235783Skibvoid drm_mem_uninit(void) 76235783Skib{ 77235783Skib} 78235783Skib 79235783Skibvoid *drm_ioremap_wc(struct drm_device *dev, drm_local_map_t *map) 80235783Skib{ 81235783Skib return pmap_mapdev_attr(map->offset, map->size, VM_MEMATTR_WRITE_COMBINING); 82235783Skib} 83235783Skib 84235783Skibvoid *drm_ioremap(struct drm_device *dev, drm_local_map_t *map) 85235783Skib{ 86235783Skib return pmap_mapdev(map->offset, map->size); 87235783Skib} 88235783Skib 89235783Skibvoid drm_ioremapfree(drm_local_map_t *map) 90235783Skib{ 91235783Skib pmap_unmapdev((vm_offset_t) map->virtual, map->size); 92235783Skib} 93235783Skib 94235783Skibint 95235783Skibdrm_mtrr_add(unsigned long offset, size_t size, int flags) 96235783Skib{ 97235783Skib int act; 98235783Skib struct mem_range_desc mrdesc; 99235783Skib 100235783Skib mrdesc.mr_base = offset; 101235783Skib mrdesc.mr_len = size; 102235783Skib mrdesc.mr_flags = flags; 103235783Skib act = MEMRANGE_SET_UPDATE; 104235783Skib strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner)); 105235783Skib return mem_range_attr_set(&mrdesc, &act); 106235783Skib} 107235783Skib 108235783Skibint 109235783Skibdrm_mtrr_del(int __unused handle, unsigned long offset, size_t size, int flags) 110235783Skib{ 111235783Skib int act; 112235783Skib struct mem_range_desc mrdesc; 113235783Skib 114235783Skib mrdesc.mr_base = offset; 115235783Skib mrdesc.mr_len = size; 116235783Skib mrdesc.mr_flags = flags; 117235783Skib act = MEMRANGE_SET_REMOVE; 118235783Skib strlcpy(mrdesc.mr_owner, "drm", sizeof(mrdesc.mr_owner)); 119235783Skib return mem_range_attr_set(&mrdesc, &act); 120235783Skib} 121235783Skib 122235783Skibvoid 123235783Skibdrm_clflush_pages(vm_page_t *pages, unsigned long num_pages) 124235783Skib{ 125235783Skib 126235783Skib pmap_invalidate_cache_pages(pages, num_pages); 127235783Skib} 128