aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Horizon/Sdk/Sf/Hipc/Header.cs
blob: cdb50b5789bbf9a1393234356c7d15c993b502af (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
53
54
55
56
57
58
59
60
61
62
63
64
65
using Ryujinx.Common.Utilities;
using Ryujinx.Horizon.Sdk.Sf.Cmif;

namespace Ryujinx.Horizon.Sdk.Sf.Hipc
{
    struct Header
    {
        private uint _word0;
        private uint _word1;

        public CommandType Type
        {
            get => (CommandType)_word0.Extract(0, 16);
            set => _word0 = _word0.Insert(0, 16, (uint)value);
        }

        public int SendStaticsCount
        {
            get => (int)_word0.Extract(16, 4);
            set => _word0 = _word0.Insert(16, 4, (uint)value);
        }

        public int SendBuffersCount
        {
            get => (int)_word0.Extract(20, 4);
            set => _word0 = _word0.Insert(20, 4, (uint)value);
        }

        public int ReceiveBuffersCount
        {
            get => (int)_word0.Extract(24, 4);
            set => _word0 = _word0.Insert(24, 4, (uint)value);
        }

        public int ExchangeBuffersCount
        {
            get => (int)_word0.Extract(28, 4);
            set => _word0 = _word0.Insert(28, 4, (uint)value);
        }

        public int DataWordsCount
        {
            get => (int)_word1.Extract(0, 10);
            set => _word1 = _word1.Insert(0, 10, (uint)value);
        }

        public int ReceiveStaticMode
        {
            get => (int)_word1.Extract(10, 4);
            set => _word1 = _word1.Insert(10, 4, (uint)value);
        }

        public int ReceiveListOffset
        {
            get => (int)_word1.Extract(20, 11);
            set => _word1 = _word1.Insert(20, 11, (uint)value);
        }

        public bool HasSpecialHeader
        {
            get => _word1.Extract(31);
            set => _word1 = _word1.Insert(31, value);
        }
    }
}