Altera HWLIB  16.0
The Altera HW Manager API Reference Manual
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Groups
alt_dma.h
1 /******************************************************************************
2 *
3 * Copyright 2013 Altera Corporation. All Rights Reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 *
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
10 *
11 * 2. Redistributions in binary form must reproduce the above copyright notice,
12 * this list of conditions and the following disclaimer in the documentation
13 * and/or other materials provided with the distribution.
14 *
15 * 3. Neither the name of the copyright holder nor the names of its contributors
16 * may be used to endorse or promote products derived from this software without
17 * specific prior written permission.
18 *
19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE.
30 *
31 ******************************************************************************/
32 
33 /*
34  * $Id: //depot/embedded/rel/15.0/ip/hps/altera_hps/hwlib/include/alt_dma.h#1 $
35  */
36 
37 #ifndef __ALT_DMA_H__
38 #define __ALT_DMA_H__
39 
40 #include "hwlib.h"
41 #include "alt_dma_common.h"
42 #include "alt_dma_program.h"
43 
72 #ifndef ALT_DMA_PERIPH_PROVISION_16550_SUPPORT
73 #define ALT_DMA_PERIPH_PROVISION_16550_SUPPORT (1)
74 #endif
75 
76 #ifndef ALT_DMA_PERIPH_PROVISION_QSPI_SUPPORT
77 #define ALT_DMA_PERIPH_PROVISION_QSPI_SUPPORT (1)
78 #endif
79 
80 #ifndef ALT_DMA_PERIPH_PROVISION_I2C_SUPPORT
81 #define ALT_DMA_PERIPH_PROVISION_I2C_SUPPORT (1)
82 #endif
83 
84 #if ALT_DMA_PERIPH_PROVISION_I2C_SUPPORT
85 #include "alt_i2c.h"
86 #endif
87 
92 #ifdef __cplusplus
93 extern "C"
94 {
95 #endif /* __cplusplus */
96 
111 {
118 }
120 
126 {
138 }
140 
146 {
151  ALT_DMA_MANAGER_FAULT_DBG_INSTR = (int32_t)(1UL << 30),
152 
157 
162  ALT_DMA_MANAGER_FAULT_MGR_EVNT_ERR = (int32_t)(1UL << 5),
163 
168  ALT_DMA_MANAGER_FAULT_DMAGO_ERR = (int32_t)(1UL << 4),
169 
175 
179  ALT_DMA_MANAGER_FAULT_UNDEF_INSTR = (int32_t)(1UL << 0)
180 }
182 
188 {
192  ALT_DMA_CHANNEL_FAULT_LOCKUP_ERR = (int32_t)(1UL << 31),
193 
198  ALT_DMA_CHANNEL_FAULT_DBG_INSTR = (int32_t)(1UL << 30),
199 
203  ALT_DMA_CHANNEL_FAULT_DATA_READ_ERR = (int32_t)(1UL << 18),
204 
208  ALT_DMA_CHANNEL_FAULT_DATA_WRITE_ERR = (int32_t)(1UL << 17),
209 
214 
219 
224  ALT_DMA_CHANNEL_FAULT_MFIFO_ERR = (int32_t)(1UL << 12),
225 
230  ALT_DMA_CHANNEL_FAULT_CH_RDWR_ERR = (int32_t)(1UL << 7),
231 
236  ALT_DMA_CHANNEL_FAULT_CH_PERIPH_ERR = (int32_t)(1UL << 6),
237 
243  ALT_DMA_CHANNEL_FAULT_CH_EVNT_ERR = (int32_t)(1UL << 5),
244 
250 
254  ALT_DMA_CHANNEL_FAULT_UNDEF_INSTR = (int32_t)(1UL << 0)
255 }
257 
263 {
269 
275 }
277 
282 #if defined(soc_cv_av)
283 
284 typedef enum ALT_DMA_PERIPH_MUX_e
285 {
289  ALT_DMA_PERIPH_MUX_DEFAULT = 0,
290 
294  ALT_DMA_PERIPH_MUX_FPGA = 1,
295 
299  ALT_DMA_PERIPH_MUX_CAN = 2
300 }
301 ALT_DMA_PERIPH_MUX_t;
302 
303 #elif defined(soc_a10)
304 
305 typedef enum ALT_DMA_PERIPH_MUX_e
306 {
310  ALT_DMA_PERIPH_MUX_DEFAULT = 0,
311 
315  ALT_DMA_PERIPH_MUX_FPGA = 1,
316 
321  ALT_DMA_PERIPH_MUX_SECMGR = 2,
322 
327  ALT_DMA_PERIPH_MUX_I2C = 3
328 }
329 ALT_DMA_PERIPH_MUX_t;
330 
331 #endif
332 
333 
339 typedef struct ALT_DMA_CFG_s
340 {
345 
352 
359 
360 #if defined(soc_cv_av)
361 
368  ALT_DMA_PERIPH_MUX_t periph_mux[4];
369 
370 #elif defined(soc_a10)
371 
378  ALT_DMA_PERIPH_MUX_t periph_mux[3];
379 
380 #endif
381 }
383 
410 ALT_STATUS_CODE alt_dma_init(const ALT_DMA_CFG_t * dma_cfg);
411 
421 ALT_STATUS_CODE alt_dma_uninit(void);
422 
432 ALT_STATUS_CODE alt_dma_channel_alloc(ALT_DMA_CHANNEL_t channel);
433 
446 ALT_STATUS_CODE alt_dma_channel_alloc_any(ALT_DMA_CHANNEL_t * allocated);
447 
458 ALT_STATUS_CODE alt_dma_channel_free(ALT_DMA_CHANNEL_t channel);
459 
473 ALT_STATUS_CODE alt_dma_channel_exec(ALT_DMA_CHANNEL_t channel,
474  ALT_DMA_PROGRAM_t * pgm);
475 
492 ALT_STATUS_CODE alt_dma_channel_kill(ALT_DMA_CHANNEL_t channel);
493 
511 ALT_STATUS_CODE alt_dma_channel_reg_get(ALT_DMA_CHANNEL_t channel,
512  ALT_DMA_PROGRAM_REG_t reg, uint32_t * val);
513 
549 ALT_STATUS_CODE alt_dma_send_event(ALT_DMA_EVENT_t evt_num);
550 
561 ALT_STATUS_CODE alt_dma_manager_state_get(ALT_DMA_MANAGER_STATE_t * state);
562 
577 ALT_STATUS_CODE alt_dma_channel_state_get(ALT_DMA_CHANNEL_t channel,
578  ALT_DMA_CHANNEL_STATE_t * state);
579 
591 
607  ALT_DMA_CHANNEL_FAULT_t * fault);
608 
626 ALT_STATUS_CODE alt_dma_event_int_select(ALT_DMA_EVENT_t evt_num,
628 
644 ALT_STATUS_CODE alt_dma_event_int_status_get_raw(ALT_DMA_EVENT_t evt_num);
645 
661 ALT_STATUS_CODE alt_dma_int_status_get(ALT_DMA_EVENT_t irq_num);
662 
678 ALT_STATUS_CODE alt_dma_int_clear(ALT_DMA_EVENT_t irq_num);
679 
724 #if ALT_DMA_PERIPH_PROVISION_I2C_SUPPORT
725 
737 {
741  ALT_I2C_DEV_t * i2c_dev;
742 
748 
754 
758  uint32_t scratch[4];
759 }
761 
762 #endif
763 
800 ALT_STATUS_CODE alt_dma_memory_to_memory(ALT_DMA_CHANNEL_t channel,
801  ALT_DMA_PROGRAM_t * program,
802  void * dest,
803  const void * src,
804  size_t size,
805  bool send_evt,
806  ALT_DMA_EVENT_t evt);
807 
837 ALT_STATUS_CODE alt_dma_zero_to_memory(ALT_DMA_CHANNEL_t channel,
838  ALT_DMA_PROGRAM_t * program,
839  void * buf,
840  size_t size,
841  bool send_evt,
842  ALT_DMA_EVENT_t evt);
843 
883 ALT_STATUS_CODE alt_dma_memory_to_register(ALT_DMA_CHANNEL_t channel,
884  ALT_DMA_PROGRAM_t * program,
885  void * dst_reg,
886  const void * src_buf,
887  size_t count,
888  uint32_t register_width_bits,
889  bool send_evt,
890  ALT_DMA_EVENT_t evt);
891 
931 ALT_STATUS_CODE alt_dma_register_to_memory(ALT_DMA_CHANNEL_t channel,
932  ALT_DMA_PROGRAM_t * program,
933  void * dst_buf,
934  const void * src_reg,
935  size_t count,
936  uint32_t register_width_bits,
937  bool send_evt,
938  ALT_DMA_EVENT_t evt);
939 
1017 ALT_STATUS_CODE alt_dma_memory_to_periph(ALT_DMA_CHANNEL_t channel,
1018  ALT_DMA_PROGRAM_t * program,
1019  ALT_DMA_PERIPH_t dest,
1020  const void * src,
1021  size_t size,
1022  void * periph_info,
1023  bool send_evt,
1024  ALT_DMA_EVENT_t evt);
1025 
1102 ALT_STATUS_CODE alt_dma_periph_to_memory(ALT_DMA_CHANNEL_t channel,
1103  ALT_DMA_PROGRAM_t * program,
1104  void * dest,
1105  ALT_DMA_PERIPH_t src,
1106  size_t size,
1107  void * periph_info,
1108  bool send_evt,
1109  ALT_DMA_EVENT_t evt);
1110 
1115 #ifdef __cplusplus
1116 }
1117 #endif /* __cplusplus */
1118 
1123 #endif /* __ALT_DMA_H__ */