📄 mem_shx.h
字号:
/* Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved. *//* mdmem.h - machine dependant memory management structures*/#ifndef MEM_SHx_H#define MEM_SHx_H#ifdef SH4#define PAGE_SIZE 4096 /* page size: must be 1024, 2048 or 4096 */#else#define PAGE_SIZE 1024 /* page size: must be 1024, 2048 or 4096 */#endif/* Page permission bits */#define PG_PERMISSION_MASK 0x000001FF#define PG_EXECUTE_MASK 0x00000000 //0x00000200 /* unsued by HW */#define PG_VALID_MASK 0x00000101#define PG_GLOBAL_MASK 0x00000002#define PG_DIRTY_MASK 0x00000004#define PG_CACHE 0x00000008#define PG_CACHE_MASK 0x00000008#define PG_GUARD 0x00000008#define PG_NOCACHE 0x00000000#define PG_1K_MASK 0x00000000#define PG_4K_MASK 0x00000010#define PG_64K_MASK 0x00000080#define PG_1M_MASK 0x00000090#define PG_PROTECTION 0x00000060#define PG_PROT_KREAD 0x00000000 /* kernel read-only */#define PG_PROT_KWRITE 0x00000020 /* kernel read/write */#define PG_PROT_READ 0x00000040 /* user read-only */#define PG_PROT_WRITE 0x00000060 /* user read/write */#if PAGE_SIZE == 4096#define PG_SIZE_MASK PG_4K_MASK#else#define PG_SIZE_MASK PG_1K_MASK#endif#define PG_READ_WRITE (PG_SIZE_MASK | PG_VALID_MASK | PG_DIRTY_MASK | PG_CACHE_MASK | PG_PROT_WRITE)#define UNKNOWN_BASE (~0)#define BAD_PAGE (4)#ifndef ASM_ONLY#define SWITCHKEY(oldval, newval) ((oldval) = (pCurThread)->aky, (pCurThread)->aky = (newval))#define GETCURKEY() ((pCurThread)->aky)#define SETCURKEY(newval) ((pCurThread)->aky = (newval))#define PFN_INCR PAGE_SIZE#define PFN_MASK (~(PAGE_SIZE-1) & 0x1FFFFFFF)/* Find the page frame # from a GPINFO pointer */#define GetPFN(pgpi) ((ulong)(pgpi) & PFN_MASK)#define NextPFN(pfn) ((pfn) + PFN_INCR)#define PFNfromEntry(entry) ((entry) & ~(PAGE_SIZE-1))#define PFNfrom256(pg256) ((ulong)(pg256)<<8 & ~(PAGE_SIZE-1))/* Test the write access on a page table entry */#define IsPageWritable(entry) (((entry)&PG_PROTECTION) == PG_PROT_WRITE)#define IsPageReadable(entry) (((entry)&PG_VALID_MASK) == PG_VALID_MASK)/* Query & set thread's kernel vs. user mode state */#define KERNEL_MODE 0x40#define USER_MODE 0x00#define SR_MODE_BITS 24#define GetThreadMode(pth) (((pth)->ctx.Psr >> SR_MODE_BITS) & 0x40)#define SetThreadMode(pth, mode) \ ((pth)->ctx.Psr = ((pth)->ctx.Psr & 0x3fffffff) | ((mode)<<SR_MODE_BITS))/* Query & set kernel vs. user mode state via Context */#define GetContextMode(pctx) (((pctx)->Psr >> SR_MODE_BITS) & 0x40)#define SetContextMode(pctx, mode) \ ((pctx)->Psr = ((pctx)->Psr & 0x3fffffff) | ((mode)<<SR_MODE_BITS))/* Return virtual address from page frame number */#define Phys2Virt(pfn) ((PVOID)((pfn) | 0x80000000))#define Phys2VirtUC(pfn) ((PVOID)((pfn) | 0xA0000000))#if PAGE_SIZE==4096extern KDBase[];#define KPAGE_PTE ((ulong)KDBase + 0x1000 + 0x80000000 \ + PG_4K_MASK + PG_VALID_MASK \ + PG_GLOBAL_MASK + PG_CACHE_MASK + PG_PROT_READ)#else#define KPAGE_PTE ((ulong)&KData + 0x80000000 + PG_VALID_MASK \ + PG_GLOBAL_MASK + PG_CACHE_MASK + PG_PROT_READ)#endif#endif // not ASM_ONLY#endif // MEM_SHx_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -