-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRadeonDevice.h
99 lines (77 loc) · 1.97 KB
/
RadeonDevice.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#pragma once
#include <private/shared/AutoDeleterOS.h>
#include "SADomains/Domains.h"
#include "RadeonMemory.h"
#include "RadeonInfo.h"
enum section_id {
SECT_NONE,
SECT_CONTEXT,
SECT_CLEAR,
SECT_CTRLCONST
};
struct cs_extent_def {
const uint32 *extent;
const uint32 reg_index;
const uint32 reg_count;
};
struct cs_section_def {
const struct cs_extent_def *section;
const enum section_id id;
};
struct radeon_shared_info;
class Atombios;
class DisplayRoster;
class MemoryManager;
class RadeonRingBuffer;
class RadeonRingBufferInt;
class RadeonUnit;
class RadeonDevice {
private:
FileDescriptorCloser fFd;
AreaDeleter fSharedArea;
AreaDeleter fRegsArea;
radeon_shared_info *fSharedInfo;
uint8 *fRegs;
DoublyLinkedList<RadeonUnit> fUnits;
ObjectDeleter<Atombios> fAtombios;
ExternalPtr<MemoryManager> fMemMgr;
ExternalPtr<DisplayRoster> fDisplays;
ExternalPtr<RadeonRingBuffer> fRings[8];
ExternalPtr<RadeonRingBufferInt> fIntRing;
status_t InitUnits();
status_t FiniUnits();
public:
struct Firmware {
ArrayDeleter<uint8> data;
off_t size;
};
struct {
Firmware pfp;
Firmware ce;
Firmware me;
Firmware mc;
Firmware rlc;
} fFirmwares;
struct amdgpu_device fInfo{};
struct {
const uint32 *regList;
uint32 regListLen;
const struct cs_section_def *csData;
MappedBuffer saveRestoreBuf;
uint32 clearStateSize;
MappedBuffer clearStateBuf;
} fRlc;
RadeonDevice();
~RadeonDevice();
status_t Init(int fd);
radeon_shared_info *SharedInfo() {return fSharedInfo;}
uint8 *Regs() {return fRegs;}
void InstallUnit(RadeonUnit *unit);
void InitRing(int ringId, ExternalPtr<RadeonRingBuffer> ring);
Atombios &Atom() {return *fAtombios.Get();}
ExternalPtr<MemoryManager> MemMgr() {return fMemMgr;}
ExternalPtr<DisplayRoster> Displays() {return fDisplays;}
ExternalPtr<RadeonRingBuffer> Rings(int ringId) {return fRings[ringId];}
ExternalPtr<RadeonRingBufferInt> IntRing() {return fIntRing;}
};
extern RadeonDevice gDevice;