diff options
author | Jerome Glisse | 2010-01-14 13:01:55 -0600 |
---|---|---|
committer | Jerome Glisse | 2010-01-14 13:01:55 -0600 |
commit | 320811b282d7f57b364f8414e2e7b714f89b0503 (patch) | |
tree | 8bc22caeb3886f5e0d7e504f460c3cbcfb23152f /radeon/radeon_cs_gem.c | |
parent | 2612371a626337452e598a3339355bf980f5be38 (diff) | |
download | external-libgbm-320811b282d7f57b364f8414e2e7b714f89b0503.tar.gz external-libgbm-320811b282d7f57b364f8414e2e7b714f89b0503.tar.xz external-libgbm-320811b282d7f57b364f8414e2e7b714f89b0503.zip |
radeon: get device id from the kernel, use it in cs_print
This allow external tools to know for which asics a cs
is destinated to.
Diffstat (limited to 'radeon/radeon_cs_gem.c')
-rw-r--r-- | radeon/radeon_cs_gem.c | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/radeon/radeon_cs_gem.c b/radeon/radeon_cs_gem.c index 1b1a9aa2..c2301ad3 100644 --- a/radeon/radeon_cs_gem.c +++ b/radeon/radeon_cs_gem.c | |||
@@ -43,6 +43,11 @@ | |||
43 | #include "xf86drm.h" | 43 | #include "xf86drm.h" |
44 | #include "radeon_drm.h" | 44 | #include "radeon_drm.h" |
45 | 45 | ||
46 | struct radeon_cs_manager_gem { | ||
47 | struct radeon_cs_manager base; | ||
48 | uint32_t device_id; | ||
49 | }; | ||
50 | |||
46 | #pragma pack(1) | 51 | #pragma pack(1) |
47 | struct cs_reloc_gem { | 52 | struct cs_reloc_gem { |
48 | uint32_t handle; | 53 | uint32_t handle; |
@@ -330,8 +335,11 @@ static int cs_gem_need_flush(struct radeon_cs_int *cs) | |||
330 | 335 | ||
331 | static void cs_gem_print(struct radeon_cs_int *cs, FILE *file) | 336 | static void cs_gem_print(struct radeon_cs_int *cs, FILE *file) |
332 | { | 337 | { |
338 | struct radeon_cs_manager_gem *csm; | ||
333 | unsigned int i; | 339 | unsigned int i; |
334 | 340 | ||
341 | csm = (struct radeon_cs_manager_gem *)cs->csm; | ||
342 | fprintf(file, "VENDORID:DEVICEID 0x%04X:0x%04X\n", 0x1002, csm->device_id); | ||
335 | for (i = 0; i < cs->cdw; i++) { | 343 | for (i = 0; i < cs->cdw; i++) { |
336 | fprintf(file, "0x%08X\n", cs->packets[i]); | 344 | fprintf(file, "0x%08X\n", cs->packets[i]); |
337 | } | 345 | } |
@@ -349,18 +357,31 @@ static struct radeon_cs_funcs radeon_cs_gem_funcs = { | |||
349 | cs_gem_print, | 357 | cs_gem_print, |
350 | }; | 358 | }; |
351 | 359 | ||
360 | static int radeon_get_device_id(int fd, uint32_t *device_id) | ||
361 | { | ||
362 | struct drm_radeon_info info; | ||
363 | int r; | ||
364 | |||
365 | *device_id = 0; | ||
366 | info.request = RADEON_INFO_DEVICE_ID; | ||
367 | info.value = device_id; | ||
368 | r = drmCommandWriteRead(fd, DRM_RADEON_INFO, &info, | ||
369 | sizeof(struct drm_radeon_info)); | ||
370 | return r; | ||
371 | } | ||
372 | |||
352 | struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd) | 373 | struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd) |
353 | { | 374 | { |
354 | struct radeon_cs_manager *csm; | 375 | struct radeon_cs_manager_gem *csm; |
355 | 376 | ||
356 | csm = (struct radeon_cs_manager*)calloc(1, | 377 | csm = calloc(1, sizeof(struct radeon_cs_manager_gem)); |
357 | sizeof(struct radeon_cs_manager)); | ||
358 | if (csm == NULL) { | 378 | if (csm == NULL) { |
359 | return NULL; | 379 | return NULL; |
360 | } | 380 | } |
361 | csm->funcs = &radeon_cs_gem_funcs; | 381 | csm->base.funcs = &radeon_cs_gem_funcs; |
362 | csm->fd = fd; | 382 | csm->base.fd = fd; |
363 | return csm; | 383 | radeon_get_device_id(fd, &csm->device_id); |
384 | return &csm->base; | ||
364 | } | 385 | } |
365 | 386 | ||
366 | void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm) | 387 | void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm) |