summaryrefslogtreecommitdiff
path: root/drivers/staging/gpib/tnt4882/mite.h
blob: 522d6b56cb7d7dbde3ceaa32d7c18a2a26b6f1c9 (plain)
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
/* SPDX-License-Identifier: GPL-2.0-only */

/*
 *   Hardware driver for NI Mite PCI interface chip
 *
 *   Copyright (C) 1999 David A. Schleef <ds@stm.lbl.gov>
 */

#ifndef _MITE_H_
#define _MITE_H_

#include <linux/pci.h>

#define PCI_VENDOR_ID_NATINST		0x1093

//#define DEBUG_MITE

#ifdef DEBUG_MITE
#define MDPRINTK(format, args...) pr_debug(format, ## args)
#else
#define MDPRINTK(args...)
#endif

#define MITE_RING_SIZE 3000
struct mite_dma_chain {
	u32 count;
	u32 addr;
	u32 next;
};

struct mite_struct {
	struct mite_struct *next;
	int used;

	struct pci_dev *pcidev;
	unsigned long mite_phys_addr;
	void __iomem *mite_io_addr;
	unsigned long daq_phys_addr;
	void __iomem *daq_io_addr;

	int DMA_CheckNearEnd;

	struct mite_dma_chain ring[MITE_RING_SIZE];
};

extern struct mite_struct *mite_devices;

extern inline unsigned int mite_irq(struct mite_struct *mite)
{
	return mite->pcidev->irq;
};

extern inline unsigned int mite_device_id(struct mite_struct *mite)
{
	return mite->pcidev->device;
};

void mite_init(void);
void mite_cleanup(void);
int mite_setup(struct mite_struct *mite);
void mite_unsetup(struct mite_struct *mite);
void mite_list_devices(void);

#define CHAN_OFFSET(x)			(0x100 * (x))

/* DMA base for chan 0 is 0x500, chan 1 is 0x600 */

#define MITE_CHOR		0x500
#define CHOR_DMARESET			BIT(31)
#define CHOR_SET_SEND_TC		BIT(11)
#define CHOR_CLR_SEND_TC		BIT(10)
#define CHOR_SET_LPAUSE			BIT(9)
#define CHOR_CLR_LPAUSE			BIT(8)
#define CHOR_CLRDONE			BIT(7)
#define CHOR_CLRRB			BIT(6)
#define CHOR_CLRLC			BIT(5)
#define CHOR_FRESET			BIT(4)
#define CHOR_ABORT			BIT(3)
#define CHOR_STOP			BIT(2)
#define CHOR_CONT			BIT(1)
#define CHOR_START			BIT(0)
#define CHOR_PON			(CHOR_CLR_SEND_TC | CHOR_CLR_LPAUSE)

#define MITE_CHCR		0x504
#define CHCR_SET_DMA_IE			BIT(31)
#define CHCR_CLR_DMA_IE			BIT(30)
#define CHCR_SET_LINKP_IE		BIT(29)
#define CHCR_CLR_LINKP_IE		BIT(28)
#define CHCR_SET_SAR_IE			BIT(27)
#define CHCR_CLR_SAR_IE			BIT(26)
#define CHCR_SET_DONE_IE		BIT(25)
#define CHCR_CLR_DONE_IE		BIT(24)
#define CHCR_SET_MRDY_IE		BIT(23)
#define CHCR_CLR_MRDY_IE		BIT(22)
#define CHCR_SET_DRDY_IE		BIT(21)
#define CHCR_CLR_DRDY_IE		BIT(20)
#define CHCR_SET_LC_IE			BIT(19)
#define CHCR_CLR_LC_IE			BIT(18)
#define CHCR_SET_CONT_RB_IE		BIT(17)
#define CHCR_CLR_CONT_RB_IE		BIT(16)
#define CHCR_FIFODIS			BIT(15)
#define CHCR_FIFO_ON			0
#define CHCR_BURSTEN			BIT(14)
#define CHCR_NO_BURSTEN			0
#define CHCR_NFTP(x)			((x) << 11)
#define CHCR_NFTP0			CHCR_NFTP(0)
#define CHCR_NFTP1			CHCR_NFTP(1)
#define CHCR_NFTP2			CHCR_NFTP(2)
#define CHCR_NFTP4			CHCR_NFTP(3)
#define CHCR_NFTP8			CHCR_NFTP(4)
#define CHCR_NFTP16			CHCR_NFTP(5)
#define CHCR_NETP(x)			((x) << 11)
#define CHCR_NETP0			CHCR_NETP(0)
#define CHCR_NETP1			CHCR_NETP(1)
#define CHCR_NETP2			CHCR_NETP(2)
#define CHCR_NETP4			CHCR_NETP(3)
#define CHCR_NETP8			CHCR_NETP(4)
#define CHCR_CHEND1			BIT(5)
#define CHCR_CHEND0			BIT(4)
#define CHCR_DIR			BIT(3)
#define CHCR_DEV_TO_MEM			CHCR_DIR
#define CHCR_MEM_TO_DEV			0
#define CHCR_NORMAL			((0) << 0)
#define CHCR_CONTINUE			((1) << 0)
#define CHCR_RINGBUFF			((2) << 0)
#define CHCR_LINKSHORT			((4) << 0)
#define CHCR_LINKLONG			((5) << 0)
#define CHCRPON				(CHCR_CLR_DMA_IE | CHCR_CLR_LINKP_IE | CHCR_CLR_SAR_IE | \
					 CHCR_CLR_DONE_IE | CHCR_CLR_MRDY_IE | CHCR_CLR_DRDY_IE | \
					 CHCR_CLR_LC_IE | CHCR_CLR_CONT_IE)

#define MITE_TCR		0x508

/* CR bits */
#define CR_RL(x)			((x) << 21)
#define CR_RL0				CR_RL(0)
#define CR_RL1				CR_RL(1)
#define CR_RL2				CR_RL(2)
#define CR_RL4				CR_RL(3)
#define CR_RL8				CR_RL(4)
#define CR_RL16				CR_RL(5)
#define CR_RL32				CR_RL(6)
#define CR_RL64				CR_RL(7)
#define CR_RD(x)			((x) << 19)
#define CR_RD0				CR_RD(0)
#define CR_RD32				CR_RD(1)
#define CR_RD512			CR_RD(2)
#define CR_RD8192			CR_RD(3)
#define CR_REQS(x)			((x) << 16)
#define CR_REQSDRQ0			CR_REQS(4)
#define CR_REQSDRQ1			CR_REQS(5)
#define CR_REQSDRQ2			CR_REQS(6)
#define CR_REQSDRQ3			CR_REQS(7)
#define CR_ASEQX(x)			((x) << 10)
#define CR_ASEQX0			CR_ASEQX(0)
#define	CR_ASEQDONT			CR_ASEQX0
#define CR_ASEQXP1			CR_ASEQX(1)
#define CR_ASEQUP			CR_ASEQXP1
#define CR_ASEQXP2			CR_ASEQX(2)
#define CR_ASEQDOWN			CR_ASEQXP2
#define CR_ASEQXP4			CR_ASEQX(3)
#define CR_ASEQXP8			CR_ASEQX(4)
#define CR_ASEQXP16			CR_ASEQX(5)
#define CR_ASEQXP32			CR_ASEQX(6)
#define CR_ASEQXP64			CR_ASEQX(7)
#define CR_ASEQXM1			CR_ASEQX(9)
#define CR_ASEQXM2			CR_ASEQX(10)
#define CR_ASEQXM4			CR_ASEQX(11)
#define CR_ASEQXM8			CR_ASEQX(12)
#define CR_ASEQXM16			CR_ASEQX(13)
#define CR_ASEQXM32			CR_ASEQX(14)
#define CR_ASEQXM64			CR_ASEQX(15)
#define CR_PSIZEBYTE			BIT(8)
#define CR_PSIZEHALF			(2 << 8)
#define CR_PSIZEWORD			(3 << 8)
#define CR_PORTCPU			(0 << 6)
#define CR_PORTIO			BIT(6)
#define CR_PORTVXI			(2 << 6)
#define CR_PORTMXI			(3 << 6)
#define CR_AMDEVICE			BIT(0)

#define CHSR_INT			0x80000000
#define CHSR_DONE			0x02000000
#define CHSR_LINKC			0x00080000

#define MITE_MCR		0x50c
#define	MCRPON				0

#define MITE_MAR		0x510

#define MITE_DCR		0x514
#define DCR_NORMAL			BIT(29)
#define DCRPON				0

#define MITE_DAR		0x518

#define MITE_LKCR		0x51c

#define MITE_LKAR		0x520
#define MITE_LLKAR		0x524
#define MITE_BAR		0x528
#define MITE_BCR		0x52c
#define MITE_SAR		0x530
#define MITE_WSCR		0x534
#define MITE_WSER		0x538
#define MITE_CHSR		0x53c
#define MITE_FCR		0x540

#define MITE_FIFO		0x80
#define MITE_FIFOEND		0xff

#define MITE_AMRAM		        0x00
#define MITE_AMDEVICE		        0x01
#define MITE_AMHOST_A32_SINGLE	        0x09
#define MITE_AMHOST_A24_SINGLE	        0x39
#define MITE_AMHOST_A16_SINGLE	        0x29
#define MITE_AMHOST_A32_BLOCK	        0x0b
#define MITE_AMHOST_A32D64_BLOCK	0x08
#define MITE_AMHOST_A24_BLOCK	        0x3b

enum mite_registers {
	MITE_IODWBSR = 0xc0, //IO Device Window Base Size Register
	MITE_CSIGR = 0x460,	//chip signature
	MITE_IODWBSR_1 = 0xc4, // IO Device Window Base Size Register 1 (used by 6602 boards)
	MITE_IODWCR_1 = 0xf4
};

enum MITE_IODWBSR_bits {
	WENAB = 0x80,	// window enable
	WENAB_6602 = 0x8c // window enable for 6602 boards
};

#endif