ines_priv
static inline unsigned int ines_inb(struct ines_priv *priv, unsigned int register_number)
static inline void ines_outb(struct ines_priv *priv, unsigned int value,
static ssize_t pio_read(struct gpib_board *board, struct ines_priv *ines_priv, u8 *buffer,
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
num_in_fifo_bytes(ines_priv) ||
num_fifo_bytes = num_in_fifo_bytes(ines_priv);
num_in_fifo_bytes(ines_priv) == 0)
struct ines_priv *ines_priv;
ines_priv = board->private_data;
nec_priv = &ines_priv->nec7210_priv;
ines_priv->irq = curr_dev->irq;
struct ines_priv *ines_priv;
ines_priv = board->private_data;
ines_online(ines_priv, board, 0);
struct ines_priv *ines_priv;
ines_priv = board->private_data;
ines_online(ines_priv, board, 1);
struct ines_priv *ines_priv = board->private_data;
if (ines_priv) {
nec_priv = &ines_priv->nec7210_priv;
if (ines_priv->irq)
free_irq(ines_priv->irq, board);
struct ines_priv *ines_priv = board->private_data;
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
ines_priv->extend_mode_bits |= LAST_BYTE_HANDLING_BIT;
ines_priv->extend_mode_bits &= ~XFER_COUNTER_OUTPUT_BIT & ~XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
counter_setting = length - num_in_fifo_bytes(ines_priv);
ines_set_xfer_counter(ines_priv, length);
ines_priv->extend_mode_bits |= XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
retval = pio_read(board, ines_priv, buffer, length, bytes_read);
ines_priv->extend_mode_bits &= ~XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
static inline unsigned short num_out_fifo_bytes(struct ines_priv *ines_priv)
return ines_inb(ines_priv, OUT_FIFO_COUNT);
static int ines_write_wait(struct gpib_board *board, struct ines_priv *ines_priv,
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
num_out_fifo_bytes(ines_priv) < fifo_threshold ||
struct ines_priv *ines_priv = board->private_data;
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
ines_priv->extend_mode_bits |= XFER_COUNTER_OUTPUT_BIT;
ines_priv->extend_mode_bits &= ~XFER_COUNTER_ENABLE_BIT;
ines_priv->extend_mode_bits &= ~LAST_BYTE_HANDLING_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
ines_set_xfer_counter(ines_priv, length);
ines_priv->extend_mode_bits |= LAST_BYTE_HANDLING_BIT;
ines_priv->extend_mode_bits |= XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
retval = ines_write_wait(board, ines_priv, out_fifo_size);
num_bytes = out_fifo_size - num_out_fifo_bytes(ines_priv);
ines_priv->extend_mode_bits &= ~XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
*bytes_written = length - num_out_fifo_bytes(ines_priv);
retval = ines_write_wait(board, ines_priv, 1);
ines_priv->extend_mode_bits &= ~XFER_COUNTER_ENABLE_BIT;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
*bytes_written = length - num_out_fifo_bytes(ines_priv);
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *ines_priv;
ines_priv = board->private_data;
bcm_bits = ines_inb(ines_priv, BUS_CONTROL_MONITOR);
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
struct ines_priv *priv = board->private_data;
static void ines_set_xfer_counter(struct ines_priv *priv, unsigned int count)
struct ines_priv *priv;
board->private_data = kzalloc_obj(struct ines_priv);
struct ines_priv *ines_priv;
ines_priv = board->private_data;
nec_priv = &ines_priv->nec7210_priv;
ines_priv->pci_chip_type = PCI_CHIP_NONE;
static void ines_online(struct ines_priv *ines_priv, const struct gpib_board *board, int use_accel)
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
ines_outb(ines_priv, 0, XDMA_CONTROL);
ines_priv->extend_mode_bits = 0;
ines_outb(ines_priv, ines_priv->extend_mode_bits, EXTEND_MODE);
ines_outb(ines_priv, 0x80, OUT_FIFO_WATERMARK);
ines_outb(ines_priv, 0x80, IN_FIFO_WATERMARK);
ines_outb(ines_priv, IFC_ACTIVE_BIT | ATN_ACTIVE_BIT |
ines_outb(ines_priv, IN_FIFO_WATERMARK_BIT | IN_FIFO_FULL_BIT |
struct ines_priv *ines_priv = board->private_data;
ines_outb(ines_priv, IFC_ACTIVE_BIT | FIFO_ERROR_BIT, IMR3);
ines_outb(ines_priv, 0, IMR4);
struct nec7210_priv *nec_priv = &ines_priv->nec7210_priv;
struct ines_priv *ines_priv;
ines_priv = board->private_data;
nec_priv = &ines_priv->nec7210_priv;
ines_priv->pci_device = NULL;
for (i = 0; i < num_pci_chips && !ines_priv->pci_device; i++) {
ines_priv->pci_device = pdev;
if (!ines_priv->pci_device) {
if (pci_enable_device(ines_priv->pci_device)) {
if (pci_request_regions(ines_priv->pci_device, DRV_NAME))
nec_priv->iobase = pci_resource_start(ines_priv->pci_device,
ines_priv->pci_chip_type = found_id.pci_chip_type;
switch (ines_priv->pci_chip_type) {
ines_priv->plx_iobase = pci_resource_start(ines_priv->pci_device, 1);
ines_priv->amcc_iobase = pci_resource_start(ines_priv->pci_device, 0);
pci_release_regions(ines_priv->pci_device);
if (ines_priv->pci_chip_type == PCI_CHIP_QUANCOM) {
ines_outb(ines_priv, nec_priv->auxb_bits, AUXMR);
if (request_irq(ines_priv->pci_device->irq, ines_pci_interrupt, isr_flags,
dev_err(board->gpib_dev, "can't request IRQ %d\n", ines_priv->pci_device->irq);
ines_priv->irq = ines_priv->pci_device->irq;
switch (ines_priv->pci_chip_type) {
ines_priv->plx_iobase + PLX9050_INTCSR_REG);
outl(bits, ines_priv->amcc_iobase + AMCC_PASS_THRU_REG);
outl(AMCC_ADDON_INTR_ENABLE_BIT, ines_priv->amcc_iobase + AMCC_INTCS_REG);
struct ines_priv *ines_priv;
ines_priv = board->private_data;
ines_online(ines_priv, board, 0);
struct ines_priv *ines_priv;
ines_priv = board->private_data;
ines_online(ines_priv, board, 1);
struct ines_priv *ines_priv;
ines_priv = board->private_data;
nec_priv = &ines_priv->nec7210_priv;
ines_priv->irq = config->ibirq;
ines_online(ines_priv, board, 1);
struct ines_priv *ines_priv = board->private_data;
if (ines_priv) {
nec_priv = &ines_priv->nec7210_priv;
if (ines_priv->irq) {
switch (ines_priv->pci_chip_type) {
if (ines_priv->plx_iobase)
outl(0, ines_priv->plx_iobase + PLX9050_INTCSR_REG);
free_irq(ines_priv->irq, board);
pci_release_regions(ines_priv->pci_device);
if (ines_priv->pci_device)
static inline unsigned short num_in_fifo_bytes(struct ines_priv *ines_priv)
pci_dev_put(ines_priv->pci_device);
struct ines_priv *ines_priv = board->private_data;
if (ines_priv) {
nec_priv = &ines_priv->nec7210_priv;
if (ines_priv->irq)
free_irq(ines_priv->irq, board);
return ines_inb(ines_priv, IN_FIFO_COUNT);