|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2024 nono project
4: // Licensed under nono-license.txt
5: //
6:
7: //
8: // QEMU Virtual System Controller
9: //
10:
11: // https://www.qemu.org/docs/master/specs/virt-ctlr.html
12:
13: #include "qemusysctlr.h"
14: #include "power.h"
15:
16: // コンストラクタ
17: QemuSysCtlrDevice::QemuSysCtlrDevice()
18: : inherited(OBJ_QEMUSYSCTLR)
19: {
20: }
21:
22: // デストラクタ
23: QemuSysCtlrDevice::~QemuSysCtlrDevice()
24: {
25: }
26:
27: busdata
28: QemuSysCtlrDevice::Read32(uint32 addr)
29: {
30: uint32 offset = addr & 0xff;
31:
32: if (offset == 0) {
33: // Features (Read Only)
34: uint32 data = FEATURES;
35: putlog(2, "FEATURES -> $%08x", data);
36: return data;
37: } else {
38: // 他のポートがどうなるのかは仕様に書いてない。
39: putlog(1, "Read32 $%08x (BusErr)", addr);
40: return busdata::BusErr;
41: }
42: }
43:
44: busdata
45: QemuSysCtlrDevice::Write32(uint32 addr, uint32 data)
46: {
47: uint32 offset = addr & 0xff;
48:
49: if (offset == 4) {
50: // Command (Write Only)
51: static const char *cmdname[] = {
52: "no-op",
53: "reset",
54: "halt",
55: "panic",
56: };
57: putlog(1, "Command <- $%08x (%s)", data,
58: (data < countof(cmdname) ? cmdname[data] : cmdname[0]));
59: switch (data) {
60: default:
61: case 0: // no-op
62: break;
63:
64: case 1: // reset
65: GetPowerDevice()->MakeResetHard();
66: break;
67:
68: case 2: // halt
69: case 3: // panic
70: GetPowerDevice()->PushPowerButton();
71: break;
72: }
73: return 0;
74: } else {
75: // 他のポートがどうなるのかは仕様に書いてない。
76: putlog(1, "Write32 $%08x <- $%08x (BusErr)", addr, data);
77: return busdata::BusErr;
78: }
79: }
80:
81: busdata
82: QemuSysCtlrDevice::Peek8(uint32 addr)
83: {
84: uint32 offset = addr & 0xff;
85:
86: switch (offset) {
87: case 0: return (FEATURES >> 24);
88: case 1: return (FEATURES >> 16) & 0xff;
89: case 2: return (FEATURES >> 8) & 0xff;
90: case 3: return (FEATURES ) & 0xff;
91:
92: default:
93: return busdata::BusErr;
94: }
95: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.