更新日期: 2022/06/01 来源: https://gitee.com/weharmony/kernel_liteos_a_note
los_pte_ops.h 文件参考

浏览源代码.

函数

STATIC INLINE VOID OsSavePte1 (PTE_T *pte1Ptr, PTE_T pte1)
 PTE(Page Table Entry),页表条目,保存L1页表项至L1页表 更多...
 
STATIC INLINE ADDR_T OsTruncPte1 (ADDR_T addr)
 生成 L1 section格式项地址 更多...
 
STATIC INLINE UINT32 OsGetPte1Index (vaddr_t va)
 获取L1 页表项索引 更多...
 
STATIC INLINE VOID OsClearPte1 (PTE_T *pte1Ptr)
 
STATIC INLINE PADDR_T OsGetPte1Paddr (PADDR_T PhysTtb, vaddr_t va)
 
STATIC INLINE PTE_TOsGetPte1Ptr (PTE_T *pte1BasePtr, vaddr_t va)
 pte1BasePtr L1 转换页表基地址 更多...
 
STATIC INLINE PTE_T OsGetPte1 (PTE_T *pte1BasePtr, vaddr_t va)
 
STATIC INLINE BOOL OsIsPte1PageTable (PTE_T pte1)
 
STATIC INLINE BOOL OsIsPte1Invalid (PTE_T pte1)
 
STATIC INLINE BOOL OsIsPte1Section (PTE_T pte1)
 
STATIC INLINE UINT32 OsGetPte2Index (vaddr_t va)
 
STATIC INLINE PTE_TOsGetPte2Ptr (PTE_T *pte2BasePtr, vaddr_t va)
 
STATIC INLINE PTE_T OsGetPte2 (PTE_T *pte2BasePtr, vaddr_t va)
 
STATIC INLINE VOID OsSavePte2 (PTE_T *pte2Ptr, PTE_T pte2)
 
STATIC INLINE UINT32 OsSavePte2Continuous (PTE_T *pte2BasePtr, UINT32 index, PTE_T pte2, UINT32 count)
 
STATIC INLINE VOID OsClearPte2Continuous (PTE_T *pte2Ptr, UINT32 count)
 
STATIC INLINE BOOL OsIsPte2SmallPage (PTE_T pte2)
 
STATIC INLINE BOOL OsIsPte2SmallPageXN (PTE_T pte2)
 
STATIC INLINE BOOL OsIsPte2LargePage (PTE_T pte2)
 
STATIC INLINE BOOL OsIsPte2Invalid (PTE_T pte2)
 

函数说明

◆ OsClearPte1()

STATIC INLINE VOID OsClearPte1 ( PTE_T pte1Ptr)

在文件 los_pte_ops.h67 行定义.

68{
69 OsSavePte1(pte1Ptr, 0);
70}
STATIC INLINE VOID OsSavePte1(PTE_T *pte1Ptr, PTE_T pte1)
PTE(Page Table Entry),页表条目,保存L1页表项至L1页表
Definition: los_pte_ops.h:50
函数调用图:
这是这个函数的调用关系图:

◆ OsClearPte2Continuous()

STATIC INLINE VOID OsClearPte2Continuous ( PTE_T pte2Ptr,
UINT32  count 
)

在文件 los_pte_ops.h143 行定义.

144{
145 UINT32 index = 0;
146
147 DMB;
148 while (count > 0) {
149 pte2Ptr[index++] = 0;
150 count--;
151 }
152 DSB;
153}
unsigned int UINT32
Definition: los_typedef.h:57
这是这个函数的调用关系图:

◆ OsGetPte1()

STATIC INLINE PTE_T OsGetPte1 ( PTE_T pte1BasePtr,
vaddr_t  va 
)

在文件 los_pte_ops.h82 行定义.

83{
84 return *OsGetPte1Ptr(pte1BasePtr, va);
85}
STATIC INLINE PTE_T * OsGetPte1Ptr(PTE_T *pte1BasePtr, vaddr_t va)
pte1BasePtr L1 转换页表基地址
Definition: los_pte_ops.h:77
函数调用图:
这是这个函数的调用关系图:

◆ OsGetPte1Index()

STATIC INLINE UINT32 OsGetPte1Index ( vaddr_t  va)

获取L1 页表项索引

在文件 los_pte_ops.h62 行定义.

63{
64 return va >> MMU_DESCRIPTOR_L1_SMALL_SHIFT;//右移20位,得到一级页表
65}
这是这个函数的调用关系图:

◆ OsGetPte1Paddr()

STATIC INLINE PADDR_T OsGetPte1Paddr ( PADDR_T  PhysTtb,
vaddr_t  va 
)

在文件 los_pte_ops.h72 行定义.

73{
74 return (PhysTtb + (OsGetPte1Index(va) * sizeof(PADDR_T)));
75}
STATIC INLINE UINT32 OsGetPte1Index(vaddr_t va)
获取L1 页表项索引
Definition: los_pte_ops.h:62
unsigned long PADDR_T
Definition: los_typedef.h:207
函数调用图:
这是这个函数的调用关系图:

◆ OsGetPte1Ptr()

STATIC INLINE PTE_T * OsGetPte1Ptr ( PTE_T pte1BasePtr,
vaddr_t  va 
)

pte1BasePtr L1 转换页表基地址

在文件 los_pte_ops.h77 行定义.

78{
79 return (pte1BasePtr + OsGetPte1Index(va));//得到一级页面的页号
80}
函数调用图:
这是这个函数的调用关系图:

◆ OsGetPte2()

STATIC INLINE PTE_T OsGetPte2 ( PTE_T pte2BasePtr,
vaddr_t  va 
)

在文件 los_pte_ops.h112 行定义.

113{
114 return *(pte2BasePtr + OsGetPte2Index(va));
115}
STATIC INLINE UINT32 OsGetPte2Index(vaddr_t va)
Definition: los_pte_ops.h:102
函数调用图:
这是这个函数的调用关系图:

◆ OsGetPte2Index()

STATIC INLINE UINT32 OsGetPte2Index ( vaddr_t  va)

在文件 los_pte_ops.h102 行定义.

103{
104 return (va % MMU_DESCRIPTOR_L1_SMALL_SIZE) >> MMU_DESCRIPTOR_L2_SMALL_SHIFT;
105}
这是这个函数的调用关系图:

◆ OsGetPte2Ptr()

STATIC INLINE PTE_T * OsGetPte2Ptr ( PTE_T pte2BasePtr,
vaddr_t  va 
)

在文件 los_pte_ops.h107 行定义.

108{
109 return (pte2BasePtr + OsGetPte2Index(va));
110}
函数调用图:

◆ OsIsPte1Invalid()

STATIC INLINE BOOL OsIsPte1Invalid ( PTE_T  pte1)

在文件 los_pte_ops.h92 行定义.

93{
94 return (pte1 & MMU_DESCRIPTOR_L1_TYPE_MASK) == MMU_DESCRIPTOR_L1_TYPE_INVALID;//L1 pte低二位为 00
95}
这是这个函数的调用关系图:

◆ OsIsPte1PageTable()

STATIC INLINE BOOL OsIsPte1PageTable ( PTE_T  pte1)

在文件 los_pte_ops.h87 行定义.

88{
89 return (pte1 & MMU_DESCRIPTOR_L1_TYPE_MASK) == MMU_DESCRIPTOR_L1_TYPE_PAGE_TABLE;//L1 pte低二位为 01
90}
这是这个函数的调用关系图:

◆ OsIsPte1Section()

STATIC INLINE BOOL OsIsPte1Section ( PTE_T  pte1)

在文件 los_pte_ops.h97 行定义.

98{
99 return (pte1 & MMU_DESCRIPTOR_L1_TYPE_MASK) == MMU_DESCRIPTOR_L1_TYPE_SECTION;//L1 pte低二位为 10
100}
这是这个函数的调用关系图:

◆ OsIsPte2Invalid()

STATIC INLINE BOOL OsIsPte2Invalid ( PTE_T  pte2)

在文件 los_pte_ops.h170 行定义.

171{
172 return (pte2 & MMU_DESCRIPTOR_L2_TYPE_MASK) == MMU_DESCRIPTOR_L2_TYPE_INVALID;
173}

◆ OsIsPte2LargePage()

STATIC INLINE BOOL OsIsPte2LargePage ( PTE_T  pte2)

在文件 los_pte_ops.h165 行定义.

166{
167 return (pte2 & MMU_DESCRIPTOR_L2_TYPE_MASK) == MMU_DESCRIPTOR_L2_TYPE_LARGE_PAGE;
168}
这是这个函数的调用关系图:

◆ OsIsPte2SmallPage()

STATIC INLINE BOOL OsIsPte2SmallPage ( PTE_T  pte2)

在文件 los_pte_ops.h155 行定义.

156{
157 return (pte2 & MMU_DESCRIPTOR_L2_TYPE_MASK) == MMU_DESCRIPTOR_L2_TYPE_SMALL_PAGE;
158}
这是这个函数的调用关系图:

◆ OsIsPte2SmallPageXN()

STATIC INLINE BOOL OsIsPte2SmallPageXN ( PTE_T  pte2)

在文件 los_pte_ops.h160 行定义.

161{
162 return (pte2 & MMU_DESCRIPTOR_L2_TYPE_MASK) == MMU_DESCRIPTOR_L2_TYPE_SMALL_PAGE_XN;
163}
这是这个函数的调用关系图:

◆ OsSavePte1()

STATIC INLINE VOID OsSavePte1 ( PTE_T pte1Ptr,
PTE_T  pte1 
)

PTE(Page Table Entry),页表条目,保存L1页表项至L1页表

在文件 los_pte_ops.h50 行定义.

51{
52 DMB;
53 *pte1Ptr = pte1;
54 DSB;
55}
这是这个函数的调用关系图:

◆ OsSavePte2()

STATIC INLINE VOID OsSavePte2 ( PTE_T pte2Ptr,
PTE_T  pte2 
)

在文件 los_pte_ops.h117 行定义.

118{
119 DMB;
120 *pte2Ptr = pte2;
121 DSB;
122}

◆ OsSavePte2Continuous()

STATIC INLINE UINT32 OsSavePte2Continuous ( PTE_T pte2BasePtr,
UINT32  index,
PTE_T  pte2,
UINT32  count 
)

在文件 los_pte_ops.h124 行定义.

125{
126 UINT32 saveCounts = 0;
127 if (count == 0) {
128 return 0;
129 }
130
131 DMB;
132 do {
133 pte2BasePtr[index++] = pte2;
134 count--;
135 pte2 += MMU_DESCRIPTOR_L2_SMALL_SIZE;
136 saveCounts++;
137 } while ((count != 0) && (index != MMU_DESCRIPTOR_L2_NUMBERS_PER_L1));
138 DSB;
139
140 return saveCounts;
141}
这是这个函数的调用关系图:

◆ OsTruncPte1()

STATIC INLINE ADDR_T OsTruncPte1 ( ADDR_T  addr)

生成 L1 section格式项地址

在文件 los_pte_ops.h57 行定义.

58{
59 return MMU_DESCRIPTOR_L1_SECTION_ADDR(addr);
60}
这是这个函数的调用关系图: