1*da96771eSJanosch Frank /* SPDX-License-Identifier: GPL-2.0-only */ 2*da96771eSJanosch Frank /* 3*da96771eSJanosch Frank * Snippet definitions 4*da96771eSJanosch Frank * 5*da96771eSJanosch Frank * Copyright IBM Corp. 2021 6*da96771eSJanosch Frank * Author: Janosch Frank <frankja@linux.ibm.com> 7*da96771eSJanosch Frank */ 8*da96771eSJanosch Frank 9*da96771eSJanosch Frank #ifndef _S390X_SNIPPET_H_ 10*da96771eSJanosch Frank #define _S390X_SNIPPET_H_ 11*da96771eSJanosch Frank 12*da96771eSJanosch Frank /* This macro cuts down the length of the pointers to snippets */ 13*da96771eSJanosch Frank #define SNIPPET_NAME_START(type, file) \ 14*da96771eSJanosch Frank _binary_s390x_snippets_##type##_##file##_gbin_start 15*da96771eSJanosch Frank #define SNIPPET_NAME_END(type, file) \ 16*da96771eSJanosch Frank _binary_s390x_snippets_##type##_##file##_gbin_end 17*da96771eSJanosch Frank 18*da96771eSJanosch Frank /* Returns the length of the snippet */ 19*da96771eSJanosch Frank #define SNIPPET_LEN(type, file) \ 20*da96771eSJanosch Frank ((uintptr_t)SNIPPET_NAME_END(type, file) - (uintptr_t)SNIPPET_NAME_START(type, file)) 21*da96771eSJanosch Frank 22*da96771eSJanosch Frank /* 23*da96771eSJanosch Frank * C snippet instructions start at 0x4000 due to the prefix and the 24*da96771eSJanosch Frank * stack being before that. ASM snippets don't strictly need a stack 25*da96771eSJanosch Frank * but keeping the starting address the same means less code. 26*da96771eSJanosch Frank */ 27*da96771eSJanosch Frank #define SNIPPET_ENTRY_ADDR 0x4000 28*da96771eSJanosch Frank 29*da96771eSJanosch Frank /* Standard entry PSWs for snippets which can simply be copied into the guest PSW */ 30*da96771eSJanosch Frank static const struct psw snippet_psw = { 31*da96771eSJanosch Frank .mask = PSW_MASK_64, 32*da96771eSJanosch Frank .addr = SNIPPET_ENTRY_ADDR, 33*da96771eSJanosch Frank }; 34*da96771eSJanosch Frank #endif 35