SemiDrive SSDK Appication Program Interface PTG3.0
sdrv_dma.h
Go to the documentation of this file.
1
9#ifndef __SDRV_DMA_H__
10#define __SDRV_DMA_H__
11
12#include <part.h>
13#include "common.h"
14#include "../source/dma/sdrv_dma_regdef.h"
15#include "compiler.h"
16#include "regs_base.h"
17#include "sdrv_common.h"
18#define SDRV_DMA_LP2_TT(n) ((((n)-1) << 4) & 0xfffff0)
19#define SDRV_DMA_LP2_LPSIZE(n) ((__builtin_ffs(n) - 1) & 0xf)
20/* bit4 ~ bit23 */
21#define SDRV_DMA_LP2_LPSIZE_MAX (0x000FFFFF)
22
23/* bit12 ~ bit23 */
24#define SDRV_DMA_LP1_LP_COUNT_MAX (0X00000FFF)
25/* bit0 ~ bit11 */
26#define SDRV_DMA_LP1_LPSIZE_MAX (0X00000FFF)
27
28/* bit0 ~ bit */
29#define SDRV_DMA_LP0_LPSIZE_MAX (0x00FFFFFF)
30
31#define SDRV_DMA_MAD_CRC_REGISTERS (7)
35enum {
36 /* dma channel id is invalid. */
38 /* dma channel config unsupport*/
40 /* dma channel invalid muxid*/
42};
43
47typedef enum {
74
78typedef enum {
89
93typedef enum {
104
108typedef enum {
118
127typedef enum {
133
141typedef enum {
160
168typedef enum {
179
192typedef enum {
221
228typedef enum {
242
252typedef enum {
259
269typedef enum {
275
279typedef enum {
281 SDRV_DMA_MUX_WR = 0x2,
285
289typedef enum {
298
302typedef enum {
330 SDRV_DMA_PATTERN_DETECTED = (1 << 13),
332 SDRV_DMA_LAST_MAD_DONE = (1 << 14),
337 SDRV_DMA_CH_STOP = (1 << 16),
339 SDRV_DMA_CH_FLUSH = (1 << 17),
341 SDRV_DMA_CH_REQ_FLUSH = (1 << 18),
343 SDRV_DMA_CH_HALT = (1 << 19),
345 SDRV_DMA_CH_ABORT = (1 << 20),
349 SDRV_DMA_SWITCH_EVENT = (1 << 22),
351 SDRV_DMA_HS_COMP = (1 << 23),
360
364typedef enum {
372
376typedef enum {
384
388typedef enum {
397
401typedef enum {
405 3,
408
412typedef enum {
415 1,
417 2,
420 3,
424
428typedef enum {
433
437typedef struct {
438 uint32_t port;
439 uint64_t start_addr;
440 uint64_t len;
443
450typedef struct {
452 sdrv_dma_ch_src_reg src;
454 sdrv_dma_ch_dst_reg dst;
456 sdrv_dma_ch_tr_ctrl_reg xfer_ctrl;
458 sdrv_dma_ch_blk_cfg_reg blk_cfg;
460 sdrv_dma_ch_op_mod_reg op_mod;
462 sdrv_dma_ch_op_data_reg op_data;
464 sdrv_dma_ch_mad_crc_reg mad_crc;
466 sdrv_dma_ch_ll_addr_reg link_addr;
468
472typedef struct sdrv_dma {
473 sdrv_dma_ctrl_t *dma;
475
479typedef struct {
488
490 paddr_t src_addr;
497
499 paddr_t dst_addr;
506
508 uint32_t xfer_bytes;
509
512
518 uint32_t src_cache;
520 uint32_t dst_cache;
523
532
544
548typedef void (*sdrv_dma_irq_handler)(uint32_t status, uint32_t param,
549 void *context);
550
554typedef struct {
556 sdrv_dma_ctrl_t *dma;
560 sdrv_dma_channel_ctrl_t *channel;
566
577static inline sdrv_dma_channel_ctrl_t *
578sdrv_dma_get_channel_ctrl_base(sdrv_dma_ctrl_t *dma_base,
579 sdrv_dma_channel_id_e channel)
580{
581 paddr_t ch_base = (paddr_t)(dma_base);
582
583 return (sdrv_dma_channel_ctrl_t *)(ch_base + SDRV_DMA_CHANNEL_BASE_OFFSET +
584 SDRV_DMA_CHANNEL_SIZE * channel);
585}
586
594static inline void
595sdrv_dma_set_channel_sw_handshake(sdrv_dma_channel_ctrl_t *channel_base)
596{
597#define SDRV_DMA_LIMIT_TIMES 5
598 int32_t limit = SDRV_DMA_LIMIT_TIMES;
599
600 while (limit--) {
601 if (channel_base->swhs.v == 0) {
602 break;
603 }
604 }
605
606 channel_base->swhs.req = 1;
607
608 while (channel_base->ch_status.ctrl_fsm == SDRV_DMA_CH_FSM_DATA_TRANSFER)
609 ;
610
611 channel_base->swhs.req = 0;
612}
613
623static inline void sdrv_dma_set_channel_muxid(sdrv_dma_ctrl_t *dma_base,
624 sdrv_dma_channel_id_e channel,
625 uint32_t mux_id)
626{
627 sdrv_dma_channel_ctrl_t *ch_base =
628 sdrv_dma_get_channel_ctrl_base(dma_base, channel);
629
630 ch_base->port_cfg.csel = mux_id;
631}
632
644 sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint8_t value)
645{
646 sdrv_dma_channel_ctrl_t *ch_base =
647 sdrv_dma_get_channel_ctrl_base(dma_base, channel);
648
649 ch_base->port_cfg.rot = value;
650}
651
663 sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint8_t value)
664{
665 sdrv_dma_channel_ctrl_t *ch_base =
666 sdrv_dma_get_channel_ctrl_base(dma_base, channel);
667
668 ch_base->port_cfg.wot = value;
669}
670
680static inline void sdrv_dma_set_channel_interrupt(sdrv_dma_ctrl_t *dma_base,
681 sdrv_dma_channel_id_e channel,
682 uint32_t int_type)
683{
684 sdrv_dma_channel_ctrl_t *ch_base =
685 sdrv_dma_get_channel_ctrl_base(dma_base, channel);
686
687 ch_base->int_en.v = int_type;
688}
689
697static inline void sdrv_dma_reset_core_int_status(sdrv_dma_ctrl_t *dma_base)
698{
699 dma_base->int_cfg.cont_int_clr.v = 0xFFFFFFFF;
700 dma_base->int_cfg.cont_int_clr.v = 0x00000000;
701 dma_base->int_cfg.int_clr.v = 0xFFFFFFFF;
702 dma_base->int_cfg.int_clr.v = 0x00000000;
703}
704
712static inline void sdrv_dma_reset_fifo(sdrv_dma_ctrl_t *dma_base)
713{
714 uint32_t *dma_fifo_addr =
715 (uint32_t *)((paddr_t)dma_base + SDRV_DMA_FIFO_OFFSET);
716 int index = 0;
717
718 for (index = 0; index < (SDRV_DMA_FIFO_SIZE / sizeof(uint32_t)); index++) {
719 dma_fifo_addr[index] = 0;
720 }
721}
722
729static inline void
730sdrv_dma_set_channel_status(sdrv_dma_channel_ctrl_t *channel_base,
732{
733 switch (status) {
735 channel_base->ch_cfg.stop = 1;
736 while (channel_base->ch_cfg.stop)
737 ;
738 break;
740 channel_base->ch_cfg.flush = 1;
741 break;
743 channel_base->ch_cfg.req_flush = 1;
744 break;
746#if CONFIG_E3L
747 if (IS_P1)
748 channel_base->ch_cfg.halt = 1;
749 else if (channel_base->shadow_op_mod.trigger_mode !=
751 channel_base->ch_cfg.halt = 1;
752#else
753 if (channel_base->shadow_op_mod.trigger_mode !=
755 channel_base->ch_cfg.halt = 1;
756#endif
757 break;
759 channel_base->ch_cfg.resume = 1;
760 break;
762 channel_base->ch_cfg.abort = 1;
763 break;
764 default:
765 break;
766 }
767}
768
776void sdrv_dma_init_dmac(paddr_t base);
777
786status_t sdrv_dma_create_instance(sdrv_dma_t *dma_instance, paddr_t base);
787
797 sdrv_dma_t *instance);
798
809 const sdrv_dma_channel_config_t *config);
810
819
828
837
849 const sdrv_dma_channel_config_t *config);
850
860 paddr_t addr);
861
877 sdrv_dma_loop_mode_e loop_mode,
878 uint32_t total_size,
879 uint32_t loop_size);
880
890 paddr_t addr);
891
901 uint32_t xfer_bytes);
902
912
921
931
941 uint32_t status);
942
943#endif
SemiDrive driver common header file.
@ SDRV_STATUS_GROUP_DMA
Definition: sdrv_common.h:28
int32_t status_t
Type used for all status and error return values.
Definition: sdrv_common.h:82
#define SDRV_ERROR_STATUS(group, code)
Construct a status code value from a group and code number. All the error statuses are negetive numbe...
Definition: sdrv_common.h:17
#define SDRV_DMA_LIMIT_TIMES
static sdrv_dma_channel_ctrl_t * sdrv_dma_get_channel_ctrl_base(sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel)
get dma channel controller base address.
Definition: sdrv_dma.h:578
sdrv_dma_data_crc_sel_e
DMA Data CRC Sel.
Definition: sdrv_dma.h:428
@ CRC32_802P3
Definition: sdrv_dma.h:429
@ CRC16_CCITT
Definition: sdrv_dma.h:430
@ CRC8_CCITT
Definition: sdrv_dma.h:431
static void sdrv_dma_set_channel_wr_outstanding(sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint8_t value)
set dma channel write outstanding.
Definition: sdrv_dma.h:662
status_t sdrv_dma_clear_channel_xfer_status(sdrv_dma_channel_t *channel, uint32_t status)
Clear DMA channel status.
sdrv_dma_status_e
DMA channel transfer status.
Definition: sdrv_dma.h:376
@ SDRV_DMA_ERR
Definition: sdrv_dma.h:381
@ SDRV_DMA_COMPLETED
Definition: sdrv_dma.h:377
@ SDRV_DMA_PENDING
Definition: sdrv_dma.h:382
@ SDRV_DMA_BLOCK_DONE
Definition: sdrv_dma.h:378
@ SDRV_DMA_PAUSED
Definition: sdrv_dma.h:380
@ SDRV_DMA_IN_PROGRESS
Definition: sdrv_dma.h:379
sdrv_dma_bus_width_e
DMA channel data width for each transaction.
Definition: sdrv_dma.h:127
@ SDRV_DMA_BUSWIDTH_8_BYTES
Definition: sdrv_dma.h:131
@ SDRV_DMA_BUSWIDTH_4_BYTES
Definition: sdrv_dma.h:130
@ SDRV_DMA_BUSWIDTH_1_BYTE
Definition: sdrv_dma.h:128
@ SDRV_DMA_BUSWIDTH_2_BYTES
Definition: sdrv_dma.h:129
status_t sdrv_dma_clear_channel_xfer_bytes(sdrv_dma_channel_t *channel)
Clear DMA channel transfered bytes counter.
sdrv_dma_channel_id_e
DMA Channel ID.
Definition: sdrv_dma.h:47
@ SDRV_DMA_CHANNEL_9
Definition: sdrv_dma.h:58
@ SDRV_DMA_CHANNEL_7
Definition: sdrv_dma.h:56
@ SDRV_DMA_CHANNEL_22
Definition: sdrv_dma.h:71
@ SDRV_DMA_CHANNEL_0
Definition: sdrv_dma.h:49
@ SDRV_DMA_CHANNEL_15
Definition: sdrv_dma.h:64
@ SDRV_DMA_CHANNEL_23
Definition: sdrv_dma.h:72
@ SDRV_DMA_CHANNEL_5
Definition: sdrv_dma.h:54
@ SDRV_DMA_CHANNEL_16
Definition: sdrv_dma.h:65
@ SDRV_DMA_CHANNEL_21
Definition: sdrv_dma.h:70
@ SDRV_DMA_CHANNEL_12
Definition: sdrv_dma.h:61
@ SDRV_DMA_CHANNEL_18
Definition: sdrv_dma.h:67
@ SDRV_DMA_CHANNEL_6
Definition: sdrv_dma.h:55
@ SDRV_DMA_CHANNEL_14
Definition: sdrv_dma.h:63
@ SDRV_DMA_CHANNEL_4
Definition: sdrv_dma.h:53
@ SDRV_DMA_CHANNEL_17
Definition: sdrv_dma.h:66
@ SDRV_DMA_CHANNEL_10
Definition: sdrv_dma.h:59
@ SDRV_DMA_CHANNEL_INVALID
Definition: sdrv_dma.h:48
@ SDRV_DMA_CHANNEL_3
Definition: sdrv_dma.h:52
@ SDRV_DMA_CHANNEL_13
Definition: sdrv_dma.h:62
@ SDRV_DMA_CHANNEL_1
Definition: sdrv_dma.h:50
@ SDRV_DMA_CHANNEL_20
Definition: sdrv_dma.h:69
@ SDRV_DMA_CHANNEL_19
Definition: sdrv_dma.h:68
@ SDRV_DMA_CHANNEL_8
Definition: sdrv_dma.h:57
@ SDRV_DMA_CHANNEL_11
Definition: sdrv_dma.h:60
@ SDRV_DMA_CHANNEL_2
Definition: sdrv_dma.h:51
static void sdrv_dma_set_channel_rd_outstanding(sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint8_t value)
set dma channel read outstanding.
Definition: sdrv_dma.h:643
sdrv_dma_switch_event_ctrl_e
Hardware control after MAD completed just for LOOP_MODE_1.
Definition: sdrv_dma.h:228
@ SDRV_DMA_SWT_EVT_CTL_UNDEFINED
Definition: sdrv_dma.h:240
@ SDRV_DMA_SWT_EVT_CTL_CONTINUE_WTHOUT_INT
Definition: sdrv_dma.h:239
@ SDRV_DMA_SWT_EVT_CTL_STOP_WTH_INT
Definition: sdrv_dma.h:230
@ SDRV_DMA_SWT_EVT_CTL_SUSPEND_WTH_INT
Definition: sdrv_dma.h:233
@ SDRV_DMA_SWT_EVT_CTL_CONTINUE_WTH_INT
Definition: sdrv_dma.h:236
sdrv_dma_loop_mode_e
DMA channel transfer data mode in one handshake.
Definition: sdrv_dma.h:269
@ SDRV_DMA_LOOP_MODE_2
Definition: sdrv_dma.h:272
@ SDRV_DMA_LOOP_MODE_0
Definition: sdrv_dma.h:270
@ SDRV_DMA_LOOP_MODE_UNDEFINED
Definition: sdrv_dma.h:273
@ SDRV_DMA_LOOP_MODE_1
Definition: sdrv_dma.h:271
sdrv_dma_xfer_type_e
DMA channel transfer types.
Definition: sdrv_dma.h:93
@ SDRV_DMA_DIR_MEM2MEM
Definition: sdrv_dma.h:94
@ SDRV_DMA_DIR_MEM2DEV
Definition: sdrv_dma.h:95
@ SDRV_DMA_DIR_NOT_DEFINED
Definition: sdrv_dma.h:102
@ SDRV_DMA_DIR_DEV2MEM
Definition: sdrv_dma.h:96
@ SDRV_DMA_DIR_REG2MEM
Definition: sdrv_dma.h:98
@ SDRV_DMA_DIR_MEM2REG
Definition: sdrv_dma.h:100
@ SDRV_DMA_DIR_DEV2REG
Definition: sdrv_dma.h:101
@ SDRV_DMA_DIR_REG2DEV
Definition: sdrv_dma.h:99
@ SDRV_DMA_DIR_DEV2DEV
Definition: sdrv_dma.h:97
sdrv_dma_interrupt_type_e
DMA channel interrupt types.
Definition: sdrv_dma.h:302
@ SDRV_DMA_AXI_WRITE_ERR
Definition: sdrv_dma.h:318
@ SDRV_DMA_FIREWALL_WR_ERR
Definition: sdrv_dma.h:326
@ SDRV_DMA_SWITCH_EVENT
Definition: sdrv_dma.h:349
@ SDRV_DMA_LAST_MAD_DONE
Definition: sdrv_dma.h:332
@ SDRV_DMA_MAD_CRC_ERR
Definition: sdrv_dma.h:322
@ SDRV_DMA_CHANNEL_FIFO_ECC_COR_ERR
Definition: sdrv_dma.h:308
@ SDRV_DMA_REQ_TIMEOUT
Definition: sdrv_dma.h:347
@ SDRV_DMA_CH_STOP
Definition: sdrv_dma.h:337
@ SDRV_DMA_CH_REQ_FLUSH
Definition: sdrv_dma.h:341
@ SDRV_DMA_PROGRAMING_SEQUENCE_ERR
Definition: sdrv_dma.h:358
@ SDRV_DMA_CH_FLUSH
Definition: sdrv_dma.h:339
@ SDRV_DMA_CHANNEL_FIFO_ECC_UNCOR_ERR
Definition: sdrv_dma.h:310
@ SDRV_DMA_FIREWALL_RD_ERR
Definition: sdrv_dma.h:324
@ SDRV_DMA_AHB_WRITE_ERR
Definition: sdrv_dma.h:314
@ SDRV_DMA_PATTERN_POLL_MISMACTCH
Definition: sdrv_dma.h:354
@ SDRV_DMA_CHANNEL_LINK_ERR
Definition: sdrv_dma.h:320
@ SDRV_DMA_DATA_CRC_ERR
Definition: sdrv_dma.h:328
@ SDRV_DMA_PATTERN_DETECTED
Definition: sdrv_dma.h:330
@ SDRV_DMA_HANDSHAKE_E2E_COR_ERR
Definition: sdrv_dma.h:304
@ SDRV_DMA_HANDSHAKE_E2E_UNCOR_ERR
Definition: sdrv_dma.h:306
@ SDRV_DMA_HS_COMP
Definition: sdrv_dma.h:351
@ SDRV_DMA_CH_ABORT
Definition: sdrv_dma.h:345
@ SDRV_DMA_AHB_READ_ERR
Definition: sdrv_dma.h:312
@ SDRV_DMA_EVERY_MAD_DONE
Definition: sdrv_dma.h:335
@ SDRV_DMA_AXI_READ_ERR
Definition: sdrv_dma.h:316
@ SDRV_DMA_AXI_OUTSTANDING_UTID_ERR
Definition: sdrv_dma.h:356
@ SDRV_DMA_CH_HALT
Definition: sdrv_dma.h:343
status_t sdrv_dma_create_instance(sdrv_dma_t *dma_instance, paddr_t base)
Create DMA controller instance.
void(* sdrv_dma_irq_handler)(uint32_t status, uint32_t param, void *context)
DMA channel interrupt callback type.
Definition: sdrv_dma.h:548
uint32_t sdrv_dma_get_channel_xfer_bytes(sdrv_dma_channel_t *channel)
Get number of transfered bytes for the channel.
sdrv_dma_data_crc_mode_e
DMA Data CRC.
Definition: sdrv_dma.h:412
@ SDRV_DMA_NO_DATA_CRC
Definition: sdrv_dma.h:413
@ SDRV_DMA_DATA_CRC_VERIFY_BETWEEN_WR_RD
Definition: sdrv_dma.h:419
@ SDRV_DMA_DATA_CRC_SENSE
Definition: sdrv_dma.h:414
@ SDRV_DMA_DATA_CRC_VERIFY_WITH_OPD
Definition: sdrv_dma.h:416
sdrv_dma_channel_status_e
DMA channel current status.
Definition: sdrv_dma.h:289
@ SDRV_DMA_CH_STATUS_ABORT
Definition: sdrv_dma.h:296
@ SDRV_DMA_CH_STATUS_ENABLE
Definition: sdrv_dma.h:294
@ SDRV_DMA_CH_STATUS_REQ_FLUSH
Definition: sdrv_dma.h:292
@ SDRV_DMA_CH_STATUS_HALT
Definition: sdrv_dma.h:293
@ SDRV_DMA_CH_STATUS_RESUME
Definition: sdrv_dma.h:295
@ SDRV_DMA_CH_STATUS_STOP
Definition: sdrv_dma.h:290
@ SDRV_DMA_CH_STATUS_FLUSH
Definition: sdrv_dma.h:291
sdrv_dma_channle_ctrl_fsm_e
DMA channel control state machine status.
Definition: sdrv_dma.h:388
@ SDRV_DMA_CH_FSM_HALT
Definition: sdrv_dma.h:394
@ SDRV_DMA_CH_FSM_DATA_TRANSFER
Definition: sdrv_dma.h:392
@ SDRV_DMA_CH_FSM_DONE
Definition: sdrv_dma.h:395
@ SDRV_DMA_CH_FSM_IDLE
Definition: sdrv_dma.h:389
@ SDRV_DMA_CH_FSM_MAD_CHECK
Definition: sdrv_dma.h:390
@ SDRV_DMA_CH_FSM_POLL_OPD2
Definition: sdrv_dma.h:391
@ SDRV_DMA_CH_FSM_STOP
Definition: sdrv_dma.h:393
status_t sdrv_dma_set_channel_destination_address(sdrv_dma_channel_t *channel, paddr_t addr)
Set DMA channel target address.
sdrv_dma_addr_inc_e
DMA channel transfer address increase mode.
Definition: sdrv_dma.h:108
@ SDRV_DMA_ADDR_INC
Definition: sdrv_dma.h:112
@ SDRV_DMA_ADDR_NO_INC
Definition: sdrv_dma.h:116
void sdrv_dma_init_dmac(paddr_t base)
Initialize the DMA controller.
void sdrv_dma_set_channel_buffer_size(sdrv_dma_channel_t *channel, sdrv_dma_loop_mode_e loop_mode, uint32_t total_size, uint32_t loop_size)
set dma channel single transmit buffer size
status_t sdrv_dma_stop_channel_xfer(sdrv_dma_channel_t *channel)
Stop DMA transaction.
static void sdrv_dma_set_channel_muxid(sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint32_t mux_id)
set dma channel mux id.
Definition: sdrv_dma.h:623
sdrv_dma_xfer_mode_e
DMA channel transfer mode.
Definition: sdrv_dma.h:78
@ SDRV_DMA_TRANSFER_MODE_CONTINUOUS
Definition: sdrv_dma.h:82
@ SDRV_DMA_TRANSFER_MODE_SINGLE
Definition: sdrv_dma.h:80
@ SDRV_DMA_TRANSFER_MODE_LINKLIST
Definition: sdrv_dma.h:84
@ SDRV_DMA_TRANSFER_MODE_NOT_DEFINED
Definition: sdrv_dma.h:87
@ SDRV_DMA_TRANSFER_MODE_CHAN_LINK
Definition: sdrv_dma.h:86
status_t sdrv_dma_init_channel_config(sdrv_dma_channel_config_t *config, sdrv_dma_t *instance)
Initialize default configuration for DMA channel.
status_t sdrv_dma_deinit_channel(sdrv_dma_channel_t *channel)
De-initialize the DMA channel.
sdrv_dma_burst_len_e
DMA channel burst length for each transaction.
Definition: sdrv_dma.h:141
@ SDRV_DMA_BURST_LEN_7
Definition: sdrv_dma.h:148
@ SDRV_DMA_BURST_LEN_13
Definition: sdrv_dma.h:154
@ SDRV_DMA_BURST_LEN_6
Definition: sdrv_dma.h:147
@ SDRV_DMA_BURST_LEN_3
Definition: sdrv_dma.h:144
@ SDRV_DMA_BURST_LEN_14
Definition: sdrv_dma.h:155
@ SDRV_DMA_BURST_LEN_8
Definition: sdrv_dma.h:149
@ SDRV_DMA_BURST_LEN_9
Definition: sdrv_dma.h:150
@ SDRV_DMA_BURST_LEN_1
Definition: sdrv_dma.h:142
@ SDRV_DMA_BURST_LEN_12
Definition: sdrv_dma.h:153
@ SDRV_DMA_BURST_LEN_UNDEFINED
Definition: sdrv_dma.h:158
@ SDRV_DMA_BURST_LEN_4
Definition: sdrv_dma.h:145
@ SDRV_DMA_BURST_LEN_2
Definition: sdrv_dma.h:143
@ SDRV_DMA_BURST_LEN_10
Definition: sdrv_dma.h:151
@ SDRV_DMA_BURST_LEN_16
Definition: sdrv_dma.h:157
@ SDRV_DMA_BURST_LEN_5
Definition: sdrv_dma.h:146
@ SDRV_DMA_BURST_LEN_11
Definition: sdrv_dma.h:152
@ SDRV_DMA_BURST_LEN_15
Definition: sdrv_dma.h:156
sdrv_dma_mad_crc_mode_e
DMA MAD CRC.
Definition: sdrv_dma.h:401
@ SDRV_DMA_NO_MAD_CRC
Definition: sdrv_dma.h:402
@ SDRV_DMA_CHECK_CURR_MAD_AND_PREVIOUS
Definition: sdrv_dma.h:404
@ SDRV_DMA_CHECK_CURR_MAD
Definition: sdrv_dma.h:403
@ SDRV_DMA_INVALID_CHANNEL_ID
Definition: sdrv_dma.h:37
@ SDRV_DMA_UNSUPPORT_CONFIG
Definition: sdrv_dma.h:39
@ SDRV_DMA_INVALID_MUXID
Definition: sdrv_dma.h:41
struct sdrv_dma sdrv_dma_t
DMA controller structure.
status_t sdrv_dma_start_channel_xfer(sdrv_dma_channel_t *channel)
Start DMA transaction.
static void sdrv_dma_set_channel_status(sdrv_dma_channel_ctrl_t *channel_base, sdrv_dma_channel_status_e status)
set dma channel status.
Definition: sdrv_dma.h:730
sdrv_dma_trigger_mode_e
DMA channel transfer triggered by which mode.
Definition: sdrv_dma.h:252
@ SDRV_DMA_TRIGGER_BY_HARDWARE
Definition: sdrv_dma.h:253
@ SDRV_DMA_TRIGGER_BY_INTERNAL_EVENT
Definition: sdrv_dma.h:256
@ SDRV_DMA_TRIGGER_BY_GTIMER
Definition: sdrv_dma.h:255
@ SDRV_DMA_TRIGGER_MODE_NOT_DEFINED
Definition: sdrv_dma.h:257
@ SDRV_DMA_TRIGGER_BY_SOFTWARE
Definition: sdrv_dma.h:254
static void sdrv_dma_reset_fifo(sdrv_dma_ctrl_t *dma_base)
reset dma fifo.
Definition: sdrv_dma.h:712
sdrv_dma_port_sel_e
The master port used by DMA source and target ports.
Definition: sdrv_dma.h:168
@ SDRV_DMA_PORT_AXI64
Definition: sdrv_dma.h:172
@ SDRV_DMA_PROT_NOT_DEFINED
Definition: sdrv_dma.h:177
@ SDRV_DMA_PORT_AHB32
Definition: sdrv_dma.h:176
status_t sdrv_dma_set_channel_xfer_bytes(sdrv_dma_channel_t *channel, uint32_t xfer_bytes)
Set transfer length in bytes for the channel.
status_t sdrv_dma_init_linklist_entry(sdrv_dma_linklist_descriptor_t *desc, const sdrv_dma_channel_config_t *config)
Initialize DMA link list descriptor.
static void sdrv_dma_reset_core_int_status(sdrv_dma_ctrl_t *dma_base)
reset dma interrupt type.
Definition: sdrv_dma.h:697
static void sdrv_dma_set_channel_sw_handshake(sdrv_dma_channel_ctrl_t *channel_base)
set dma channel software handshake.
Definition: sdrv_dma.h:595
static void sdrv_dma_set_channel_interrupt(sdrv_dma_ctrl_t *dma_base, sdrv_dma_channel_id_e channel, uint32_t int_type)
set dma channel interrupt type.
Definition: sdrv_dma.h:680
sdrv_dma_linklist_type_e
DMA channel linklist mad types.
Definition: sdrv_dma.h:364
@ SDRV_DMA_LINKLIST_FIRST_MAD
Definition: sdrv_dma.h:368
@ SDRV_DMA_LINKLIST_LAST_MAD
Definition: sdrv_dma.h:370
@ SDRV_DMA_LINKLIST_NORMAL_MAD
Definition: sdrv_dma.h:366
uint32_t sdrv_dma_get_channel_xfer_status(sdrv_dma_channel_t *channel)
Get DMA channel status.
sdrv_dma_mux_direction_e
DMA channel mux direction.
Definition: sdrv_dma.h:279
@ SDRV_DMA_MUX_WR
Definition: sdrv_dma.h:281
@ SDRV_DMA_MUX_BOTH
Definition: sdrv_dma.h:283
@ SDRV_DMA_MUX_RD
Definition: sdrv_dma.h:280
sdrv_dma_buffer_mode_e
The buffer mode used by different application scenarios.
Definition: sdrv_dma.h:192
@ SDRV_DMA_SINGLE_BUFFER
Definition: sdrv_dma.h:196
@ SDRV_DMA_BUFFER_NOT_DEFINED
Definition: sdrv_dma.h:219
@ SDRV_DMA_CIRCULAR_BUFFER
Definition: sdrv_dma.h:212
@ SDRV_DMA_2D_BUFFER
Definition: sdrv_dma.h:218
@ SDRV_DMA_DOUBLE_BUFFER
Definition: sdrv_dma.h:205
status_t sdrv_dma_set_channel_source_address(sdrv_dma_channel_t *channel, paddr_t addr)
Set DMA channel source address.
status_t sdrv_dma_init_channel(sdrv_dma_channel_t *channel, const sdrv_dma_channel_config_t *config)
Initialize DMA channel.
DMA channel configuration structure.
Definition: sdrv_dma.h:479
sdrv_dma_addr_inc_e dst_inc
Definition: sdrv_dma.h:503
sdrv_dma_addr_inc_e src_inc
Definition: sdrv_dma.h:494
uint32_t src_cache
Definition: sdrv_dma.h:518
sdrv_dma_bus_width_e dst_width
Definition: sdrv_dma.h:501
sdrv_dma_data_crc_mode_e data_crc_mode
Definition: sdrv_dma.h:540
sdrv_dma_buffer_mode_e buffer_mode
Definition: sdrv_dma.h:525
sdrv_dma_switch_event_ctrl_e switch_event_ctrl
Definition: sdrv_dma.h:529
uint32_t dst_cache
Definition: sdrv_dma.h:520
sdrv_dma_channel_id_e channel_id
Definition: sdrv_dma.h:483
sdrv_dma_xfer_type_e xfer_type
Definition: sdrv_dma.h:487
sdrv_dma_port_sel_e dst_port_sel
Definition: sdrv_dma.h:516
uint32_t xfer_bytes
Definition: sdrv_dma.h:508
uint32_t src_burst_len
Definition: sdrv_dma.h:496
sdrv_dma_bus_width_e src_width
Definition: sdrv_dma.h:492
uint32_t interrupt_type
Definition: sdrv_dma.h:522
paddr_t linklist_addr
Definition: sdrv_dma.h:534
sdrv_dma_mad_crc_mode_e mad_crc_mode
Definition: sdrv_dma.h:538
uint32_t dst_burst_len
Definition: sdrv_dma.h:505
sdrv_dma_port_sel_e src_port_sel
Definition: sdrv_dma.h:514
paddr_t dst_addr
Definition: sdrv_dma.h:499
int mux_id
Definition: sdrv_dma.h:511
sdrv_dma_t * instance
Definition: sdrv_dma.h:481
sdrv_dma_linklist_type_e linklist_mad_type
Definition: sdrv_dma.h:536
paddr_t src_addr
Definition: sdrv_dma.h:490
sdrv_dma_xfer_mode_e xfer_mode
Definition: sdrv_dma.h:485
sdrv_dma_loop_mode_e loop_mode
Definition: sdrv_dma.h:527
sdrv_dma_trigger_mode_e trig_mode
Definition: sdrv_dma.h:531
sdrv_dma_data_crc_sel_e data_crc_sel
Definition: sdrv_dma.h:542
DMA channel structure.
Definition: sdrv_dma.h:554
void * irq_context
Definition: sdrv_dma.h:564
sdrv_dma_channel_id_e channel_id
Definition: sdrv_dma.h:558
sdrv_dma_channel_ctrl_t * channel
Definition: sdrv_dma.h:560
sdrv_dma_irq_handler irq_callback
Definition: sdrv_dma.h:562
sdrv_dma_ctrl_t * dma
Definition: sdrv_dma.h:556
DMA channel mux param structure.
Definition: sdrv_dma.h:437
uint64_t start_addr
Definition: sdrv_dma.h:439
uint32_t port
Definition: sdrv_dma.h:438
sdrv_dma_mux_direction_e direct
Definition: sdrv_dma.h:441
uint64_t len
Definition: sdrv_dma.h:440
DMA controller structure.
Definition: sdrv_dma.h:472
sdrv_dma_ctrl_t * dma
Definition: sdrv_dma.h:473