[metal] Clean up code for getting pointer to struct mman (#828)

Co-authored-by: tkchia <tkchia-cosmo@gmx.com>
This commit is contained in:
tkchia 2023-06-12 01:32:39 +08:00 committed by GitHub
parent 5a6a4819d4
commit e47c0cc929
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 8 additions and 6 deletions

View file

@ -23,9 +23,8 @@
noasan int sys_munmap_metal(void *addr, size_t size) { noasan int sys_munmap_metal(void *addr, size_t size) {
size_t i; size_t i;
uint64_t *e, paddr; uint64_t *e, paddr;
struct mman *mm; struct mman *mm = __get_mm();
uint64_t *pml4t = __get_pml4t(); uint64_t *pml4t = __get_pml4t();
mm = (struct mman *)(BANE + 0x0500);
for (i = 0; i < size; i += 4096) { for (i = 0; i < size; i += 4096) {
e = __get_virtual(mm, pml4t, (uint64_t)addr + i, false); e = __get_virtual(mm, pml4t, (uint64_t)addr + i, false);
if (e) { if (e) {

View file

@ -46,7 +46,7 @@ noasan struct DirectMap sys_mmap_metal(void *vaddr, size_t size, int prot,
struct mman *mm; struct mman *mm;
struct DirectMap res; struct DirectMap res;
uint64_t addr, faddr = 0, page, e, *pte, *fdpte, *pml4t; uint64_t addr, faddr = 0, page, e, *pte, *fdpte, *pml4t;
mm = (struct mman *)(BANE + 0x0500); mm = __get_mm();
pml4t = __get_pml4t(); pml4t = __get_pml4t();
size = ROUNDUP(size, 4096); size = ROUNDUP(size, 4096);
addr = (uint64_t)vaddr; addr = (uint64_t)vaddr;

View file

@ -176,7 +176,7 @@ __msabi noasan EFI_STATUS EfiMain(EFI_HANDLE ImageHandle,
SystemTable->BootServices->AllocatePages( SystemTable->BootServices->AllocatePages(
AllocateAddress, EfiRuntimeServicesData, AllocateAddress, EfiRuntimeServicesData,
((_end - __executable_start) + 4095) / 4096, &Address); ((_end - __executable_start) + 4095) / 4096, &Address);
mm = (struct mman *)0x0500; mm = __get_mm_phy();
SystemTable->BootServices->SetMem(mm, sizeof(*mm), 0); SystemTable->BootServices->SetMem(mm, sizeof(*mm), 0);
SystemTable->BootServices->SetMem( SystemTable->BootServices->SetMem(
(void *)0x79000, 0x7e000 - 0x79000 + sizeof(struct EfiArgs), 0); (void *)0x79000, 0x7e000 - 0x79000 + sizeof(struct EfiArgs), 0);

View file

@ -225,5 +225,8 @@ forceinline void outb(unsigned short port, unsigned char byte) {
(uint64_t *)(BANE + cr3); \ (uint64_t *)(BANE + cr3); \
}) })
#define __get_mm() ((struct mman *)(BANE + 0x0500))
#define __get_mm_phy() ((struct mman *)0x0500)
#endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */ #endif /* !(__ASSEMBLER__ + __LINKER__ + 0) */
#endif /* COSMOPOLITAN_LIBC_RUNTIME_PC_H_ */ #endif /* COSMOPOLITAN_LIBC_RUNTIME_PC_H_ */

View file

@ -35,7 +35,7 @@ struct Tty _vga_tty;
void _vga_reinit(struct Tty *tty, unsigned short starty, unsigned short startx, void _vga_reinit(struct Tty *tty, unsigned short starty, unsigned short startx,
unsigned init_flags) { unsigned init_flags) {
struct mman *mm = (struct mman *)(BANE + 0x0500); struct mman *mm = __get_mm();
unsigned char vid_type = mm->pc_video_type; unsigned char vid_type = mm->pc_video_type;
unsigned short height = mm->pc_video_height, width = mm->pc_video_width, unsigned short height = mm->pc_video_height, width = mm->pc_video_width,
stride = mm->pc_video_stride; stride = mm->pc_video_stride;
@ -66,7 +66,7 @@ void _vga_reinit(struct Tty *tty, unsigned short starty, unsigned short startx,
textstartup void _vga_init(void) { textstartup void _vga_init(void) {
if (IsMetal()) { if (IsMetal()) {
struct mman *mm = (struct mman *)(BANE + 0x0500); struct mman *mm = __get_mm();
unsigned short starty = mm->pc_video_curs_info.y, unsigned short starty = mm->pc_video_curs_info.y,
startx = mm->pc_video_curs_info.x; startx = mm->pc_video_curs_info.x;
_vga_reinit(&_vga_tty, starty, startx, 0); _vga_reinit(&_vga_tty, starty, startx, 0);