MCPcopy Create free account
hub / github.com/RPCSX/rpcsx / sys_memory_get_page_attribute

Function sys_memory_get_page_attribute

kernel/cellos/src/sys_memory.cpp:235–267  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233}
234
235error_code sys_memory_get_page_attribute(cpu_thread &cpu, u32 addr,
236 vm::ptr<sys_page_attr_t> attr) {
237 cpu.state += cpu_flag::wait;
238
239 sys_memory.trace("sys_memory_get_page_attribute(addr=0x%x, attr=*0x%x)", addr,
240 attr);
241
242 vm::writer_lock rlock;
243
244 if (!vm::check_addr(addr) || addr >= SPU_FAKE_BASE_ADDR) {
245 return CELL_EINVAL;
246 }
247
248 if (!vm::check_addr(attr.addr(), vm::page_readable, attr.size())) {
249 return CELL_EFAULT;
250 }
251
252 attr->attribute = 0x40000ull; // SYS_MEMORY_PROT_READ_WRITE (TODO)
253 attr->access_right = addr >> 28 == 0xdu
254 ? SYS_MEMORY_ACCESS_RIGHT_PPU_THR
255 : SYS_MEMORY_ACCESS_RIGHT_ANY; // (TODO)
256
257 if (vm::check_addr(addr, vm::page_1m_size)) {
258 attr->page_size = 0x100000;
259 } else if (vm::check_addr(addr, vm::page_64k_size)) {
260 attr->page_size = 0x10000;
261 } else {
262 attr->page_size = 4096;
263 }
264
265 attr->pad = 0; // Always write 0
266 return CELL_OK;
267}
268
269error_code
270sys_memory_get_user_memory_size(cpu_thread &cpu,

Callers 15

cellRtcGetCurrentTickFunction · 0.85
cellRtcGetCurrentClockFunction · 0.85
cellRtcFormatRfc2822Function · 0.85
cellRtcFormatRfc3339Function · 0.85
cellRtcParseDateTimeFunction · 0.85
cellRtcParseRfc3339Function · 0.85
cellRtcGetTickFunction · 0.85
cellRtcSetTickFunction · 0.85
cellRtcTickAddTicksFunction · 0.85

Calls 3

check_addrFunction · 0.50
addrMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected