#ifndef _ASM_E2K_H_ #define _ASM_E2K_H_ #include #include #include /* E2K_VA_MSB */ #include #include #include #include #include #include #include /* CPU model numbers */ #define IDR_E2K_VIRT_MDL 0x00 /* machine is virtual, so CPUs also */ #define MACHINE_ID_NONE 0x0000 #define MACHINE_ID_CPU_TYPE_MASK 0x000f #define MACHINE_ID_SIMUL 0x0010 #define MACHINE_ID_E2K_FULL_SIC 0x0020 #define MACHINE_ID_E2K_IOHUB 0x0040 #define MACHINE_ID_L_IOMMU 0x0080 #define MACHINE_ID_E2K_LEGACY_SIC 0x0100 /* host bridge & legacy NBSR */ #define MACHINE_ID_E2K_VIRT_IO 0x0400 /* machine is virtual and */ /* IO simulates on user level */ /* (for example by QEMU) */ #define MACHINE_ID_HW_VIRT 0x4000 /* hardware virtualized VM */ #define MACHINE_ID_VIRT 0x8000 /* soft paravirtualized VM */ #define MACHINE_ID_E2K_IOMMU 0x10000 #define MACHINE_ID_ES2_DSP (IDR_ES2_DSP_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB) #define MACHINE_ID_ES2_RU (IDR_ES2_RU_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB) #define MACHINE_ID_E2S (IDR_E2S_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_L_IOMMU) #define MACHINE_ID_E8C (IDR_E8C_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_L_IOMMU) #define MACHINE_ID_E1CP (IDR_E1CP_MDL | \ MACHINE_ID_E2K_LEGACY_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_L_IOMMU) #define MACHINE_ID_E8C2 (IDR_E8C2_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_L_IOMMU) /* * IO_* NBSRs are absent in models with EIOHub. Using LEGACY_SIC with FULL_SIC * helps to avoid reading those NBSRs while still using IO_AREA_PHYS_BASE * defined for FULL_SIC */ #define MACHINE_ID_E12C (IDR_E12C_MDL | \ MACHINE_ID_E2K_LEGACY_SIC | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_E2K_IOMMU) #define MACHINE_ID_E16C (IDR_E16C_MDL | \ MACHINE_ID_E2K_LEGACY_SIC | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_E2K_IOMMU) #define MACHINE_ID_E2C3 (IDR_E2C3_MDL | \ MACHINE_ID_E2K_LEGACY_SIC | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_E2K_IOMMU) #define MACHINE_ID_E2K_VIRT (IDR_E2K_VIRT_MDL | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_E2K_VIRT_IO) #define MACHINE_ID_E2K_HW_VIRT (IDR_E2K_VIRT_MDL | \ MACHINE_ID_HW_VIRT | \ MACHINE_ID_E2K_LEGACY_SIC | \ MACHINE_ID_E2K_FULL_SIC | \ MACHINE_ID_E2K_IOHUB | \ MACHINE_ID_E2K_IOMMU | \ MACHINE_ID_E2K_VIRT_IO) #define MACHINE_ID_ES2_DSP_LMS (MACHINE_ID_ES2_DSP | \ MACHINE_ID_SIMUL) #define MACHINE_ID_ES2_RU_LMS (MACHINE_ID_ES2_RU | MACHINE_ID_SIMUL) #define MACHINE_ID_E2S_LMS (MACHINE_ID_E2S | MACHINE_ID_SIMUL) #define MACHINE_ID_E8C_LMS (MACHINE_ID_E8C | MACHINE_ID_SIMUL) #define MACHINE_ID_E1CP_LMS (MACHINE_ID_E1CP | MACHINE_ID_SIMUL) #define MACHINE_ID_E8C2_LMS (MACHINE_ID_E8C2 | MACHINE_ID_SIMUL) #define MACHINE_ID_E12C_LMS (MACHINE_ID_E12C | MACHINE_ID_SIMUL) #define MACHINE_ID_E16C_LMS (MACHINE_ID_E16C | MACHINE_ID_SIMUL) #define MACHINE_ID_E2C3_LMS (MACHINE_ID_E2C3 | MACHINE_ID_SIMUL) #define MACHINE_ID_VIRT_ES2_DSP (MACHINE_ID_ES2_DSP | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_ES2_RU (MACHINE_ID_ES2_RU | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E2S (MACHINE_ID_E2S | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E8C (MACHINE_ID_E8C | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E1CP (MACHINE_ID_E1CP | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E8C2 (MACHINE_ID_E8C2 | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E12C (MACHINE_ID_E12C | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E16C (MACHINE_ID_E16C | MACHINE_ID_VIRT) #define MACHINE_ID_VIRT_E2C3 (MACHINE_ID_E2C3 | MACHINE_ID_VIRT) #ifdef CONFIG_E2K_SIMULATOR # define MACHINE_SIMUL_FLAG MACHINE_ID_SIMUL #else # define MACHINE_SIMUL_FLAG 0 #endif #ifdef CONFIG_E2K_MACHINE #if defined(CONFIG_E2K_ES2_DSP) #define native_machine_id (MACHINE_ID_ES2_DSP | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_ES2_RU) #define native_machine_id (MACHINE_ID_ES2_RU | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E2S) #define native_machine_id (MACHINE_ID_E2S | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E8C) #define native_machine_id (MACHINE_ID_E8C | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E1CP) #define native_machine_id (MACHINE_ID_E1CP | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E8C2) #define native_machine_id (MACHINE_ID_E8C2 | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E12C) #define native_machine_id (MACHINE_ID_E12C | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E16C) #define native_machine_id (MACHINE_ID_E16C | MACHINE_SIMUL_FLAG) #elif defined(CONFIG_E2K_E2C3) #define native_machine_id (MACHINE_ID_E2C3 | MACHINE_SIMUL_FLAG) #else # error "E2K MACHINE type does not defined" #endif #elif defined(CONFIG_ES2) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_ES2_DSP_LMS #elif defined(CONFIG_E2S) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E2S_LMS #elif defined(CONFIG_E8C) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E8C_LMS #elif defined(CONFIG_E1CP) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E1CP_LMS #elif defined(CONFIG_E8C2) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E8C2_LMS #elif defined(CONFIG_E12C) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E12C_LMS #elif defined(CONFIG_E16C) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E16C_LMS #elif defined(CONFIG_E2C3) /* can be defined only for tiny boot on lms */ #define native_machine_id MACHINE_ID_E2C3_LMS #else /* ! CONFIG_E2K_MACHINE && ! our boot on lms */ extern unsigned int __nodedata native_machine_id; #endif /* CONFIG_E2K_MACHINE */ extern const char *e2k_get_cpu_type_name(int mach_type_id); extern const char *e2k_get_mach_type_name(int mach_type_id); extern int e2k_get_machine_type_name(int mach_id); extern void __init native_setup_machine(void); extern void native_set_mach_type_id(void); extern const char *native_get_mach_type_name(void); extern void e2k_init_IRQ(void); #define IS_THE_MACHINE_ES2_DSP(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_ES2_DSP_MDL) #define IS_THE_MACHINE_ES2_RU(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_ES2_RU_MDL) #define IS_THE_MACHINE_ES2(mach_id) \ ((IS_THE_MACHINE_ES2_DSP(mach_id)) || \ (IS_THE_MACHINE_ES2_RU(mach_id))) #define IS_THE_MACHINE_E2S(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E2S_MDL) #define IS_THE_MACHINE_E8C(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E8C_MDL) #define IS_THE_MACHINE_E1CP(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E1CP_MDL) #define IS_THE_MACHINE_E8C2(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E8C2_MDL) #define IS_THE_MACHINE_E12C(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E12C_MDL) #define IS_THE_MACHINE_E16C(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E16C_MDL) #define IS_THE_MACHINE_E2C3(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E2C3_MDL) #define IS_THE_MACHINE_E2K_VIRT(mach_id) \ (((mach_id) & MACHINE_ID_CPU_TYPE_MASK) == IDR_E2K_VIRT_MDL) #define IS_THE_MACHINE_SIM(mach_id) \ (((mach_id) & MACHINE_ID_SIMUL) != 0) #define HAS_THE_MACHINE_E2K_DSP(mach_id) \ (IS_THE_MACHINE_ES2_DSP(mach_id)) #define HAS_THE_MACHINE_E2K_FULL_SIC(mach_id) \ (((mach_id) & MACHINE_ID_E2K_FULL_SIC) != 0) #define HAS_THE_MACHINE_E2K_IOHUB(mach_id) \ (((mach_id) & MACHINE_ID_E2K_IOHUB) != 0) #define HAS_THE_MACHINE_L_IOMMU(mach_id) \ (((mach_id) & MACHINE_ID_L_IOMMU) != 0) #define HAS_THE_MACHINE_E2K_IOMMU(mach_id) \ (((mach_id) & MACHINE_ID_E2K_IOMMU) != 0) #define HAS_THE_MACHINE_E2K_LEGACY_SIC(mach_id) \ (((mach_id) & MACHINE_ID_E2K_LEGACY_SIC) != 0) #define HAS_THE_MACHINE_L_SIC(mach_id) \ (HAS_THE_MACHINE_E2K_FULL_SIC(mach_id) || \ HAS_THE_MACHINE_E2K_LEGACY_SIC(mach_id)) #define NATIVE_IS_MACHINE_ES2_DSP \ IS_THE_MACHINE_ES2_DSP(native_machine_id) #define NATIVE_IS_MACHINE_ES2_RU \ IS_THE_MACHINE_ES2_RU(native_machine_id) #define NATIVE_IS_MACHINE_ES2 \ IS_THE_MACHINE_ES2(native_machine_id) #define NATIVE_IS_MACHINE_E2S \ IS_THE_MACHINE_E2S(native_machine_id) #define NATIVE_IS_MACHINE_E8C \ IS_THE_MACHINE_E8C(native_machine_id) #define NATIVE_IS_MACHINE_E1CP \ IS_THE_MACHINE_E1CP(native_machine_id) #define NATIVE_IS_MACHINE_E8C2 \ IS_THE_MACHINE_E8C2(native_machine_id) #define NATIVE_IS_MACHINE_E12C \ IS_THE_MACHINE_E12C(native_machine_id) #define NATIVE_IS_MACHINE_E16C \ IS_THE_MACHINE_E16C(native_machine_id) #define NATIVE_IS_MACHINE_E2C3 \ IS_THE_MACHINE_E2C3(native_machine_id) #define NATIVE_IS_MACHINE_E2K_VIRT (false) #define BOOT_NATIVE_IS_MACHINE_ES2_DSP \ IS_THE_MACHINE_ES2_DSP(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_ES2_RU \ IS_THE_MACHINE_ES2_RU(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_ES2 \ ((BOOT_NATIVE_IS_MACHINE_ES2_DSP) || \ (BOOT_NATIVE_IS_MACHINE_ES2_RU)) #define BOOT_NATIVE_IS_MACHINE_E2S \ IS_THE_MACHINE_E2S(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E8C \ IS_THE_MACHINE_E8C(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E1CP \ IS_THE_MACHINE_E1CP(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E8C2 \ IS_THE_MACHINE_E8C2(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E12C \ IS_THE_MACHINE_E12C(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E16C \ IS_THE_MACHINE_E16C(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E2C3 \ IS_THE_MACHINE_E2C2(boot_native_machine_id) #define BOOT_NATIVE_IS_MACHINE_E2K_VIRT false #define NATIVE_IS_MACHINE_SIM \ IS_THE_MACHINE_SIM(native_machine_id) #define NATIVE_HAS_MACHINE_E2K_DSP \ HAS_THE_MACHINE_E2K_DSP(native_machine_id) #define NATIVE_HAS_MACHINE_E2K_FULL_SIC \ HAS_THE_MACHINE_E2K_FULL_SIC(native_machine_id) #define NATIVE_HAS_MACHINE_E2K_IOHUB \ HAS_THE_MACHINE_E2K_IOHUB(native_machine_id) #define NATIVE_HAS_MACHINE_E2K_IOMMU \ HAS_THE_MACHINE_E2K_IOMMU(native_machine_id) #define NATIVE_HAS_MACHINE_E2K_LEGACY_SIC \ HAS_THE_MACHINE_E2K_LEGACY_SIC(native_machine_id) #define NATIVE_HAS_MACHINE_L_SIC \ HAS_THE_MACHINE_L_SIC(native_machine_id) #define BOOT_NATIVE_IS_MACHINE_SIM \ IS_THE_MACHINE_SIM(boot_native_machine_id) #define BOOT_NATIVE_HAS_MACHINE_E2K_DSP \ HAS_THE_MACHINE_E2K_DSP(boot_native_machine_id) #define BOOT_NATIVE_HAS_MACHINE_E2K_FULL_SIC \ HAS_THE_MACHINE_E2K_FULL_SIC(boot_native_machine_id) #define BOOT_NATIVE_HAS_MACHINE_E2K_IOHUB \ HAS_THE_MACHINE_E2K_IOHUB(boot_native_machine_id) #define BOOT_NATIVE_HAS_MACHINE_E2K_LEGACY_SIC \ HAS_THE_MACHINE_E2K_LEGACY_SIC(boot_native_machine_id) #define BOOT_NATIVE_HAS_MACHINE_L_SIC \ HAS_THE_MACHINE_L_SIC(boot_native_machine_id) #ifdef CONFIG_KVM_GUEST_KERNEL /* it is native guest kernel */ #include #elif defined(CONFIG_PARAVIRT_GUEST) /* it is paravirtualized host and guest kernel */ #include #else /* ! CONFIG_KVM_GUEST_KERNEL && ! CONFIG_PARAVIRT_GUEST */ /* it is native kernel without any virtualization */ /* or host kernel with virtualization support */ /* only native machine is exists and should be examined */ #define machine_id native_machine_id #define boot_machine_id boot_native_machine_id #define get_machine_id() machine_id #define boot_get_machine_id() boot_machine_id #define set_machine_id(mach_id) (machine_id = (mach_id)) #define boot_set_machine_id(mach_id) (boot_machine_id = (mach_id)) static inline void set_mach_type_id(void) { native_set_mach_type_id(); } #define boot_panic(fmt, args...) boot_native_panic(fmt, ##args) #endif /* ! CONFIG_KVM_GUEST_KERNEL */ #define IS_MACHINE_ES2_DSP \ IS_THE_MACHINE_ES2_DSP(get_machine_id()) #define IS_MACHINE_ES2_RU \ IS_THE_MACHINE_ES2_RU(get_machine_id()) #define IS_MACHINE_ES2 \ IS_THE_MACHINE_ES2(get_machine_id()) #define IS_MACHINE_E2S \ IS_THE_MACHINE_E2S(get_machine_id()) #define IS_MACHINE_E8C \ IS_THE_MACHINE_E8C(get_machine_id()) #define IS_MACHINE_E1CP \ IS_THE_MACHINE_E1CP(get_machine_id()) #define IS_MACHINE_E8C2 \ IS_THE_MACHINE_E8C2(get_machine_id()) #define IS_MACHINE_E12C \ IS_THE_MACHINE_E12C(get_machine_id()) #define IS_MACHINE_E16C \ IS_THE_MACHINE_E16C(get_machine_id()) #define IS_MACHINE_E2C3 \ IS_THE_MACHINE_E2C3(get_machine_id()) #define IS_MACHINE_E2K_VIRT \ IS_THE_MACHINE_E2K_VIRT(get_machine_id()) #define HAS_MACHINE_E2K_DSP \ HAS_THE_MACHINE_E2K_DSP(get_machine_id()) #define HAS_MACHINE_E2K_FULL_SIC \ HAS_THE_MACHINE_E2K_FULL_SIC(get_machine_id()) #define HAS_MACHINE_E2K_IOHUB \ HAS_THE_MACHINE_E2K_IOHUB(get_machine_id()) #define HAS_MACHINE_L_IOMMU \ HAS_THE_MACHINE_L_IOMMU(get_machine_id()) #define HAS_MACHINE_E2K_IOMMU \ HAS_THE_MACHINE_E2K_IOMMU(get_machine_id()) #define HAS_MACHINE_E2K_LEGACY_SIC \ HAS_THE_MACHINE_E2K_LEGACY_SIC(get_machine_id()) #define HAS_MACHINE_L_SIC \ HAS_THE_MACHINE_L_SIC(get_machine_id()) #define BOOT_IS_MACHINE_ES2_DSP \ IS_THE_MACHINE_ES2_DSP(boot_get_machine_id()) #define BOOT_IS_MACHINE_ES2_RU \ IS_THE_MACHINE_ES2_RU(boot_get_machine_id()) #define BOOT_IS_MACHINE_ES2 \ IS_THE_MACHINE_ES2(boot_get_machine_id()) #define BOOT_IS_MACHINE_E2S \ IS_THE_MACHINE_E2S(boot_get_machine_id()) #define BOOT_IS_MACHINE_E8C \ IS_THE_MACHINE_E8C(boot_get_machine_id()) #define BOOT_IS_MACHINE_E1CP \ IS_THE_MACHINE_E1CP(boot_get_machine_id()) #define BOOT_IS_MACHINE_E8C2 \ IS_THE_MACHINE_E8C2(boot_get_machine_id()) #define BOOT_IS_MACHINE_E12C \ IS_THE_MACHINE_E12C(boot_get_machine_id()) #define BOOT_IS_MACHINE_E16C \ IS_THE_MACHINE_E16C(boot_get_machine_id()) #define BOOT_IS_MACHINE_E2C3 \ IS_THE_MACHINE_E2C3(boot_get_machine_id()) #define BOOT_IS_MACHINE_VIRT \ IS_THE_MACHINE_VIRT(boot_get_machine_id()) #define BOOT_HAS_MACHINE_E2K_DSP \ HAS_THE_MACHINE_E2K_DSP(boot_get_machine_id()) #define BOOT_HAS_MACHINE_E2K_FULL_SIC \ HAS_THE_MACHINE_E2K_FULL_SIC(boot_get_machine_id()) #define BOOT_HAS_MACHINE_E2K_IOHUB \ HAS_THE_MACHINE_E2K_IOHUB(boot_get_machine_id()) #define BOOT_HAS_MACHINE_L_IOMMU \ HAS_THE_MACHINE_L_IOMMU(boot_get_machine_id()) #define BOOT_HAS_MACHINE_E2K_IOMMU \ HAS_THE_MACHINE_E2K_IOMMU(boot_get_machine_id()) #define BOOT_HAS_MACHINE_E2K_LEGACY_SIC \ HAS_THE_MACHINE_E2K_LEGACY_SIC(boot_get_machine_id()) #define BOOT_HAS_MACHINE_L_SIC \ HAS_THE_MACHINE_L_SIC(boot_get_machine_id()) #define MAX_NODE_CPUS 16 /* all 16 CPU cores on a node */ #define E2K_MAX_NODE_IOLINKS 2 /* each node can has max 2 IO links */ /* connected to IOHUB or RDMA */ #define MACH_MAX_NUMIOLINKS (E2K_MAX_NODE_IOLINKS * MAX_NUMNODES) #define LMS_CONS_DATA_PORT 0x300UL /* On READ - data from keyboard */ /* On WRITE - data to debug ouput */ /* port (console/journal) */ #define LMS_CONS_STATUS_PORT 0x301UL /* On READ - data available on 0x300 */ /* On WRITE - shift count for 0x304 */ #define LMS_NSOCK_BADDR_PORT 0x302UL /* On READ - network socket base addr*/ /* On WRITE - the same. */ #define LMS_NSOCK_DATA_PORT 0x303UL /* On READ - data from network socket*/ /* On WRITE - data to network socket*/ #define LMS_TRACE_CNTL_PORT 0x304UL /* On READ - state of the instruction*/ /* counter */ /* On WRITE - LMS tracer control */ /* (1 - start, 0 - stop) */ #define LMS_RAM_ADDR_PORT 0x309UL /* On WRITE - RAM address to load */ /* kernel image by simulator */ #define LMS_TRACE_CNTL_OFF 0 #define LMS_TRACE_CNTL_ON 1 #define LMS_LOAD_IMAGE_TO_RAM 5 /* Load 'romimage' file to RAM from */ /* address before written to */ /* 'LMS_RAM_ADDR_PORT' port */ extern unsigned long machine_serial_num; #endif /* _ASM_E2K_H_ */