/*
*/
/*
* Copyright (c) 2012, 2013 Intel Corporation. All rights reserved.
*/
/**************************************************************************
*
* Copyright 2006-2008 Tungsten Graphics, Inc., Cedar Park, TX. USA.
* All Rights Reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*
**************************************************************************/
/*
* Authors:
* Thomas Hellstrom <thomas-at-tungstengraphics-dot-com>
*/
#ifndef _DRM_MM_H_
#define _DRM_MM_H_
/*
* Generic range manager structs
*/
struct drm_mm_node {
unsigned hole_follows;
unsigned scanned_block;
unsigned scanned_prev_free;
unsigned scanned_next_free;
unsigned scanned_preceeds_hole;
unsigned allocated;
unsigned long color;
unsigned long start;
unsigned long size;
};
struct drm_mm {
/* List of free memory blocks, most recently freed ordered. */
/* head_node.node_list is the list of all memory nodes, ordered
* according to the (increasing) start address of the memory node. */
int num_unused;
unsigned scan_alignment;
unsigned long scan_color;
unsigned long scan_size;
unsigned long scan_hit_start;
unsigned long scan_hit_end;
unsigned scanned_blocks;
unsigned long scan_start;
unsigned long scan_end;
};
{
}
/* Note that we need to unroll list_for_each_entry in order to inline
* setting hole_start and hole_end on each iteration and keep the
* macro sane.
*/
1 : 0); \
/*
* Basic range manager support (drm_mm.c)
*/
unsigned long start,
unsigned long size,
bool atomic);
unsigned long size,
unsigned alignment,
unsigned long color,
int atomic);
extern struct drm_mm_node *drm_mm_get_block_range_generic(
struct drm_mm_node *node,
unsigned long size,
unsigned alignment,
unsigned long color,
unsigned long start,
unsigned long end,
int atomic);
unsigned long size,
unsigned alignment);
unsigned long size,
unsigned alignment);
extern struct drm_mm_node *drm_mm_get_block_range(
struct drm_mm_node *parent,
unsigned long size,
unsigned alignment,
unsigned long start,
unsigned long end);
extern struct drm_mm_node *drm_mm_get_block_atomic_range(
struct drm_mm_node *parent,
unsigned long size,
unsigned alignment,
unsigned long start,
unsigned long end);
struct drm_mm_node *node,
unsigned long size,
unsigned alignment);
struct drm_mm_node *node,
unsigned long size,
unsigned alignment,
unsigned long start,
unsigned long end);
struct drm_mm_node *node,
unsigned long size,
unsigned alignment,
unsigned long color);
struct drm_mm_node *node,
unsigned long size,
unsigned alignment,
unsigned long color,
unsigned long start,
unsigned long end);
unsigned long size,
unsigned alignment,
unsigned long color,
bool best_match);
extern struct drm_mm_node *drm_mm_search_free_in_range_generic(
unsigned long size,
unsigned alignment,
unsigned long color,
unsigned long start,
unsigned long end,
bool best_match);
unsigned long size,
unsigned alignment,
bool best_match);
extern struct drm_mm_node *drm_mm_search_free_in_range(
unsigned long size,
unsigned alignment,
unsigned long start,
unsigned long end,
bool best_match);
unsigned long start,
unsigned long size);
{
}
unsigned long size,
unsigned alignment,
unsigned long color);
unsigned long size,
unsigned alignment,
unsigned long color,
unsigned long start,
unsigned long end);
#ifdef CONFIG_DEBUG_FS
#endif
#endif /* _DRM_MM_H_ */