hc
2023-02-13 e440ec23c5a540cdd3f7464e8779219be6fd3d95
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Copyright 2002 Integrated Device Technology, Inc.
 *        All rights reserved.
 *
 * DMA register definition.
 *
 * Author : ryan.holmQVist@idt.com
 * Date      : 20011005
 */
 
#ifndef __ASM_RC32434_DMA_H
#define __ASM_RC32434_DMA_H
 
#include <asm/mach-rc32434/rb.h>
 
#define DMA0_BASE_ADDR            0x18040000
 
/*
 * DMA descriptor (in physical memory).
 */
 
struct dma_desc {
   u32 control;            /* Control. use DMAD_* */
   u32 ca;                /* Current Address. */
   u32 devcs;            /* Device control and status. */
   u32 link;            /* Next descriptor in chain. */
};
 
#define DMA_DESC_SIZ            sizeof(struct dma_desc)
#define DMA_DESC_COUNT_BIT        0
#define DMA_DESC_COUNT_MSK        0x0003ffff
#define DMA_DESC_DS_BIT            20
#define DMA_DESC_DS_MSK            0x00300000
 
#define DMA_DESC_DEV_CMD_BIT        22
#define DMA_DESC_DEV_CMD_MSK        0x01c00000
 
/* DMA command sizes */
#define DMA_DESC_DEV_CMD_BYTE        0
#define DMA_DESC_DEV_CMD_HLF_WD        1
#define DMA_DESC_DEV_CMD_WORD        2
#define DMA_DESC_DEV_CMD_2WORDS        3
#define DMA_DESC_DEV_CMD_4WORDS        4
#define DMA_DESC_DEV_CMD_6WORDS        5
#define DMA_DESC_DEV_CMD_8WORDS        6
#define DMA_DESC_DEV_CMD_16WORDS    7
 
/* DMA descriptors interrupts */
#define DMA_DESC_COF            (1 << 25) /* Chain on finished */
#define DMA_DESC_COD            (1 << 26) /* Chain on done */
#define DMA_DESC_IOF            (1 << 27) /* Interrupt on finished */
#define DMA_DESC_IOD            (1 << 28) /* Interrupt on done */
#define DMA_DESC_TERM            (1 << 29) /* Terminated */
#define DMA_DESC_DONE            (1 << 30) /* Done */
#define DMA_DESC_FINI            (1 << 31) /* Finished */
 
/*
 * DMA register (within Internal Register Map).
 */
 
struct dma_reg {
   u32 dmac;        /* Control. */
   u32 dmas;        /* Status. */
   u32 dmasm;        /* Mask. */
   u32 dmadptr;        /* Descriptor pointer. */
   u32 dmandptr;        /* Next descriptor pointer. */
};
 
/* DMA channels specific registers */
#define DMA_CHAN_RUN_BIT        (1 << 0)
#define DMA_CHAN_DONE_BIT        (1 << 1)
#define DMA_CHAN_MODE_BIT        (1 << 2)
#define DMA_CHAN_MODE_MSK        0x0000000c
#define     DMA_CHAN_MODE_AUTO        0
#define     DMA_CHAN_MODE_BURST        1
#define     DMA_CHAN_MODE_XFRT        2
#define     DMA_CHAN_MODE_RSVD        3
#define DMA_CHAN_ACT_BIT        (1 << 4)
 
/* DMA status registers */
#define DMA_STAT_FINI            (1 << 0)
#define DMA_STAT_DONE            (1 << 1)
#define DMA_STAT_CHAIN            (1 << 2)
#define DMA_STAT_ERR            (1 << 3)
#define DMA_STAT_HALT            (1 << 4)
 
/*
 * DMA channel definitions
 */
 
#define DMA_CHAN_ETH_RCV        0
#define DMA_CHAN_ETH_XMT        1
#define DMA_CHAN_MEM_TO_FIFO        2
#define DMA_CHAN_FIFO_TO_MEM        3
#define DMA_CHAN_PCI_TO_MEM        4
#define DMA_CHAN_MEM_TO_PCI        5
#define DMA_CHAN_COUNT            6
 
struct dma_channel {
   struct dma_reg ch[DMA_CHAN_COUNT];
};
 
#endif    /* __ASM_RC32434_DMA_H */