diff options
author | David S. Miller <davem@sunset.davemloft.net> | 2006-02-08 05:53:50 -0500 |
---|---|---|
committer | David S. Miller <davem@sunset.davemloft.net> | 2006-03-20 04:12:01 -0500 |
commit | 5b0c0572fcd6204675c5f7ddfa572b5017f817dd (patch) | |
tree | 1075a61338e887bd6d4ecd4517646ef95dc09fbc /include/asm-sparc64/cpudata.h | |
parent | ac29c11d4cd4fa1fac968e99998a956405732f2f (diff) |
[SPARC64]: Sun4v interrupt handling.
Sun4v has 4 interrupt queues: cpu, device, resumable errors,
and non-resumable errors. A set of head/tail offset pointers
help maintain a work queue in physical memory. The entries
are 64-bytes in size.
Each queue is allocated then registered with the hypervisor
as we bring cpus up.
The two error queues each get a kernel side buffer that we
use to quickly empty the main interrupt queue before we
call up to C code to log the event and possibly take evasive
action.
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/asm-sparc64/cpudata.h')
-rw-r--r-- | include/asm-sparc64/cpudata.h | 22 |
1 files changed, 14 insertions, 8 deletions
diff --git a/include/asm-sparc64/cpudata.h b/include/asm-sparc64/cpudata.h index 492314b53475..7f0a74ec47f6 100644 --- a/include/asm-sparc64/cpudata.h +++ b/include/asm-sparc64/cpudata.h | |||
@@ -53,16 +53,17 @@ DECLARE_PER_CPU(cpuinfo_sparc, __cpu_data); | |||
53 | */ | 53 | */ |
54 | struct thread_info; | 54 | struct thread_info; |
55 | struct trap_per_cpu { | 55 | struct trap_per_cpu { |
56 | /* D-cache line 1: Basic thread information */ | 56 | /* D-cache line 1: Basic thread information, cpu and device mondo queues */ |
57 | struct thread_info *thread; | 57 | struct thread_info *thread; |
58 | unsigned long pgd_paddr; | 58 | unsigned long pgd_paddr; |
59 | unsigned long __pad1[2]; | ||
60 | |||
61 | /* D-cache line 2: Sun4V Mondo Queue pointers */ | ||
62 | unsigned long cpu_mondo_pa; | 59 | unsigned long cpu_mondo_pa; |
63 | unsigned long dev_mondo_pa; | 60 | unsigned long dev_mondo_pa; |
61 | |||
62 | /* D-cache line 2: Error Mondo Queue and kernel buffer pointers */ | ||
64 | unsigned long resum_mondo_pa; | 63 | unsigned long resum_mondo_pa; |
64 | unsigned long resum_kernel_buf_pa; | ||
65 | unsigned long nonresum_mondo_pa; | 65 | unsigned long nonresum_mondo_pa; |
66 | unsigned long nonresum_kernel_buf_pa; | ||
66 | 67 | ||
67 | /* Dcache lines 3 and 4: Hypervisor Fault Status */ | 68 | /* Dcache lines 3 and 4: Hypervisor Fault Status */ |
68 | struct hv_fault_status fault_info; | 69 | struct hv_fault_status fault_info; |
@@ -100,10 +101,12 @@ extern struct sun4v_2insn_patch_entry __sun4v_2insn_patch, | |||
100 | 101 | ||
101 | #define TRAP_PER_CPU_THREAD 0x00 | 102 | #define TRAP_PER_CPU_THREAD 0x00 |
102 | #define TRAP_PER_CPU_PGD_PADDR 0x08 | 103 | #define TRAP_PER_CPU_PGD_PADDR 0x08 |
103 | #define TRAP_PER_CPU_CPU_MONDO_PA 0x20 | 104 | #define TRAP_PER_CPU_CPU_MONDO_PA 0x10 |
104 | #define TRAP_PER_CPU_DEV_MONDO_PA 0x28 | 105 | #define TRAP_PER_CPU_DEV_MONDO_PA 0x18 |
105 | #define TRAP_PER_CPU_RESUM_MONDO_PA 0x30 | 106 | #define TRAP_PER_CPU_RESUM_MONDO_PA 0x20 |
106 | #define TRAP_PER_CPU_NONRESUM_MONDO_PA 0x38 | 107 | #define TRAP_PER_CPU_RESUM_KBUF_PA 0x28 |
108 | #define TRAP_PER_CPU_NONRESUM_MONDO_PA 0x30 | ||
109 | #define TRAP_PER_CPU_NONRESUM_KBUF_PA 0x38 | ||
107 | #define TRAP_PER_CPU_FAULT_INFO 0x40 | 110 | #define TRAP_PER_CPU_FAULT_INFO 0x40 |
108 | 111 | ||
109 | #define TRAP_BLOCK_SZ_SHIFT 7 | 112 | #define TRAP_BLOCK_SZ_SHIFT 7 |
@@ -188,6 +191,9 @@ extern struct sun4v_2insn_patch_entry __sun4v_2insn_patch, | |||
188 | 191 | ||
189 | #else | 192 | #else |
190 | 193 | ||
194 | #define __GET_CPUID(REG) \ | ||
195 | mov 0, REG; | ||
196 | |||
191 | /* Uniprocessor versions, we know the cpuid is zero. */ | 197 | /* Uniprocessor versions, we know the cpuid is zero. */ |
192 | #define TRAP_LOAD_PGD_PHYS(DEST, TMP) \ | 198 | #define TRAP_LOAD_PGD_PHYS(DEST, TMP) \ |
193 | sethi %hi(trap_block), DEST; \ | 199 | sethi %hi(trap_block), DEST; \ |