38 #define MCR_PCI_REG_ADDR 0xD0
40 #define MDR_PCI_REG_ADDR 0xD4
42 #define MCRX_PCI_REG_ADDR 0xD8
58 uint32_t reg_off : 24;
65 request_op(uint8_t port, uint32_t reg_off, uint8_t opcode)
68 mcr_t mcr = { .raw = 0 };
69 mcrx_t mcrx = { .raw = 0 };
71 pci_addr.
reg_off = MCR_PCI_REG_ADDR;
75 mcr.reg_off = reg_off & 0xFF;
76 pci_config_write(pci_addr, mcr.raw);
78 pci_addr.
reg_off = MCRX_PCI_REG_ADDR;
79 mcrx.reg_off = reg_off >> 8;
80 pci_config_write(pci_addr, mcrx.raw);
89 SYSCALLS_DEFINE_SINGLETON(quarkX1000_msg_bus_read,
98 PROT_DOMAINS_VALIDATE_PTR(loc_val, val,
sizeof(*val));
100 request_op(port, reg_off, 0x10);
102 pci_addr.
reg_off = MDR_PCI_REG_ADDR;
103 *loc_val = pci_config_read(pci_addr);
112 SYSCALLS_DEFINE_SINGLETON(quarkX1000_msg_bus_write,
120 pci_addr.
reg_off = MDR_PCI_REG_ADDR;
121 pci_config_write(pci_addr, val);
123 request_op(port, reg_off, 0x11);
127 quarkX1000_msg_bus_init(
void)
129 PROT_DOMAINS_INIT_ID(quarkX1000_msg_bus);
130 prot_domains_reg(&quarkX1000_msg_bus, 0, 0, 0, 0,
true);
131 SYSCALLS_INIT(quarkX1000_msg_bus_read);
132 SYSCALLS_AUTHZ(quarkX1000_msg_bus_read, quarkX1000_msg_bus);
133 SYSCALLS_INIT(quarkX1000_msg_bus_write);
134 SYSCALLS_AUTHZ(quarkX1000_msg_bus_write, quarkX1000_msg_bus);
138 quarkX1000_msg_bus_lock(
void)
140 SYSCALLS_DEAUTHZ(quarkX1000_msg_bus_read, quarkX1000_msg_bus);
141 SYSCALLS_DEAUTHZ(quarkX1000_msg_bus_write, quarkX1000_msg_bus);
PCI configuration address.
Data associated with each protection domain that is owned by clients of that domain and used to ident...
uint32_t reg_off
Register/offset number.