diff options
Diffstat (limited to 'arch/powerpc/include/asm/epapr_hcalls.h')
| -rw-r--r-- | arch/powerpc/include/asm/epapr_hcalls.h | 83 |
1 files changed, 16 insertions, 67 deletions
diff --git a/arch/powerpc/include/asm/epapr_hcalls.h b/arch/powerpc/include/asm/epapr_hcalls.h index bf2c06c33871..d3d634274d2c 100644 --- a/arch/powerpc/include/asm/epapr_hcalls.h +++ b/arch/powerpc/include/asm/epapr_hcalls.h | |||
| @@ -50,64 +50,13 @@ | |||
| 50 | #ifndef _EPAPR_HCALLS_H | 50 | #ifndef _EPAPR_HCALLS_H |
| 51 | #define _EPAPR_HCALLS_H | 51 | #define _EPAPR_HCALLS_H |
| 52 | 52 | ||
| 53 | #include <uapi/asm/epapr_hcalls.h> | ||
| 54 | |||
| 55 | #ifndef __ASSEMBLY__ | ||
| 53 | #include <linux/types.h> | 56 | #include <linux/types.h> |
| 54 | #include <linux/errno.h> | 57 | #include <linux/errno.h> |
| 55 | #include <asm/byteorder.h> | 58 | #include <asm/byteorder.h> |
| 56 | 59 | ||
| 57 | #define EV_BYTE_CHANNEL_SEND 1 | ||
| 58 | #define EV_BYTE_CHANNEL_RECEIVE 2 | ||
| 59 | #define EV_BYTE_CHANNEL_POLL 3 | ||
| 60 | #define EV_INT_SET_CONFIG 4 | ||
| 61 | #define EV_INT_GET_CONFIG 5 | ||
| 62 | #define EV_INT_SET_MASK 6 | ||
| 63 | #define EV_INT_GET_MASK 7 | ||
| 64 | #define EV_INT_IACK 9 | ||
| 65 | #define EV_INT_EOI 10 | ||
| 66 | #define EV_INT_SEND_IPI 11 | ||
| 67 | #define EV_INT_SET_TASK_PRIORITY 12 | ||
| 68 | #define EV_INT_GET_TASK_PRIORITY 13 | ||
| 69 | #define EV_DOORBELL_SEND 14 | ||
| 70 | #define EV_MSGSND 15 | ||
| 71 | #define EV_IDLE 16 | ||
| 72 | |||
| 73 | /* vendor ID: epapr */ | ||
| 74 | #define EV_LOCAL_VENDOR_ID 0 /* for private use */ | ||
| 75 | #define EV_EPAPR_VENDOR_ID 1 | ||
| 76 | #define EV_FSL_VENDOR_ID 2 /* Freescale Semiconductor */ | ||
| 77 | #define EV_IBM_VENDOR_ID 3 /* IBM */ | ||
| 78 | #define EV_GHS_VENDOR_ID 4 /* Green Hills Software */ | ||
| 79 | #define EV_ENEA_VENDOR_ID 5 /* Enea */ | ||
| 80 | #define EV_WR_VENDOR_ID 6 /* Wind River Systems */ | ||
| 81 | #define EV_AMCC_VENDOR_ID 7 /* Applied Micro Circuits */ | ||
| 82 | #define EV_KVM_VENDOR_ID 42 /* KVM */ | ||
| 83 | |||
| 84 | /* The max number of bytes that a byte channel can send or receive per call */ | ||
| 85 | #define EV_BYTE_CHANNEL_MAX_BYTES 16 | ||
| 86 | |||
| 87 | |||
| 88 | #define _EV_HCALL_TOKEN(id, num) (((id) << 16) | (num)) | ||
| 89 | #define EV_HCALL_TOKEN(hcall_num) _EV_HCALL_TOKEN(EV_EPAPR_VENDOR_ID, hcall_num) | ||
| 90 | |||
| 91 | /* epapr error codes */ | ||
| 92 | #define EV_EPERM 1 /* Operation not permitted */ | ||
| 93 | #define EV_ENOENT 2 /* Entry Not Found */ | ||
| 94 | #define EV_EIO 3 /* I/O error occured */ | ||
| 95 | #define EV_EAGAIN 4 /* The operation had insufficient | ||
| 96 | * resources to complete and should be | ||
| 97 | * retried | ||
| 98 | */ | ||
| 99 | #define EV_ENOMEM 5 /* There was insufficient memory to | ||
| 100 | * complete the operation */ | ||
| 101 | #define EV_EFAULT 6 /* Bad guest address */ | ||
| 102 | #define EV_ENODEV 7 /* No such device */ | ||
| 103 | #define EV_EINVAL 8 /* An argument supplied to the hcall | ||
| 104 | was out of range or invalid */ | ||
| 105 | #define EV_INTERNAL 9 /* An internal error occured */ | ||
| 106 | #define EV_CONFIG 10 /* A configuration error was detected */ | ||
| 107 | #define EV_INVALID_STATE 11 /* The object is in an invalid state */ | ||
| 108 | #define EV_UNIMPLEMENTED 12 /* Unimplemented hypercall */ | ||
| 109 | #define EV_BUFFER_OVERFLOW 13 /* Caller-supplied buffer too small */ | ||
| 110 | |||
| 111 | /* | 60 | /* |
| 112 | * Hypercall register clobber list | 61 | * Hypercall register clobber list |
| 113 | * | 62 | * |
| @@ -193,7 +142,7 @@ static inline unsigned int ev_int_set_config(unsigned int interrupt, | |||
| 193 | r5 = priority; | 142 | r5 = priority; |
| 194 | r6 = destination; | 143 | r6 = destination; |
| 195 | 144 | ||
| 196 | __asm__ __volatile__ ("sc 1" | 145 | asm volatile("bl epapr_hypercall_start" |
| 197 | : "+r" (r11), "+r" (r3), "+r" (r4), "+r" (r5), "+r" (r6) | 146 | : "+r" (r11), "+r" (r3), "+r" (r4), "+r" (r5), "+r" (r6) |
| 198 | : : EV_HCALL_CLOBBERS4 | 147 | : : EV_HCALL_CLOBBERS4 |
| 199 | ); | 148 | ); |
| @@ -222,7 +171,7 @@ static inline unsigned int ev_int_get_config(unsigned int interrupt, | |||
| 222 | r11 = EV_HCALL_TOKEN(EV_INT_GET_CONFIG); | 171 | r11 = EV_HCALL_TOKEN(EV_INT_GET_CONFIG); |
| 223 | r3 = interrupt; | 172 | r3 = interrupt; |
| 224 | 173 | ||
| 225 | __asm__ __volatile__ ("sc 1" | 174 | asm volatile("bl epapr_hypercall_start" |
| 226 | : "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5), "=r" (r6) | 175 | : "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5), "=r" (r6) |
| 227 | : : EV_HCALL_CLOBBERS4 | 176 | : : EV_HCALL_CLOBBERS4 |
| 228 | ); | 177 | ); |
| @@ -252,7 +201,7 @@ static inline unsigned int ev_int_set_mask(unsigned int interrupt, | |||
| 252 | r3 = interrupt; | 201 | r3 = interrupt; |
| 253 | r4 = mask; | 202 | r4 = mask; |
| 254 | 203 | ||
| 255 | __asm__ __volatile__ ("sc 1" | 204 | asm volatile("bl epapr_hypercall_start" |
| 256 | : "+r" (r11), "+r" (r3), "+r" (r4) | 205 | : "+r" (r11), "+r" (r3), "+r" (r4) |
| 257 | : : EV_HCALL_CLOBBERS2 | 206 | : : EV_HCALL_CLOBBERS2 |
| 258 | ); | 207 | ); |
| @@ -277,7 +226,7 @@ static inline unsigned int ev_int_get_mask(unsigned int interrupt, | |||
| 277 | r11 = EV_HCALL_TOKEN(EV_INT_GET_MASK); | 226 | r11 = EV_HCALL_TOKEN(EV_INT_GET_MASK); |
| 278 | r3 = interrupt; | 227 | r3 = interrupt; |
| 279 | 228 | ||
| 280 | __asm__ __volatile__ ("sc 1" | 229 | asm volatile("bl epapr_hypercall_start" |
| 281 | : "+r" (r11), "+r" (r3), "=r" (r4) | 230 | : "+r" (r11), "+r" (r3), "=r" (r4) |
| 282 | : : EV_HCALL_CLOBBERS2 | 231 | : : EV_HCALL_CLOBBERS2 |
| 283 | ); | 232 | ); |
| @@ -305,7 +254,7 @@ static inline unsigned int ev_int_eoi(unsigned int interrupt) | |||
| 305 | r11 = EV_HCALL_TOKEN(EV_INT_EOI); | 254 | r11 = EV_HCALL_TOKEN(EV_INT_EOI); |
| 306 | r3 = interrupt; | 255 | r3 = interrupt; |
| 307 | 256 | ||
| 308 | __asm__ __volatile__ ("sc 1" | 257 | asm volatile("bl epapr_hypercall_start" |
| 309 | : "+r" (r11), "+r" (r3) | 258 | : "+r" (r11), "+r" (r3) |
| 310 | : : EV_HCALL_CLOBBERS1 | 259 | : : EV_HCALL_CLOBBERS1 |
| 311 | ); | 260 | ); |
| @@ -344,7 +293,7 @@ static inline unsigned int ev_byte_channel_send(unsigned int handle, | |||
| 344 | r7 = be32_to_cpu(p[2]); | 293 | r7 = be32_to_cpu(p[2]); |
| 345 | r8 = be32_to_cpu(p[3]); | 294 | r8 = be32_to_cpu(p[3]); |
| 346 | 295 | ||
| 347 | __asm__ __volatile__ ("sc 1" | 296 | asm volatile("bl epapr_hypercall_start" |
| 348 | : "+r" (r11), "+r" (r3), | 297 | : "+r" (r11), "+r" (r3), |
| 349 | "+r" (r4), "+r" (r5), "+r" (r6), "+r" (r7), "+r" (r8) | 298 | "+r" (r4), "+r" (r5), "+r" (r6), "+r" (r7), "+r" (r8) |
| 350 | : : EV_HCALL_CLOBBERS6 | 299 | : : EV_HCALL_CLOBBERS6 |
| @@ -383,7 +332,7 @@ static inline unsigned int ev_byte_channel_receive(unsigned int handle, | |||
| 383 | r3 = handle; | 332 | r3 = handle; |
| 384 | r4 = *count; | 333 | r4 = *count; |
| 385 | 334 | ||
| 386 | __asm__ __volatile__ ("sc 1" | 335 | asm volatile("bl epapr_hypercall_start" |
| 387 | : "+r" (r11), "+r" (r3), "+r" (r4), | 336 | : "+r" (r11), "+r" (r3), "+r" (r4), |
| 388 | "=r" (r5), "=r" (r6), "=r" (r7), "=r" (r8) | 337 | "=r" (r5), "=r" (r6), "=r" (r7), "=r" (r8) |
| 389 | : : EV_HCALL_CLOBBERS6 | 338 | : : EV_HCALL_CLOBBERS6 |
| @@ -421,7 +370,7 @@ static inline unsigned int ev_byte_channel_poll(unsigned int handle, | |||
| 421 | r11 = EV_HCALL_TOKEN(EV_BYTE_CHANNEL_POLL); | 370 | r11 = EV_HCALL_TOKEN(EV_BYTE_CHANNEL_POLL); |
| 422 | r3 = handle; | 371 | r3 = handle; |
| 423 | 372 | ||
| 424 | __asm__ __volatile__ ("sc 1" | 373 | asm volatile("bl epapr_hypercall_start" |
| 425 | : "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5) | 374 | : "+r" (r11), "+r" (r3), "=r" (r4), "=r" (r5) |
| 426 | : : EV_HCALL_CLOBBERS3 | 375 | : : EV_HCALL_CLOBBERS3 |
| 427 | ); | 376 | ); |
| @@ -454,7 +403,7 @@ static inline unsigned int ev_int_iack(unsigned int handle, | |||
| 454 | r11 = EV_HCALL_TOKEN(EV_INT_IACK); | 403 | r11 = EV_HCALL_TOKEN(EV_INT_IACK); |
| 455 | r3 = handle; | 404 | r3 = handle; |
| 456 | 405 | ||
| 457 | __asm__ __volatile__ ("sc 1" | 406 | asm volatile("bl epapr_hypercall_start" |
| 458 | : "+r" (r11), "+r" (r3), "=r" (r4) | 407 | : "+r" (r11), "+r" (r3), "=r" (r4) |
| 459 | : : EV_HCALL_CLOBBERS2 | 408 | : : EV_HCALL_CLOBBERS2 |
| 460 | ); | 409 | ); |
| @@ -478,7 +427,7 @@ static inline unsigned int ev_doorbell_send(unsigned int handle) | |||
| 478 | r11 = EV_HCALL_TOKEN(EV_DOORBELL_SEND); | 427 | r11 = EV_HCALL_TOKEN(EV_DOORBELL_SEND); |
| 479 | r3 = handle; | 428 | r3 = handle; |
| 480 | 429 | ||
| 481 | __asm__ __volatile__ ("sc 1" | 430 | asm volatile("bl epapr_hypercall_start" |
| 482 | : "+r" (r11), "+r" (r3) | 431 | : "+r" (r11), "+r" (r3) |
| 483 | : : EV_HCALL_CLOBBERS1 | 432 | : : EV_HCALL_CLOBBERS1 |
| 484 | ); | 433 | ); |
| @@ -498,12 +447,12 @@ static inline unsigned int ev_idle(void) | |||
| 498 | 447 | ||
| 499 | r11 = EV_HCALL_TOKEN(EV_IDLE); | 448 | r11 = EV_HCALL_TOKEN(EV_IDLE); |
| 500 | 449 | ||
| 501 | __asm__ __volatile__ ("sc 1" | 450 | asm volatile("bl epapr_hypercall_start" |
| 502 | : "+r" (r11), "=r" (r3) | 451 | : "+r" (r11), "=r" (r3) |
| 503 | : : EV_HCALL_CLOBBERS1 | 452 | : : EV_HCALL_CLOBBERS1 |
| 504 | ); | 453 | ); |
| 505 | 454 | ||
| 506 | return r3; | 455 | return r3; |
| 507 | } | 456 | } |
| 508 | 457 | #endif /* !__ASSEMBLY__ */ | |
| 509 | #endif | 458 | #endif /* _EPAPR_HCALLS_H */ |
