diff options
author | Thomas Hellstrom <thomas@tungstengraphics.com> | 2006-08-07 08:36:47 -0400 |
---|---|---|
committer | Dave Airlie <airlied@linux.ie> | 2006-09-21 15:32:31 -0400 |
commit | 8d153f7107ff2c5d6e32053ae377c961187ab6b9 (patch) | |
tree | c90cdf1bf8e04237e840b37033fc0f57b74ab292 /drivers/char/drm/drmP.h | |
parent | 8669cbc5e651bf4effa20e8c244a5a7d67da6fe9 (diff) |
drm: update user token hashing and map handles
Keep hashed user tokens, with the following changes:
32-bit physical device addresses are mapped directly to user-tokens. No
duplicate maps are allowed, and the addresses are assumed to be outside
of the range 0x10000000 through 0x30000000. The user-token is identical
to the 32-bit physical start-address of the map.
64-bit physical device addressed are mapped to user-tokens in the range
0x10000000 to 0x30000000 with page-size increments. The user_token should
not be interpreted as an address.
Other map types, like upcoming TTM maps are mapped to user-tokens in the
range
0x10000000 to 0x30000000 with page-size increments. The user_token should
not be interpreted as an address.
Implement hashed map lookups.
Signed-off-by: Dave Airlie <airlied@linux.ie>
Diffstat (limited to 'drivers/char/drm/drmP.h')
-rw-r--r-- | drivers/char/drm/drmP.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h index fedaf013f84..84e9c18fdbe 100644 --- a/drivers/char/drm/drmP.h +++ b/drivers/char/drm/drmP.h | |||
@@ -140,6 +140,7 @@ | |||
140 | #define DRM_MEM_HASHTAB 23 | 140 | #define DRM_MEM_HASHTAB 23 |
141 | 141 | ||
142 | #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8) | 142 | #define DRM_MAX_CTXBITMAP (PAGE_SIZE * 8) |
143 | #define DRM_MAP_HASH_OFFSET 0x10000000 | ||
143 | 144 | ||
144 | /*@}*/ | 145 | /*@}*/ |
145 | 146 | ||
@@ -485,6 +486,7 @@ typedef struct drm_sigdata { | |||
485 | */ | 486 | */ |
486 | typedef struct drm_map_list { | 487 | typedef struct drm_map_list { |
487 | struct list_head head; /**< list head */ | 488 | struct list_head head; /**< list head */ |
489 | drm_hash_item_t hash; | ||
488 | drm_map_t *map; /**< mapping */ | 490 | drm_map_t *map; /**< mapping */ |
489 | unsigned int user_token; | 491 | unsigned int user_token; |
490 | } drm_map_list_t; | 492 | } drm_map_list_t; |
@@ -662,6 +664,7 @@ typedef struct drm_device { | |||
662 | /*@{ */ | 664 | /*@{ */ |
663 | drm_map_list_t *maplist; /**< Linked list of regions */ | 665 | drm_map_list_t *maplist; /**< Linked list of regions */ |
664 | int map_count; /**< Number of mappable regions */ | 666 | int map_count; /**< Number of mappable regions */ |
667 | drm_open_hash_t map_hash; /**< User token hash table for maps */ | ||
665 | 668 | ||
666 | /** \name Context handle management */ | 669 | /** \name Context handle management */ |
667 | /*@{ */ | 670 | /*@{ */ |