1bf215546Sopenharmony_ci/*
2bf215546Sopenharmony_ci * Copyright © 2021 Collabora, Ltd.
3bf215546Sopenharmony_ci * Author: Antonio Caggiano <antonio.caggiano@collabora.com>
4bf215546Sopenharmony_ci *
5bf215546Sopenharmony_ci * SPDX-License-Identifier: MIT
6bf215546Sopenharmony_ci */
7bf215546Sopenharmony_ci
8bf215546Sopenharmony_ci#pragma once
9bf215546Sopenharmony_ci
10bf215546Sopenharmony_cistruct panfrost_device;
11bf215546Sopenharmony_cistruct panfrost_perf;
12bf215546Sopenharmony_ci
13bf215546Sopenharmony_cinamespace pps
14bf215546Sopenharmony_ci{
15bf215546Sopenharmony_ciclass PanfrostDevice
16bf215546Sopenharmony_ci{
17bf215546Sopenharmony_ci   public:
18bf215546Sopenharmony_ci   PanfrostDevice(int fd);
19bf215546Sopenharmony_ci   ~PanfrostDevice();
20bf215546Sopenharmony_ci
21bf215546Sopenharmony_ci   PanfrostDevice(const PanfrostDevice &) = delete;
22bf215546Sopenharmony_ci   PanfrostDevice &operator=(const PanfrostDevice &) = delete;
23bf215546Sopenharmony_ci
24bf215546Sopenharmony_ci   PanfrostDevice(PanfrostDevice&&);
25bf215546Sopenharmony_ci   PanfrostDevice& operator=(PanfrostDevice&&);
26bf215546Sopenharmony_ci
27bf215546Sopenharmony_ci   void *ctx = nullptr;
28bf215546Sopenharmony_ci   struct panfrost_device* dev = nullptr;
29bf215546Sopenharmony_ci};
30bf215546Sopenharmony_ci
31bf215546Sopenharmony_ciclass PanfrostPerf
32bf215546Sopenharmony_ci{
33bf215546Sopenharmony_ci   public:
34bf215546Sopenharmony_ci   PanfrostPerf(const PanfrostDevice& dev);
35bf215546Sopenharmony_ci   ~PanfrostPerf();
36bf215546Sopenharmony_ci
37bf215546Sopenharmony_ci   PanfrostPerf(const PanfrostPerf &) = delete;
38bf215546Sopenharmony_ci   PanfrostPerf &operator=(const PanfrostPerf &) = delete;
39bf215546Sopenharmony_ci
40bf215546Sopenharmony_ci   PanfrostPerf(PanfrostPerf&&);
41bf215546Sopenharmony_ci   PanfrostPerf& operator=(PanfrostPerf&&);
42bf215546Sopenharmony_ci
43bf215546Sopenharmony_ci   int enable() const;
44bf215546Sopenharmony_ci   void disable() const;
45bf215546Sopenharmony_ci   int dump() const;
46bf215546Sopenharmony_ci
47bf215546Sopenharmony_ci   struct panfrost_perf *perf = nullptr;
48bf215546Sopenharmony_ci};
49bf215546Sopenharmony_ci
50bf215546Sopenharmony_ci} // namespace pps
51