diff options
author | David Gibson <david@gibson.dropbear.id.au> | 2005-07-27 14:44:21 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-27 19:25:58 -0400 |
commit | 488f84994c55927eef587a0827dc957c908a0bad (patch) | |
tree | 34bdc42927e2eb559bd64039ed87508a440dffc6 /include/asm-ppc64/iSeries/LparMap.h | |
parent | 533f08172e21521a74e15cdef8a13c929596d506 (diff) |
[PATCH] ppc64: remove another fixed address constraint
Presently the LparMap, one of the structures the kernel shares with the
legacy iSeries hypervisor has a fixed offset address in head.S. This patch
changes this so the LparMap is a normally initialized structure, without
fixed address. This allows us to use macros to compute some of the values
in the structure, which wasn't previously possible because the assembler
always uses signed-% which gets the wrong answers for the computations in
question.
Unfortunately, a gcc bug means that doing this requires another structure
(hvReleaseData) to be initialized in asm instead of C, but on the whole the
result is cleaner than before.
Signed-off-by: David Gibson <dwg@au1.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include/asm-ppc64/iSeries/LparMap.h')
-rw-r--r-- | include/asm-ppc64/iSeries/LparMap.h | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/include/asm-ppc64/iSeries/LparMap.h b/include/asm-ppc64/iSeries/LparMap.h index 038e5df7e9f8..5c32e38c1c01 100644 --- a/include/asm-ppc64/iSeries/LparMap.h +++ b/include/asm-ppc64/iSeries/LparMap.h | |||
@@ -49,19 +49,26 @@ | |||
49 | * entry to map the Esid to the Vsid. | 49 | * entry to map the Esid to the Vsid. |
50 | */ | 50 | */ |
51 | 51 | ||
52 | #define HvEsidsToMap 2 | ||
53 | #define HvRangesToMap 1 | ||
54 | |||
52 | /* Hypervisor initially maps 32MB of the load area */ | 55 | /* Hypervisor initially maps 32MB of the load area */ |
53 | #define HvPagesToMap 8192 | 56 | #define HvPagesToMap 8192 |
54 | 57 | ||
55 | struct LparMap { | 58 | struct LparMap { |
56 | u64 xNumberEsids; // Number of ESID/VSID pairs (1) | 59 | u64 xNumberEsids; // Number of ESID/VSID pairs |
57 | u64 xNumberRanges; // Number of VA ranges to map (1) | 60 | u64 xNumberRanges; // Number of VA ranges to map |
58 | u64 xSegmentTableOffs; // Page number within load area of seg table (0) | 61 | u64 xSegmentTableOffs; // Page number within load area of seg table |
59 | u64 xRsvd[5]; | 62 | u64 xRsvd[5]; |
60 | u64 xKernelEsid; // Esid used to map kernel load (0x0C00000000) | 63 | struct { |
61 | u64 xKernelVsid; // Vsid used to map kernel load (0x0C00000000) | 64 | u64 xKernelEsid; // Esid used to map kernel load |
62 | u64 xPages; // Number of pages to be mapped (8192) | 65 | u64 xKernelVsid; // Vsid used to map kernel load |
63 | u64 xOffset; // Offset from start of load area (0) | 66 | } xEsids[HvEsidsToMap]; |
64 | u64 xVPN; // Virtual Page Number (0x000C000000000000) | 67 | struct { |
68 | u64 xPages; // Number of pages to be mapped | ||
69 | u64 xOffset; // Offset from start of load area | ||
70 | u64 xVPN; // Virtual Page Number | ||
71 | } xRanges[HvRangesToMap]; | ||
65 | }; | 72 | }; |
66 | 73 | ||
67 | extern struct LparMap xLparMap; | 74 | extern struct LparMap xLparMap; |