summaryrefslogtreecommitdiffstats
path: root/src/audio_core/memory_pool.h
blob: 3e9e777ae99138c561cc52d3313ff4638cd367f2 (plain) (blame)
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
// Copyright 2020 yuzu Emulator Project
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.

#pragma once

#include "common/common_funcs.h"
#include "common/common_types.h"
#include "common/swap.h"

namespace AudioCore {

class ServerMemoryPoolInfo {
public:
    ServerMemoryPoolInfo();
    ~ServerMemoryPoolInfo();

    enum class State : u32_le {
        Invalid = 0x0,
        Aquired = 0x1,
        RequestDetach = 0x2,
        Detached = 0x3,
        RequestAttach = 0x4,
        Attached = 0x5,
        Released = 0x6,
    };

    struct InParams {
        u64_le address{};
        u64_le size{};
        State state{};
        INSERT_PADDING_WORDS(3);
    };
    static_assert(sizeof(InParams) == 0x20, "InParams are an invalid size");

    struct OutParams {
        State state{};
        INSERT_PADDING_WORDS(3);
    };
    static_assert(sizeof(OutParams) == 0x10, "OutParams are an invalid size");

    bool Update(const InParams& in_params, OutParams& out_params);

private:
    // There's another entry here which is the DSP address, however since we're not talking to the
    // DSP we can just use the same address provided by the guest without needing to remap
    u64_le cpu_address{};
    u64_le size{};
    bool used{};
};

} // namespace AudioCore