added a lot of printk output to ease writing of emulator
[linux-2.4.21-pre4.git] / include / asm-ppc64 / hvcall.h
1
2 #define H_Success       0
3 #define H_Busy          1       /* Hardware busy -- retry later */
4 #define H_Hardware      -1      /* Hardware error */
5 #define H_Function      -2      /* Function not supported */
6 #define H_Privilege     -3      /* Caller not privileged */
7 #define H_Parameter     -4      /* Parameter invalid, out-of-range or conflicting */
8 #define H_Bad_Mode      -5      /* Illegal msr value */
9 #define H_PTEG_Full     -6      /* PTEG is full */
10 #define H_Not_Found     -7      /* PTE was not found" */
11 #define H_Reserved_DABR -8      /* DABR address is reserved by the hypervisor on this processor" */
12
13 /* Flags */
14 #define H_LARGE_PAGE            (1UL<<(63-16))
15 #define H_EXACT             (1UL<<(63-24))      /* Use exact PTE or return H_PTEG_FULL */
16 #define H_R_XLATE               (1UL<<(63-25))  /* include a valid logical page num in the pte if the valid bit is set */
17 #define H_READ_4                (1UL<<(63-26))  /* Return 4 PTEs */
18 #define H_AVPN                  (1UL<<(63-32))  /* An avpn is provided as a sanity test */
19 #define H_ANDCOND               (1UL<<(63-33))
20 #define H_ICACHE_INVALIDATE     (1UL<<(63-40))  /* icbi, etc.  (ignored for IO pages) */
21 #define H_ICACHE_SYNCHRONIZE    (1UL<<(63-41))  /* dcbst, icbi, etc (ignored for IO pages */
22 #define H_ZERO_PAGE             (1UL<<(63-48))  /* zero the page before mapping (ignored for IO pages) */
23 #define H_COPY_PAGE             (1UL<<(63-49))
24 #define H_N                     (1UL<<(63-61))
25 #define H_PP1                   (1UL<<(63-62))
26 #define H_PP2                   (1UL<<(63-63))
27
28
29
30 /* pSeries hypervisor opcodes */
31 #define H_REMOVE                0x04
32 #define H_ENTER                 0x08
33 #define H_READ                  0x0c
34 #define H_CLEAR_MOD             0x10
35 #define H_CLEAR_REF             0x14
36 #define H_PROTECT               0x18
37 #define H_GET_TCE               0x1c
38 #define H_PUT_TCE               0x20
39 #define H_SET_SPRG0             0x24
40 #define H_SET_DABR              0x28
41 #define H_PAGE_INIT             0x2c
42 #define H_SET_ASR               0x30
43 #define H_ASR_ON                0x34
44 #define H_ASR_OFF               0x38
45 #define H_LOGICAL_CI_LOAD       0x3c
46 #define H_LOGICAL_CI_STORE      0x40
47 #define H_LOGICAL_CACHE_LOAD    0x44
48 #define H_LOGICAL_CACHE_STORE   0x48
49 #define H_LOGICAL_ICBI          0x4c
50 #define H_LOGICAL_DCBF          0x50
51 #define H_GET_TERM_CHAR         0x54
52 #define H_PUT_TERM_CHAR         0x58
53 #define H_REAL_TO_LOGICAL       0x5c
54 #define H_HYPERVISOR_DATA       0x60
55 #define H_EOI                   0x64
56 #define H_CPPR                  0x68
57 #define H_IPI                   0x6c
58 #define H_IPOLL                 0x70
59 #define H_XIRR                  0x74
60 #define H_PERFMON               0x7c
61
62 #define HSC                     ".long 0x44000022\n"
63 #define H_ENTER_r3              "li     3, 0x08\n"
64
65 /* plpar_hcall() -- Generic call interface using above opcodes
66  *
67  * The actual call interface is a hypervisor call instruction with
68  * the opcode in R3 and input args in R4-R7.
69  * Status is returned in R3 with variable output values in R4-R11.
70  * Only H_PTE_READ with H_READ_4 uses R6-R11 so we ignore it for now
71  * and return only two out args which MUST ALWAYS BE PROVIDED.
72  */
73 long plpar_hcall(unsigned long opcode,
74                  unsigned long arg1,
75                  unsigned long arg2,
76                  unsigned long arg3,
77                  unsigned long arg4,
78                  unsigned long *out1,
79                  unsigned long *out2,
80                  unsigned long *out3);
81
82 /* Same as plpar_hcall but for those opcodes that return no values
83  * other than status.  Slightly more efficient.
84  */
85 long plpar_hcall_norets(unsigned long opcode, ...);
86