1683N/A * Copyright (c) 2006, 2016, Oracle and/or its affiliates. All rights reserved. 1494N/A * \author Rickard E. (Rik) Faith <faith@valinux.com> 1494N/A * \author Gareth Hughes <gareth@valinux.com> 1494N/A * Created: Thu Nov 23 03:10:50 2000 by gareth@valinux.com 1494N/A * Copyright 1999, 2000 Precision Insight, Inc., Cedar Park, Texas. 1494N/A * Copyright 2000 VA Linux Systems, Inc., Sunnyvale, California. 1494N/A * Copyright (c) 2009, 2012, Intel Corporation. 1494N/A * Permission is hereby granted, free of charge, to any person obtaining a 1494N/A * copy of this software and associated documentation files (the "Software"), 1494N/A * to deal in the Software without restriction, including without limitation 1494N/A * the rights to use, copy, modify, merge, publish, distribute, sublicense, 1494N/A * and/or sell copies of the Software, and to permit persons to whom the 1494N/A * Software is furnished to do so, subject to the following conditions: 1494N/A * The above copyright notice and this permission notice (including the next 1494N/A * paragraph) shall be included in all copies or substantial portions of the 1494N/A * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1494N/A * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1494N/A * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1494N/A * VA LINUX SYSTEMS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR 1494N/A * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 1494N/A * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 1494N/A * OTHER DEALINGS IN THE SOFTWARE. 1494N/A#
error "No define for _LP64, _SYSCALL32_IMPL or _ILP32" 1494N/A * Because the kernel-userspace ABI is fixed at a 32-bit offset 1494N/A * while PCI resources may live above that, we ignore the map 1494N/A * offset for maps of type _DRM_FRAMEBUFFER or _DRM_REGISTERS. 1494N/A * It is assumed that each driver will have only one resource of 1494N/A default:
/* Make gcc happy */ 1494N/A * Core function to create a range of memory available for mapping by a 1494N/A * Adjusts the memory offset to its absolute value according to the mapping 1494N/A * type. Adds the map to the map list drm_device::maplist. Adds MTRR's where 1494N/A * applicable and if supported by the kernel. 1494N/A /* Only allow shared memory to be removable since we only keep enough 1494N/A * book keeping information about shared memory to allow for removal 1494N/A /* page-align _DRM_SHM maps. They are allocated here so there is no security 1494N/A * hole created by that and it works around various broken drivers that use 1494N/A * a non-aligned quantity to map the SAREA. --BenH 1494N/A /* Some drivers preinitialize some maps, without the X Server 1494N/A * needing to be aware of it. Therefore, we just return success 1494N/A * when the server tries to create a duplicate map. 1494N/A "mismatched sizes, (%ld vs %ld)\n",
1494N/A "mismatched sizes, (%ld vs %ld)\n",
1494N/A /* Prevent a 2nd X Server from creating a 2nd lock */ 1494N/A /* Assign a 32-bit handle */ 1494N/A /* We do it here so that dev->struct_mutex protects the increment */ 1494N/A * Ioctl to specify a range of memory that is available for mapping by a 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a drm_map structure. 1494N/A * \return zero on success or a negative value on error. 1494N/A /* avoid a warning on 64-bit, this casting isn't very nice, but the API is set so too late */ 1494N/A * Remove a map private from list and deallocate resources if the mapping 1494N/A * Searches the map on drm_device::maplist, removes it from the list, see if 1494N/A * its being used, and free any associate resource (such as MTRR's) if it's not 1494N/A /* Find the list entry for the map and remove it */ 1494N/A/* The rmmap ioctl appears to be unnecessary. All mappings are torn down on 1494N/A * the last close of the device, and this is necessary for cleanup when things 1494N/A * exit uncleanly. Therefore, having userland manually remove mappings seems 1494N/A * like a pointless exercise since they're going away anyway. 1494N/A * One use case might be after addmap is allowed for normal users for SHM and 1494N/A * gets used by drivers that the server doesn't need to care about. This seems 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a struct drm_map structure. 1494N/A * \return zero on success or a negative value on error. 1494N/A /* List has wrapped around to the head pointer, or its empty we didn't 1494N/A /* Register and framebuffer maps are permanent */ 1494N/A * Cleanup after an error on one of the addbufs() functions. 1494N/A * \param entry buffer entry where the error occurred. 1494N/A * Frees any pages and buffers associated with the given entry. 1494N/A "drm_cleanup_buf_error: not implemented");
1494N/A * Add AGP buffers for DMA transfers. 1494N/A * \param dev struct drm_device to which the buffers are to be added. 1494N/A * \param request pointer to a struct drm_buf_desc describing the request. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * After some sanity checks creates a drm_buf structure for each buffer and 1494N/A * reallocates the buffer list of the same size order to accommodate the new 1494N/A /* Set count correctly so we free the proper amount. */ 1494N/A /* Free the entry because it isn't valid */ 1494N/A /* Set count correctly so we free the proper amount. */ 1494N/A /* Free the entry because it isn't valid */ 1494N/A * Add buffers for DMA transfers (ioctl). 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a struct drm_buf_desc request. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * According with the memory type specified in drm_buf_desc::flags and the 1494N/A * build options, it dispatches the call either to addbufs_agp(), 1494N/A * addbufs_sg() or addbufs_pci() for AGP, scatter-gather or consistent 1494N/A * Get information about the buffer mappings. 1494N/A * This was originally mean for debugging purposes, or by a sophisticated 1494N/A * client library to determine how best to use the available buffers (e.g., 1494N/A * large buffers can be used for image transfer). 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a drm_buf_info structure. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * Increments drm_device::buf_use while holding the drm_device::count_lock 1494N/A * lock, preventing of allocating more buffers after this call. Information 1494N/A * about each requested buffer is then copied into user space. 1494N/A * Specifies a low and high water mark for buffer allocation 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg a pointer to a drm_buf_desc structure. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * Verifies that the size order is bounded between the admissible orders and 1494N/A * updates the respective drm_device_dma::bufs entry low and high water mark. 1494N/A * \note This ioctl is deprecated and mostly never used. 1494N/A * Unreserve the buffers in list, previously reserved using drmDMA. 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a drm_buf_free structure. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * Calls free_buffer() for each used buffer. 1494N/A * This function is primarily used for debugging. 1494N/A * Maps all of the DMA buffers into client-virtual space (ioctl). 1494N/A * \param inode device inode. 1494N/A * \param file_priv DRM file private. 1494N/A * \param arg pointer to a drm_buf_map structure. 1494N/A * \return zero on success or a negative number on failure. 1494N/A * Maps the AGP, SG or PCI buffer region with do_mmap(), and copies information 1494N/A * about each buffer into user space. For PCI buffers, it calls do_mmap() with 1494N/A * offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls 1494N/A * Compute size order. Returns the exponent of the smaller power of two which 1494N/A * is greater or equal to given number. 1494N/A * \todo Can be made faster.