radeon_cs.c revision 74937cda177363ff4ede9e2b4ea2bec04cda892e
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include <stdio.h>
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "radeon_cs.h"
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "radeon_cs_int.h"
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovstruct radeon_cs *radeon_cs_create(struct radeon_cs_manager *csm, uint32_t ndw)
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = csm->funcs->cs_create(csm, ndw);
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return (struct radeon_cs *)csi;
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_write_reloc(struct radeon_cs *cs,
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                          struct radeon_bo *bo,
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                          uint32_t read_domain,
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                          uint32_t write_domain,
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                          uint32_t flags)
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_write_reloc(csi,
21e6986e1e8d4a57987f47c215490cb080a65ee29aSvet Ganov                                           bo,
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           read_domain,
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           write_domain,
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                                           flags);
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_begin(struct radeon_cs *cs,
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    uint32_t ndw,
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    const char *file,
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    const char *func,
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                    int line)
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_begin(csi, ndw, file, func, line);
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_end(struct radeon_cs *cs,
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                  const char *file,
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                  const char *func,
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                  int line)
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_end(csi, file, func, line);
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_emit(struct radeon_cs *cs)
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_emit(csi);
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_destroy(struct radeon_cs *cs)
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_destroy(csi);
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_erase(struct radeon_cs *cs)
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_erase(csi);
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovint radeon_cs_need_flush(struct radeon_cs *cs)
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    return csi->csm->funcs->cs_need_flush(csi);
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_print(struct radeon_cs *cs, FILE *file)
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    csi->csm->funcs->cs_print(csi, file);
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_set_limit(struct radeon_cs *cs, uint32_t domain, uint32_t limit)
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    if (domain == RADEON_GEM_DOMAIN_VRAM)
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csi->csm->vram_limit = limit;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    else
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov        csi->csm->gart_limit = limit;
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovvoid radeon_cs_space_set_flush(struct radeon_cs *cs, void (*fn)(void *), void *data)
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov{
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    struct radeon_cs_int *csi = (struct radeon_cs_int *)cs;
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    csi->space_flush_fn = fn;
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov    csi->space_flush_data = data;
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov