summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/gen5200/include/bestcomm_ops.h
blob: 2b74adf366f209113e642d1f76465410dde2ac6d (plain) (blame)
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
/*
 * Copyright (c) 2010-2013 embedded brains GmbH.  All rights reserved.
 *
 *  embedded brains GmbH
 *  Dornierstr. 4
 *  82178 Puchheim
 *  Germany
 *  <rtems@embedded-brains.de>
 *
 * The license and distribution terms for this file may be
 * found in the file LICENSE in this distribution or at
 * http://www.rtems.org/license/LICENSE.
 */

#ifndef BESTCOMM_OPS_H
#define BESTCOMM_OPS_H

#include <bsp/utility.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/**
 * @defgroup BestCommOps BestComm Ops
 *
 * @ingroup BestComm
 *
 * @brief BestComm ops.
 *
 * @{
 */

#define VAR(i) (i)
#define VAR_COUNT 24
#define INC(i) (24 + (i))
#define INC_COUNT 8
#define IDX(i) (48 + (i))
#define IDX_COUNT 8

#define COND_ONCE 0
#define COND_LT 1
#define COND_GT 2
#define COND_NE 3
#define COND_EQ 4
#define COND_LE 5
#define COND_GE 6
#define COND_FOREVER 7

#define INC_INIT(cond, val) \
  (BSP_FLD32(cond, 29, 31) \
    | BSP_FLD32((int16_t) (val), 0, 15))

#define TERM_FIRST 0
#define TERM_SECOND 1
#define TERM_INIT 2
#define TERM_UNUSED 3

#define DEREF 1

#define LCD_TERM(val) BSP_FLD32(val, 13, 14)

#define LCD(deref0, iniidx0, deref1, iniidx1, term, termop, inc0, inc1) \
  (BSP_BIT32(31) \
    | BSP_FLD32(deref0, 29, 29) \
    | BSP_FLD32(iniidx0, 23, 28) \
    | BSP_FLD32(deref1, 21, 21) \
    | BSP_FLD32(iniidx1, 15, 20) \
    | LCD_TERM(term) \
    | BSP_FLD32(termop, 6, 11) \
    | BSP_FLD32(inc0, 3, 5) \
    | BSP_FLD32(inc1, 0, 2))

#define LCDEXT(deref0, iniidx0, deref1, iniidx1, term, termop, inc0, inc1) \
  (BSP_BIT32(30) \
    | LCD(deref0, iniidx0, deref1, iniidx1, term, termop, inc0, inc1))

#define LCDPLUS(deref0, iniidx0, deref1, iniidx1, term, termop, inc0, inc1) \
  (BSP_BIT32(22) \
    | LCD(deref0, iniidx0, deref1, iniidx1, term, termop, inc0, inc1))

#define LCDINIT(val) \
  (BSP_BIT32(31) \
    | BSP_FLD32((val) >> 13, 15, 29) \
    | LCD_TERM(TERM_INIT) \
    | BSP_FLD32(val, 0, 12))

#define MORE 0x4

#define TFD 0x2

#define INT 0x1

#define DRD_FLAGS(val) BSP_FLD32(val, 26, 28)

#define INIT_ALWAYS 0
#define INIT_SCTMR_0 1
#define INIT_SCTMR_1 2
#define INIT_FEC_RX 3
#define INIT_FEC_TX 4
#define INIT_ATA_RX 5
#define INIT_ATA_TX 6
#define INIT_SCPCI_RX 7
#define INIT_SCPCI_TX 8
#define INIT_PSC3_RX 9
#define INIT_PSC3_TX 10
#define INIT_PSC2_RX 11
#define INIT_PSC2_TX 12
#define INIT_PSC1_RX 13
#define INIT_PSC1_TX 14
#define INIT_SCTMR_2 15
#define INIT_SCLPC 16
#define INIT_PSC5_RX 17
#define INIT_PSC5_TX 18
#define INIT_PSC4_RX 19
#define INIT_PSC4_TX 20
#define INIT_I2C2_RX 21
#define INIT_I2C2_TX 22
#define INIT_I2C1_RX 23
#define INIT_I2C1_TX 24
#define INIT_PSC6_RX 25
#define INIT_PSC6_TX 26
#define INIT_IRDA_RX 25
#define INIT_IRDA_TX 26
#define INIT_SCTMR_3 27
#define INIT_SCTMR_4 28
#define INIT_SCTMR_5 29
#define INIT_SCTMR_6 30
#define INIT_SCTMR_7 31

#define DRD_INIT(val) BSP_FLD32(val, 21, 25)

#define SZ_8 1
#define SZ_16 2
#define SZ_32 0
#define SZ_DYN 3

#define DRD_RS(val) BSP_FLD32(val, 19, 20)

#define DRD_WS(val) BSP_FLD32(val, 17, 18)

#define DEST_VAR(val) (val)
#define DEST_IDX(val) (BSP_BIT32(5) | (val))
#define DEST_DEREF_IDX(val) (BSP_BIT32(5) | BSP_BIT32(4) | (val))

#define SRC_VAR(val) (val)
#define SRC_INC(val) (BSP_BIT32(5) | (val))
#define SRC_EU_RESULT (BSP_BIT32(5) | BSP_BIT32(4) | BSP_BIT32(1) | BSP_BIT32(0))
#define SRC_DEREF_EU_RESULT (BSP_BIT32(6) | BSP_BIT32(4) | BSP_BIT32(1) | BSP_BIT32(0))
#define SRC_IDX(val) (BSP_BIT32(6) | BSP_BIT32(5) | (val))
#define SRC_DEREF_IDX(val) (BSP_BIT32(6) | BSP_BIT32(5) | BSP_BIT32(4) | (val))
#define SRC_NONE (BSP_BIT32(5) | BSP_BIT32(4) | BSP_BIT32(3) | BSP_BIT32(2) | BSP_BIT32(1) | BSP_BIT32(0))

#define DRD1A(flags, init, dest, ws, src, rs) \
  (DRD_FLAGS(flags) \
    | DRD_INIT(init) \
    | DRD_RS(rs) \
    | DRD_WS(ws) \
    | BSP_FLD32(dest, 10, 15) \
    | BSP_FLD32(src, 3, 9))

#define DRD1AEURESULT(flags, init, dest, ws, rs) \
  (DRD1A(flags, init, rs, ws, dest, SRC_EU_RESULT) \
    | BSP_FLD32(1, 0, 3))

#define FUNC_LOAD_ACC 0
#define FUNC_UNLOAD_ACC 1
#define FUNC_AND 2
#define FUNC_OR 3
#define FUNC_XOR 4
#define FUNC_ANDN 5
#define FUNC_NOT 6
#define FUNC_ADD 7
#define FUNC_SUB 8
#define FUNC_LSH 9
#define FUNC_RSH 10
#define FUNC_CRC8 11
#define FUNC_CRC16 12
#define FUNC_CRC32 13
#define FUNC_ENDIAN32 14
#define FUNC_ENDIAN16 15

#define DRD2A(flags, func) \
  (BSP_BIT32(30) | BSP_BIT32(29) \
    | DRD_FLAGS(flags) \
    | BSP_FLD32(func, 0, 3))

#define DRD2A5(flags, init, func, ws, rs) \
  (DRD2A(flags, func) \
    | DRD_RS(rs) \
    | DRD_WS(ws) \
    | DRD_INIT(init))

#define OP_VAR(val) (val)
#define OP_EU_RESULT (BSP_BIT32(4) | BSP_BIT32(3) | BSP_BIT32(1) | BSP_BIT32(0))
#define OP_NONE (BSP_BIT32(4) | BSP_BIT32(3) | BSP_BIT32(2) | BSP_BIT32(1) | BSP_BIT32(0))
#define OP_IDX(val) (BSP_BIT32(5) | (val))
#define OP_DEREF_IDX(val) (BSP_BIT32(5) | BSP_BIT32(4) | (val))

#define DRD2B1(dest, op0, op1) \
  (BSP_FLD32(dest, 22, 27) \
    | BSP_FLD32(SRC_EU_RESULT, 14, 20) \
    | BSP_FLD32(3, 12, 13) \
    | BSP_FLD32(op0, 6, 11) \
    | BSP_FLD32(op1, 0, 5))

#define DRD2B2(op0, op1) \
  (BSP_BIT32(29) \
    | BSP_FLD32(3, 26, 27) \
    | BSP_FLD32(op0, 20, 25) \
    | BSP_FLD32(op1, 14, 19) \
    | BSP_FLD32(0, 12, 13) \
    | BSP_FLD32(OP_NONE, 6, 11) \
    | BSP_FLD32(OP_NONE, 0, 5))

#define NOP 0x1f8

/** @} */

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* BESTCOMM_OPS_H */