1 //------------------------------------------------------------------------------
2 // Copyright 2012 (c) Silicon Laboratories Inc.
3 //
4 // SPDX-License-Identifier: Zlib
5 //
6 // This siHAL software is provided 'as-is', without any express or implied
7 // warranty. In no event will the authors be held liable for any damages
8 // arising from the use of this software.
9 //
10 // Permission is granted to anyone to use this software for any purpose,
11 // including commercial applications, and to alter it and redistribute it
12 // freely, subject to the following restrictions:
13 //
14 // 1. The origin of this software must not be misrepresented; you must not
15 //    claim that you wrote the original software. If you use this software
16 //    in a product, an acknowledgment in the product documentation would be
17 //    appreciated but is not required.
18 // 2. Altered source versions must be plainly marked as such, and must not be
19 //    misrepresented as being the original software.
20 // 3. This notice may not be removed or altered from any source distribution.
21 //------------------------------------------------------------------------------
22 
23 #ifndef __SI32_DMADESC_A_SUPPORT_H__
24 #define __SI32_DMADESC_A_SUPPORT_H__
25 
26 // register definitions
27 #include "SI32_DMADESC_A_Registers.h"
28 
29 
30 //-----------------------------------------------------------------------------
31 // Define constants for aligning the primary and alternate descriptor arrays.
32 
33 #define SI32_DMADESC_ALT_STRIDE 16
34 
35 #define SI32_DMADESC_PRI_ALIGN  (2 * SI32_DMADESC_ALT_STRIDE * sizeof(SI32_DMADESC_A_Type))
36 #define SI32_DMADESC_ALT_ALIGN  (SI32_DMADESC_ALT_STRIDE * sizeof(SI32_DMADESC_A_Type))
37 
38 
39 //-----------------------------------------------------------------------------
40 // Define constants for the DMA descriptor config parameter.
41 
42 #define SI32_DMADESC_A_CONFIG_RPOWER(rpower) \
43     (((rpower) << SI32_DMADESC_A_CONFIG_RPOWER_SHIFT) & SI32_DMADESC_A_CONFIG_RPOWER_MASK)
44 
45 #define SI32_DMADESC_A_CONFIG_NCOUNT(ncount) \
46     (((ncount) << SI32_DMADESC_A_CONFIG_NCOUNT_SHIFT) & SI32_DMADESC_A_CONFIG_NCOUNT_MASK)
47 
48 #define SI32_DMADESC_A_CONFIG_MOVE(SIZE, MODE) \
49     ( SI32_DMADESC_A_CONFIG_DSTAIMD_## SIZE ##_U32 | SI32_DMADESC_A_CONFIG_DSTSIZE_## SIZE ##_U32 \
50     | SI32_DMADESC_A_CONFIG_SRCAIMD_## SIZE ##_U32 | SI32_DMADESC_A_CONFIG_SRCSIZE_## SIZE ##_U32 \
51     | SI32_DMADESC_A_CONFIG_TMD_## MODE ##_U32 )
52 
53 #define SI32_DMADESC_A_CONFIG_RX(SIZE, MODE) \
54     ( SI32_DMADESC_A_CONFIG_DSTAIMD_## SIZE ##_U32 | SI32_DMADESC_A_CONFIG_DSTSIZE_## SIZE ##_U32 \
55     | SI32_DMADESC_A_CONFIG_SRCAIMD_NO_INCREMENT_U32 | SI32_DMADESC_A_CONFIG_SRCSIZE_## SIZE ##_U32 \
56     | SI32_DMADESC_A_CONFIG_TMD_## MODE ##_U32 )
57 
58 #define SI32_DMADESC_A_CONFIG_TX(SIZE, MODE) \
59     ( SI32_DMADESC_A_CONFIG_DSTAIMD_NO_INCREMENT_U32 | SI32_DMADESC_A_CONFIG_DSTSIZE_## SIZE ##_U32 \
60     | SI32_DMADESC_A_CONFIG_SRCAIMD_## SIZE ##_U32 | SI32_DMADESC_A_CONFIG_SRCSIZE_## SIZE ##_U32 \
61     | SI32_DMADESC_A_CONFIG_TMD_## MODE ##_U32 )
62 
63 #define SI32_DMADESC_A_CONFIG_PIPE(SIZE, MODE) \
64     ( SI32_DMADESC_A_CONFIG_DSTAIMD_NO_INCREMENT_U32 | SI32_DMADESC_A_CONFIG_DSTSIZE_## SIZE ##_U32 \
65     | SI32_DMADESC_A_CONFIG_SRCAIMD_NO_INCREMENT_U32 | SI32_DMADESC_A_CONFIG_SRCSIZE_## SIZE ##_U32 \
66     | SI32_DMADESC_A_CONFIG_TMD_## MODE ##_U32 )
67 
68 #define SI32_DMADESC_A_CONFIG_BYTE_MOVE_AUTO    SI32_DMADESC_A_CONFIG_MOVE(BYTE, AUTO_REQUEST)
69 #define SI32_DMADESC_A_CONFIG_BYTE_MOVE_AUTO_SG SI32_DMADESC_A_CONFIG_MOVE(BYTE, MEMORY_SCATTER_GATHER_A)
70 #define SI32_DMADESC_A_CONFIG_BYTE_RX           SI32_DMADESC_A_CONFIG_RX(BYTE, BASIC)
71 #define SI32_DMADESC_A_CONFIG_BYTE_RX_PP        SI32_DMADESC_A_CONFIG_RX(BYTE, PING_PONG)
72 #define SI32_DMADESC_A_CONFIG_BYTE_RX_SG        SI32_DMADESC_A_CONFIG_RX(BYTE, PERIPHERAL_SCATTER_GATHER_A)
73 #define SI32_DMADESC_A_CONFIG_BYTE_TX           SI32_DMADESC_A_CONFIG_TX(BYTE, BASIC)
74 #define SI32_DMADESC_A_CONFIG_BYTE_TX_AUTO      SI32_DMADESC_A_CONFIG_TX(BYTE, AUTO_REQUEST)
75 #define SI32_DMADESC_A_CONFIG_BYTE_TX_PP        SI32_DMADESC_A_CONFIG_TX(BYTE, PING_PONG)
76 #define SI32_DMADESC_A_CONFIG_BYTE_TX_SG        SI32_DMADESC_A_CONFIG_TX(BYTE, PERIPHERAL_SCATTER_GATHER_A)
77 #define SI32_DMADESC_A_CONFIG_BYTE_PIPE         SI32_DMADESC_A_CONFIG_PIPE(BYTE, BASIC)
78 #define SI32_DMADESC_A_CONFIG_BYTE_PIPE_SG      SI32_DMADESC_A_CONFIG_PIPE(BYTE, PERIPHERAL_SCATTER_GATHER_A)
79 
80 #define SI32_DMADESC_A_CONFIG_HWORD_MOVE_AUTO   SI32_DMADESC_A_CONFIG_MOVE(HALF_WORD, AUTO_REQUEST)
81 #define SI32_DMADESC_A_CONFIG_HWORD_MOVE_AUTO_SG SI32_DMADESC_A_CONFIG_MOVE(HALF_WORD, MEMORY_SCATTER_GATHER_A)
82 #define SI32_DMADESC_A_CONFIG_HWORD_RX          SI32_DMADESC_A_CONFIG_RX(HALF_WORD, BASIC)
83 #define SI32_DMADESC_A_CONFIG_HWORD_RX_PP       SI32_DMADESC_A_CONFIG_RX(HALF_WORD, PING_PONG)
84 #define SI32_DMADESC_A_CONFIG_HWORD_RX_SG       SI32_DMADESC_A_CONFIG_RX(HALF_WORD, PERIPHERAL_SCATTER_GATHER_A)
85 #define SI32_DMADESC_A_CONFIG_HWORD_TX          SI32_DMADESC_A_CONFIG_TX(HALF_WORD, BASIC)
86 #define SI32_DMADESC_A_CONFIG_HWORD_TX_AUTO     SI32_DMADESC_A_CONFIG_TX(HALF_WORD, AUTO_REQUEST)
87 #define SI32_DMADESC_A_CONFIG_HWORD_TX_PP       SI32_DMADESC_A_CONFIG_TX(HALF_WORD, PING_PONG)
88 #define SI32_DMADESC_A_CONFIG_HWORD_TX_SG       SI32_DMADESC_A_CONFIG_TX(HALF_WORD, PERIPHERAL_SCATTER_GATHER_A)
89 #define SI32_DMADESC_A_CONFIG_HWORD_PIPE        SI32_DMADESC_A_CONFIG_PIPE(HALF_WORD, BASIC)
90 #define SI32_DMADESC_A_CONFIG_HWORD_PIPE_SG     SI32_DMADESC_A_CONFIG_PIPE(HALF_WORD, PERIPHERAL_SCATTER_GATHER_A)
91 
92 #define SI32_DMADESC_A_CONFIG_WORD_MOVE_AUTO    SI32_DMADESC_A_CONFIG_MOVE(WORD, AUTO_REQUEST)
93 #define SI32_DMADESC_A_CONFIG_WORD_MOVE_AUTO_SG SI32_DMADESC_A_CONFIG_MOVE(WORD, MEMORY_SCATTER_GATHER_A)
94 #define SI32_DMADESC_A_CONFIG_WORD_RX           SI32_DMADESC_A_CONFIG_RX(WORD, BASIC)
95 #define SI32_DMADESC_A_CONFIG_WORD_RX_PP        SI32_DMADESC_A_CONFIG_RX(WORD, PING_PONG)
96 #define SI32_DMADESC_A_CONFIG_WORD_RX_SG        SI32_DMADESC_A_CONFIG_RX(WORD, PERIPHERAL_SCATTER_GATHER_A)
97 #define SI32_DMADESC_A_CONFIG_WORD_TX           SI32_DMADESC_A_CONFIG_TX(WORD, BASIC)
98 #define SI32_DMADESC_A_CONFIG_WORD_TX_AUTO      SI32_DMADESC_A_CONFIG_TX(WORD, AUTO_REQUEST)
99 #define SI32_DMADESC_A_CONFIG_WORD_TX_PP        SI32_DMADESC_A_CONFIG_TX(WORD, PING_PONG)
100 #define SI32_DMADESC_A_CONFIG_WORD_TX_SG        SI32_DMADESC_A_CONFIG_TX(WORD, PERIPHERAL_SCATTER_GATHER_A)
101 #define SI32_DMADESC_A_CONFIG_WORD_PIPE         SI32_DMADESC_A_CONFIG_PIPE(WORD, BASIC)
102 #define SI32_DMADESC_A_CONFIG_WORD_PIPE_SG      SI32_DMADESC_A_CONFIG_PIPE(WORD, PERIPHERAL_SCATTER_GATHER_A)
103 
104 #define SI32_DMADESC_A_CONFIG_MEMORY_SG \
105     (SI32_DMADESC_A_CONFIG_MOVE(WORD, MEMORY_SCATTER_GATHER_P) | SI32_DMADESC_A_CONFIG_RPOWER(2))
106 
107 #define SI32_DMADESC_A_CONFIG_PERIPHERAL_SG \
108     (SI32_DMADESC_A_CONFIG_MOVE(WORD, PERIPHERAL_SCATTER_GATHER_P) | SI32_DMADESC_A_CONFIG_RPOWER(2))
109 
110 
111 #endif // __SI32_DMADESC_A_SUPPORT_H__
112 
113 //-eof--------------------------------------------------------------------------
114