1 // SPDX-License-Identifier: GPL-2.0
2
3 /***************************************************************************
4 * copyright : (C) 2001, 2002 by Frank Mori Hess
5 ***************************************************************************/
6
7 #include "board.h"
8 #include <linux/ioport.h>
9 #include <linux/sched.h>
10 #include <linux/module.h>
11 #include <linux/slab.h>
12 #include <asm/dma.h>
13 #include <linux/bitops.h>
14 #include <linux/pci.h>
15 #include <linux/pci_ids.h>
16 #include <linux/string.h>
17 #include <linux/init.h>
18 #include <linux/spinlock.h>
19 #include <linux/delay.h>
20
21 MODULE_LICENSE("GPL");
22 MODULE_DESCRIPTION("GPIB library code for NEC uPD7210");
23
nec7210_enable_eos(gpib_board_t * board,struct nec7210_priv * priv,uint8_t eos_byte,int compare_8_bits)24 int nec7210_enable_eos(gpib_board_t *board, struct nec7210_priv *priv, uint8_t eos_byte,
25 int compare_8_bits)
26 {
27 write_byte(priv, eos_byte, EOSR);
28 priv->auxa_bits |= HR_REOS;
29 if (compare_8_bits)
30 priv->auxa_bits |= HR_BIN;
31 else
32 priv->auxa_bits &= ~HR_BIN;
33 write_byte(priv, priv->auxa_bits, AUXMR);
34 return 0;
35 }
36 EXPORT_SYMBOL(nec7210_enable_eos);
37
nec7210_disable_eos(gpib_board_t * board,struct nec7210_priv * priv)38 void nec7210_disable_eos(gpib_board_t *board, struct nec7210_priv *priv)
39 {
40 priv->auxa_bits &= ~HR_REOS;
41 write_byte(priv, priv->auxa_bits, AUXMR);
42 }
43 EXPORT_SYMBOL(nec7210_disable_eos);
44
nec7210_parallel_poll(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * result)45 int nec7210_parallel_poll(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *result)
46 {
47 int ret;
48
49 clear_bit(COMMAND_READY_BN, &priv->state);
50
51 // execute parallel poll
52 write_byte(priv, AUX_EPP, AUXMR);
53 // wait for result FIXME: support timeouts
54 ret = wait_event_interruptible(board->wait, test_bit(COMMAND_READY_BN, &priv->state));
55 if (ret) {
56 dev_dbg(board->gpib_dev, "gpib: parallel poll interrupted\n");
57 return -ERESTARTSYS;
58 }
59 *result = read_byte(priv, CPTR);
60
61 return 0;
62 }
63 EXPORT_SYMBOL(nec7210_parallel_poll);
64
nec7210_parallel_poll_configure(gpib_board_t * board,struct nec7210_priv * priv,unsigned int configuration)65 void nec7210_parallel_poll_configure(gpib_board_t *board,
66 struct nec7210_priv *priv, unsigned int configuration)
67 {
68 write_byte(priv, PPR | configuration, AUXMR);
69 }
70 EXPORT_SYMBOL(nec7210_parallel_poll_configure);
71
nec7210_parallel_poll_response(gpib_board_t * board,struct nec7210_priv * priv,int ist)72 void nec7210_parallel_poll_response(gpib_board_t *board, struct nec7210_priv *priv, int ist)
73 {
74 if (ist)
75 write_byte(priv, AUX_SPPF, AUXMR);
76 else
77 write_byte(priv, AUX_CPPF, AUXMR);
78 }
79 EXPORT_SYMBOL(nec7210_parallel_poll_response);
80 /* This is really only adequate for chips that do a 488.2 style reqt/reqf
81 * based on bit 6 of the SPMR (see chapter 11.3.3 of 488.2). For simpler chips that simply
82 * set rsv directly based on bit 6, we either need to do more hardware setup to expose
83 * the 488.2 capability (for example with NI chips), or we need to implement the
84 * 488.2 set srv state machine in the driver (if that is even viable).
85 */
nec7210_serial_poll_response(gpib_board_t * board,struct nec7210_priv * priv,uint8_t status)86 void nec7210_serial_poll_response(gpib_board_t *board, struct nec7210_priv *priv, uint8_t status)
87 {
88 unsigned long flags;
89
90 spin_lock_irqsave(&board->spinlock, flags);
91 if (status & request_service_bit) {
92 priv->srq_pending = 1;
93 clear_bit(SPOLL_NUM, &board->status);
94
95 } else {
96 priv->srq_pending = 0;
97 }
98 write_byte(priv, status, SPMR);
99 spin_unlock_irqrestore(&board->spinlock, flags);
100 }
101 EXPORT_SYMBOL(nec7210_serial_poll_response);
102
nec7210_serial_poll_status(gpib_board_t * board,struct nec7210_priv * priv)103 uint8_t nec7210_serial_poll_status(gpib_board_t *board, struct nec7210_priv *priv)
104 {
105 return read_byte(priv, SPSR);
106 }
107 EXPORT_SYMBOL(nec7210_serial_poll_status);
108
nec7210_primary_address(const gpib_board_t * board,struct nec7210_priv * priv,unsigned int address)109 int nec7210_primary_address(const gpib_board_t *board, struct nec7210_priv *priv,
110 unsigned int address)
111 {
112 // put primary address in address0
113 write_byte(priv, address & ADDRESS_MASK, ADR);
114 return 0;
115 }
116 EXPORT_SYMBOL(nec7210_primary_address);
117
nec7210_secondary_address(const gpib_board_t * board,struct nec7210_priv * priv,unsigned int address,int enable)118 int nec7210_secondary_address(const gpib_board_t *board, struct nec7210_priv *priv,
119 unsigned int address, int enable)
120 {
121 if (enable) {
122 // put secondary address in address1
123 write_byte(priv, HR_ARS | (address & ADDRESS_MASK), ADR);
124 // go to address mode 2
125 priv->reg_bits[ADMR] &= ~HR_ADM0;
126 priv->reg_bits[ADMR] |= HR_ADM1;
127 } else {
128 // disable address1 register
129 write_byte(priv, HR_ARS | HR_DT | HR_DL, ADR);
130 // go to address mode 1
131 priv->reg_bits[ADMR] |= HR_ADM0;
132 priv->reg_bits[ADMR] &= ~HR_ADM1;
133 }
134 write_byte(priv, priv->reg_bits[ADMR], ADMR);
135 return 0;
136 }
137 EXPORT_SYMBOL(nec7210_secondary_address);
138
update_talker_state(struct nec7210_priv * priv,unsigned int address_status_bits)139 static void update_talker_state(struct nec7210_priv *priv, unsigned int address_status_bits)
140 {
141 if ((address_status_bits & HR_TA)) {
142 if ((address_status_bits & HR_NATN)) {
143 if (address_status_bits & HR_SPMS)
144 priv->talker_state = serial_poll_active;
145 else
146 priv->talker_state = talker_active;
147 } else {
148 priv->talker_state = talker_addressed;
149 }
150 } else {
151 priv->talker_state = talker_idle;
152 }
153 }
154
update_listener_state(struct nec7210_priv * priv,unsigned int address_status_bits)155 static void update_listener_state(struct nec7210_priv *priv, unsigned int address_status_bits)
156 {
157 if (address_status_bits & HR_LA) {
158 if ((address_status_bits & HR_NATN))
159 priv->listener_state = listener_active;
160 else
161 priv->listener_state = listener_addressed;
162 } else {
163 priv->listener_state = listener_idle;
164 }
165 }
166
nec7210_update_status_nolock(gpib_board_t * board,struct nec7210_priv * priv)167 unsigned int nec7210_update_status_nolock(gpib_board_t *board, struct nec7210_priv *priv)
168 {
169 int address_status_bits;
170 u8 spoll_status;
171
172 if (!priv)
173 return 0;
174
175 address_status_bits = read_byte(priv, ADSR);
176 if (address_status_bits & HR_CIC)
177 set_bit(CIC_NUM, &board->status);
178 else
179 clear_bit(CIC_NUM, &board->status);
180 // check for talker/listener addressed
181 update_talker_state(priv, address_status_bits);
182 if (priv->talker_state == talker_active || priv->talker_state == talker_addressed)
183 set_bit(TACS_NUM, &board->status);
184 else
185 clear_bit(TACS_NUM, &board->status);
186 update_listener_state(priv, address_status_bits);
187 if (priv->listener_state == listener_active ||
188 priv->listener_state == listener_addressed)
189 set_bit(LACS_NUM, &board->status);
190 else
191 clear_bit(LACS_NUM, &board->status);
192 if (address_status_bits & HR_NATN)
193 clear_bit(ATN_NUM, &board->status);
194 else
195 set_bit(ATN_NUM, &board->status);
196 spoll_status = nec7210_serial_poll_status(board, priv);
197 if (priv->srq_pending && (spoll_status & request_service_bit) == 0) {
198 priv->srq_pending = 0;
199 set_bit(SPOLL_NUM, &board->status);
200 }
201 // dev_dbg(board->gpib_dev, "status 0x%x, state 0x%x\n", board->status, priv->state);
202
203 /* we rely on the interrupt handler to set the
204 * rest of the status bits
205 */
206
207 return board->status;
208 }
209 EXPORT_SYMBOL(nec7210_update_status_nolock);
210
nec7210_update_status(gpib_board_t * board,struct nec7210_priv * priv,unsigned int clear_mask)211 unsigned int nec7210_update_status(gpib_board_t *board, struct nec7210_priv *priv,
212 unsigned int clear_mask)
213 {
214 unsigned long flags;
215 unsigned int retval;
216
217 spin_lock_irqsave(&board->spinlock, flags);
218 board->status &= ~clear_mask;
219 retval = nec7210_update_status_nolock(board, priv);
220 spin_unlock_irqrestore(&board->spinlock, flags);
221
222 return retval;
223 }
224 EXPORT_SYMBOL(nec7210_update_status);
225
nec7210_set_reg_bits(struct nec7210_priv * priv,unsigned int reg,unsigned int mask,unsigned int bits)226 unsigned int nec7210_set_reg_bits(struct nec7210_priv *priv, unsigned int reg,
227 unsigned int mask, unsigned int bits)
228 {
229 priv->reg_bits[reg] &= ~mask;
230 priv->reg_bits[reg] |= mask & bits;
231 write_byte(priv, priv->reg_bits[reg], reg);
232 return priv->reg_bits[reg];
233 }
234 EXPORT_SYMBOL(nec7210_set_reg_bits);
235
nec7210_set_handshake_mode(gpib_board_t * board,struct nec7210_priv * priv,int mode)236 void nec7210_set_handshake_mode(gpib_board_t *board, struct nec7210_priv *priv, int mode)
237 {
238 unsigned long flags;
239
240 mode &= HR_HANDSHAKE_MASK;
241
242 spin_lock_irqsave(&board->spinlock, flags);
243 if ((priv->auxa_bits & HR_HANDSHAKE_MASK) != mode) {
244 priv->auxa_bits &= ~HR_HANDSHAKE_MASK;
245 priv->auxa_bits |= mode;
246 write_byte(priv, priv->auxa_bits, AUXMR);
247 }
248 spin_unlock_irqrestore(&board->spinlock, flags);
249 }
250 EXPORT_SYMBOL(nec7210_set_handshake_mode);
251
nec7210_read_data_in(gpib_board_t * board,struct nec7210_priv * priv,int * end)252 uint8_t nec7210_read_data_in(gpib_board_t *board, struct nec7210_priv *priv, int *end)
253 {
254 unsigned long flags;
255 u8 data;
256
257 spin_lock_irqsave(&board->spinlock, flags);
258 data = read_byte(priv, DIR);
259 clear_bit(READ_READY_BN, &priv->state);
260 if (test_and_clear_bit(RECEIVED_END_BN, &priv->state))
261 *end = 1;
262 else
263 *end = 0;
264 spin_unlock_irqrestore(&board->spinlock, flags);
265
266 return data;
267 }
268 EXPORT_SYMBOL(nec7210_read_data_in);
269
nec7210_take_control(gpib_board_t * board,struct nec7210_priv * priv,int syncronous)270 int nec7210_take_control(gpib_board_t *board, struct nec7210_priv *priv, int syncronous)
271 {
272 int i;
273 const int timeout = 100;
274 int retval = 0;
275 unsigned int adsr_bits = 0;
276
277 if (syncronous)
278 write_byte(priv, AUX_TCS, AUXMR);
279 else
280 write_byte(priv, AUX_TCA, AUXMR);
281 // busy wait until ATN is asserted
282 for (i = 0; i < timeout; i++) {
283 adsr_bits = read_byte(priv, ADSR);
284 if ((adsr_bits & HR_NATN) == 0)
285 break;
286 udelay(1);
287 }
288 if (i == timeout)
289 return -ETIMEDOUT;
290
291 clear_bit(WRITE_READY_BN, &priv->state);
292
293 return retval;
294 }
295 EXPORT_SYMBOL(nec7210_take_control);
296
nec7210_go_to_standby(gpib_board_t * board,struct nec7210_priv * priv)297 int nec7210_go_to_standby(gpib_board_t *board, struct nec7210_priv *priv)
298 {
299 int i;
300 const int timeout = 1000;
301 unsigned int adsr_bits = 0;
302 int retval = 0;
303
304 write_byte(priv, AUX_GTS, AUXMR);
305 // busy wait until ATN is released
306 for (i = 0; i < timeout; i++) {
307 adsr_bits = read_byte(priv, ADSR);
308 if (adsr_bits & HR_NATN)
309 break;
310 udelay(1);
311 }
312 // if busy wait has failed, try sleeping
313 if (i == timeout) {
314 for (i = 0; i < HZ; i++) {
315 set_current_state(TASK_INTERRUPTIBLE);
316 if (schedule_timeout(1))
317 return -ERESTARTSYS;
318 adsr_bits = read_byte(priv, ADSR);
319 if (adsr_bits & HR_NATN)
320 break;
321 }
322 if (i == HZ) {
323 pr_err("nec7210: error waiting for NATN\n");
324 return -ETIMEDOUT;
325 }
326 }
327
328 clear_bit(COMMAND_READY_BN, &priv->state);
329 return retval;
330 }
331 EXPORT_SYMBOL(nec7210_go_to_standby);
332
nec7210_request_system_control(gpib_board_t * board,struct nec7210_priv * priv,int request_control)333 void nec7210_request_system_control(gpib_board_t *board, struct nec7210_priv *priv,
334 int request_control)
335 {
336 if (request_control == 0) {
337 write_byte(priv, AUX_CREN, AUXMR);
338 write_byte(priv, AUX_CIFC, AUXMR);
339 write_byte(priv, AUX_DSC, AUXMR);
340 }
341 }
342 EXPORT_SYMBOL(nec7210_request_system_control);
343
nec7210_interface_clear(gpib_board_t * board,struct nec7210_priv * priv,int assert)344 void nec7210_interface_clear(gpib_board_t *board, struct nec7210_priv *priv, int assert)
345 {
346 if (assert)
347 write_byte(priv, AUX_SIFC, AUXMR);
348 else
349 write_byte(priv, AUX_CIFC, AUXMR);
350 }
351 EXPORT_SYMBOL(nec7210_interface_clear);
352
nec7210_remote_enable(gpib_board_t * board,struct nec7210_priv * priv,int enable)353 void nec7210_remote_enable(gpib_board_t *board, struct nec7210_priv *priv, int enable)
354 {
355 if (enable)
356 write_byte(priv, AUX_SREN, AUXMR);
357 else
358 write_byte(priv, AUX_CREN, AUXMR);
359 }
360 EXPORT_SYMBOL(nec7210_remote_enable);
361
nec7210_release_rfd_holdoff(gpib_board_t * board,struct nec7210_priv * priv)362 void nec7210_release_rfd_holdoff(gpib_board_t *board, struct nec7210_priv *priv)
363 {
364 unsigned long flags;
365
366 spin_lock_irqsave(&board->spinlock, flags);
367 if (test_bit(RFD_HOLDOFF_BN, &priv->state) &&
368 test_bit(READ_READY_BN, &priv->state) == 0) {
369 write_byte(priv, AUX_FH, AUXMR);
370 clear_bit(RFD_HOLDOFF_BN, &priv->state);
371 }
372 spin_unlock_irqrestore(&board->spinlock, flags);
373 }
374 EXPORT_SYMBOL(nec7210_release_rfd_holdoff);
375
nec7210_t1_delay(gpib_board_t * board,struct nec7210_priv * priv,unsigned int nano_sec)376 unsigned int nec7210_t1_delay(gpib_board_t *board, struct nec7210_priv *priv,
377 unsigned int nano_sec)
378 {
379 unsigned int retval;
380
381 if (nano_sec <= 500) {
382 priv->auxb_bits |= HR_TRI;
383 retval = 500;
384 } else {
385 priv->auxb_bits &= ~HR_TRI;
386 retval = 2000;
387 }
388 write_byte(priv, priv->auxb_bits, AUXMR);
389
390 return retval;
391 }
392 EXPORT_SYMBOL(nec7210_t1_delay);
393
nec7210_return_to_local(const gpib_board_t * board,struct nec7210_priv * priv)394 void nec7210_return_to_local(const gpib_board_t *board, struct nec7210_priv *priv)
395 {
396 write_byte(priv, AUX_RTL, AUXMR);
397 }
398 EXPORT_SYMBOL(nec7210_return_to_local);
399
nec7210_atn_has_changed(gpib_board_t * board,struct nec7210_priv * priv)400 static inline short nec7210_atn_has_changed(gpib_board_t *board, struct nec7210_priv *priv)
401 {
402 short address_status_bits = read_byte(priv, ADSR);
403
404 if (address_status_bits & HR_NATN) {
405 if (test_bit(ATN_NUM, &board->status))
406 return 1;
407 else
408 return 0;
409 } else {
410 if (test_bit(ATN_NUM, &board->status))
411 return 0;
412 else
413 return 1;
414 }
415 return -1;
416 }
417
nec7210_command(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length,size_t * bytes_written)418 int nec7210_command(gpib_board_t *board, struct nec7210_priv *priv, uint8_t
419 *buffer, size_t length, size_t *bytes_written)
420 {
421 int retval = 0;
422 unsigned long flags;
423
424 *bytes_written = 0;
425
426 clear_bit(BUS_ERROR_BN, &priv->state);
427
428 while (*bytes_written < length) {
429 if (wait_event_interruptible(board->wait,
430 test_bit(COMMAND_READY_BN, &priv->state) ||
431 test_bit(BUS_ERROR_BN, &priv->state) ||
432 test_bit(TIMO_NUM, &board->status))) {
433 dev_dbg(board->gpib_dev, "gpib command wait interrupted\n");
434 retval = -ERESTARTSYS;
435 break;
436 }
437 if (test_bit(TIMO_NUM, &board->status))
438 break;
439 if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) {
440 pr_err("nec7210: bus error on command byte\n");
441 break;
442 }
443
444 spin_lock_irqsave(&board->spinlock, flags);
445 clear_bit(COMMAND_READY_BN, &priv->state);
446 write_byte(priv, buffer[*bytes_written], CDOR);
447 spin_unlock_irqrestore(&board->spinlock, flags);
448
449 ++(*bytes_written);
450
451 if (need_resched())
452 schedule();
453 }
454 // wait for last byte to get sent
455 if (wait_event_interruptible(board->wait, test_bit(COMMAND_READY_BN, &priv->state) ||
456 test_bit(BUS_ERROR_BN, &priv->state) ||
457 test_bit(TIMO_NUM, &board->status))) {
458 dev_dbg(board->gpib_dev, "gpib command wait interrupted\n");
459 retval = -ERESTARTSYS;
460 }
461 if (test_bit(TIMO_NUM, &board->status)) {
462 dev_dbg(board->gpib_dev, "gpib command timed out\n");
463 retval = -ETIMEDOUT;
464 }
465 if (test_and_clear_bit(BUS_ERROR_BN, &priv->state)) {
466 pr_err("nec7210: bus error on command byte\n");
467 retval = -EIO;
468 }
469
470 return retval;
471 }
472 EXPORT_SYMBOL(nec7210_command);
473
pio_read(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length,int * end,size_t * bytes_read)474 static int pio_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer,
475 size_t length, int *end, size_t *bytes_read)
476 {
477 ssize_t retval = 0;
478
479 *bytes_read = 0;
480 *end = 0;
481
482 while (*bytes_read < length) {
483 if (wait_event_interruptible(board->wait,
484 test_bit(READ_READY_BN, &priv->state) ||
485 test_bit(DEV_CLEAR_BN, &priv->state) ||
486 test_bit(TIMO_NUM, &board->status))) {
487 dev_dbg(board->gpib_dev, "nec7210: pio read wait interrupted\n");
488 retval = -ERESTARTSYS;
489 break;
490 }
491 if (test_bit(READ_READY_BN, &priv->state)) {
492 if (*bytes_read == 0) {
493 /* We set the handshake mode here because we know
494 * no new bytes will arrive (it has already arrived
495 * and is awaiting being read out of the chip) while we are changing
496 * modes. This ensures we can reliably keep track
497 * of the holdoff state.
498 */
499 nec7210_set_handshake_mode(board, priv, HR_HLDA);
500 }
501 buffer[(*bytes_read)++] = nec7210_read_data_in(board, priv, end);
502 if (*end)
503 break;
504 }
505 if (test_bit(TIMO_NUM, &board->status)) {
506 dev_dbg(board->gpib_dev, "interrupted by timeout\n");
507 retval = -ETIMEDOUT;
508 break;
509 }
510 if (test_bit(DEV_CLEAR_BN, &priv->state)) {
511 dev_dbg(board->gpib_dev, "interrupted by device clear\n");
512 retval = -EINTR;
513 break;
514 }
515
516 if (*bytes_read < length)
517 nec7210_release_rfd_holdoff(board, priv);
518
519 if (need_resched())
520 schedule();
521 }
522 return retval;
523 }
524
525 #ifdef NEC_DMA
__dma_read(gpib_board_t * board,struct nec7210_priv * priv,size_t length)526 static ssize_t __dma_read(gpib_board_t *board, struct nec7210_priv *priv, size_t length)
527 {
528 ssize_t retval = 0;
529 size_t count = 0;
530 unsigned long flags, dma_irq_flags;
531
532 if (length == 0)
533 return 0;
534
535 spin_lock_irqsave(&board->spinlock, flags);
536
537 dma_irq_flags = claim_dma_lock();
538 disable_dma(priv->dma_channel);
539 /* program dma controller */
540 clear_dma_ff(priv->dma_channel);
541 set_dma_count(priv->dma_channel, length);
542 set_dma_addr(priv->dma_channel, priv->dma_buffer_addr);
543 set_dma_mode(priv->dma_channel, DMA_MODE_READ);
544 release_dma_lock(dma_irq_flags);
545
546 enable_dma(priv->dma_channel);
547
548 set_bit(DMA_READ_IN_PROGRESS_BN, &priv->state);
549 clear_bit(READ_READY_BN, &priv->state);
550
551 // enable nec7210 dma
552 nec7210_set_reg_bits(priv, IMR2, HR_DMAI, HR_DMAI);
553
554 spin_unlock_irqrestore(&board->spinlock, flags);
555
556 // wait for data to transfer
557 if (wait_event_interruptible(board->wait,
558 test_bit(DMA_READ_IN_PROGRESS_BN, &priv->state) == 0 ||
559 test_bit(DEV_CLEAR_BN, &priv->state) ||
560 test_bit(TIMO_NUM, &board->status))) {
561 dev_dbg(board->gpib_dev, "nec7210: dma read wait interrupted\n");
562 retval = -ERESTARTSYS;
563 }
564 if (test_bit(TIMO_NUM, &board->status))
565 retval = -ETIMEDOUT;
566 if (test_bit(DEV_CLEAR_BN, &priv->state))
567 retval = -EINTR;
568
569 // disable nec7210 dma
570 nec7210_set_reg_bits(priv, IMR2, HR_DMAI, 0);
571
572 // record how many bytes we transferred
573 flags = claim_dma_lock();
574 clear_dma_ff(priv->dma_channel);
575 disable_dma(priv->dma_channel);
576 count += length - get_dma_residue(priv->dma_channel);
577 release_dma_lock(flags);
578
579 return retval ? retval : count;
580 }
581
dma_read(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length)582 static ssize_t dma_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer,
583 size_t length)
584 {
585 size_t remain = length;
586 size_t transfer_size;
587 ssize_t retval = 0;
588
589 while (remain > 0) {
590 transfer_size = (priv->dma_buffer_length < remain) ?
591 priv->dma_buffer_length : remain;
592 retval = __dma_read(board, priv, transfer_size);
593 if (retval < 0)
594 break;
595 memcpy(buffer, priv->dma_buffer, transfer_size);
596 remain -= retval;
597 buffer += retval;
598 if (test_bit(RECEIVED_END_BN, &priv->state))
599 break;
600 }
601
602 if (retval < 0)
603 return retval;
604
605 return length - remain;
606 }
607 #endif
608
nec7210_read(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length,int * end,size_t * bytes_read)609 int nec7210_read(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer,
610 size_t length, int *end, size_t *bytes_read)
611 {
612 ssize_t retval = 0;
613
614 *end = 0;
615 *bytes_read = 0;
616
617 if (length == 0)
618 return 0;
619
620 clear_bit(DEV_CLEAR_BN, &priv->state); // XXX wrong
621
622 nec7210_release_rfd_holdoff(board, priv);
623
624 retval = pio_read(board, priv, buffer, length, end, bytes_read);
625
626 return retval;
627 }
628 EXPORT_SYMBOL(nec7210_read);
629
pio_write_wait(gpib_board_t * board,struct nec7210_priv * priv,short wake_on_lacs,short wake_on_atn,short wake_on_bus_error)630 static int pio_write_wait(gpib_board_t *board, struct nec7210_priv *priv,
631 short wake_on_lacs, short wake_on_atn, short wake_on_bus_error)
632 {
633 // wait until byte is ready to be sent
634 if (wait_event_interruptible(board->wait,
635 (test_bit(TACS_NUM, &board->status) &&
636 test_bit(WRITE_READY_BN, &priv->state)) ||
637 test_bit(DEV_CLEAR_BN, &priv->state) ||
638 (wake_on_bus_error && test_bit(BUS_ERROR_BN, &priv->state)) ||
639 (wake_on_lacs && test_bit(LACS_NUM, &board->status)) ||
640 (wake_on_atn && test_bit(ATN_NUM, &board->status)) ||
641 test_bit(TIMO_NUM, &board->status))) {
642 dev_dbg(board->gpib_dev, "gpib write interrupted\n");
643 return -ERESTARTSYS;
644 }
645 if (test_bit(TIMO_NUM, &board->status)) {
646 dev_dbg(board->gpib_dev, "nec7210: write timed out\n");
647 return -ETIMEDOUT;
648 }
649 if (test_bit(DEV_CLEAR_BN, &priv->state)) {
650 dev_dbg(board->gpib_dev, "nec7210: write interrupted by clear\n");
651 return -EINTR;
652 }
653 if (wake_on_bus_error && test_and_clear_bit(BUS_ERROR_BN, &priv->state)) {
654 dev_dbg(board->gpib_dev, "nec7210: bus error on write\n");
655 return -EIO;
656 }
657 return 0;
658 }
659
pio_write(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length,size_t * bytes_written)660 static int pio_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer,
661 size_t length, size_t *bytes_written)
662 {
663 size_t last_count = 0;
664 ssize_t retval = 0;
665 unsigned long flags;
666 const int max_bus_errors = (length > 1000) ? length : 1000;
667 int bus_error_count = 0;
668 *bytes_written = 0;
669
670 clear_bit(BUS_ERROR_BN, &priv->state);
671
672 while (*bytes_written < length) {
673 if (need_resched())
674 schedule();
675
676 retval = pio_write_wait(board, priv, 0, 0, priv->type == NEC7210);
677 if (retval == -EIO) {
678 /* resend last byte on bus error */
679 *bytes_written = last_count;
680 dev_dbg(board->gpib_dev, "resending %c\n", buffer[*bytes_written]);
681 /* we can get unrecoverable bus errors,
682 * so give up after a while
683 */
684 bus_error_count++;
685 if (bus_error_count > max_bus_errors)
686 return retval;
687 continue;
688 } else {
689 if (retval < 0)
690 return retval;
691 }
692 spin_lock_irqsave(&board->spinlock, flags);
693 clear_bit(BUS_ERROR_BN, &priv->state);
694 clear_bit(WRITE_READY_BN, &priv->state);
695 last_count = *bytes_written;
696 write_byte(priv, buffer[(*bytes_written)++], CDOR);
697 spin_unlock_irqrestore(&board->spinlock, flags);
698 }
699 retval = pio_write_wait(board, priv, 1, 1, priv->type == NEC7210);
700 return retval;
701 }
702
703 #ifdef NEC_DMA
__dma_write(gpib_board_t * board,struct nec7210_priv * priv,dma_addr_t address,size_t length)704 static ssize_t __dma_write(gpib_board_t *board, struct nec7210_priv *priv, dma_addr_t address,
705 size_t length)
706 {
707 unsigned long flags, dma_irq_flags;
708 int residue = 0;
709 int retval = 0;
710
711 spin_lock_irqsave(&board->spinlock, flags);
712
713 /* program dma controller */
714 dma_irq_flags = claim_dma_lock();
715 disable_dma(priv->dma_channel);
716 clear_dma_ff(priv->dma_channel);
717 set_dma_count(priv->dma_channel, length);
718 set_dma_addr(priv->dma_channel, address);
719 set_dma_mode(priv->dma_channel, DMA_MODE_WRITE);
720 enable_dma(priv->dma_channel);
721 release_dma_lock(dma_irq_flags);
722
723 // enable board's dma for output
724 nec7210_set_reg_bits(priv, IMR2, HR_DMAO, HR_DMAO);
725
726 clear_bit(WRITE_READY_BN, &priv->state);
727 set_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state);
728
729 spin_unlock_irqrestore(&board->spinlock, flags);
730
731 // suspend until message is sent
732 if (wait_event_interruptible(board->wait,
733 test_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state) == 0 ||
734 test_bit(BUS_ERROR_BN, &priv->state) ||
735 test_bit(DEV_CLEAR_BN, &priv->state) ||
736 test_bit(TIMO_NUM, &board->status))) {
737 dev_dbg(board->gpib_dev, "gpib write interrupted!\n");
738 retval = -ERESTARTSYS;
739 }
740 if (test_bit(TIMO_NUM, &board->status))
741 retval = -ETIMEDOUT;
742 if (test_and_clear_bit(DEV_CLEAR_BN, &priv->state))
743 retval = -EINTR;
744 if (test_and_clear_bit(BUS_ERROR_BN, &priv->state))
745 retval = -EIO;
746
747 // disable board's dma
748 nec7210_set_reg_bits(priv, IMR2, HR_DMAO, 0);
749
750 dma_irq_flags = claim_dma_lock();
751 clear_dma_ff(priv->dma_channel);
752 disable_dma(priv->dma_channel);
753 residue = get_dma_residue(priv->dma_channel);
754 release_dma_lock(dma_irq_flags);
755
756 if (residue)
757 retval = -EPIPE;
758
759 return retval ? retval : length;
760 }
761
dma_write(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length)762 static ssize_t dma_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer,
763 size_t length)
764 {
765 size_t remain = length;
766 size_t transfer_size;
767 ssize_t retval = 0;
768
769 while (remain > 0) {
770 transfer_size = (priv->dma_buffer_length < remain) ?
771 priv->dma_buffer_length : remain;
772 memcpy(priv->dma_buffer, buffer, transfer_size);
773 retval = __dma_write(board, priv, priv->dma_buffer_addr, transfer_size);
774 if (retval < 0)
775 break;
776 remain -= retval;
777 buffer += retval;
778 }
779
780 if (retval < 0)
781 return retval;
782
783 return length - remain;
784 }
785 #endif
nec7210_write(gpib_board_t * board,struct nec7210_priv * priv,uint8_t * buffer,size_t length,int send_eoi,size_t * bytes_written)786 int nec7210_write(gpib_board_t *board, struct nec7210_priv *priv, uint8_t *buffer, size_t length,
787 int send_eoi, size_t *bytes_written)
788 {
789 int retval = 0;
790
791 *bytes_written = 0;
792
793 clear_bit(DEV_CLEAR_BN, &priv->state); //XXX
794
795 if (send_eoi)
796 length-- ; /* save the last byte for sending EOI */
797
798 if (length > 0) {
799 // isa dma transfer
800 if (0 /*priv->dma_channel*/) {
801 /*
802 * dma writes are unreliable since they can't recover from bus errors
803 * (which happen when ATN is asserted in the middle of a write)
804 */
805 #ifdef NEC_DMA
806 retval = dma_write(board, priv, buffer, length);
807 if (retval < 0)
808 return retval;
809 count += retval;
810 #endif
811 } else { // PIO transfer
812 size_t num_bytes;
813
814 retval = pio_write(board, priv, buffer, length, &num_bytes);
815
816 *bytes_written += num_bytes;
817 if (retval < 0)
818 return retval;
819 }
820 }
821 if (send_eoi) {
822 size_t num_bytes;
823
824 /* We need to wait to make sure we will immediately be able to write the data byte
825 * into the chip before sending the associated AUX_SEOI command. This is really
826 * only needed for length==1 since otherwise the earlier calls to pio_write
827 * will have dont the wait already.
828 */
829 retval = pio_write_wait(board, priv, 0, 0, priv->type == NEC7210);
830 if (retval < 0)
831 return retval;
832 /*send EOI */
833 write_byte(priv, AUX_SEOI, AUXMR);
834
835 retval = pio_write(board, priv, &buffer[*bytes_written], 1, &num_bytes);
836 *bytes_written += num_bytes;
837 if (retval < 0)
838 return retval;
839 }
840
841 return retval;
842 }
843 EXPORT_SYMBOL(nec7210_write);
844
845 /*
846 * interrupt service routine
847 */
nec7210_interrupt(gpib_board_t * board,struct nec7210_priv * priv)848 irqreturn_t nec7210_interrupt(gpib_board_t *board, struct nec7210_priv *priv)
849 {
850 int status1, status2;
851
852 // read interrupt status (also clears status)
853 status1 = read_byte(priv, ISR1);
854 status2 = read_byte(priv, ISR2);
855
856 return nec7210_interrupt_have_status(board, priv, status1, status2);
857 }
858 EXPORT_SYMBOL(nec7210_interrupt);
859
nec7210_interrupt_have_status(gpib_board_t * board,struct nec7210_priv * priv,int status1,int status2)860 irqreturn_t nec7210_interrupt_have_status(gpib_board_t *board,
861 struct nec7210_priv *priv, int status1, int status2)
862 {
863 #ifdef NEC_DMA
864 unsigned long dma_flags;
865 #endif
866 int retval = IRQ_NONE;
867
868 // record service request in status
869 if (status2 & HR_SRQI)
870 set_bit(SRQI_NUM, &board->status);
871
872 // change in lockout status
873 if (status2 & HR_LOKC) {
874 if (status2 & HR_LOK)
875 set_bit(LOK_NUM, &board->status);
876 else
877 clear_bit(LOK_NUM, &board->status);
878 }
879
880 // change in remote status
881 if (status2 & HR_REMC) {
882 if (status2 & HR_REM)
883 set_bit(REM_NUM, &board->status);
884 else
885 clear_bit(REM_NUM, &board->status);
886 }
887
888 // record reception of END
889 if (status1 & HR_END) {
890 set_bit(RECEIVED_END_BN, &priv->state);
891 if ((priv->auxa_bits & HR_HANDSHAKE_MASK) == HR_HLDE)
892 set_bit(RFD_HOLDOFF_BN, &priv->state);
893 }
894
895 // get incoming data in PIO mode
896 if ((status1 & HR_DI)) {
897 set_bit(READ_READY_BN, &priv->state);
898 if ((priv->auxa_bits & HR_HANDSHAKE_MASK) == HR_HLDA)
899 set_bit(RFD_HOLDOFF_BN, &priv->state);
900 }
901 #ifdef NEC_DMA
902 // check for dma read transfer complete
903 if (test_bit(DMA_READ_IN_PROGRESS_BN, &priv->state)) {
904 dma_flags = claim_dma_lock();
905 disable_dma(priv->dma_channel);
906 clear_dma_ff(priv->dma_channel);
907 if ((status1 & HR_END) || get_dma_residue(priv->dma_channel) == 0)
908 clear_bit(DMA_READ_IN_PROGRESS_BN, &priv->state);
909 else
910 enable_dma(priv->dma_channel);
911 release_dma_lock(dma_flags);
912 }
913 #endif
914 if ((status1 & HR_DO)) {
915 if (test_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state) == 0)
916 set_bit(WRITE_READY_BN, &priv->state);
917 #ifdef NEC_DMA
918 if (test_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state)) { // write data, isa dma mode
919 // check if dma transfer is complete
920 dma_flags = claim_dma_lock();
921 disable_dma(priv->dma_channel);
922 clear_dma_ff(priv->dma_channel);
923 if (get_dma_residue(priv->dma_channel) == 0) {
924 clear_bit(DMA_WRITE_IN_PROGRESS_BN, &priv->state);
925 // XXX race? byte may still be in CDOR reg
926 } else {
927 clear_bit(WRITE_READY_BN, &priv->state);
928 enable_dma(priv->dma_channel);
929 }
930 release_dma_lock(dma_flags);
931 }
932 #endif
933 }
934
935 // outgoing command can be sent
936 if (status2 & HR_CO)
937 set_bit(COMMAND_READY_BN, &priv->state);
938
939 // command pass through received
940 if (status1 & HR_CPT) {
941 unsigned int command;
942
943 command = read_byte(priv, CPTR) & gpib_command_mask;
944 write_byte(priv, AUX_NVAL, AUXMR);
945 // printk("gpib: command pass through 0x%x\n", command);
946 }
947
948 if (status1 & HR_ERR)
949 set_bit(BUS_ERROR_BN, &priv->state);
950
951 if (status1 & HR_DEC) {
952 unsigned short address_status_bits = read_byte(priv, ADSR);
953
954 // ignore device clear events if we are controller in charge
955 if ((address_status_bits & HR_CIC) == 0) {
956 push_gpib_event(board, EventDevClr);
957 set_bit(DEV_CLEAR_BN, &priv->state);
958 }
959 }
960
961 if (status1 & HR_DET)
962 push_gpib_event(board, EventDevTrg);
963
964 // Addressing status has changed
965 if (status2 & HR_ADSC)
966 set_bit(ADR_CHANGE_BN, &priv->state);
967
968 if ((status1 & priv->reg_bits[IMR1]) ||
969 (status2 & (priv->reg_bits[IMR2] & IMR2_ENABLE_INTR_MASK)) ||
970 nec7210_atn_has_changed(board, priv)) {
971 nec7210_update_status_nolock(board, priv);
972 dev_dbg(board->gpib_dev, "minor %i, stat %lx, isr1 0x%x, imr1 0x%x, isr2 0x%x, imr2 0x%x\n",
973 board->minor, board->status, status1, priv->reg_bits[IMR1], status2,
974 priv->reg_bits[IMR2]);
975 wake_up_interruptible(&board->wait); /* wake up sleeping process */
976 retval = IRQ_HANDLED;
977 }
978
979 return retval;
980 }
981 EXPORT_SYMBOL(nec7210_interrupt_have_status);
982
nec7210_board_reset(struct nec7210_priv * priv,const gpib_board_t * board)983 void nec7210_board_reset(struct nec7210_priv *priv, const gpib_board_t *board)
984 {
985 /* 7210 chip reset */
986 write_byte(priv, AUX_CR, AUXMR);
987
988 /* disable all interrupts */
989 priv->reg_bits[IMR1] = 0;
990 write_byte(priv, priv->reg_bits[IMR1], IMR1);
991 priv->reg_bits[IMR2] = 0;
992 write_byte(priv, priv->reg_bits[IMR2], IMR2);
993 write_byte(priv, 0, SPMR);
994
995 /* clear registers by reading */
996 read_byte(priv, CPTR);
997 read_byte(priv, ISR1);
998 read_byte(priv, ISR2);
999
1000 /* parallel poll unconfigure */
1001 write_byte(priv, PPR | HR_PPU, AUXMR);
1002
1003 priv->reg_bits[ADMR] = HR_TRM0 | HR_TRM1;
1004
1005 priv->auxa_bits = AUXRA | HR_HLDA;
1006 write_byte(priv, priv->auxa_bits, AUXMR);
1007
1008 write_byte(priv, AUXRE | 0, AUXMR);
1009
1010 /* set INT pin to active high, enable command pass through of unknown commands */
1011 priv->auxb_bits = AUXRB | HR_CPTE;
1012 write_byte(priv, priv->auxb_bits, AUXMR);
1013 write_byte(priv, AUXRE, AUXMR);
1014 }
1015 EXPORT_SYMBOL(nec7210_board_reset);
1016
nec7210_board_online(struct nec7210_priv * priv,const gpib_board_t * board)1017 void nec7210_board_online(struct nec7210_priv *priv, const gpib_board_t *board)
1018 {
1019 /* set GPIB address */
1020 nec7210_primary_address(board, priv, board->pad);
1021 nec7210_secondary_address(board, priv, board->sad, board->sad >= 0);
1022
1023 // enable interrupts
1024 priv->reg_bits[IMR1] = HR_ERRIE | HR_DECIE | HR_ENDIE |
1025 HR_DETIE | HR_CPTIE | HR_DOIE | HR_DIIE;
1026 priv->reg_bits[IMR2] = IMR2_ENABLE_INTR_MASK;
1027 write_byte(priv, priv->reg_bits[IMR1], IMR1);
1028 write_byte(priv, priv->reg_bits[IMR2], IMR2);
1029
1030 write_byte(priv, AUX_PON, AUXMR);
1031 }
1032 EXPORT_SYMBOL(nec7210_board_online);
1033
1034 #ifdef CONFIG_HAS_IOPORT
1035 /* wrappers for io */
nec7210_ioport_read_byte(struct nec7210_priv * priv,unsigned int register_num)1036 uint8_t nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num)
1037 {
1038 return inb(priv->iobase + register_num * priv->offset);
1039 }
1040 EXPORT_SYMBOL(nec7210_ioport_read_byte);
1041
nec7210_ioport_write_byte(struct nec7210_priv * priv,uint8_t data,unsigned int register_num)1042 void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num)
1043 {
1044 if (register_num == AUXMR)
1045 /* locking makes absolutely sure noone accesses the
1046 * AUXMR register faster than once per microsecond
1047 */
1048 nec7210_locking_ioport_write_byte(priv, data, register_num);
1049 else
1050 outb(data, priv->iobase + register_num * priv->offset);
1051 }
1052 EXPORT_SYMBOL(nec7210_ioport_write_byte);
1053
1054 /* locking variants of io wrappers, for chips that page-in registers */
nec7210_locking_ioport_read_byte(struct nec7210_priv * priv,unsigned int register_num)1055 uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num)
1056 {
1057 u8 retval;
1058 unsigned long flags;
1059
1060 spin_lock_irqsave(&priv->register_page_lock, flags);
1061 retval = inb(priv->iobase + register_num * priv->offset);
1062 spin_unlock_irqrestore(&priv->register_page_lock, flags);
1063 return retval;
1064 }
1065 EXPORT_SYMBOL(nec7210_locking_ioport_read_byte);
1066
nec7210_locking_ioport_write_byte(struct nec7210_priv * priv,uint8_t data,unsigned int register_num)1067 void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data,
1068 unsigned int register_num)
1069 {
1070 unsigned long flags;
1071
1072 spin_lock_irqsave(&priv->register_page_lock, flags);
1073 if (register_num == AUXMR)
1074 udelay(1);
1075 outb(data, priv->iobase + register_num * priv->offset);
1076 spin_unlock_irqrestore(&priv->register_page_lock, flags);
1077 }
1078 EXPORT_SYMBOL(nec7210_locking_ioport_write_byte);
1079 #endif
1080
nec7210_iomem_read_byte(struct nec7210_priv * priv,unsigned int register_num)1081 uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num)
1082 {
1083 return readb(priv->mmiobase + register_num * priv->offset);
1084 }
1085 EXPORT_SYMBOL(nec7210_iomem_read_byte);
1086
nec7210_iomem_write_byte(struct nec7210_priv * priv,uint8_t data,unsigned int register_num)1087 void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num)
1088 {
1089 if (register_num == AUXMR)
1090 /* locking makes absolutely sure noone accesses the
1091 * AUXMR register faster than once per microsecond
1092 */
1093 nec7210_locking_iomem_write_byte(priv, data, register_num);
1094 else
1095 writeb(data, priv->mmiobase + register_num * priv->offset);
1096 }
1097 EXPORT_SYMBOL(nec7210_iomem_write_byte);
1098
nec7210_locking_iomem_read_byte(struct nec7210_priv * priv,unsigned int register_num)1099 uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num)
1100 {
1101 u8 retval;
1102 unsigned long flags;
1103
1104 spin_lock_irqsave(&priv->register_page_lock, flags);
1105 retval = readb(priv->mmiobase + register_num * priv->offset);
1106 spin_unlock_irqrestore(&priv->register_page_lock, flags);
1107 return retval;
1108 }
1109 EXPORT_SYMBOL(nec7210_locking_iomem_read_byte);
1110
nec7210_locking_iomem_write_byte(struct nec7210_priv * priv,uint8_t data,unsigned int register_num)1111 void nec7210_locking_iomem_write_byte(struct nec7210_priv *priv, uint8_t data,
1112 unsigned int register_num)
1113 {
1114 unsigned long flags;
1115
1116 spin_lock_irqsave(&priv->register_page_lock, flags);
1117 if (register_num == AUXMR)
1118 udelay(1);
1119 writeb(data, priv->mmiobase + register_num * priv->offset);
1120 spin_unlock_irqrestore(&priv->register_page_lock, flags);
1121 }
1122 EXPORT_SYMBOL(nec7210_locking_iomem_write_byte);
1123
nec7210_init_module(void)1124 static int __init nec7210_init_module(void)
1125 {
1126 return 0;
1127 }
1128
nec7210_exit_module(void)1129 static void __exit nec7210_exit_module(void)
1130 {
1131 }
1132
1133 module_init(nec7210_init_module);
1134 module_exit(nec7210_exit_module);
1135