#ifndef _ASM_CPU_H
#define _ASM_CPU_H
#define PRID_COMP_MASK 0xff0000
#define PRID_COMP_LOONGSON 0x140000
#define PRID_SERIES_MASK 0xf000
#define PRID_SERIES_LA132 0x8000
#define PRID_SERIES_LA264 0xa000
#define PRID_SERIES_LA364 0xb000
#define PRID_SERIES_LA464 0xc000
#define PRID_SERIES_LA664 0xd000
#define PRID_PRODUCT_MASK 0x0fff
#if !defined(__ASSEMBLER__)
enum cpu_type_enum {
CPU_UNKNOWN,
CPU_LOONGSON32,
CPU_LOONGSON64,
CPU_LAST
};
#endif
#define LOONGARCH_CPU_ISA_LA32R 0x00000001
#define LOONGARCH_CPU_ISA_LA32S 0x00000002
#define LOONGARCH_CPU_ISA_LA64 0x00000004
#define LOONGARCH_CPU_ISA_32BIT (LOONGARCH_CPU_ISA_LA32R | LOONGARCH_CPU_ISA_LA32S)
#define LOONGARCH_CPU_ISA_64BIT LOONGARCH_CPU_ISA_LA64
#define CPU_FEATURE_CPUCFG 0
#define CPU_FEATURE_LAM 1
#define CPU_FEATURE_UAL 2
#define CPU_FEATURE_FPU 3
#define CPU_FEATURE_LSX 4
#define CPU_FEATURE_LASX 5
#define CPU_FEATURE_CRC32 6
#define CPU_FEATURE_COMPLEX 7
#define CPU_FEATURE_CRYPTO 8
#define CPU_FEATURE_LVZ 9
#define CPU_FEATURE_LBT_X86 10
#define CPU_FEATURE_LBT_ARM 11
#define CPU_FEATURE_LBT_MIPS 12
#define CPU_FEATURE_TLB 13
#define CPU_FEATURE_CSR 14
#define CPU_FEATURE_IOCSR 15
#define CPU_FEATURE_WATCH 16
#define CPU_FEATURE_VINT 17
#define CPU_FEATURE_CSRIPI 18
#define CPU_FEATURE_EXTIOI 19
#define CPU_FEATURE_PREFETCH 20
#define CPU_FEATURE_PMP 21
#define CPU_FEATURE_SCALEFREQ 22
#define CPU_FEATURE_FLATMODE 23
#define CPU_FEATURE_EIODECODE 24
#define CPU_FEATURE_GUESTID 25
#define CPU_FEATURE_HYPERVISOR 26
#define CPU_FEATURE_PTW 27
#define CPU_FEATURE_LSPW 28
#define CPU_FEATURE_AVECINT 29
#define LOONGARCH_CPU_CPUCFG BIT_ULL(CPU_FEATURE_CPUCFG)
#define LOONGARCH_CPU_LAM BIT_ULL(CPU_FEATURE_LAM)
#define LOONGARCH_CPU_UAL BIT_ULL(CPU_FEATURE_UAL)
#define LOONGARCH_CPU_FPU BIT_ULL(CPU_FEATURE_FPU)
#define LOONGARCH_CPU_LSX BIT_ULL(CPU_FEATURE_LSX)
#define LOONGARCH_CPU_LASX BIT_ULL(CPU_FEATURE_LASX)
#define LOONGARCH_CPU_CRC32 BIT_ULL(CPU_FEATURE_CRC32)
#define LOONGARCH_CPU_COMPLEX BIT_ULL(CPU_FEATURE_COMPLEX)
#define LOONGARCH_CPU_CRYPTO BIT_ULL(CPU_FEATURE_CRYPTO)
#define LOONGARCH_CPU_LVZ BIT_ULL(CPU_FEATURE_LVZ)
#define LOONGARCH_CPU_LBT_X86 BIT_ULL(CPU_FEATURE_LBT_X86)
#define LOONGARCH_CPU_LBT_ARM BIT_ULL(CPU_FEATURE_LBT_ARM)
#define LOONGARCH_CPU_LBT_MIPS BIT_ULL(CPU_FEATURE_LBT_MIPS)
#define LOONGARCH_CPU_TLB BIT_ULL(CPU_FEATURE_TLB)
#define LOONGARCH_CPU_IOCSR BIT_ULL(CPU_FEATURE_IOCSR)
#define LOONGARCH_CPU_CSR BIT_ULL(CPU_FEATURE_CSR)
#define LOONGARCH_CPU_WATCH BIT_ULL(CPU_FEATURE_WATCH)
#define LOONGARCH_CPU_VINT BIT_ULL(CPU_FEATURE_VINT)
#define LOONGARCH_CPU_CSRIPI BIT_ULL(CPU_FEATURE_CSRIPI)
#define LOONGARCH_CPU_EXTIOI BIT_ULL(CPU_FEATURE_EXTIOI)
#define LOONGARCH_CPU_PREFETCH BIT_ULL(CPU_FEATURE_PREFETCH)
#define LOONGARCH_CPU_PMP BIT_ULL(CPU_FEATURE_PMP)
#define LOONGARCH_CPU_SCALEFREQ BIT_ULL(CPU_FEATURE_SCALEFREQ)
#define LOONGARCH_CPU_FLATMODE BIT_ULL(CPU_FEATURE_FLATMODE)
#define LOONGARCH_CPU_EIODECODE BIT_ULL(CPU_FEATURE_EIODECODE)
#define LOONGARCH_CPU_GUESTID BIT_ULL(CPU_FEATURE_GUESTID)
#define LOONGARCH_CPU_HYPERVISOR BIT_ULL(CPU_FEATURE_HYPERVISOR)
#define LOONGARCH_CPU_PTW BIT_ULL(CPU_FEATURE_PTW)
#define LOONGARCH_CPU_LSPW BIT_ULL(CPU_FEATURE_LSPW)
#define LOONGARCH_CPU_AVECINT BIT_ULL(CPU_FEATURE_AVECINT)
#endif