⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mem_mips.h

📁 wince下的源代码集合打包
💻 H
字号:
/* Copyright (c) 1995-2000 Microsoft Corporation.  All rights reserved. *//*    mdmem.h - machine dependant memory management structures*/#ifndef MEM_MIPS_H#define MEM_MIPS_H#if R4100#define PAGE_SIZE 4096		/* R4100 page size can be 1024 or 4096 */#else#define PAGE_SIZE 4096		/* R3000 & R4000 page size */#endif//++// These symbols are duplicated from kernel.h so they can// be used by the MIPS assembler code without including kernel.h// Bit offsets of block & section in a virtual address:#define VA_BLOCK        16#define VA_SECTION      25#if PAGE_SIZE==4096#define VA_PAGE         12#define PAGE_MASK       0x00F#else#define VA_PAGE			10#define PAGE_MASK       0x03F#endif#define BLOCK_MASK      0x1FF#define SECTION_MASK	0x03F#define VERIFY_READ_FLAG    0#define VERIFY_EXECUTE_FLAG 0#define VERIFY_WRITE_FLAG   1#define VERIFY_KERNEL_OK    2//-- End of duplicated symbols// Bit offsets of page, block & section in the context register:#if R3000  #define CTX_PAGE      2  #define CTX_BLOCK     6  #define CTX_SECTION   15#endif#if R4000  #if R4100    #define CTX_PAGE      (VA_PAGE-7)    #define CTX_BLOCK     9    #define CTX_SECTION   18  #else    #define CTX_PAGE      3    #define CTX_BLOCK     7    #define CTX_SECTION   16  #endif#endif#if R3000  #define ASID_MASK 0x3f#endif#if R4000  #define ASID_MASK 0xFF#endif#if R3000/* Page permission bits */#define PG_PERMISSION_MASK  0x80000F80#define PG_GUARD            0x80000000  /* unused by HW */#define PG_EXECUTE_MASK     0x00000080  /* unsued by HW */#define PG_GLOBAL_MASK      0x00000100#define PG_VALID_MASK       0x00000200#define PG_DIRTY_MASK       0x00000400#define PG_CACHE_MASK       0x00000800#define PG_NOCACHE          0x00000800#define PG_CACHE            0x00000000#define MUST_CLEAR_GUARD_BIT 1#endif#if R4000/* Page permission bits */#define PG_PERMISSION_MASK  0xC000003F#define PG_GUARD            0x80000000  /* unused by HW */#define PG_EXECUTE_MASK     0x40000000  /* unused by HW */#define PG_GLOBAL_MASK      0x00000001#define PG_VALID_MASK       0x00000002#define PG_DIRTY_MASK       0x00000004#define PG_CACHE_MASK       0x00000038  /* should be ANDed to find out cache state */#define PG_NOCACHE          0x00000010#define PG_CACHE            0x00000018#endif#define PG_PROT_READ        0x00000000#define PG_PROT_WRITE       PG_DIRTY_MASK#define PG_SIZE_MASK        0x00000000#define PG_PROTECTION		(PG_PROT_READ | PG_PROT_WRITE) #define PG_READ_WRITE       (PG_DIRTY_MASK | PG_VALID_MASK | PG_CACHE)// MemBlock structure layout#define mb_lock     0#define mb_uses     4#define mb_flags    5#define mb_ixBase   6#define mb_hPf		8#define mb_pages    12#define INVALID_POINTER_VALUE	0xC0000000#if R3000  #define BAD_PAGE        (~0ul)  #define PFN_INCR  0x1000#endif#if R4000  #define BAD_PAGE        (~0x3Ful)  #if R4100    #define PFN_SHIFT   4  #else    #define PFN_SHIFT   6  #endif  #define PFN_INCR  (PAGE_SIZE >> PFN_SHIFT)#endif#define SWITCHKEY(oldval, newval) ((oldval) = (pCurThread)->aky, CurAKey = (pCurThread)->aky = (newval))#define GETCURKEY() ((pCurThread)->aky)#define SETCURKEY(newval) (CurAKey = (pCurThread)->aky = (newval))/* Query & set thread's kernel vs. user mode state */#define GetThreadMode(pth) ((pth)->ctx.Psr & MODE_MASK)#define SetThreadMode(pth, mode) ((pth)->ctx.Psr = (mode))/* Query & set kernel vs. user mode state via Context */#define GetContextMode(pctx) ((pctx)->Psr & MODE_MASK)#define SetContextMode(pctx, mode) ((pctx)->Psr = (mode))#if R3000  /* Find the page frame # from a GPINFO pointer */  #define GetPFN(pgpi)  ((ulong)(pgpi) & 0x1FFFF000)  #define NextPFN(pfn)  ((pfn) + PFN_INCR)  #define PFNfromEntry(entry)   ((entry) & 0x7FFFF000)  #define PFNfrom256(x)	((ulong)(x)<<8 & 0x7FFFF000)  #define KERNEL_MODE 0x04  #define USER_MODE 0x0c  #define MODE_MASK 0x0c  /* Return virtual address from page frame number */  #define Phys2Virt(pfn)  ((PVOID)((pfn) | 0x80000000))  #define Phys2VirtUC(pfn)  ((PVOID)((pfn) | 0xA0000000))#endif#if R4000  #define PFN_MASK (~(PAGE_SIZE-1) & 0x1FFFFFFF)  /* Find the page frame # from a GPINFO pointer */  #define GetPFN(pgpi)  (((ulong)(pgpi) & PFN_MASK) >> PFN_SHIFT)  #define NextPFN(pfn)  ((pfn) + PFN_INCR)  #define PFNfromEntry(entry)   ((entry) & 0x3FFFFFC0)  #define PFNfrom256(x)	((ulong)(x)<<(8-PFN_SHIFT) & 0x3FFFFFC0)  #define KERNEL_MODE 0x03  #define USER_MODE 0x13  #define MODE_MASK 0x3F  /* Return virtual address from page frame number */  #define Phys2Virt(pfn)  ((PVOID)(((pfn)<< PFN_SHIFT) | 0x80000000))  #define Phys2VirtUC(pfn)  ((PVOID)(((pfn)<< PFN_SHIFT) | 0xA0000000))#endif/* Test the write access on a page table entry */#define IsPageWritable(entry)	(((entry)&PG_DIRTY_MASK) != 0)#define IsPageReadable(entry)	(((entry)&PG_VALID_MASK) == PG_VALID_MASK)#define KPAGE_PHYS  0x00001000#if R4000#define KPAGE_PHYS_LO (KPAGE_PHYS>>PFN_SHIFT)#endif#define KPAGE_PTE (GetPFN(KPAGE_PHYS+0x800) + PG_VALID_MASK \			+ PG_GLOBAL_MASK + PG_CACHE)#endif // MEM_MIPS_H

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -