/* * Copyright (C) 2018 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #pragma once /* Trusty-specific APIs for memory management */ #include #include /* Don't use convenience macros here, it will polute the namespace. */ #ifdef __cplusplus extern "C" { #endif /* Trusty specific. */ int prepare_dma(void* uaddr, uint32_t size, uint32_t flags, struct dma_pmem* pmem); int finish_dma(void* uaddr, uint32_t size, uint32_t flags); /* Utility Functions */ /** * prepare_input_output_dma() - helper utility for using the prepare_dma * syscall. prepare_dma can only be called once with an address. If the same * buffer is being used for input and output, we should only call prepare_dma * once. This utility will handle address checking, making the prepare_dma * sycall, and filling in the appropriate dma_pmem. * * @input pointer to input buffer * @input_len length of input buffer * @output pointer to output buffer * @output_len length of output buffer * @input_pmem pointer to input dma descriptor * @output_pmem pointer to output dma descriptor * * Returns : LK error code */ int prepare_input_output_dma(void* input, uint32_t input_len, void* output, uint32_t output_len, struct dma_pmem* input_pmem, struct dma_pmem* output_pmem); /** * finish_input_output_dma() - helper utility for using the finish_dma * syscalls. Depending on the input/output address, only one prepare_dma might * have been called. This utility handles calling finish_dma with the correct * flags and number of times. * * @input pointer to input buffer * @input_len length of input buffer * @output pointer to output buffer * @output_len length of output buffer * * Returns : LK error code */ int finish_input_output_dma(void* input, uint32_t input_len, void* output, uint32_t output_len); #ifdef __cplusplus } #endif