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