aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJerome Glisse2010-01-14 13:01:55 -0600
committerJerome Glisse2010-01-14 13:01:55 -0600
commit320811b282d7f57b364f8414e2e7b714f89b0503 (patch)
tree8bc22caeb3886f5e0d7e504f460c3cbcfb23152f /radeon/radeon_cs_gem.c
parent2612371a626337452e598a3339355bf980f5be38 (diff)
downloadexternal-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.c33
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
46struct 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)
47struct cs_reloc_gem { 52struct 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
331static void cs_gem_print(struct radeon_cs_int *cs, FILE *file) 336static 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
360static 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
352struct radeon_cs_manager *radeon_cs_manager_gem_ctor(int fd) 373struct 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
366void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm) 387void radeon_cs_manager_gem_dtor(struct radeon_cs_manager *csm)