/* SPDX-License-Identifier: GPL-2.0-only */ /* * I/O allocations * * Copyright (c) 2021 IBM Corp * * Authors: * Pierre Morel * */ #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_ */