1 /** @file 2 Processor or Compiler specific defines and types for LoongArch 3 4 Copyright (c) 2022, Loongson Technology Corporation Limited. All rights reserved.<BR> 5 6 SPDX-License-Identifier: BSD-2-Clause-Patent 7 8 **/ 9 10 #ifndef PROCESSOR_BIND_H_ 11 #define PROCESSOR_BIND_H_ 12 13 // 14 // Define the processor type so other code can make processor based choices 15 // 16 #define MDE_CPU_LOONGARCH64 17 18 #define EFIAPI 19 20 // 21 // Make sure we are using the correct packing rules per EFI specification 22 // 23 #ifndef __GNUC__ 24 #pragma pack() 25 #endif 26 27 // 28 // Assume standard LoongArch 64-bit alignment. 29 // Need to check portability of long long 30 // 31 typedef unsigned long long UINT64; 32 typedef long long INT64; 33 typedef unsigned int UINT32; 34 typedef int INT32; 35 typedef unsigned short UINT16; 36 typedef unsigned short CHAR16; 37 typedef short INT16; 38 typedef unsigned char BOOLEAN; 39 typedef unsigned char UINT8; 40 typedef char CHAR8; 41 typedef char INT8; 42 43 // 44 // Unsigned value of native width. (4 bytes on supported 32-bit processor instructions, 45 // 8 bytes on supported 64-bit processor instructions) 46 // 47 48 typedef UINT64 UINTN; 49 50 // 51 // Signed value of native width. (4 bytes on supported 32-bit processor instructions, 52 // 8 bytes on supported 64-bit processor instructions) 53 // 54 typedef INT64 INTN; 55 56 // 57 // Processor specific defines 58 // 59 60 // 61 // A value of native width with the highest bit set. 62 // 63 #define MAX_BIT 0x8000000000000000ULL 64 // 65 // A value of native width with the two highest bits set. 66 // 67 #define MAX_2_BITS 0xC000000000000000ULL 68 69 // 70 // Maximum legal LoongArch 64-bit address 71 // 72 #define MAX_ADDRESS 0xFFFFFFFFFFFFFFFFULL 73 74 // 75 // Maximum usable address at boot time (48 bits using 4KB pages) 76 // 77 #define MAX_ALLOC_ADDRESS 0xFFFFFFFFFFFFULL 78 79 // 80 // Maximum legal LoongArch 64-bit INTN and UINTN values. 81 // 82 #define MAX_INTN ((INTN)0x7FFFFFFFFFFFFFFFULL) 83 #define MAX_UINTN ((UINTN)0xFFFFFFFFFFFFFFFFULL) 84 85 // 86 // Page allocation granularity for LoongArch 87 // 88 #define DEFAULT_PAGE_ALLOCATION_GRANULARITY (0x1000) 89 #define RUNTIME_PAGE_ALLOCATION_GRANULARITY (0x10000) 90 91 #if defined (__GNUC__) 92 // 93 // For GNU assembly code, .global or .globl can declare global symbols. 94 // Define this macro to unify the usage. 95 // 96 #define ASM_GLOBAL .globl 97 #endif 98 99 // 100 // The stack alignment required for LoongArch 101 // 102 #define CPU_STACK_ALIGNMENT 16 103 104 /** 105 Return the pointer to the first instruction of a function given a function pointer. 106 On LOONGARCH CPU architectures, these two pointer values are the same, 107 so the implementation of this macro is very simple. 108 109 @param FunctionPointer A pointer to a function. 110 111 @return The pointer to the first instruction of a function given a function pointer. 112 113 **/ 114 #define FUNCTION_ENTRY_POINT(FunctionPointer) (VOID *)(UINTN)(FunctionPointer) 115 116 #ifndef __USER_LABEL_PREFIX__ 117 #define __USER_LABEL_PREFIX__ 118 #endif 119 120 #endif 121