1/* 2 * Copyright (c) 2014 ETH Zurich. 3 * All rights reserved. 4 * 5 * This file is distributed under the terms in the attached LICENSE file. 6 * If you do not find this file, copies can be found by writing to: 7 * ETH Zurich D-INFK, Universitaetsstrasse 6, CH-8092 Zurich. Attn: Systems Group. 8 */ 9 10#ifndef LIB_DMA_MGR_CLIENT_H 11#define LIB_DMA_MGR_CLIENT_H 12 13#include <dma/dma.h> 14 15/// name of the DMA manager service 16#define DMA_MGR_SVC_NAME "dma_mgr_svc" 17 18#define DMA_MGR_REGISTERED_DRIVER "dma_driver" 19 20struct dma_mgr_driver_info 21{ 22 lpaddr_t mem_low; 23 lpaddr_t mem_high; 24 iref_t iref; 25 dma_dev_type_t type; 26 uint8_t numa_node; 27}; 28 29/** 30 * \brief initializes the connection to the DMA manager service in an eager way 31 * 32 * \returns SYS_ERR_OK on success 33 * errval on error 34 */ 35errval_t dma_manager_client_init(void); 36 37/** 38 * \brief registers a DMA driver with the DMA driver manager 39 * 40 * \param mem_low lower end of the supported memory range 41 * \param mem_high upper end of the supported memory range 42 * \param type DMA device type 43 * \param iref the iref of the exported DMA service 44 * 45 * \returns SYS_ERR_OK on success 46 * DMA_ERR_* on failure 47 */ 48errval_t dma_manager_register_driver(lpaddr_t mem_low, 49 lpaddr_t mem_high, 50 uint8_t type, 51 iref_t iref); 52 53/** 54 * \brief queries the DMA manager for a suitable DMA driver for a address, size 55 * pair 56 * 57 * \param addr address of the transfer 58 * \param size size of the desired transfer 59 * \param info returns the driver info 60 * 61 * \returns SYS_ERR_OK on success 62 * DMA_ERR_* on failure 63 */ 64errval_t dma_manager_lookup_driver(lpaddr_t addr, 65 lpaddr_t size, 66 struct dma_mgr_driver_info *info); 67 68/** 69 * \brief queries the DMA driver manager based on the service iref 70 * 71 * \param iref iref ot the exported driver service 72 * \param info returns the driver info 73 * 74 * \returns SYS_ERR_OK on success 75 * DMA_ERR_* on failure 76 */ 77errval_t dma_manager_lookup_by_iref(iref_t iref, 78 struct dma_mgr_driver_info *info); 79 80/** 81 * \brief waits until a device driver for the supplied device type is ready 82 * 83 * \param device DMA device type 84 * \param numa_node Numanode of the DMA device driver 85 * 86 * \returns SYS_ERR_OK when the driver is ready 87 * errval if there was something wrong 88 */ 89errval_t dma_manager_wait_for_driver(dma_dev_type_t device, 90 uint8_t numa_node); 91 92 93#endif /* LIB_DMA_CLIENT_H */ 94