blob: 430174df41356a2d7e26277719c462af994fb4e1 (
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
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
|
/*
* ca91c042.h
*
* Support for the Tundra Universe 1 and Universe II VME bridge chips
*
* Author: Tom Armistead
* Updated and maintained by Ajit Prem
* Copyright 2004 Motorola Inc.
*
* Derived from ca91c042.h by Michael Wyrick
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
*/
#ifndef _ca91c042_h
#define _ca91c042_h
#ifndef PCI_VENDOR_ID_TUNDRA
#define PCI_VENDOR_ID_TUNDRA 0x10e3
#endif
#ifndef PCI_DEVICE_ID_TUNDRA_CA91C042
#define PCI_DEVICE_ID_TUNDRA_CA91C042 0x0000
#endif
//-----------------------------------------------------------------------------
// Public Functions
//-----------------------------------------------------------------------------
// This is the typedef for a VmeIrqHandler
typedef void (*TirqHandler) (int vmeirq, int vector, void *dev_id,
struct pt_regs * regs);
// This is the typedef for a DMA Transfer Callback function
typedef void (*TDMAcallback) (int status);
// Returns the PCI baseaddress of the Universe chip
char *Universe_BaseAddr(void);
// Returns the PCI IRQ That the universe is using
int Universe_IRQ(void);
char *mapvme(unsigned int pci, unsigned int vme, unsigned int size,
int image, int ctl);
void unmapvme(char *ptr, int image);
// Interrupt Stuff
void enable_vmeirq(unsigned int irq);
void disable_vmeirq(unsigned int irq);
int request_vmeirq(unsigned int irq, TirqHandler);
void free_vmeirq(unsigned int irq);
// DMA Stuff
int VME_Bus_Error(void);
int uni_procinfo(char *);
#define IRQ_VOWN 0x0001
#define IRQ_VIRQ1 0x0002
#define IRQ_VIRQ2 0x0004
#define IRQ_VIRQ3 0x0008
#define IRQ_VIRQ4 0x0010
#define IRQ_VIRQ5 0x0020
#define IRQ_VIRQ6 0x0040
#define IRQ_VIRQ7 0x0080
#define IRQ_DMA 0x0100
#define IRQ_LERR 0x0200
#define IRQ_VERR 0x0400
#define IRQ_res 0x0800
#define IRQ_IACK 0x1000
#define IRQ_SWINT 0x2000
#define IRQ_SYSFAIL 0x4000
#define IRQ_ACFAIL 0x8000
// See Page 2-77 in the Universe User Manual
typedef struct {
unsigned int dctl; // DMA Control
unsigned int dtbc; // Transfer Byte Count
unsigned int dlv; // PCI Address
unsigned int res1; // Reserved
unsigned int dva; // Vme Address
unsigned int res2; // Reserved
unsigned int dcpp; // Pointer to Numed Cmd Packet with rPN
unsigned int res3; // Reserved
} TDMA_Cmd_Packet;
/*
* Below here is normaly not used by a user module
*/
#define DMATIMEOUT 2*HZ;
// Define for the Universe
#define SEEK_SET 0
#define SEEK_CUR 1
#define CONFIG_REG_SPACE 0xA0000000
/* Universe Register Offsets */
/* general PCI configuration registers */
#define UNIV_PCI_ID 0x000
#define UNIV_PCI_CSR 0x004
#define UNIV_PCI_CLASS 0x008
#define UNIV_BM_PCI_CLASS_BASE 0xFF000000
#define UNIV_OF_PCI_CLASS_BASE 24
#define UNIV_BM_PCI_CLASS_SUB 0x00FF0000
#define UNIV_OF_PCI_CLASS_SUB 16
#define UNIV_BM_PCI_CLASS_PROG 0x0000FF00
#define UNIV_OF_PCI_CLASS_PROG 8
#define UNIV_BM_PCI_CLASS_RID 0x000000FF
#define UNIV_OF_PCI_CLASS_RID 0
#define UNIV_OF_PCI_CLASS_RID_UNIVERSE_I 0
#define UNIV_OF_PCI_CLASS_RID_UNIVERSE_II 1
#define UNIV_PCI_MISC0 0x00C
#define UNIV_BM_PCI_MISC0_BISTC 0x80000000
#define UNIV_BM_PCI_MISC0_SBIST 0x60000000
#define UNIV_BM_PCI_MISC0_CCODE 0x0F000000
#define UNIV_BM_PCI_MISC0_MFUNCT 0x00800000
#define UNIV_BM_PCI_MISC0_LAYOUT 0x007F0000
#define UNIV_BM_PCI_MISC0_LTIMER 0x0000FF00
#define UNIV_OF_PCI_MISC0_LTIMER 8
#define UNIV_PCI_BS 0x010
#define UNIV_PCI_MISC1 0x03C
#define UNIV_BM_LSI_CTL_EN 0x80000000
#define UNIV_BM_LSI_CTL_PWEN 0x40000000
#define UNIV_BM_LSI_CTL_VDW 0x00C00000
#define UNIV_OF_LSI_CTL_VDW 22
#define UNIV_BM_LSI_CTL_VAS 0x00070000
#define UNIV_OF_LSI_CTL_VAS 16
#define UNIV_BM_LSI_CTL_PGM 0x0000C000
#define UNIV_OF_LSI_CTL_PGM 14
#define UNIV_BM_LSI_CTL_SUPER 0x00003000
#define UNIV_OF_LSI_CTL_SUPER 12
#define UNIV_BM_LSI_CTL_VCT 0x00000100
#define UNIV_BM_LSI_CTL_LAS 0x00000003
#define UNIV_OF_LSI_CTL_LAS 0
#define UNIV_BM_LSI_CTL_RESERVED (~ (UNIV_BM_LSI_CTL_EN | UNIV_BM_LSI_CTL_PWEN | UNIV_BM_LSI_CTL_VDW | UNIV_BM_LSI_CTL_VAS | UNIV_BM_LSI_CTL_PGM | UNIV_BM_LSI_CTL_SUPER | UNIV_BM_LSI_CTL_VCT | UNIV_BM_LSI_CTL_LAS))
#define PCI_SIZE_8 0x0001
#define PCI_SIZE_16 0x0002
#define PCI_SIZE_32 0x0003
#define IOCTL_SET_CTL 0xF001
#define IOCTL_SET_BS 0xF002
#define IOCTL_SET_BD 0xF003
#define IOCTL_SET_TO 0xF004
#define IOCTL_PCI_SIZE 0xF005
#define IOCTL_SET_MODE 0xF006
#define IOCTL_SET_WINT 0xF007 // Wait for interrupt before read
#define LSI0_CTL 0x0100
#define LSI0_BS 0x0104
#define LSI0_BD 0x0108
#define LSI0_TO 0x010C
#define LSI1_CTL 0x0114
#define LSI1_BS 0x0118
#define LSI1_BD 0x011C
#define LSI1_TO 0x0120
#define LSI2_CTL 0x0128
#define LSI2_BS 0x012C
#define LSI2_BD 0x0130
#define LSI2_TO 0x0134
#define LSI3_CTL 0x013C
#define LSI3_BS 0x0140
#define LSI3_BD 0x0144
#define LSI3_TO 0x0148
#define LSI4_CTL 0x01A0
#define LSI4_BS 0x01A4
#define LSI4_BD 0x01A8
#define LSI4_TO 0x01AC
#define LSI5_CTL 0x01B4
#define LSI5_BS 0x01B8
#define LSI5_BD 0x01BC
#define LSI5_TO 0x01C0
#define LSI6_CTL 0x01C8
#define LSI6_BS 0x01CC
#define LSI6_BD 0x01D0
#define LSI6_TO 0x01D4
#define LSI7_CTL 0x01DC
#define LSI7_BS 0x01E0
#define LSI7_BD 0x01E4
#define LSI7_TO 0x01E8
#define SCYC_CTL 0x0170
#define SCYC_ADDR 0x0174
#define SCYC_EN 0x0178
#define SCYC_CMP 0x017C
#define SCYC_SWP 0x0180
#define LMISC 0x0184
#define UNIV_BM_LMISC_CRT 0xF0000000
#define UNIV_OF_LMISC_CRT 28
#define UNIV_BM_LMISC_CWT 0x0F000000
#define UNIV_OF_LMISC_CWT 24
#define SLSI 0x0188
#define UNIV_BM_SLSI_EN 0x80000000
#define UNIV_BM_SLSI_PWEN 0x40000000
#define UNIV_BM_SLSI_VDW 0x00F00000
#define UNIV_OF_SLSI_VDW 20
#define UNIV_BM_SLSI_PGM 0x0000F000
#define UNIV_OF_SLSI_PGM 12
#define UNIV_BM_SLSI_SUPER 0x00000F00
#define UNIV_OF_SLSI_SUPER 8
#define UNIV_BM_SLSI_BS 0x000000F6
#define UNIV_OF_SLSI_BS 2
#define UNIV_BM_SLSI_LAS 0x00000003
#define UNIV_OF_SLSI_LAS 0
#define UNIV_BM_SLSI_RESERVED 0x3F0F0000
#define L_CMDERR 0x018C
#define LAERR 0x0190
#define DCTL 0x0200
#define DTBC 0x0204
#define DLA 0x0208
#define DVA 0x0210
#define DCPP 0x0218
#define DGCS 0x0220
#define D_LLUE 0x0224
#define LINT_EN 0x0300
#define UNIV_BM_LINT_ACFAIL 0x00008000
#define UNIV_BM_LINT_SYSFAIL 0x00004000
#define UNIV_BM_LINT_SW_INT 0x00002000
#define UNIV_BM_LINT_SW_IACK 0x00001000
#define UNIV_BM_LINT_VERR 0x00000400
#define UNIV_BM_LINT_LERR 0x00000200
#define UNIV_BM_LINT_DMA 0x00000100
#define UNIV_BM_LINT_LM 0x00F00000
#define UNIV_BM_LINT_MBOX 0x000F0000
#define UNIV_BM_LINT_VIRQ 0x000000FE
#define UNIV_BM_LINT_VIRQ7 0x00000080
#define UNIV_BM_LINT_VIRQ6 0x00000040
#define UNIV_BM_LINT_VIRQ5 0x00000020
#define UNIV_BM_LINT_VIRQ4 0x00000010
#define UNIV_BM_LINT_VIRQ3 0x00000008
#define UNIV_BM_LINT_VIRQ2 0x00000004
#define UNIV_BM_LINT_VIRQ1 0x00000002
#define UNIV_BM_LINT_VOWN 0x00000001
#define LINT_STAT 0x0304
#define LINT_MAP0 0x0308
#define LINT_MAP1 0x030C
#define VINT_EN 0x0310
#define VINT_STAT 0x0314
#define VINT_MAP0 0x0318
#define VINT_MAP1 0x031C
#define STATID 0x0320
#define V1_STATID 0x0324
#define V2_STATID 0x0328
#define V3_STATID 0x032C
#define V4_STATID 0x0330
#define V5_STATID 0x0334
#define V6_STATID 0x0338
#define V7_STATID 0x033C
#define LINT_MAP2 0x0340
#define VINT_MAP2 0x0344
#define MBOX0 0x0348
#define MBOX1 0x034C
#define MBOX2 0x0350
#define MBOX3 0x0354
#define SEMA0 0x0358
#define SEMA1 0x035C
#define MAST_CTL 0x0400
#define UNIV_BM_MAST_CTL_MAXRTRY 0xF0000000
#define UNIV_OF_MAST_CTL_MAXRTRY 28
#define UNIV_BM_MAST_CTL_PWON 0x0F000000
#define UNIV_OF_MAST_CTL_PWON 24
#define UNIV_BM_MAST_CTL_VRL 0x00C00000
#define UNIV_OF_MAST_CTL_VRL 22
#define UNIV_BM_MAST_CTL_VRM 0x00200000
#define UNIV_BM_MAST_CTL_VREL 0x00100000
#define UNIV_BM_MAST_CTL_VOWN 0x00080000
#define UNIV_BM_MAST_CTL_VOWN_ACK 0x00040000
#define UNIV_BM_MAST_CTL_PABS 0x00001000
#define UNIV_BM_MAST_CTL_BUS_NO 0x0000000F
#define UNIV_OF_MAST_CTL_BUS_NO 0
#define MISC_CTL 0x0404
#define UNIV_BM_MISC_CTL_VBTO 0xF0000000
#define UNIV_OF_MISC_CTL_VBTO 28
#define UNIV_BM_MISC_CTL_VARB 0x04000000
#define UNIV_BM_MISC_CTL_VARBTO 0x03000000
#define UNIV_OF_MISC_CTL_VARBTO 24
#define UNIV_BM_MISC_CTL_SW_LRST 0x00800000
#define UNIV_BM_MISC_CTL_SW_SRST 0x00400000
#define UNIV_BM_MISC_CTL_BI 0x00100000
#define UNIV_BM_MISC_CTL_ENGBI 0x00080000
#define UNIV_BM_MISC_CTL_RESCIND 0x00040000
#define UNIV_BM_MISC_CTL_SYSCON 0x00020000
#define UNIV_BM_MISC_CTL_V64AUTO 0x00010000
#define UNIV_BM_MISC_CTL_RESERVED 0x0820FFFF
#define MISC_STAT 0x0408
#define UNIV_BM_MISC_STAT_ENDIAN 0x80000000
#define UNIV_BM_MISC_STAT_LCLSIZE 0x40000000
#define UNIV_BM_MISC_STAT_DY4AUTO 0x08000000
#define UNIV_BM_MISC_STAT_MYBBSY 0x00200000
#define UNIV_BM_MISC_STAT_DY4DONE 0x00080000
#define UNIV_BM_MISC_STAT_TXFE 0x00040000
#define UNIV_BM_MISC_STAT_RXFE 0x00020000
#define UNIV_BM_MISC_STAT_DY4AUTOID 0x0000FF00
#define UNIV_OF_MISC_STAT_DY4AUTOID 8
#define USER_AM 0x040C
#define VSI0_CTL 0x0F00
#define VSI0_BS 0x0F04
#define VSI0_BD 0x0F08
#define VSI0_TO 0x0F0C
#define VSI1_CTL 0x0F14
#define VSI1_BS 0x0F18
#define VSI1_BD 0x0F1C
#define VSI1_TO 0x0F20
#define VSI2_CTL 0x0F28
#define VSI2_BS 0x0F2C
#define VSI2_BD 0x0F30
#define VSI2_TO 0x0F34
#define VSI3_CTL 0x0F3C
#define VSI3_BS 0x0F40
#define VSI3_BD 0x0F44
#define VSI3_TO 0x0F48
#define LM_CTL 0x0F64
#define LM_BS 0x0F68
#define VRAI_CTL 0x0F70
#define UNIV_BM_VRAI_CTL_EN 0x80000000
#define UNIV_BM_VRAI_CTL_PGM 0x00C00000
#define UNIV_OF_VRAI_CTL_PGM 22
#define UNIV_BM_VRAI_CTL_SUPER 0x00300000
#define UNIV_OF_VRAI_CTL_SUPER 20
#define UNIV_BM_VRAI_CTL_VAS 0x00030000
#define UNIV_OF_VRAI_CTL_VAS 16
#define VRAI_BS 0x0F74
#define VCSR_CTL 0x0F80
#define VCSR_TO 0x0F84
#define V_AMERR 0x0F88
#define VAERR 0x0F8C
#define VSI4_CTL 0x0F90
#define VSI4_BS 0x0F94
#define VSI4_BD 0x0F98
#define VSI4_TO 0x0F9C
#define VSI5_CTL 0x0FA4
#define VSI5_BS 0x0FA8
#define VSI5_BD 0x0FAC
#define VSI5_TO 0x0FB0
#define VSI6_CTL 0x0FB8
#define VSI6_BS 0x0FBC
#define VSI6_BD 0x0FC0
#define VSI6_TO 0x0FC4
#define VSI7_CTL 0x0FCC
#define VSI7_BS 0x0FD0
#define VSI7_BD 0x0FD4
#define VSI7_TO 0x0FD8
#define VCSR_CLR 0x0FF4
#define VCSR_SET 0x0FF8
#define VCSR_BS 0x0FFC
// DMA General Control/Status Register DGCS (0x220)
// 32-24 || GO | STOPR | HALTR | 0 || CHAIN | 0 | 0 | 0 ||
// 23-16 || VON || VOFF ||
// 15-08 || ACT | STOP | HALT | 0 || DONE | LERR | VERR | P_ERR ||
// 07-00 || 0 | INT_S | INT_H | 0 || I_DNE | I_LER | I_VER | I_PER ||
// VON - Length Per DMA VMEBus Transfer
// 0000 = None
// 0001 = 256 Bytes
// 0010 = 512
// 0011 = 1024
// 0100 = 2048
// 0101 = 4096
// 0110 = 8192
// 0111 = 16384
// VOFF - wait between DMA tenures
// 0000 = 0 us
// 0001 = 16
// 0010 = 32
// 0011 = 64
// 0100 = 128
// 0101 = 256
// 0110 = 512
// 0111 = 1024
#endif /* _ca91c042_h */
|