| /* SPDX-License-Identifier: GPL-2.0-only */ | |
| /* | |
| * I/O allocations | |
| * | |
| * Copyright (c) 2021 IBM Corp | |
| * | |
| * Authors: | |
| * Pierre Morel <pmorel@linux.ibm.com> | |
| * | |
| */ | |
| #ifndef _S390X_MALLOC_IO_H_ | |
| #define _S390X_MALLOC_IO_H_ | |
| /* | |
| * Allocates a page aligned page bound range of contiguous real or | |
| * absolute memory in the DMA31 region large enough to contain size | |
| * bytes. | |
| * If Protected Virtualisation facility is present, shares the pages | |
| * with the host. | |
| * If all the pages for the specified size cannot be reserved, | |
| * the function rewinds the partial allocation and a NULL pointer | |
| * is returned. | |
| * | |
| * @size: the minimal size allocated in byte. | |
| * @flags: the flags used for the underlying page allocator. | |
| * | |
| * Errors: | |
| * The allocation will assert the size parameter, will fail if the | |
| * underlying page allocator fail or in the case of protected | |
| * virtualisation if the sharing of the pages fails. | |
| * | |
| * Returns a pointer to the first page in case of success, NULL otherwise. | |
| */ | |
| void *alloc_io_mem(int size, int flags); | |
| /* | |
| * Frees a previously memory space allocated by alloc_io_mem. | |
| * If Protected Virtualisation facility is present, unshares the pages | |
| * with the host. | |
| * The address must be aligned on a page boundary otherwise an assertion | |
| * breaks the program. | |
| */ | |
| void free_io_mem(void *p, int size); | |
| #endif /* _S390X_MALLOC_IO_H_ */ |