1/* 2 * Copyright 2017, Data61 3 * Commonwealth Scientific and Industrial Research Organisation (CSIRO) 4 * ABN 41 687 119 230. 5 * 6 * This software may be distributed and modified according to the terms of 7 * the BSD 2-Clause license. Note that NO WARRANTY is provided. 8 * See "LICENSE_BSD2.txt" for details. 9 * 10 * @TAG(DATA61_BSD) 11 */ 12 13#ifndef __LIBSEL4_ARCH_FUNCTIONS_H 14#define __LIBSEL4_ARCH_FUNCTIONS_H 15 16#include <autoconf.h> 17#include <sel4/types.h> 18#include <sel4/sel4_arch/functions.h> 19 20LIBSEL4_INLINE_FUNC seL4_Word 21seL4_GetMR(int i) 22{ 23 return seL4_GetIPCBuffer()->msg[i]; 24} 25 26LIBSEL4_INLINE_FUNC void 27seL4_SetMR(int i, seL4_Word mr) 28{ 29 seL4_GetIPCBuffer()->msg[i] = mr; 30} 31 32LIBSEL4_INLINE_FUNC seL4_Word 33seL4_GetUserData(void) 34{ 35 return seL4_GetIPCBuffer()->userData; 36} 37 38LIBSEL4_INLINE_FUNC void 39seL4_SetUserData(seL4_Word data) 40{ 41 seL4_GetIPCBuffer()->userData = data; 42} 43 44LIBSEL4_INLINE_FUNC seL4_Word 45seL4_GetBadge(int i) 46{ 47 return seL4_GetIPCBuffer()->caps_or_badges[i]; 48} 49 50LIBSEL4_INLINE_FUNC seL4_CPtr 51seL4_GetCap(int i) 52{ 53 return (seL4_CPtr)seL4_GetIPCBuffer()->caps_or_badges[i]; 54} 55 56LIBSEL4_INLINE_FUNC void 57seL4_SetCap(int i, seL4_CPtr cptr) 58{ 59 seL4_GetIPCBuffer()->caps_or_badges[i] = (seL4_Word)cptr; 60} 61 62LIBSEL4_INLINE_FUNC void 63seL4_GetCapReceivePath(seL4_CPtr* receiveCNode, seL4_CPtr* receiveIndex, seL4_Word* receiveDepth) 64{ 65 seL4_IPCBuffer* ipcbuffer = seL4_GetIPCBuffer(); 66 if (receiveCNode != (void*)0) { 67 *receiveCNode = ipcbuffer->receiveCNode; 68 } 69 70 if (receiveIndex != (void*)0) { 71 *receiveIndex = ipcbuffer->receiveIndex; 72 } 73 74 if (receiveDepth != (void*)0) { 75 *receiveDepth = ipcbuffer->receiveDepth; 76 } 77} 78 79LIBSEL4_INLINE_FUNC void 80seL4_SetCapReceivePath(seL4_CPtr receiveCNode, seL4_CPtr receiveIndex, seL4_Word receiveDepth) 81{ 82 seL4_IPCBuffer* ipcbuffer = seL4_GetIPCBuffer(); 83 ipcbuffer->receiveCNode = receiveCNode; 84 ipcbuffer->receiveIndex = receiveIndex; 85 ipcbuffer->receiveDepth = receiveDepth; 86} 87 88#endif 89