FILE
tnt4882_gpib.c
File preview with syntax highlighting.
linux-6.19.14/drivers/gpib/tnt4882/tnt4882_gpib.c
1// SPDX-License-Identifier: GPL-2.0 2 3/*************************************************************************** 4 * National Instruments boards using tnt4882 or compatible chips (at-gpib, etc). 5 * copyright : (C) 2001, 2002 by Frank Mori Hess 6 ***************************************************************************/ 7 8#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 9#define dev_fmt pr_fmt 10#define DRV_NAME KBUILD_MODNAME 11 12#include <linux/ioport.h> 13#include <linux/sched.h> 14#include <linux/module.h> 15#include <linux/slab.h> 16#include <linux/pci.h> 17#include <linux/pci_ids.h> 18#include <linux/string.h> 19#include <linux/init.h> 20#include <linux/delay.h> 21#include <linux/isapnp.h> 22 23#include "nec7210.h" 24#include "gpibP.h" 25#include "mite.h" 26#include "tnt4882_registers.h" 27 28static const int ISAPNP_VENDOR_ID_NI = ISAPNP_VENDOR('N', 'I', 'C'); 29static const int ISAPNP_ID_NI_ATGPIB_TNT = 0xc601; 30enum { 31 PCI_DEVICE_ID_NI_GPIB = 0xc801, 32 PCI_DEVICE_ID_NI_GPIB_PLUS = 0xc811, 33 PCI_DEVICE_ID_NI_GPIB_PLUS2 = 0x71ad, 34 PCI_DEVICE_ID_NI_PXIGPIB = 0xc821, 35 PCI_DEVICE_ID_NI_PMCGPIB = 0xc831, 36 PCI_DEVICE_ID_NI_PCIEGPIB = 0x70cf, 37 PCI_DEVICE_ID_NI_PCIE2GPIB = 0x710e, 38// Measurement Computing PCI-488 same design as PCI-GPIB with TNT5004 39 PCI_DEVICE_ID_MC_PCI488 = 0x7259, 40 PCI_DEVICE_ID_CEC_NI_GPIB = 0x7258 41}; 42 43// struct which defines private_data for tnt4882 devices 44struct tnt4882_priv { 45 struct nec7210_priv nec7210_priv; 46 struct mite_struct *mite; 47 struct pnp_dev *pnp_dev; 48 unsigned int irq; 49 unsigned short imr0_bits; 50 unsigned short imr3_bits; 51 unsigned short auxg_bits; // bits written to auxiliary register G 52}; 53 54static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board); 55 56// register offset for nec7210 compatible registers 57static const int atgpib_reg_offset = 2; 58 59// number of ioports used 60static const int atgpib_iosize = 32; 61 62/* paged io */ 63static inline unsigned int tnt_paged_readb(struct tnt4882_priv *priv, unsigned long offset) 64{ 65 iowrite8(AUX_PAGEIN, priv->nec7210_priv.mmiobase + AUXMR * priv->nec7210_priv.offset); 66 udelay(1); 67 return ioread8(priv->nec7210_priv.mmiobase + offset); 68} 69 70static inline void tnt_paged_writeb(struct tnt4882_priv *priv, unsigned int value, 71 unsigned long offset) 72{ 73 iowrite8(AUX_PAGEIN, priv->nec7210_priv.mmiobase + AUXMR * priv->nec7210_priv.offset); 74 udelay(1); 75 iowrite8(value, priv->nec7210_priv.mmiobase + offset); 76} 77 78/* readb/writeb wrappers */ 79static inline unsigned short tnt_readb(struct tnt4882_priv *priv, unsigned long offset) 80{ 81 void __iomem *address = priv->nec7210_priv.mmiobase + offset; 82 unsigned long flags; 83 unsigned short retval; 84 spinlock_t *register_lock = &priv->nec7210_priv.register_page_lock; 85 86 spin_lock_irqsave(register_lock, flags); 87 switch (offset) { 88 case CSR: 89 case SASR: 90 case ISR0: 91 case BSR: 92 switch (priv->nec7210_priv.type) { 93 case TNT4882: 94 case TNT5004: 95 retval = ioread8(address); 96 break; 97 case NAT4882: 98 retval = tnt_paged_readb(priv, offset - tnt_pagein_offset); 99 break; 100 case NEC7210: 101 retval = 0; 102 break; 103 default: 104 retval = 0; 105 break; 106 } 107 break; 108 default: 109 retval = ioread8(address); 110 break; 111 } 112 spin_unlock_irqrestore(register_lock, flags); 113 return retval; 114} 115 116static inline void tnt_writeb(struct tnt4882_priv *priv, unsigned short value, unsigned long offset) 117{ 118 void __iomem *address = priv->nec7210_priv.mmiobase + offset; 119 unsigned long flags; 120 spinlock_t *register_lock = &priv->nec7210_priv.register_page_lock; 121 122 spin_lock_irqsave(register_lock, flags); 123 switch (offset) { 124 case KEYREG: 125 case IMR0: 126 case BCR: 127 switch (priv->nec7210_priv.type) { 128 case TNT4882: 129 case TNT5004: 130 iowrite8(value, address); 131 break; 132 case NAT4882: 133 tnt_paged_writeb(priv, value, offset - tnt_pagein_offset); 134 break; 135 case NEC7210: 136 break; 137 default: 138 break; 139 } 140 break; 141 default: 142 iowrite8(value, address); 143 break; 144 } 145 spin_unlock_irqrestore(register_lock, flags); 146} 147 148MODULE_LICENSE("GPL"); 149MODULE_DESCRIPTION("GPIB driver for National Instruments boards using tnt4882 or compatible chips"); 150 151static int tnt4882_line_status(const struct gpib_board *board) 152{ 153 int status = VALID_ALL; 154 int bcsr_bits; 155 struct tnt4882_priv *tnt_priv; 156 157 tnt_priv = board->private_data; 158 159 bcsr_bits = tnt_readb(tnt_priv, BSR); 160 161 if (bcsr_bits & BCSR_REN_BIT) 162 status |= BUS_REN; 163 if (bcsr_bits & BCSR_IFC_BIT) 164 status |= BUS_IFC; 165 if (bcsr_bits & BCSR_SRQ_BIT) 166 status |= BUS_SRQ; 167 if (bcsr_bits & BCSR_EOI_BIT) 168 status |= BUS_EOI; 169 if (bcsr_bits & BCSR_NRFD_BIT) 170 status |= BUS_NRFD; 171 if (bcsr_bits & BCSR_NDAC_BIT) 172 status |= BUS_NDAC; 173 if (bcsr_bits & BCSR_DAV_BIT) 174 status |= BUS_DAV; 175 if (bcsr_bits & BCSR_ATN_BIT) 176 status |= BUS_ATN; 177 178 return status; 179} 180 181static int tnt4882_t1_delay(struct gpib_board *board, unsigned int nano_sec) 182{ 183 struct tnt4882_priv *tnt_priv = board->private_data; 184 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 185 unsigned int retval; 186 187 retval = nec7210_t1_delay(board, nec_priv, nano_sec); 188 if (nec_priv->type == NEC7210) 189 return retval; 190 191 if (nano_sec <= 350) { 192 tnt_writeb(tnt_priv, MSTD, KEYREG); 193 retval = 350; 194 } else { 195 tnt_writeb(tnt_priv, 0, KEYREG); 196 } 197 if (nano_sec > 500 && nano_sec <= 1100) { 198 write_byte(nec_priv, AUXRI | USTD, AUXMR); 199 retval = 1100; 200 } else { 201 write_byte(nec_priv, AUXRI, AUXMR); 202 } 203 return retval; 204} 205 206static int fifo_word_available(struct tnt4882_priv *tnt_priv) 207{ 208 int status2; 209 int retval; 210 211 status2 = tnt_readb(tnt_priv, STS2); 212 retval = (status2 & AEFN) && (status2 & BEFN); 213 214 return retval; 215} 216 217static int fifo_byte_available(struct tnt4882_priv *tnt_priv) 218{ 219 int status2; 220 int retval; 221 222 status2 = tnt_readb(tnt_priv, STS2); 223 retval = (status2 & AEFN) || (status2 & BEFN); 224 225 return retval; 226} 227 228static int fifo_xfer_done(struct tnt4882_priv *tnt_priv) 229{ 230 int status1; 231 int retval; 232 233 status1 = tnt_readb(tnt_priv, STS1); 234 retval = status1 & (S_DONE | S_HALT); 235 236 return retval; 237} 238 239static int drain_fifo_words(struct tnt4882_priv *tnt_priv, u8 *buffer, int num_bytes) 240{ 241 int count = 0; 242 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 243 244 while (fifo_word_available(tnt_priv) && count + 2 <= num_bytes) { 245 short word; 246 247 word = ioread16(nec_priv->mmiobase + FIFOB); 248 buffer[count++] = word & 0xff; 249 buffer[count++] = (word >> 8) & 0xff; 250 } 251 return count; 252} 253 254static void tnt4882_release_holdoff(struct gpib_board *board, struct tnt4882_priv *tnt_priv) 255{ 256 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 257 unsigned short sasr_bits; 258 259 sasr_bits = tnt_readb(tnt_priv, SASR); 260 261 /* 262 * tnt4882 not in one-chip mode won't always release holdoff unless we 263 * are in the right mode when release handshake command is given 264 */ 265 if (sasr_bits & AEHS_BIT) /* holding off due to holdoff on end mode*/ { 266 nec7210_set_handshake_mode(board, nec_priv, HR_HLDE); 267 write_byte(nec_priv, AUX_FH, AUXMR); 268 } else if (sasr_bits & ANHS1_BIT) { /* held off due to holdoff on all data mode*/ 269 nec7210_set_handshake_mode(board, nec_priv, HR_HLDA); 270 write_byte(nec_priv, AUX_FH, AUXMR); 271 nec7210_set_handshake_mode(board, nec_priv, HR_HLDE); 272 } else { /* held off due to holdoff immediately command */ 273 nec7210_set_handshake_mode(board, nec_priv, HR_HLDE); 274 write_byte(nec_priv, AUX_FH, AUXMR); 275 } 276} 277 278static int tnt4882_accel_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, 279 size_t *bytes_read) 280{ 281 size_t count = 0; 282 ssize_t retval = 0; 283 struct tnt4882_priv *tnt_priv = board->private_data; 284 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 285 unsigned int bits; 286 s32 hw_count; 287 unsigned long flags; 288 289 *bytes_read = 0; 290 // FIXME: really, DEV_CLEAR_BN should happen elsewhere to prevent race 291 clear_bit(DEV_CLEAR_BN, &nec_priv->state); 292 clear_bit(ADR_CHANGE_BN, &nec_priv->state); 293 294 nec7210_set_reg_bits(nec_priv, IMR1, HR_ENDIE, HR_ENDIE); 295 if (nec_priv->type != TNT4882 && nec_priv->type != TNT5004) 296 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, HR_DMAI); 297 else 298 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); 299 tnt_writeb(tnt_priv, nec_priv->auxa_bits | HR_HLDA, CCR); 300 bits = TNT_B_16BIT | TNT_IN | TNT_CCEN; 301 tnt_writeb(tnt_priv, bits, CFG); 302 tnt_writeb(tnt_priv, RESET_FIFO, CMDR); 303 udelay(1); 304 // load 2's complement of count into hardware counters 305 hw_count = -length; 306 tnt_writeb(tnt_priv, hw_count & 0xff, CNT0); 307 tnt_writeb(tnt_priv, (hw_count >> 8) & 0xff, CNT1); 308 tnt_writeb(tnt_priv, (hw_count >> 16) & 0xff, CNT2); 309 tnt_writeb(tnt_priv, (hw_count >> 24) & 0xff, CNT3); 310 311 tnt4882_release_holdoff(board, tnt_priv); 312 313 tnt_writeb(tnt_priv, GO, CMDR); 314 udelay(1); 315 316 spin_lock_irqsave(&board->spinlock, flags); 317 tnt_priv->imr3_bits |= HR_DONE | HR_NEF; 318 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 319 spin_unlock_irqrestore(&board->spinlock, flags); 320 321 while (count + 2 <= length && 322 test_bit(RECEIVED_END_BN, &nec_priv->state) == 0 && 323 fifo_xfer_done(tnt_priv) == 0) { 324 // wait until a word is ready 325 if (wait_event_interruptible(board->wait, 326 fifo_word_available(tnt_priv) || 327 fifo_xfer_done(tnt_priv) || 328 test_bit(RECEIVED_END_BN, &nec_priv->state) || 329 test_bit(DEV_CLEAR_BN, &nec_priv->state) || 330 test_bit(ADR_CHANGE_BN, &nec_priv->state) || 331 test_bit(TIMO_NUM, &board->status))) { 332 retval = -ERESTARTSYS; 333 break; 334 } 335 if (test_bit(TIMO_NUM, &board->status)) { 336 retval = -ETIMEDOUT; 337 break; 338 } 339 if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) { 340 retval = -EINTR; 341 break; 342 } 343 if (test_bit(ADR_CHANGE_BN, &nec_priv->state)) { 344 retval = -EINTR; 345 break; 346 } 347 348 spin_lock_irqsave(&board->spinlock, flags); 349 count += drain_fifo_words(tnt_priv, &buffer[count], length - count); 350 tnt_priv->imr3_bits |= HR_NEF; 351 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 352 spin_unlock_irqrestore(&board->spinlock, flags); 353 354 if (need_resched()) 355 schedule(); 356 } 357 // wait for last byte 358 if (count < length) { 359 spin_lock_irqsave(&board->spinlock, flags); 360 tnt_priv->imr3_bits |= HR_DONE | HR_NEF; 361 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 362 spin_unlock_irqrestore(&board->spinlock, flags); 363 364 if (wait_event_interruptible(board->wait, 365 fifo_xfer_done(tnt_priv) || 366 test_bit(RECEIVED_END_BN, &nec_priv->state) || 367 test_bit(DEV_CLEAR_BN, &nec_priv->state) || 368 test_bit(ADR_CHANGE_BN, &nec_priv->state) || 369 test_bit(TIMO_NUM, &board->status))) { 370 retval = -ERESTARTSYS; 371 } 372 if (test_bit(TIMO_NUM, &board->status)) 373 retval = -ETIMEDOUT; 374 if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) 375 retval = -EINTR; 376 if (test_bit(ADR_CHANGE_BN, &nec_priv->state)) 377 retval = -EINTR; 378 count += drain_fifo_words(tnt_priv, &buffer[count], length - count); 379 if (fifo_byte_available(tnt_priv) && count < length) 380 buffer[count++] = tnt_readb(tnt_priv, FIFOB); 381 } 382 if (count < length) 383 tnt_writeb(tnt_priv, STOP, CMDR); 384 udelay(1); 385 386 nec7210_set_reg_bits(nec_priv, IMR1, HR_ENDIE, 0); 387 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAI, 0); 388 /* 389 * force handling of any pending interrupts (seems to be needed 390 * to keep interrupts from getting hosed, plus for syncing 391 * with RECEIVED_END below) 392 */ 393 tnt4882_internal_interrupt(board); 394 /* RECEIVED_END should be in sync now */ 395 if (test_and_clear_bit(RECEIVED_END_BN, &nec_priv->state)) 396 *end = 1; 397 if (retval < 0) { 398 // force immediate holdoff 399 write_byte(nec_priv, AUX_HLDI, AUXMR); 400 401 set_bit(RFD_HOLDOFF_BN, &nec_priv->state); 402 } 403 *bytes_read = count; 404 405 return retval; 406} 407 408static int fifo_space_available(struct tnt4882_priv *tnt_priv) 409{ 410 int status2; 411 int retval; 412 413 status2 = tnt_readb(tnt_priv, STS2); 414 retval = (status2 & AFFN) && (status2 & BFFN); 415 416 return retval; 417} 418 419static unsigned int tnt_transfer_count(struct tnt4882_priv *tnt_priv) 420{ 421 unsigned int count = 0; 422 423 count |= tnt_readb(tnt_priv, CNT0) & 0xff; 424 count |= (tnt_readb(tnt_priv, CNT1) << 8) & 0xff00; 425 count |= (tnt_readb(tnt_priv, CNT2) << 16) & 0xff0000; 426 count |= (tnt_readb(tnt_priv, CNT3) << 24) & 0xff000000; 427 // return two's complement 428 return -count; 429}; 430 431static int write_wait(struct gpib_board *board, struct tnt4882_priv *tnt_priv, 432 int wait_for_done, int send_commands) 433{ 434 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 435 436 if (wait_event_interruptible(board->wait, 437 (!wait_for_done && fifo_space_available(tnt_priv)) || 438 fifo_xfer_done(tnt_priv) || 439 test_bit(BUS_ERROR_BN, &nec_priv->state) || 440 test_bit(DEV_CLEAR_BN, &nec_priv->state) || 441 test_bit(TIMO_NUM, &board->status))) 442 return -ERESTARTSYS; 443 444 if (test_bit(TIMO_NUM, &board->status)) 445 return -ETIMEDOUT; 446 if (test_and_clear_bit(BUS_ERROR_BN, &nec_priv->state)) 447 return (send_commands) ? -ENOTCONN : -ECOMM; 448 if (test_bit(DEV_CLEAR_BN, &nec_priv->state)) 449 return -EINTR; 450 return 0; 451} 452 453static int generic_write(struct gpib_board *board, u8 *buffer, size_t length, 454 int send_eoi, int send_commands, size_t *bytes_written) 455{ 456 size_t count = 0; 457 ssize_t retval = 0; 458 struct tnt4882_priv *tnt_priv = board->private_data; 459 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 460 unsigned int bits; 461 s32 hw_count; 462 unsigned long flags; 463 464 *bytes_written = 0; 465 // FIXME: really, DEV_CLEAR_BN should happen elsewhere to prevent race 466 clear_bit(DEV_CLEAR_BN, &nec_priv->state); 467 468 nec7210_set_reg_bits(nec_priv, IMR1, HR_ERRIE, HR_ERRIE); 469 470 if (nec_priv->type != TNT4882 && nec_priv->type != TNT5004) 471 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAO, HR_DMAO); 472 else 473 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAO, 0); 474 475 tnt_writeb(tnt_priv, RESET_FIFO, CMDR); 476 udelay(1); 477 478 bits = TNT_B_16BIT; 479 if (send_eoi) { 480 bits |= TNT_CCEN; 481 if (nec_priv->type != TNT4882 && nec_priv->type != TNT5004) 482 tnt_writeb(tnt_priv, AUX_SEOI, CCR); 483 } 484 if (send_commands) 485 bits |= TNT_COMMAND; 486 tnt_writeb(tnt_priv, bits, CFG); 487 488 // load 2's complement of count into hardware counters 489 hw_count = -length; 490 tnt_writeb(tnt_priv, hw_count & 0xff, CNT0); 491 tnt_writeb(tnt_priv, (hw_count >> 8) & 0xff, CNT1); 492 tnt_writeb(tnt_priv, (hw_count >> 16) & 0xff, CNT2); 493 tnt_writeb(tnt_priv, (hw_count >> 24) & 0xff, CNT3); 494 495 tnt_writeb(tnt_priv, GO, CMDR); 496 udelay(1); 497 498 spin_lock_irqsave(&board->spinlock, flags); 499 tnt_priv->imr3_bits |= HR_DONE; 500 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 501 spin_unlock_irqrestore(&board->spinlock, flags); 502 503 while (count < length) { 504 // wait until byte is ready to be sent 505 retval = write_wait(board, tnt_priv, 0, send_commands); 506 if (retval < 0) 507 break; 508 if (fifo_xfer_done(tnt_priv)) 509 break; 510 spin_lock_irqsave(&board->spinlock, flags); 511 while (fifo_space_available(tnt_priv) && count < length) { 512 u16 word; 513 514 word = buffer[count++] & 0xff; 515 if (count < length) 516 word |= (buffer[count++] << 8) & 0xff00; 517 iowrite16(word, nec_priv->mmiobase + FIFOB); 518 } 519// avoid unnecessary HR_NFF interrupts 520// tnt_priv->imr3_bits |= HR_NFF; 521// tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 522 spin_unlock_irqrestore(&board->spinlock, flags); 523 524 if (need_resched()) 525 schedule(); 526 } 527 // wait last byte has been sent 528 if (retval == 0) 529 retval = write_wait(board, tnt_priv, 1, send_commands); 530 531 tnt_writeb(tnt_priv, STOP, CMDR); 532 udelay(1); 533 534 nec7210_set_reg_bits(nec_priv, IMR1, HR_ERR, 0x0); 535 nec7210_set_reg_bits(nec_priv, IMR2, HR_DMAO, 0x0); 536 /* 537 * force handling of any interrupts that happened 538 * while they were masked (this appears to be needed) 539 */ 540 tnt4882_internal_interrupt(board); 541 *bytes_written = length - tnt_transfer_count(tnt_priv); 542 return retval; 543} 544 545static int tnt4882_accel_write(struct gpib_board *board, u8 *buffer, 546 size_t length, int send_eoi, size_t *bytes_written) 547{ 548 return generic_write(board, buffer, length, send_eoi, 0, bytes_written); 549} 550 551static int tnt4882_command(struct gpib_board *board, u8 *buffer, size_t length, 552 size_t *bytes_written) 553{ 554 return generic_write(board, buffer, length, 0, 1, bytes_written); 555} 556 557static irqreturn_t tnt4882_internal_interrupt(struct gpib_board *board) 558{ 559 struct tnt4882_priv *priv = board->private_data; 560 int isr0_bits, isr3_bits, imr3_bits; 561 unsigned long flags; 562 563 spin_lock_irqsave(&board->spinlock, flags); 564 565 nec7210_interrupt(board, &priv->nec7210_priv); 566 567 isr0_bits = tnt_readb(priv, ISR0); 568 isr3_bits = tnt_readb(priv, ISR3); 569 imr3_bits = priv->imr3_bits; 570 571 if (isr0_bits & TNT_IFCI_BIT) 572 push_gpib_event(board, EVENT_IFC); 573 // XXX don't need this wakeup, one below should do? 574// wake_up_interruptible(&board->wait); 575 576 if (isr3_bits & HR_NFF) 577 priv->imr3_bits &= ~HR_NFF; 578 if (isr3_bits & HR_NEF) 579 priv->imr3_bits &= ~HR_NEF; 580 if (isr3_bits & HR_DONE) 581 priv->imr3_bits &= ~HR_DONE; 582 if (isr3_bits & (HR_INTR | HR_TLCI)) { 583 dev_dbg(board->gpib_dev, "minor %i isr0 0x%x imr0 0x%x isr3 0x%x imr3 0x%x\n", 584 board->minor, isr0_bits, priv->imr0_bits, isr3_bits, imr3_bits); 585 tnt_writeb(priv, priv->imr3_bits, IMR3); 586 wake_up_interruptible(&board->wait); 587 } 588 spin_unlock_irqrestore(&board->spinlock, flags); 589 return IRQ_HANDLED; 590} 591 592static irqreturn_t tnt4882_interrupt(int irq, void *arg) 593{ 594 return tnt4882_internal_interrupt(arg); 595} 596 597// wrappers for interface functions 598static int tnt4882_read(struct gpib_board *board, u8 *buffer, size_t length, int *end, 599 size_t *bytes_read) 600{ 601 struct tnt4882_priv *priv = board->private_data; 602 struct nec7210_priv *nec_priv = &priv->nec7210_priv; 603 int retval; 604 int dummy; 605 606 retval = nec7210_read(board, &priv->nec7210_priv, buffer, length, end, bytes_read); 607 608 if (retval < 0) { // force immediate holdoff 609 write_byte(nec_priv, AUX_HLDI, AUXMR); 610 611 set_bit(RFD_HOLDOFF_BN, &nec_priv->state); 612 613 nec7210_read_data_in(board, nec_priv, &dummy); 614 } 615 return retval; 616} 617 618static int tnt4882_write(struct gpib_board *board, u8 *buffer, size_t length, int send_eoi, 619 size_t *bytes_written) 620{ 621 struct tnt4882_priv *priv = board->private_data; 622 623 return nec7210_write(board, &priv->nec7210_priv, buffer, length, send_eoi, bytes_written); 624} 625 626static int tnt4882_command_unaccel(struct gpib_board *board, u8 *buffer, 627 size_t length, size_t *bytes_written) 628{ 629 struct tnt4882_priv *priv = board->private_data; 630 631 return nec7210_command(board, &priv->nec7210_priv, buffer, length, bytes_written); 632} 633 634static int tnt4882_take_control(struct gpib_board *board, int synchronous) 635{ 636 struct tnt4882_priv *priv = board->private_data; 637 638 return nec7210_take_control(board, &priv->nec7210_priv, synchronous); 639} 640 641static int tnt4882_go_to_standby(struct gpib_board *board) 642{ 643 struct tnt4882_priv *priv = board->private_data; 644 645 return nec7210_go_to_standby(board, &priv->nec7210_priv); 646} 647 648static int tnt4882_request_system_control(struct gpib_board *board, int request_control) 649{ 650 struct tnt4882_priv *priv = board->private_data; 651 int retval; 652 653 if (request_control) { 654 tnt_writeb(priv, SETSC, CMDR); 655 udelay(1); 656 } 657 retval = nec7210_request_system_control(board, &priv->nec7210_priv, request_control); 658 if (!request_control) { 659 tnt_writeb(priv, CLRSC, CMDR); 660 udelay(1); 661 } 662 return retval; 663} 664 665static void tnt4882_interface_clear(struct gpib_board *board, int assert) 666{ 667 struct tnt4882_priv *priv = board->private_data; 668 669 nec7210_interface_clear(board, &priv->nec7210_priv, assert); 670} 671 672static void tnt4882_remote_enable(struct gpib_board *board, int enable) 673{ 674 struct tnt4882_priv *priv = board->private_data; 675 676 nec7210_remote_enable(board, &priv->nec7210_priv, enable); 677} 678 679static int tnt4882_enable_eos(struct gpib_board *board, u8 eos_byte, int compare_8_bits) 680{ 681 struct tnt4882_priv *priv = board->private_data; 682 683 return nec7210_enable_eos(board, &priv->nec7210_priv, eos_byte, compare_8_bits); 684} 685 686static void tnt4882_disable_eos(struct gpib_board *board) 687{ 688 struct tnt4882_priv *priv = board->private_data; 689 690 nec7210_disable_eos(board, &priv->nec7210_priv); 691} 692 693static unsigned int tnt4882_update_status(struct gpib_board *board, unsigned int clear_mask) 694{ 695 unsigned long flags; 696 u8 line_status; 697 struct tnt4882_priv *priv = board->private_data; 698 699 spin_lock_irqsave(&board->spinlock, flags); 700 board->status &= ~clear_mask; 701 nec7210_update_status_nolock(board, &priv->nec7210_priv); 702 /* set / clear SRQ state since it is not cleared by interrupt */ 703 line_status = tnt_readb(priv, BSR); 704 if (line_status & BCSR_SRQ_BIT) 705 set_bit(SRQI_NUM, &board->status); 706 else 707 clear_bit(SRQI_NUM, &board->status); 708 spin_unlock_irqrestore(&board->spinlock, flags); 709 return board->status; 710} 711 712static int tnt4882_primary_address(struct gpib_board *board, unsigned int address) 713{ 714 struct tnt4882_priv *priv = board->private_data; 715 716 return nec7210_primary_address(board, &priv->nec7210_priv, address); 717} 718 719static int tnt4882_secondary_address(struct gpib_board *board, unsigned int address, int enable) 720{ 721 struct tnt4882_priv *priv = board->private_data; 722 723 return nec7210_secondary_address(board, &priv->nec7210_priv, address, enable); 724} 725 726static int tnt4882_parallel_poll(struct gpib_board *board, u8 *result) 727{ 728 struct tnt4882_priv *tnt_priv = board->private_data; 729 730 if (tnt_priv->nec7210_priv.type != NEC7210) { 731 tnt_priv->auxg_bits |= RPP2_BIT; 732 write_byte(&tnt_priv->nec7210_priv, tnt_priv->auxg_bits, AUXMR); 733 udelay(2); // FIXME use parallel poll timeout 734 *result = read_byte(&tnt_priv->nec7210_priv, CPTR); 735 tnt_priv->auxg_bits &= ~RPP2_BIT; 736 write_byte(&tnt_priv->nec7210_priv, tnt_priv->auxg_bits, AUXMR); 737 return 0; 738 } else { 739 return nec7210_parallel_poll(board, &tnt_priv->nec7210_priv, result); 740 } 741} 742 743static void tnt4882_parallel_poll_configure(struct gpib_board *board, u8 config) 744{ 745 struct tnt4882_priv *priv = board->private_data; 746 747 if (priv->nec7210_priv.type == TNT5004) { 748 /* configure locally */ 749 write_byte(&priv->nec7210_priv, AUXRI | 0x4, AUXMR); 750 if (config) 751 /* set response + clear sense */ 752 write_byte(&priv->nec7210_priv, PPR | config, AUXMR); 753 else 754 /* disable ppoll */ 755 write_byte(&priv->nec7210_priv, PPR | 0x10, AUXMR); 756 } else { 757 nec7210_parallel_poll_configure(board, &priv->nec7210_priv, config); 758 } 759} 760 761static void tnt4882_parallel_poll_response(struct gpib_board *board, int ist) 762{ 763 struct tnt4882_priv *priv = board->private_data; 764 765 nec7210_parallel_poll_response(board, &priv->nec7210_priv, ist); 766} 767 768/* 769 * this is just used by the old nec7210 isa interfaces, the newer 770 * boards use tnt4882_serial_poll_response2 771 */ 772static void tnt4882_serial_poll_response(struct gpib_board *board, u8 status) 773{ 774 struct tnt4882_priv *priv = board->private_data; 775 776 nec7210_serial_poll_response(board, &priv->nec7210_priv, status); 777} 778 779static void tnt4882_serial_poll_response2(struct gpib_board *board, u8 status, 780 int new_reason_for_service) 781{ 782 struct tnt4882_priv *priv = board->private_data; 783 unsigned long flags; 784 const int MSS = status & request_service_bit; 785 const int reqt = MSS && new_reason_for_service; 786 const int reqf = MSS == 0; 787 788 spin_lock_irqsave(&board->spinlock, flags); 789 if (reqt) { 790 priv->nec7210_priv.srq_pending = 1; 791 clear_bit(SPOLL_NUM, &board->status); 792 } else { 793 if (reqf) 794 priv->nec7210_priv.srq_pending = 0; 795 } 796 if (reqt) 797 /* 798 * It may seem like a race to issue reqt before updating 799 * the status byte, but it is not. The chip does not 800 * issue the reqt until the SPMR is written to at 801 * a later time. 802 */ 803 write_byte(&priv->nec7210_priv, AUX_REQT, AUXMR); 804 else if (reqf) 805 write_byte(&priv->nec7210_priv, AUX_REQF, AUXMR); 806 /* 807 * We need to always zero bit 6 of the status byte before writing it to 808 * the SPMR to insure we are using 809 * serial poll mode SP1, and not accidentally triggering mode SP3. 810 */ 811 write_byte(&priv->nec7210_priv, status & ~request_service_bit, SPMR); 812 spin_unlock_irqrestore(&board->spinlock, flags); 813} 814 815static u8 tnt4882_serial_poll_status(struct gpib_board *board) 816{ 817 struct tnt4882_priv *priv = board->private_data; 818 819 return nec7210_serial_poll_status(board, &priv->nec7210_priv); 820} 821 822static void tnt4882_return_to_local(struct gpib_board *board) 823{ 824 struct tnt4882_priv *priv = board->private_data; 825 826 nec7210_return_to_local(board, &priv->nec7210_priv); 827} 828 829static void tnt4882_board_reset(struct tnt4882_priv *tnt_priv, struct gpib_board *board) 830{ 831 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 832 833 tnt_priv->imr0_bits = 0; 834 tnt_writeb(tnt_priv, tnt_priv->imr0_bits, IMR0); 835 tnt_priv->imr3_bits = 0; 836 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 837 tnt_readb(tnt_priv, IMR0); 838 tnt_readb(tnt_priv, IMR3); 839 nec7210_board_reset(nec_priv, board); 840} 841 842static int tnt4882_allocate_private(struct gpib_board *board) 843{ 844 struct tnt4882_priv *tnt_priv; 845 846 board->private_data = kmalloc(sizeof(struct tnt4882_priv), GFP_KERNEL); 847 if (!board->private_data) 848 return -1; 849 tnt_priv = board->private_data; 850 memset(tnt_priv, 0, sizeof(struct tnt4882_priv)); 851 init_nec7210_private(&tnt_priv->nec7210_priv); 852 return 0; 853} 854 855static void tnt4882_free_private(struct gpib_board *board) 856{ 857 kfree(board->private_data); 858 board->private_data = NULL; 859} 860 861static void tnt4882_init(struct tnt4882_priv *tnt_priv, const struct gpib_board *board) 862{ 863 struct nec7210_priv *nec_priv = &tnt_priv->nec7210_priv; 864 865 /* Turbo488 software reset */ 866 tnt_writeb(tnt_priv, SOFT_RESET, CMDR); 867 udelay(1); 868 869 // turn off one-chip mode 870 tnt_writeb(tnt_priv, NODMA, HSSEL); 871 tnt_writeb(tnt_priv, 0, ACCWR); 872 // make sure we are in 7210 mode 873 tnt_writeb(tnt_priv, AUX_7210, AUXCR); 874 udelay(1); 875 // registers might be swapped, so write it to the swapped address too 876 tnt_writeb(tnt_priv, AUX_7210, SWAPPED_AUXCR); 877 udelay(1); 878 // turn on one-chip mode 879 if (nec_priv->type == TNT4882 || nec_priv->type == TNT5004) 880 tnt_writeb(tnt_priv, NODMA | TNT_ONE_CHIP_BIT, HSSEL); 881 else 882 tnt_writeb(tnt_priv, NODMA, HSSEL); 883 884 nec7210_board_reset(nec_priv, board); 885 // read-clear isr0 886 tnt_readb(tnt_priv, ISR0); 887 888 // enable passing of nat4882 interrupts 889 tnt_priv->imr3_bits = HR_TLCI; 890 tnt_writeb(tnt_priv, tnt_priv->imr3_bits, IMR3); 891 892 // enable interrupt 893 tnt_writeb(tnt_priv, 0x1, INTRT); 894 895 // force immediate holdoff 896 write_byte(&tnt_priv->nec7210_priv, AUX_HLDI, AUXMR); 897 898 set_bit(RFD_HOLDOFF_BN, &nec_priv->state); 899 900 tnt_priv->auxg_bits = AUXRG | NTNL_BIT; 901 write_byte(&tnt_priv->nec7210_priv, tnt_priv->auxg_bits, AUXMR); 902 903 nec7210_board_online(nec_priv, board); 904 // enable interface clear interrupt for event queue 905 tnt_priv->imr0_bits = TNT_IMR0_ALWAYS_BITS | TNT_ATNI_BIT | TNT_IFCIE_BIT; 906 tnt_writeb(tnt_priv, tnt_priv->imr0_bits, IMR0); 907} 908 909static int ni_pci_attach(struct gpib_board *board, const struct gpib_board_config *config) 910{ 911 struct tnt4882_priv *tnt_priv; 912 struct nec7210_priv *nec_priv; 913 int isr_flags = IRQF_SHARED; 914 int retval; 915 struct mite_struct *mite; 916 917 board->status = 0; 918 919 if (tnt4882_allocate_private(board)) 920 return -ENOMEM; 921 tnt_priv = board->private_data; 922 nec_priv = &tnt_priv->nec7210_priv; 923 nec_priv->type = TNT4882; 924 nec_priv->read_byte = nec7210_locking_iomem_read_byte; 925 nec_priv->write_byte = nec7210_locking_iomem_write_byte; 926 nec_priv->offset = atgpib_reg_offset; 927 928 if (!mite_devices) 929 return -ENODEV; 930 931 for (mite = mite_devices; mite; mite = mite->next) { 932 short found_board; 933 934 if (mite->used) 935 continue; 936 if (config->pci_bus >= 0 && config->pci_bus != mite->pcidev->bus->number) 937 continue; 938 if (config->pci_slot >= 0 && config->pci_slot != PCI_SLOT(mite->pcidev->devfn)) 939 continue; 940 switch (mite_device_id(mite)) { 941 case PCI_DEVICE_ID_NI_GPIB: 942 case PCI_DEVICE_ID_NI_GPIB_PLUS: 943 case PCI_DEVICE_ID_NI_GPIB_PLUS2: 944 case PCI_DEVICE_ID_NI_PXIGPIB: 945 case PCI_DEVICE_ID_NI_PMCGPIB: 946 case PCI_DEVICE_ID_NI_PCIEGPIB: 947 case PCI_DEVICE_ID_NI_PCIE2GPIB: 948// support for Measurement Computing PCI-488 949 case PCI_DEVICE_ID_MC_PCI488: 950 case PCI_DEVICE_ID_CEC_NI_GPIB: 951 found_board = 1; 952 break; 953 default: 954 found_board = 0; 955 break; 956 } 957 if (found_board) 958 break; 959 } 960 if (!mite) 961 return -ENODEV; 962 963 tnt_priv->mite = mite; 964 retval = mite_setup(tnt_priv->mite); 965 if (retval < 0) 966 return retval; 967 968 nec_priv->mmiobase = tnt_priv->mite->daq_io_addr; 969 970 // get irq 971 retval = request_irq(mite_irq(tnt_priv->mite), tnt4882_interrupt, isr_flags, "ni-pci-gpib", 972 board); 973 if (retval) { 974 dev_err(board->gpib_dev, "failed to obtain pci irq %d\n", mite_irq(tnt_priv->mite)); 975 return retval; 976 } 977 tnt_priv->irq = mite_irq(tnt_priv->mite); 978 979 // TNT5004 detection 980 switch (tnt_readb(tnt_priv, CSR) & 0xf0) { 981 case 0x30: 982 nec_priv->type = TNT4882; 983 break; 984 case 0x40: 985 nec_priv->type = TNT5004; 986 break; 987 } 988 tnt4882_init(tnt_priv, board); 989 990 return 0; 991} 992 993static void ni_pci_detach(struct gpib_board *board) 994{ 995 struct tnt4882_priv *tnt_priv = board->private_data; 996 struct nec7210_priv *nec_priv; 997 998 if (tnt_priv) { 999 nec_priv = &tnt_priv->nec7210_priv; 1000 1001 if (nec_priv->mmiobase) 1002 tnt4882_board_reset(tnt_priv, board); 1003 if (tnt_priv->irq) 1004 free_irq(tnt_priv->irq, board); 1005 if (tnt_priv->mite) 1006 mite_unsetup(tnt_priv->mite); 1007 } 1008 tnt4882_free_private(board); 1009} 1010 1011static int ni_isapnp_find(struct pnp_dev **dev) 1012{ 1013 *dev = pnp_find_dev(NULL, ISAPNP_VENDOR_ID_NI, 1014 ISAPNP_FUNCTION(ISAPNP_ID_NI_ATGPIB_TNT), NULL); 1015 if (!*dev || !(*dev)->card) 1016 return -ENODEV; 1017 if (pnp_device_attach(*dev) < 0) 1018 return -EBUSY; 1019 if (pnp_activate_dev(*dev) < 0) { 1020 pnp_device_detach(*dev); 1021 return -EAGAIN; 1022 } 1023 if (!pnp_port_valid(*dev, 0) || !pnp_irq_valid(*dev, 0)) { 1024 pnp_device_detach(*dev); 1025 return -EINVAL; 1026 } 1027 return 0; 1028} 1029 1030static int ni_isa_attach_common(struct gpib_board *board, const struct gpib_board_config *config, 1031 enum nec7210_chipset chipset) 1032{ 1033 struct tnt4882_priv *tnt_priv; 1034 struct nec7210_priv *nec_priv; 1035 int isr_flags = 0; 1036 u32 iobase; 1037 int irq; 1038 int retval; 1039 1040 board->status = 0; 1041 1042 if (tnt4882_allocate_private(board)) 1043 return -ENOMEM; 1044 tnt_priv = board->private_data; 1045 nec_priv = &tnt_priv->nec7210_priv; 1046 nec_priv->type = chipset; 1047 nec_priv->read_byte = nec7210_locking_ioport_read_byte; 1048 nec_priv->write_byte = nec7210_locking_ioport_write_byte; 1049 nec_priv->offset = atgpib_reg_offset; 1050 1051 // look for plug-n-play board 1052 if (config->ibbase == 0) { 1053 struct pnp_dev *dev; 1054 1055 retval = ni_isapnp_find(&dev); 1056 if (retval < 0) 1057 return retval; 1058 tnt_priv->pnp_dev = dev; 1059 iobase = pnp_port_start(dev, 0); 1060 irq = pnp_irq(dev, 0); 1061 } else { 1062 iobase = config->ibbase; 1063 irq = config->ibirq; 1064 } 1065 // allocate ioports 1066 if (!request_region(iobase, atgpib_iosize, "atgpib")) 1067 return -EBUSY; 1068 1069 nec_priv->mmiobase = ioport_map(iobase, atgpib_iosize); 1070 if (!nec_priv->mmiobase) 1071 return -EBUSY; 1072 1073 // get irq 1074 retval = request_irq(irq, tnt4882_interrupt, isr_flags, "atgpib", board); 1075 if (retval) { 1076 dev_err(board->gpib_dev, "failed to request ISA irq %d\n", irq); 1077 return retval; 1078 } 1079 tnt_priv->irq = irq; 1080 1081 tnt4882_init(tnt_priv, board); 1082 1083 return 0; 1084} 1085 1086static int ni_tnt_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) 1087{ 1088 return ni_isa_attach_common(board, config, TNT4882); 1089} 1090 1091static int ni_nat4882_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) 1092{ 1093 return ni_isa_attach_common(board, config, NAT4882); 1094} 1095 1096static int ni_nec_isa_attach(struct gpib_board *board, const struct gpib_board_config *config) 1097{ 1098 return ni_isa_attach_common(board, config, NEC7210); 1099} 1100 1101static void ni_isa_detach(struct gpib_board *board) 1102{ 1103 struct tnt4882_priv *tnt_priv = board->private_data; 1104 struct nec7210_priv *nec_priv; 1105 1106 if (tnt_priv) { 1107 nec_priv = &tnt_priv->nec7210_priv; 1108 if (nec_priv->iobase) 1109 tnt4882_board_reset(tnt_priv, board); 1110 if (tnt_priv->irq) 1111 free_irq(tnt_priv->irq, board); 1112 if (nec_priv->mmiobase) 1113 ioport_unmap(nec_priv->mmiobase); 1114 if (nec_priv->iobase) 1115 release_region(nec_priv->iobase, atgpib_iosize); 1116 if (tnt_priv->pnp_dev) 1117 pnp_device_detach(tnt_priv->pnp_dev); 1118 } 1119 tnt4882_free_private(board); 1120} 1121 1122static int tnt4882_pci_probe(struct pci_dev *dev, const struct pci_device_id *id) 1123{ 1124 return 0; 1125} 1126 1127static struct gpib_interface ni_pci_interface = { 1128 .name = "ni_pci", 1129 .attach = ni_pci_attach, 1130 .detach = ni_pci_detach, 1131 .read = tnt4882_accel_read, 1132 .write = tnt4882_accel_write, 1133 .command = tnt4882_command, 1134 .take_control = tnt4882_take_control, 1135 .go_to_standby = tnt4882_go_to_standby, 1136 .request_system_control = tnt4882_request_system_control, 1137 .interface_clear = tnt4882_interface_clear, 1138 .remote_enable = tnt4882_remote_enable, 1139 .enable_eos = tnt4882_enable_eos, 1140 .disable_eos = tnt4882_disable_eos, 1141 .parallel_poll = tnt4882_parallel_poll, 1142 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1143 .parallel_poll_response = tnt4882_parallel_poll_response, 1144 .local_parallel_poll_mode = NULL, // XXX 1145 .line_status = tnt4882_line_status, 1146 .update_status = tnt4882_update_status, 1147 .primary_address = tnt4882_primary_address, 1148 .secondary_address = tnt4882_secondary_address, 1149 .serial_poll_response2 = tnt4882_serial_poll_response2, 1150 .serial_poll_status = tnt4882_serial_poll_status, 1151 .t1_delay = tnt4882_t1_delay, 1152 .return_to_local = tnt4882_return_to_local, 1153}; 1154 1155static struct gpib_interface ni_pci_accel_interface = { 1156 .name = "ni_pci_accel", 1157 .attach = ni_pci_attach, 1158 .detach = ni_pci_detach, 1159 .read = tnt4882_accel_read, 1160 .write = tnt4882_accel_write, 1161 .command = tnt4882_command, 1162 .take_control = tnt4882_take_control, 1163 .go_to_standby = tnt4882_go_to_standby, 1164 .request_system_control = tnt4882_request_system_control, 1165 .interface_clear = tnt4882_interface_clear, 1166 .remote_enable = tnt4882_remote_enable, 1167 .enable_eos = tnt4882_enable_eos, 1168 .disable_eos = tnt4882_disable_eos, 1169 .parallel_poll = tnt4882_parallel_poll, 1170 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1171 .parallel_poll_response = tnt4882_parallel_poll_response, 1172 .local_parallel_poll_mode = NULL, // XXX 1173 .line_status = tnt4882_line_status, 1174 .update_status = tnt4882_update_status, 1175 .primary_address = tnt4882_primary_address, 1176 .secondary_address = tnt4882_secondary_address, 1177 .serial_poll_response2 = tnt4882_serial_poll_response2, 1178 .serial_poll_status = tnt4882_serial_poll_status, 1179 .t1_delay = tnt4882_t1_delay, 1180 .return_to_local = tnt4882_return_to_local, 1181}; 1182 1183static struct gpib_interface ni_isa_interface = { 1184 .name = "ni_isa", 1185 .attach = ni_tnt_isa_attach, 1186 .detach = ni_isa_detach, 1187 .read = tnt4882_accel_read, 1188 .write = tnt4882_accel_write, 1189 .command = tnt4882_command, 1190 .take_control = tnt4882_take_control, 1191 .go_to_standby = tnt4882_go_to_standby, 1192 .request_system_control = tnt4882_request_system_control, 1193 .interface_clear = tnt4882_interface_clear, 1194 .remote_enable = tnt4882_remote_enable, 1195 .enable_eos = tnt4882_enable_eos, 1196 .disable_eos = tnt4882_disable_eos, 1197 .parallel_poll = tnt4882_parallel_poll, 1198 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1199 .parallel_poll_response = tnt4882_parallel_poll_response, 1200 .local_parallel_poll_mode = NULL, // XXX 1201 .line_status = tnt4882_line_status, 1202 .update_status = tnt4882_update_status, 1203 .primary_address = tnt4882_primary_address, 1204 .secondary_address = tnt4882_secondary_address, 1205 .serial_poll_response2 = tnt4882_serial_poll_response2, 1206 .serial_poll_status = tnt4882_serial_poll_status, 1207 .t1_delay = tnt4882_t1_delay, 1208 .return_to_local = tnt4882_return_to_local, 1209}; 1210 1211static struct gpib_interface ni_nat4882_isa_interface = { 1212 .name = "ni_nat4882_isa", 1213 .attach = ni_nat4882_isa_attach, 1214 .detach = ni_isa_detach, 1215 .read = tnt4882_read, 1216 .write = tnt4882_write, 1217 .command = tnt4882_command_unaccel, 1218 .take_control = tnt4882_take_control, 1219 .go_to_standby = tnt4882_go_to_standby, 1220 .request_system_control = tnt4882_request_system_control, 1221 .interface_clear = tnt4882_interface_clear, 1222 .remote_enable = tnt4882_remote_enable, 1223 .enable_eos = tnt4882_enable_eos, 1224 .disable_eos = tnt4882_disable_eos, 1225 .parallel_poll = tnt4882_parallel_poll, 1226 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1227 .parallel_poll_response = tnt4882_parallel_poll_response, 1228 .local_parallel_poll_mode = NULL, // XXX 1229 .line_status = tnt4882_line_status, 1230 .update_status = tnt4882_update_status, 1231 .primary_address = tnt4882_primary_address, 1232 .secondary_address = tnt4882_secondary_address, 1233 .serial_poll_response2 = tnt4882_serial_poll_response2, 1234 .serial_poll_status = tnt4882_serial_poll_status, 1235 .t1_delay = tnt4882_t1_delay, 1236 .return_to_local = tnt4882_return_to_local, 1237}; 1238 1239static struct gpib_interface ni_nec_isa_interface = { 1240 .name = "ni_nec_isa", 1241 .attach = ni_nec_isa_attach, 1242 .detach = ni_isa_detach, 1243 .read = tnt4882_read, 1244 .write = tnt4882_write, 1245 .command = tnt4882_command_unaccel, 1246 .take_control = tnt4882_take_control, 1247 .go_to_standby = tnt4882_go_to_standby, 1248 .request_system_control = tnt4882_request_system_control, 1249 .interface_clear = tnt4882_interface_clear, 1250 .remote_enable = tnt4882_remote_enable, 1251 .enable_eos = tnt4882_enable_eos, 1252 .disable_eos = tnt4882_disable_eos, 1253 .parallel_poll = tnt4882_parallel_poll, 1254 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1255 .parallel_poll_response = tnt4882_parallel_poll_response, 1256 .local_parallel_poll_mode = NULL, // XXX 1257 .line_status = NULL, 1258 .update_status = tnt4882_update_status, 1259 .primary_address = tnt4882_primary_address, 1260 .secondary_address = tnt4882_secondary_address, 1261 .serial_poll_response = tnt4882_serial_poll_response, 1262 .serial_poll_status = tnt4882_serial_poll_status, 1263 .t1_delay = tnt4882_t1_delay, 1264 .return_to_local = tnt4882_return_to_local, 1265}; 1266 1267static struct gpib_interface ni_isa_accel_interface = { 1268 .name = "ni_isa_accel", 1269 .attach = ni_tnt_isa_attach, 1270 .detach = ni_isa_detach, 1271 .read = tnt4882_accel_read, 1272 .write = tnt4882_accel_write, 1273 .command = tnt4882_command, 1274 .take_control = tnt4882_take_control, 1275 .go_to_standby = tnt4882_go_to_standby, 1276 .request_system_control = tnt4882_request_system_control, 1277 .interface_clear = tnt4882_interface_clear, 1278 .remote_enable = tnt4882_remote_enable, 1279 .enable_eos = tnt4882_enable_eos, 1280 .disable_eos = tnt4882_disable_eos, 1281 .parallel_poll = tnt4882_parallel_poll, 1282 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1283 .parallel_poll_response = tnt4882_parallel_poll_response, 1284 .local_parallel_poll_mode = NULL, // XXX 1285 .line_status = tnt4882_line_status, 1286 .update_status = tnt4882_update_status, 1287 .primary_address = tnt4882_primary_address, 1288 .secondary_address = tnt4882_secondary_address, 1289 .serial_poll_response2 = tnt4882_serial_poll_response2, 1290 .serial_poll_status = tnt4882_serial_poll_status, 1291 .t1_delay = tnt4882_t1_delay, 1292 .return_to_local = tnt4882_return_to_local, 1293}; 1294 1295static struct gpib_interface ni_nat4882_isa_accel_interface = { 1296 .name = "ni_nat4882_isa_accel", 1297 .attach = ni_nat4882_isa_attach, 1298 .detach = ni_isa_detach, 1299 .read = tnt4882_accel_read, 1300 .write = tnt4882_accel_write, 1301 .command = tnt4882_command_unaccel, 1302 .take_control = tnt4882_take_control, 1303 .go_to_standby = tnt4882_go_to_standby, 1304 .request_system_control = tnt4882_request_system_control, 1305 .interface_clear = tnt4882_interface_clear, 1306 .remote_enable = tnt4882_remote_enable, 1307 .enable_eos = tnt4882_enable_eos, 1308 .disable_eos = tnt4882_disable_eos, 1309 .parallel_poll = tnt4882_parallel_poll, 1310 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1311 .parallel_poll_response = tnt4882_parallel_poll_response, 1312 .local_parallel_poll_mode = NULL, // XXX 1313 .line_status = tnt4882_line_status, 1314 .update_status = tnt4882_update_status, 1315 .primary_address = tnt4882_primary_address, 1316 .secondary_address = tnt4882_secondary_address, 1317 .serial_poll_response2 = tnt4882_serial_poll_response2, 1318 .serial_poll_status = tnt4882_serial_poll_status, 1319 .t1_delay = tnt4882_t1_delay, 1320 .return_to_local = tnt4882_return_to_local, 1321}; 1322 1323static struct gpib_interface ni_nec_isa_accel_interface = { 1324 .name = "ni_nec_isa_accel", 1325 .attach = ni_nec_isa_attach, 1326 .detach = ni_isa_detach, 1327 .read = tnt4882_accel_read, 1328 .write = tnt4882_accel_write, 1329 .command = tnt4882_command_unaccel, 1330 .take_control = tnt4882_take_control, 1331 .go_to_standby = tnt4882_go_to_standby, 1332 .request_system_control = tnt4882_request_system_control, 1333 .interface_clear = tnt4882_interface_clear, 1334 .remote_enable = tnt4882_remote_enable, 1335 .enable_eos = tnt4882_enable_eos, 1336 .disable_eos = tnt4882_disable_eos, 1337 .parallel_poll = tnt4882_parallel_poll, 1338 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1339 .parallel_poll_response = tnt4882_parallel_poll_response, 1340 .local_parallel_poll_mode = NULL, // XXX 1341 .line_status = NULL, 1342 .update_status = tnt4882_update_status, 1343 .primary_address = tnt4882_primary_address, 1344 .secondary_address = tnt4882_secondary_address, 1345 .serial_poll_response = tnt4882_serial_poll_response, 1346 .serial_poll_status = tnt4882_serial_poll_status, 1347 .t1_delay = tnt4882_t1_delay, 1348 .return_to_local = tnt4882_return_to_local, 1349}; 1350 1351static const struct pci_device_id tnt4882_pci_table[] = { 1352 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB)}, 1353 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB_PLUS)}, 1354 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_GPIB_PLUS2)}, 1355 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PXIGPIB)}, 1356 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PMCGPIB)}, 1357 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PCIEGPIB)}, 1358 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_NI_PCIE2GPIB)}, 1359 // support for Measurement Computing PCI-488 1360 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_MC_PCI488)}, 1361 {PCI_DEVICE(PCI_VENDOR_ID_NATINST, PCI_DEVICE_ID_CEC_NI_GPIB)}, 1362 { 0 } 1363}; 1364MODULE_DEVICE_TABLE(pci, tnt4882_pci_table); 1365 1366static struct pci_driver tnt4882_pci_driver = { 1367 .name = DRV_NAME, 1368 .id_table = tnt4882_pci_table, 1369 .probe = &tnt4882_pci_probe 1370}; 1371 1372#if 0 1373/* unused, will be needed when the driver is turned into a pnp_driver */ 1374static const struct pnp_device_id tnt4882_pnp_table[] = { 1375 {.id = "NICC601"}, 1376 {.id = ""} 1377}; 1378MODULE_DEVICE_TABLE(pnp, tnt4882_pnp_table); 1379#endif 1380 1381#ifdef CONFIG_GPIB_PCMCIA 1382static struct gpib_interface ni_pcmcia_interface; 1383static struct gpib_interface ni_pcmcia_accel_interface; 1384static int __init init_ni_gpib_cs(void); 1385static void __exit exit_ni_gpib_cs(void); 1386#endif 1387 1388static int __init tnt4882_init_module(void) 1389{ 1390 int result; 1391 1392 result = pci_register_driver(&tnt4882_pci_driver); 1393 if (result) { 1394 pr_err("pci_register_driver failed: error = %d\n", result); 1395 return result; 1396 } 1397 1398 result = gpib_register_driver(&ni_isa_interface, THIS_MODULE); 1399 if (result) { 1400 pr_err("gpib_register_driver failed: error = %d\n", result); 1401 goto err_isa; 1402 } 1403 1404 result = gpib_register_driver(&ni_isa_accel_interface, THIS_MODULE); 1405 if (result) { 1406 pr_err("gpib_register_driver failed: error = %d\n", result); 1407 goto err_isa_accel; 1408 } 1409 1410 result = gpib_register_driver(&ni_nat4882_isa_interface, THIS_MODULE); 1411 if (result) { 1412 pr_err("gpib_register_driver failed: error = %d\n", result); 1413 goto err_nat4882_isa; 1414 } 1415 1416 result = gpib_register_driver(&ni_nat4882_isa_accel_interface, THIS_MODULE); 1417 if (result) { 1418 pr_err("gpib_register_driver failed: error = %d\n", result); 1419 goto err_nat4882_isa_accel; 1420 } 1421 1422 result = gpib_register_driver(&ni_nec_isa_interface, THIS_MODULE); 1423 if (result) { 1424 pr_err("gpib_register_driver failed: error = %d\n", result); 1425 goto err_nec_isa; 1426 } 1427 1428 result = gpib_register_driver(&ni_nec_isa_accel_interface, THIS_MODULE); 1429 if (result) { 1430 pr_err("gpib_register_driver failed: error = %d\n", result); 1431 goto err_nec_isa_accel; 1432 } 1433 1434 result = gpib_register_driver(&ni_pci_interface, THIS_MODULE); 1435 if (result) { 1436 pr_err("gpib_register_driver failed: error = %d\n", result); 1437 goto err_pci; 1438 } 1439 1440 result = gpib_register_driver(&ni_pci_accel_interface, THIS_MODULE); 1441 if (result) { 1442 pr_err("gpib_register_driver failed: error = %d\n", result); 1443 goto err_pci_accel; 1444 } 1445 1446#ifdef CONFIG_GPIB_PCMCIA 1447 result = gpib_register_driver(&ni_pcmcia_interface, THIS_MODULE); 1448 if (result) { 1449 pr_err("gpib_register_driver failed: error = %d\n", result); 1450 goto err_pcmcia; 1451 } 1452 1453 result = gpib_register_driver(&ni_pcmcia_accel_interface, THIS_MODULE); 1454 if (result) { 1455 pr_err("gpib_register_driver failed: error = %d\n", result); 1456 goto err_pcmcia_accel; 1457 } 1458 1459 result = init_ni_gpib_cs(); 1460 if (result) { 1461 pr_err("pcmcia_register_driver failed: error = %d\n", result); 1462 goto err_pcmcia_driver; 1463 } 1464#endif 1465 1466 mite_init(); 1467 1468 return 0; 1469 1470#ifdef CONFIG_GPIB_PCMCIA 1471err_pcmcia_driver: 1472 gpib_unregister_driver(&ni_pcmcia_accel_interface); 1473err_pcmcia_accel: 1474 gpib_unregister_driver(&ni_pcmcia_interface); 1475err_pcmcia: 1476#endif 1477 gpib_unregister_driver(&ni_pci_accel_interface); 1478err_pci_accel: 1479 gpib_unregister_driver(&ni_pci_interface); 1480err_pci: 1481 gpib_unregister_driver(&ni_nec_isa_accel_interface); 1482err_nec_isa_accel: 1483 gpib_unregister_driver(&ni_nec_isa_interface); 1484err_nec_isa: 1485 gpib_unregister_driver(&ni_nat4882_isa_accel_interface); 1486err_nat4882_isa_accel: 1487 gpib_unregister_driver(&ni_nat4882_isa_interface); 1488err_nat4882_isa: 1489 gpib_unregister_driver(&ni_isa_accel_interface); 1490err_isa_accel: 1491 gpib_unregister_driver(&ni_isa_interface); 1492err_isa: 1493 pci_unregister_driver(&tnt4882_pci_driver); 1494 1495 return result; 1496} 1497 1498static void __exit tnt4882_exit_module(void) 1499{ 1500 gpib_unregister_driver(&ni_isa_interface); 1501 gpib_unregister_driver(&ni_isa_accel_interface); 1502 gpib_unregister_driver(&ni_nat4882_isa_interface); 1503 gpib_unregister_driver(&ni_nat4882_isa_accel_interface); 1504 gpib_unregister_driver(&ni_nec_isa_interface); 1505 gpib_unregister_driver(&ni_nec_isa_accel_interface); 1506 gpib_unregister_driver(&ni_pci_interface); 1507 gpib_unregister_driver(&ni_pci_accel_interface); 1508#ifdef CONFIG_GPIB_PCMCIA 1509 gpib_unregister_driver(&ni_pcmcia_interface); 1510 gpib_unregister_driver(&ni_pcmcia_accel_interface); 1511 exit_ni_gpib_cs(); 1512#endif 1513 1514 mite_cleanup(); 1515 1516 pci_unregister_driver(&tnt4882_pci_driver); 1517} 1518 1519#ifdef CONFIG_GPIB_PCMCIA 1520 1521#include <linux/kernel.h> 1522#include <linux/moduleparam.h> 1523#include <linux/ptrace.h> 1524#include <linux/timer.h> 1525#include <linux/io.h> 1526 1527#include <pcmcia/cistpl.h> 1528#include <pcmcia/cisreg.h> 1529#include <pcmcia/ds.h> 1530 1531static int ni_gpib_config(struct pcmcia_device *link); 1532static void ni_gpib_release(struct pcmcia_device *link); 1533static void ni_pcmcia_detach(struct gpib_board *board); 1534 1535/* 1536 * A linked list of "instances" of the dummy device. Each actual 1537 * PCMCIA card corresponds to one device instance, and is described 1538 * by one dev_link_t structure (defined in ds.h). 1539 * 1540 * You may not want to use a linked list for this -- for example, the 1541 * memory card driver uses an array of dev_link_t pointers, where minor 1542 * device numbers are used to derive the corresponding array index. 1543 * 1544 * I think this dev_list is obsolete but the pointer is needed to keep 1545 * the module instance for the ni_pcmcia_attach function. 1546 */ 1547 1548static struct pcmcia_device *curr_dev; 1549 1550struct local_info_t { 1551 struct pcmcia_device *p_dev; 1552 struct gpib_board *dev; 1553 int stop; 1554 struct bus_operations *bus; 1555}; 1556 1557/* 1558 * ni_gpib_probe() creates an "instance" of the driver, allocating 1559 * local data structures for one device. The device is registered 1560 * with Card Services. 1561 */ 1562 1563static int ni_gpib_probe(struct pcmcia_device *link) 1564{ 1565 struct local_info_t *info; 1566 //struct struct gpib_board *dev; 1567 1568 /* Allocate space for private device-specific data */ 1569 info = kzalloc(sizeof(*info), GFP_KERNEL); 1570 if (!info) 1571 return -ENOMEM; 1572 1573 info->p_dev = link; 1574 link->priv = info; 1575 1576 /* 1577 * General socket configuration defaults can go here. In this 1578 * client, we assume very little, and rely on the CIS for almost 1579 * everything. In most clients, many details (i.e., number, sizes, 1580 * and attributes of IO windows) are fixed by the nature of the 1581 * device, and can be hard-wired here. 1582 */ 1583 link->config_flags = CONF_ENABLE_IRQ | CONF_AUTO_SET_IO; 1584 1585 /* Register with Card Services */ 1586 curr_dev = link; 1587 return ni_gpib_config(link); 1588} 1589 1590/* 1591 * This deletes a driver "instance". The device is de-registered 1592 * with Card Services. If it has been released, all local data 1593 * structures are freed. Otherwise, the structures will be freed 1594 * when the device is released. 1595 */ 1596static void ni_gpib_remove(struct pcmcia_device *link) 1597{ 1598 struct local_info_t *info = link->priv; 1599 //struct struct gpib_board *dev = info->dev; 1600 1601 if (info->dev) 1602 ni_pcmcia_detach(info->dev); 1603 ni_gpib_release(link); 1604 1605 //free_netdev(dev); 1606 kfree(info); 1607} 1608 1609static int ni_gpib_config_iteration(struct pcmcia_device *link, void *priv_data) 1610{ 1611 int retval; 1612 1613 retval = pcmcia_request_io(link); 1614 if (retval != 0) 1615 return retval; 1616 1617 return 0; 1618} 1619 1620/* 1621 * ni_gpib_config() is scheduled to run after a CARD_INSERTION event 1622 * is received, to configure the PCMCIA socket, and to make the 1623 * device available to the system. 1624 */ 1625static int ni_gpib_config(struct pcmcia_device *link) 1626{ 1627 //struct local_info_t *info = link->priv; 1628 //struct gpib_board *dev = info->dev; 1629 int last_ret; 1630 1631 last_ret = pcmcia_loop_config(link, &ni_gpib_config_iteration, NULL); 1632 if (last_ret) { 1633 dev_warn(&link->dev, "no configuration found\n"); 1634 ni_gpib_release(link); 1635 return last_ret; 1636 } 1637 1638 last_ret = pcmcia_enable_device(link); 1639 if (last_ret) { 1640 ni_gpib_release(link); 1641 return last_ret; 1642 } 1643 return 0; 1644} /* ni_gpib_config */ 1645 1646/* 1647 * After a card is removed, ni_gpib_release() will unregister the 1648 * device, and release the PCMCIA configuration. If the device is 1649 * still open, this will be postponed until it is closed. 1650 */ 1651static void ni_gpib_release(struct pcmcia_device *link) 1652{ 1653 pcmcia_disable_device(link); 1654} /* ni_gpib_release */ 1655 1656static int ni_gpib_suspend(struct pcmcia_device *link) 1657{ 1658 //struct local_info_t *info = link->priv; 1659 //struct struct gpib_board *dev = info->dev; 1660 1661 if (link->open) 1662 dev_warn(&link->dev, "Device still open\n"); 1663 //netif_device_detach(dev); 1664 1665 return 0; 1666} 1667 1668static int ni_gpib_resume(struct pcmcia_device *link) 1669{ 1670 //struct local_info_t *info = link->priv; 1671 //struct struct gpib_board *dev = info->dev; 1672 1673 /*if (link->open) { 1674 * ni_gpib_probe(dev); / really? 1675 * //netif_device_attach(dev); 1676 *} 1677 */ 1678 return ni_gpib_config(link); 1679} 1680 1681static struct pcmcia_device_id ni_pcmcia_ids[] = { 1682 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x4882), 1683 PCMCIA_DEVICE_MANF_CARD(0x010b, 0x0c71), // NI PCMCIA-GPIB+ 1684 PCMCIA_DEVICE_NULL 1685}; 1686 1687MODULE_DEVICE_TABLE(pcmcia, ni_pcmcia_ids); 1688 1689static struct pcmcia_driver ni_gpib_cs_driver = { 1690 .name = "ni_gpib_cs", 1691 .owner = THIS_MODULE, 1692 .drv = { .name = "ni_gpib_cs", }, 1693 .id_table = ni_pcmcia_ids, 1694 .probe = ni_gpib_probe, 1695 .remove = ni_gpib_remove, 1696 .suspend = ni_gpib_suspend, 1697 .resume = ni_gpib_resume, 1698}; 1699 1700static int __init init_ni_gpib_cs(void) 1701{ 1702 return pcmcia_register_driver(&ni_gpib_cs_driver); 1703} 1704 1705static void __exit exit_ni_gpib_cs(void) 1706{ 1707 pcmcia_unregister_driver(&ni_gpib_cs_driver); 1708} 1709 1710static const int pcmcia_gpib_iosize = 32; 1711 1712static int ni_pcmcia_attach(struct gpib_board *board, const struct gpib_board_config *config) 1713{ 1714 struct local_info_t *info; 1715 struct tnt4882_priv *tnt_priv; 1716 struct nec7210_priv *nec_priv; 1717 int isr_flags = IRQF_SHARED; 1718 int retval; 1719 1720 if (!curr_dev) 1721 return -ENODEV; 1722 1723 info = curr_dev->priv; 1724 info->dev = board; 1725 1726 board->status = 0; 1727 1728 if (tnt4882_allocate_private(board)) 1729 return -ENOMEM; 1730 1731 tnt_priv = board->private_data; 1732 nec_priv = &tnt_priv->nec7210_priv; 1733 nec_priv->type = TNT4882; 1734 nec_priv->read_byte = nec7210_locking_ioport_read_byte; 1735 nec_priv->write_byte = nec7210_locking_ioport_write_byte; 1736 nec_priv->offset = atgpib_reg_offset; 1737 1738 if (!request_region(curr_dev->resource[0]->start, resource_size(curr_dev->resource[0]), 1739 DRV_NAME)) 1740 return -ENOMEM; 1741 1742 nec_priv->mmiobase = ioport_map(curr_dev->resource[0]->start, 1743 resource_size(curr_dev->resource[0])); 1744 if (!nec_priv->mmiobase) 1745 return -ENOMEM; 1746 1747 // get irq 1748 retval = request_irq(curr_dev->irq, tnt4882_interrupt, isr_flags, DRV_NAME, board); 1749 if (retval) { 1750 dev_err(board->gpib_dev, "failed to obtain PCMCIA irq %d\n", curr_dev->irq); 1751 return retval; 1752 } 1753 tnt_priv->irq = curr_dev->irq; 1754 1755 tnt4882_init(tnt_priv, board); 1756 1757 return 0; 1758} 1759 1760static void ni_pcmcia_detach(struct gpib_board *board) 1761{ 1762 struct tnt4882_priv *tnt_priv = board->private_data; 1763 struct nec7210_priv *nec_priv; 1764 1765 if (tnt_priv) { 1766 nec_priv = &tnt_priv->nec7210_priv; 1767 if (tnt_priv->irq) 1768 free_irq(tnt_priv->irq, board); 1769 if (nec_priv->mmiobase) 1770 ioport_unmap(nec_priv->mmiobase); 1771 if (nec_priv->iobase) { 1772 tnt4882_board_reset(tnt_priv, board); 1773 release_region(nec_priv->iobase, pcmcia_gpib_iosize); 1774 } 1775 } 1776 tnt4882_free_private(board); 1777} 1778 1779static struct gpib_interface ni_pcmcia_interface = { 1780 .name = "ni_pcmcia", 1781 .attach = ni_pcmcia_attach, 1782 .detach = ni_pcmcia_detach, 1783 .read = tnt4882_accel_read, 1784 .write = tnt4882_accel_write, 1785 .command = tnt4882_command, 1786 .take_control = tnt4882_take_control, 1787 .go_to_standby = tnt4882_go_to_standby, 1788 .request_system_control = tnt4882_request_system_control, 1789 .interface_clear = tnt4882_interface_clear, 1790 .remote_enable = tnt4882_remote_enable, 1791 .enable_eos = tnt4882_enable_eos, 1792 .disable_eos = tnt4882_disable_eos, 1793 .parallel_poll = tnt4882_parallel_poll, 1794 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1795 .parallel_poll_response = tnt4882_parallel_poll_response, 1796 .local_parallel_poll_mode = NULL, // XXX 1797 .line_status = tnt4882_line_status, 1798 .update_status = tnt4882_update_status, 1799 .primary_address = tnt4882_primary_address, 1800 .secondary_address = tnt4882_secondary_address, 1801 .serial_poll_response = tnt4882_serial_poll_response, 1802 .serial_poll_status = tnt4882_serial_poll_status, 1803 .t1_delay = tnt4882_t1_delay, 1804 .return_to_local = tnt4882_return_to_local, 1805}; 1806 1807static struct gpib_interface ni_pcmcia_accel_interface = { 1808 .name = "ni_pcmcia_accel", 1809 .attach = ni_pcmcia_attach, 1810 .detach = ni_pcmcia_detach, 1811 .read = tnt4882_accel_read, 1812 .write = tnt4882_accel_write, 1813 .command = tnt4882_command, 1814 .take_control = tnt4882_take_control, 1815 .go_to_standby = tnt4882_go_to_standby, 1816 .request_system_control = tnt4882_request_system_control, 1817 .interface_clear = tnt4882_interface_clear, 1818 .remote_enable = tnt4882_remote_enable, 1819 .enable_eos = tnt4882_enable_eos, 1820 .disable_eos = tnt4882_disable_eos, 1821 .parallel_poll = tnt4882_parallel_poll, 1822 .parallel_poll_configure = tnt4882_parallel_poll_configure, 1823 .parallel_poll_response = tnt4882_parallel_poll_response, 1824 .local_parallel_poll_mode = NULL, // XXX 1825 .line_status = tnt4882_line_status, 1826 .update_status = tnt4882_update_status, 1827 .primary_address = tnt4882_primary_address, 1828 .secondary_address = tnt4882_secondary_address, 1829 .serial_poll_response = tnt4882_serial_poll_response, 1830 .serial_poll_status = tnt4882_serial_poll_status, 1831 .t1_delay = tnt4882_t1_delay, 1832 .return_to_local = tnt4882_return_to_local, 1833}; 1834 1835#endif // CONFIG_GPIB_PCMCIA 1836 1837module_init(tnt4882_init_module); 1838module_exit(tnt4882_exit_module);
~/
Read-only file preview.