aboutsummaryrefslogtreecommitdiffstats
path: root/include/drm/drmP.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/drm/drmP.h')
-rw-r--r--include/drm/drmP.h178
1 files changed, 69 insertions, 109 deletions
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index b84d8ae35e6f..45b67d9c39c1 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -34,9 +34,6 @@
34#ifndef _DRM_P_H_ 34#ifndef _DRM_P_H_
35#define _DRM_P_H_ 35#define _DRM_P_H_
36 36
37/* If you want the memory alloc debug functionality, change define below */
38/* #define DEBUG_MEMORY */
39
40#ifdef __KERNEL__ 37#ifdef __KERNEL__
41#ifdef __alpha__ 38#ifdef __alpha__
42/* add include of current.h so that "current" is defined 39/* add include of current.h so that "current" is defined
@@ -86,7 +83,17 @@ struct drm_device;
86 83
87#include "drm_os_linux.h" 84#include "drm_os_linux.h"
88#include "drm_hashtab.h" 85#include "drm_hashtab.h"
86#include "drm_mm.h"
87
88#define DRM_UT_CORE 0x01
89#define DRM_UT_DRIVER 0x02
90#define DRM_UT_KMS 0x04
91#define DRM_UT_MODE 0x08
89 92
93extern void drm_ut_debug_printk(unsigned int request_level,
94 const char *prefix,
95 const char *function_name,
96 const char *format, ...);
90/***********************************************************************/ 97/***********************************************************************/
91/** \name DRM template customization defaults */ 98/** \name DRM template customization defaults */
92/*@{*/ 99/*@{*/
@@ -123,31 +130,6 @@ struct drm_device;
123 130
124#define DRM_FLAG_DEBUG 0x01 131#define DRM_FLAG_DEBUG 0x01
125 132
126#define DRM_MEM_DMA 0
127#define DRM_MEM_SAREA 1
128#define DRM_MEM_DRIVER 2
129#define DRM_MEM_MAGIC 3
130#define DRM_MEM_IOCTLS 4
131#define DRM_MEM_MAPS 5
132#define DRM_MEM_VMAS 6
133#define DRM_MEM_BUFS 7
134#define DRM_MEM_SEGS 8
135#define DRM_MEM_PAGES 9
136#define DRM_MEM_FILES 10
137#define DRM_MEM_QUEUES 11
138#define DRM_MEM_CMDS 12
139#define DRM_MEM_MAPPINGS 13
140#define DRM_MEM_BUFLISTS 14
141#define DRM_MEM_AGPLISTS 15
142#define DRM_MEM_TOTALAGP 16
143#define DRM_MEM_BOUNDAGP 17
144#define DRM_MEM_CTXBITMAP 18
145#define DRM_MEM_STUB 19
146#define DRM_MEM_SGLISTS 20
147#define DRM_MEM_CTXLIST 21
148#define DRM_MEM_MM 22
149#define DRM_MEM_HASHTAB 23
150
151#define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8) 133#define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8)
152#define DRM_MAP_HASH_OFFSET 0x10000000 134#define DRM_MAP_HASH_OFFSET 0x10000000
153 135
@@ -186,15 +168,57 @@ struct drm_device;
186 * \param arg arguments 168 * \param arg arguments
187 */ 169 */
188#if DRM_DEBUG_CODE 170#if DRM_DEBUG_CODE
189#define DRM_DEBUG(fmt, arg...) \ 171#define DRM_DEBUG(fmt, args...) \
172 do { \
173 drm_ut_debug_printk(DRM_UT_CORE, DRM_NAME, \
174 __func__, fmt, ##args); \
175 } while (0)
176
177#define DRM_DEBUG_DRIVER(prefix, fmt, args...) \
178 do { \
179 drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \
180 __func__, fmt, ##args); \
181 } while (0)
182#define DRM_DEBUG_KMS(prefix, fmt, args...) \
183 do { \
184 drm_ut_debug_printk(DRM_UT_KMS, prefix, \
185 __func__, fmt, ##args); \
186 } while (0)
187#define DRM_DEBUG_MODE(prefix, fmt, args...) \
188 do { \
189 drm_ut_debug_printk(DRM_UT_MODE, prefix, \
190 __func__, fmt, ##args); \
191 } while (0)
192#define DRM_LOG(fmt, args...) \
193 do { \
194 drm_ut_debug_printk(DRM_UT_CORE, NULL, \
195 NULL, fmt, ##args); \
196 } while (0)
197#define DRM_LOG_KMS(fmt, args...) \
190 do { \ 198 do { \
191 if ( drm_debug ) \ 199 drm_ut_debug_printk(DRM_UT_KMS, NULL, \
192 printk(KERN_DEBUG \ 200 NULL, fmt, ##args); \
193 "[" DRM_NAME ":%s] " fmt , \ 201 } while (0)
194 __func__ , ##arg); \ 202#define DRM_LOG_MODE(fmt, args...) \
203 do { \
204 drm_ut_debug_printk(DRM_UT_MODE, NULL, \
205 NULL, fmt, ##args); \
206 } while (0)
207#define DRM_LOG_DRIVER(fmt, args...) \
208 do { \
209 drm_ut_debug_printk(DRM_UT_DRIVER, NULL, \
210 NULL, fmt, ##args); \
195 } while (0) 211 } while (0)
196#else 212#else
213#define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0)
214#define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0)
215#define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0)
197#define DRM_DEBUG(fmt, arg...) do { } while (0) 216#define DRM_DEBUG(fmt, arg...) do { } while (0)
217#define DRM_LOG(fmt, arg...) do { } while (0)
218#define DRM_LOG_KMS(fmt, args...) do { } while (0)
219#define DRM_LOG_MODE(fmt, arg...) do { } while (0)
220#define DRM_LOG_DRIVER(fmt, arg...) do { } while (0)
221
198#endif 222#endif
199 223
200#define DRM_PROC_LIMIT (PAGE_SIZE-80) 224#define DRM_PROC_LIMIT (PAGE_SIZE-80)
@@ -237,15 +261,15 @@ struct drm_device;
237 * \param dev DRM device. 261 * \param dev DRM device.
238 * \param filp file pointer of the caller. 262 * \param filp file pointer of the caller.
239 */ 263 */
240#define LOCK_TEST_WITH_RETURN( dev, file_priv ) \ 264#define LOCK_TEST_WITH_RETURN( dev, _file_priv ) \
241do { \ 265do { \
242 if (!_DRM_LOCK_IS_HELD(file_priv->master->lock.hw_lock->lock) || \ 266 if (!_DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock) || \
243 file_priv->master->lock.file_priv != file_priv) { \ 267 _file_priv->master->lock.file_priv != _file_priv) { \
244 DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\ 268 DRM_ERROR( "%s called without lock held, held %d owner %p %p\n",\
245 __func__, _DRM_LOCK_IS_HELD(file_priv->master->lock.hw_lock->lock),\ 269 __func__, _DRM_LOCK_IS_HELD(_file_priv->master->lock.hw_lock->lock),\
246 file_priv->master->lock.file_priv, file_priv); \ 270 _file_priv->master->lock.file_priv, _file_priv); \
247 return -EINVAL; \ 271 return -EINVAL; \
248 } \ 272 } \
249} while (0) 273} while (0)
250 274
251/** 275/**
@@ -502,26 +526,6 @@ struct drm_sigdata {
502}; 526};
503 527
504 528
505/*
506 * Generic memory manager structs
507 */
508
509struct drm_mm_node {
510 struct list_head fl_entry;
511 struct list_head ml_entry;
512 int free;
513 unsigned long start;
514 unsigned long size;
515 struct drm_mm *mm;
516 void *private;
517};
518
519struct drm_mm {
520 struct list_head fl_entry;
521 struct list_head ml_entry;
522};
523
524
525/** 529/**
526 * Kernel side of a mapping 530 * Kernel side of a mapping
527 */ 531 */
@@ -1385,22 +1389,6 @@ extern char *drm_get_connector_status_name(enum drm_connector_status status);
1385extern int drm_sysfs_connector_add(struct drm_connector *connector); 1389extern int drm_sysfs_connector_add(struct drm_connector *connector);
1386extern void drm_sysfs_connector_remove(struct drm_connector *connector); 1390extern void drm_sysfs_connector_remove(struct drm_connector *connector);
1387 1391
1388/*
1389 * Basic memory manager support (drm_mm.c)
1390 */
1391extern struct drm_mm_node *drm_mm_get_block(struct drm_mm_node * parent,
1392 unsigned long size,
1393 unsigned alignment);
1394extern void drm_mm_put_block(struct drm_mm_node * cur);
1395extern struct drm_mm_node *drm_mm_search_free(const struct drm_mm *mm, unsigned long size,
1396 unsigned alignment, int best_match);
1397extern int drm_mm_init(struct drm_mm *mm, unsigned long start, unsigned long size);
1398extern void drm_mm_takedown(struct drm_mm *mm);
1399extern int drm_mm_clean(struct drm_mm *mm);
1400extern unsigned long drm_mm_tail_space(struct drm_mm *mm);
1401extern int drm_mm_remove_space_from_tail(struct drm_mm *mm, unsigned long size);
1402extern int drm_mm_add_space_to_tail(struct drm_mm *mm, unsigned long size);
1403
1404/* Graphics Execution Manager library functions (drm_gem.c) */ 1392/* Graphics Execution Manager library functions (drm_gem.c) */
1405int drm_gem_init(struct drm_device *dev); 1393int drm_gem_init(struct drm_device *dev);
1406void drm_gem_destroy(struct drm_device *dev); 1394void drm_gem_destroy(struct drm_device *dev);
@@ -1501,39 +1489,17 @@ static __inline__ void drm_core_dropmap(struct drm_local_map *map)
1501{ 1489{
1502} 1490}
1503 1491
1504#ifndef DEBUG_MEMORY
1505/** Wrapper around kmalloc() */
1506static __inline__ void *drm_alloc(size_t size, int area)
1507{
1508 return kmalloc(size, GFP_KERNEL);
1509}
1510
1511/** Wrapper around kfree() */
1512static __inline__ void drm_free(void *pt, size_t size, int area)
1513{
1514 kfree(pt);
1515}
1516
1517/** Wrapper around kcalloc() */
1518static __inline__ void *drm_calloc(size_t nmemb, size_t size, int area)
1519{
1520 return kcalloc(nmemb, size, GFP_KERNEL);
1521}
1522 1492
1523static __inline__ void *drm_calloc_large(size_t nmemb, size_t size) 1493static __inline__ void *drm_calloc_large(size_t nmemb, size_t size)
1524{ 1494{
1525 u8 *addr; 1495 if (size * nmemb <= PAGE_SIZE)
1526
1527 if (size <= PAGE_SIZE)
1528 return kcalloc(nmemb, size, GFP_KERNEL); 1496 return kcalloc(nmemb, size, GFP_KERNEL);
1529 1497
1530 addr = vmalloc(nmemb * size); 1498 if (size != 0 && nmemb > ULONG_MAX / size)
1531 if (!addr)
1532 return NULL; 1499 return NULL;
1533 1500
1534 memset(addr, 0, nmemb * size); 1501 return __vmalloc(size * nmemb,
1535 1502 GFP_KERNEL | __GFP_HIGHMEM | __GFP_ZERO, PAGE_KERNEL);
1536 return addr;
1537} 1503}
1538 1504
1539static __inline void drm_free_large(void *ptr) 1505static __inline void drm_free_large(void *ptr)
@@ -1543,12 +1509,6 @@ static __inline void drm_free_large(void *ptr)
1543 1509
1544 vfree(ptr); 1510 vfree(ptr);
1545} 1511}
1546#else
1547extern void *drm_alloc(size_t size, int area);
1548extern void drm_free(void *pt, size_t size, int area);
1549extern void *drm_calloc(size_t nmemb, size_t size, int area);
1550#endif
1551
1552/*@}*/ 1512/*@}*/
1553 1513
1554#endif /* __KERNEL__ */ 1514#endif /* __KERNEL__ */