ArmPkg/ArmMmuLib ARM: Isolate the access flag from AP mask
Split the ARM permission fields in the short descriptors into an access flag and AP[2:1] as per the recommendation in the ARM ARM. This makes the access flag available separately, which allows us to implement EFI_MEMORY_RP memory analogous to how it will be implemented for AArch64. Signed-off-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
This commit is contained in:
		
				
					committed by
					
						![mergify[bot]](/avatar/e3df20cd7a67969c41a65f03bea54961?size=40) mergify[bot]
						mergify[bot]
					
				
			
			
				
	
			
			
			
						parent
						
							699372d388
						
					
				
				
					commit
					28dce5b130
				
			| @@ -80,21 +80,21 @@ | ||||
| #define TT_DESCRIPTOR_PAGE_S_NOT_SHARED  (0UL << 10) | ||||
| #define TT_DESCRIPTOR_PAGE_S_SHARED      (1UL << 10) | ||||
|  | ||||
| #define TT_DESCRIPTOR_SECTION_AP_MASK   ((1UL << 15) | (3UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_NO_NO  ((0UL << 15) | (0UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RW_NO  ((0UL << 15) | (1UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RW_RO  ((0UL << 15) | (2UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RW_RW  ((0UL << 15) | (3UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RO_NO  ((1UL << 15) | (1UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RO_RO  ((1UL << 15) | (3UL << 10)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_MASK   ((1UL << 15) | (1UL << 11)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_NO_RW  ((0UL << 15) | (0UL << 11)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RW_RW  ((0UL << 15) | (1UL << 11)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_NO_RO  ((1UL << 15) | (0UL << 11)) | ||||
| #define TT_DESCRIPTOR_SECTION_AP_RO_RO  ((1UL << 15) | (1UL << 11)) | ||||
|  | ||||
| #define TT_DESCRIPTOR_PAGE_AP_MASK   ((1UL << 9) | (3UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_NO_NO  ((0UL << 9) | (0UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RW_NO  ((0UL << 9) | (1UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RW_RO  ((0UL << 9) | (2UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RW_RW  ((0UL << 9) | (3UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RO_NO  ((1UL << 9) | (1UL << 4)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RO_RO  ((1UL << 9) | (3UL << 4)) | ||||
| #define TT_DESCRIPTOR_SECTION_AF  (1UL << 10) | ||||
|  | ||||
| #define TT_DESCRIPTOR_PAGE_AP_MASK   ((1UL << 9) | (1UL << 5)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_NO_RW  ((0UL << 9) | (0UL << 5)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RW_RW  ((0UL << 9) | (1UL << 5)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_NO_RO  ((1UL << 9) | (0UL << 5)) | ||||
| #define TT_DESCRIPTOR_PAGE_AP_RO_RO  ((1UL << 9) | (1UL << 5)) | ||||
|  | ||||
| #define TT_DESCRIPTOR_PAGE_AF  (1UL << 4) | ||||
|  | ||||
| #define TT_DESCRIPTOR_SECTION_XN_MASK  (0x1UL << 4) | ||||
| #define TT_DESCRIPTOR_PAGE_XN_MASK     (0x1UL << 0) | ||||
| @@ -124,20 +124,24 @@ | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_AP(Desc)            ((((Desc) & TT_DESCRIPTOR_SECTION_AP_MASK) >> 6) & TT_DESCRIPTOR_PAGE_AP_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_NG(Desc)            ((((Desc) & TT_DESCRIPTOR_SECTION_NG_MASK) >> 6) & TT_DESCRIPTOR_PAGE_NG_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_S(Desc)             ((((Desc) & TT_DESCRIPTOR_SECTION_S_MASK) >> 6) & TT_DESCRIPTOR_PAGE_S_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_AF(Desc)            ((((Desc) & TT_DESCRIPTOR_SECTION_AF) >> 6) & TT_DESCRIPTOR_PAGE_AF) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_XN(Desc)            ((((Desc) & TT_DESCRIPTOR_SECTION_XN_MASK) >> 4) & TT_DESCRIPTOR_PAGE_XN_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_PAGE_CACHE_POLICY(Desc)  ((((Desc) & (0x3 << 12)) >> 6) | (Desc & (0x3 << 2))) | ||||
|  | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_SECTION_AP(Desc)            ((((Desc) & TT_DESCRIPTOR_PAGE_AP_MASK) << 6) & TT_DESCRIPTOR_SECTION_AP_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_SECTION_S(Desc)             ((((Desc) & TT_DESCRIPTOR_PAGE_S_MASK) << 6) & TT_DESCRIPTOR_SECTION_S_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_SECTION_AF(Desc)            ((((Desc) & TT_DESCRIPTOR_PAGE_AF) << 6) & TT_DESCRIPTOR_SECTION_AF) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_SECTION_XN(Desc)            ((((Desc) & TT_DESCRIPTOR_PAGE_XN_MASK) << 4) & TT_DESCRIPTOR_SECTION_XN_MASK) | ||||
| #define TT_DESCRIPTOR_CONVERT_TO_SECTION_CACHE_POLICY(Desc)  ((((Desc) & (0x3 << 6)) << 6) | (Desc & (0x3 << 2))) | ||||
|  | ||||
| #define TT_DESCRIPTOR_SECTION_ATTRIBUTE_MASK  (TT_DESCRIPTOR_SECTION_NS_MASK | TT_DESCRIPTOR_SECTION_NG_MASK |               \ | ||||
|                                                              TT_DESCRIPTOR_SECTION_S_MASK | TT_DESCRIPTOR_SECTION_AP_MASK | \ | ||||
|                                                              TT_DESCRIPTOR_SECTION_AF | \ | ||||
|                                                              TT_DESCRIPTOR_SECTION_XN_MASK | TT_DESCRIPTOR_SECTION_CACHE_POLICY_MASK) | ||||
|  | ||||
| #define TT_DESCRIPTOR_PAGE_ATTRIBUTE_MASK  (TT_DESCRIPTOR_PAGE_NG_MASK | TT_DESCRIPTOR_PAGE_S_MASK |                  \ | ||||
|                                                              TT_DESCRIPTOR_PAGE_AP_MASK | TT_DESCRIPTOR_PAGE_XN_MASK | \ | ||||
|                                                              TT_DESCRIPTOR_PAGE_AF | \ | ||||
|                                                              TT_DESCRIPTOR_PAGE_CACHE_POLICY_MASK) | ||||
|  | ||||
| #define TT_DESCRIPTOR_SECTION_DOMAIN_MASK  (0x0FUL << 5) | ||||
| @@ -159,6 +163,7 @@ | ||||
|                                                             TT_DESCRIPTOR_SECTION_S_SHARED                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AF                                | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_BACK_ALLOC) | ||||
| #define TT_DESCRIPTOR_SECTION_WRITE_THROUGH(NonSecure)  (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           |     \ | ||||
|                                                             ((NonSecure) ?  TT_DESCRIPTOR_SECTION_NS : 0)    | \ | ||||
| @@ -166,6 +171,7 @@ | ||||
|                                                             TT_DESCRIPTOR_SECTION_S_SHARED                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AF                                | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC) | ||||
| #define TT_DESCRIPTOR_SECTION_DEVICE(NonSecure)         (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           |     \ | ||||
|                                                             ((NonSecure) ?  TT_DESCRIPTOR_SECTION_NS : 0)    | \ | ||||
| @@ -174,6 +180,7 @@ | ||||
|                                                             TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_XN_MASK                           | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AF                                | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_CACHE_POLICY_SHAREABLE_DEVICE) | ||||
| #define TT_DESCRIPTOR_SECTION_UNCACHED(NonSecure)       (TT_DESCRIPTOR_SECTION_TYPE_SECTION                                                           |    \ | ||||
|                                                            ((NonSecure) ?  TT_DESCRIPTOR_SECTION_NS : 0)    | \ | ||||
| @@ -181,28 +188,33 @@ | ||||
|                                                            TT_DESCRIPTOR_SECTION_S_NOT_SHARED                      | \ | ||||
|                                                            TT_DESCRIPTOR_SECTION_DOMAIN(0)                         | \ | ||||
|                                                            TT_DESCRIPTOR_SECTION_AP_RW_RW                          | \ | ||||
|                                                             TT_DESCRIPTOR_SECTION_AF                                | \ | ||||
|                                                            TT_DESCRIPTOR_SECTION_CACHE_POLICY_NON_CACHEABLE) | ||||
|  | ||||
| #define TT_DESCRIPTOR_PAGE_WRITE_BACK     (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           |          \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_S_SHARED                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AF                                                             | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_BACK_ALLOC) | ||||
| #define TT_DESCRIPTOR_PAGE_WRITE_THROUGH  (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           |          \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_S_SHARED                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AF                                                             | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_CACHE_POLICY_WRITE_THROUGH_NO_ALLOC) | ||||
| #define TT_DESCRIPTOR_PAGE_DEVICE         (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           |          \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AF                                                             | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_XN_MASK                                                        | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_CACHE_POLICY_SHAREABLE_DEVICE) | ||||
| #define TT_DESCRIPTOR_PAGE_UNCACHED       (TT_DESCRIPTOR_PAGE_TYPE_PAGE                                                           |          \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_NG_GLOBAL                                                      | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_S_NOT_SHARED                                                   | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AP_RW_RW                                                       | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_AF                                                             | \ | ||||
|                                                         TT_DESCRIPTOR_PAGE_CACHE_POLICY_NON_CACHEABLE) | ||||
|  | ||||
| // First Level Descriptors | ||||
|   | ||||
		Reference in New Issue
	
	Block a user