/
txt_heap_size.go
74 lines (60 loc) · 1.56 KB
/
txt_heap_size.go
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
package registers
import (
"bytes"
"encoding/binary"
)
func init() {
registry.AddRegister(TXTHeapSize(0))
}
const TXTHeapSizeRegisterID RegisterID = "TXT.HEAP.SIZE"
const TXTHeapSizeRegisterOffset = 0x308
type TXTHeapSize uint32
func (reg TXTHeapSize) ID() RegisterID {
return TXTHeapSizeRegisterID
}
// Value returns the raw value wrapped into an interface.
func (reg TXTHeapSize) Value() interface{} {
return reg.Raw()
}
func (reg TXTHeapSize) Raw() uint32 {
return uint32(reg)
}
func (reg TXTHeapSize) BitSize() uint8 {
return uint8(binary.Size(reg) * 8)
}
func (reg TXTHeapSize) Address() uint64 {
return TxtPublicSpace + TXTHeapSizeRegisterOffset
}
func (reg TXTHeapSize) Fields() []Field {
return []Field{
{
Name: "<reserved>",
BitOffset: 0,
BitSize: reg.BitSize(),
Value: NumberToFieldValue(uint64(reg)),
},
}
}
var _ RawRegister32 = ParseTXTHeapSize(0)
// ReadTXTHeapSize reads a TXTHeapSize register from TXT config
func ReadTXTHeapSize(data TXTConfigSpace) (TXTHeapSize, error) {
var u32 uint32
buf := bytes.NewReader(data[TXTHeapSizeRegisterOffset:])
err := binary.Read(buf, binary.LittleEndian, &u32)
if err != nil {
return 0, err
}
return TXTHeapSize(u32), nil
}
// ParseTXTHeapSize returns TXTHeapSize from a raw 64bit value
func ParseTXTHeapSize(raw uint32) TXTHeapSize {
return TXTHeapSize(raw)
}
// FindTXTHeapSize returns TXTHeapSize register if found
func FindTXTHeapSize(regs Registers) (TXTHeapSize, bool) {
r := regs.Find(TXTHeapSizeRegisterID)
if r == nil {
return 0, false
}
return r.(TXTHeapSize), true
}