| /* SPDX-License-Identifier: GPL-2.0 */ | |
| /*************************************************************************** | |
| * Header for ines GPIB boards | |
| * copyright : (C) 2002 by Frank Mori Hess | |
| ***************************************************************************/ | |
| #ifndef _INES_GPIB_H | |
| #define _INES_GPIB_H | |
| #include "nec7210.h" | |
| #include "gpibP.h" | |
| #include "plx9050.h" | |
| #include "amcc5920.h" | |
| #include "quancom_pci.h" | |
| #include <linux/interrupt.h> | |
| enum ines_pci_chip { | |
| PCI_CHIP_NONE, | |
| PCI_CHIP_PLX9050, | |
| PCI_CHIP_AMCC5920, | |
| PCI_CHIP_QUANCOM, | |
| PCI_CHIP_QUICKLOGIC5030, | |
| PCI_CHIP_INES_72130, | |
| }; | |
| struct ines_priv { | |
| struct nec7210_priv nec7210_priv; | |
| struct pci_dev *pci_device; | |
| // base address for plx9052 pci chip | |
| unsigned long plx_iobase; | |
| // base address for amcc5920 pci chip | |
| unsigned long amcc_iobase; | |
| unsigned int irq; | |
| enum ines_pci_chip pci_chip_type; | |
| u8 extend_mode_bits; | |
| }; | |
| /* inb/outb wrappers */ | |
| static inline unsigned int ines_inb(struct ines_priv *priv, unsigned int register_number) | |
| { | |
| return inb(priv->nec7210_priv.iobase + | |
| register_number * priv->nec7210_priv.offset); | |
| } | |
| static inline void ines_outb(struct ines_priv *priv, unsigned int value, | |
| unsigned int register_number) | |
| { | |
| outb(value, priv->nec7210_priv.iobase + | |
| register_number * priv->nec7210_priv.offset); | |
| } | |
| enum ines_regs { | |
| // read | |
| FIFO_STATUS = 0x8, | |
| ISR3 = 0x9, | |
| ISR4 = 0xa, | |
| IN_FIFO_COUNT = 0x10, | |
| OUT_FIFO_COUNT = 0x11, | |
| EXTEND_STATUS = 0xf, | |
| // write | |
| XDMA_CONTROL = 0x8, | |
| IMR3 = ISR3, | |
| IMR4 = ISR4, | |
| IN_FIFO_WATERMARK = IN_FIFO_COUNT, | |
| OUT_FIFO_WATERMARK = OUT_FIFO_COUNT, | |
| EXTEND_MODE = 0xf, | |
| // read-write | |
| XFER_COUNT_LOWER = 0xb, | |
| XFER_COUNT_UPPER = 0xc, | |
| BUS_CONTROL_MONITOR = 0x13, | |
| }; | |
| enum isr3_imr3_bits { | |
| HW_TIMEOUT_BIT = 0x1, | |
| XFER_COUNT_BIT = 0x2, | |
| CMD_RECEIVED_BIT = 0x4, | |
| TCT_RECEIVED_BIT = 0x8, | |
| IFC_ACTIVE_BIT = 0x10, | |
| ATN_ACTIVE_BIT = 0x20, | |
| FIFO_ERROR_BIT = 0x40, | |
| }; | |
| enum isr4_imr4_bits { | |
| IN_FIFO_WATERMARK_BIT = 0x1, | |
| OUT_FIFO_WATERMARK_BIT = 0x2, | |
| IN_FIFO_FULL_BIT = 0x4, | |
| OUT_FIFO_EMPTY_BIT = 0x8, | |
| IN_FIFO_READY_BIT = 0x10, | |
| OUT_FIFO_READY_BIT = 0x20, | |
| IN_FIFO_EXIT_WATERMARK_BIT = 0x40, | |
| OUT_FIFO_EXIT_WATERMARK_BIT = 0x80, | |
| }; | |
| enum extend_mode_bits { | |
| TR3_TRIG_ENABLE_BIT = 0x1, // enable generation of trigger pulse T/R3 pin | |
| // clear message available status bit when chip writes byte with EOI true | |
| MAV_ENABLE_BIT = 0x2, | |
| EOS1_ENABLE_BIT = 0x4, // enable eos register 1 | |
| EOS2_ENABLE_BIT = 0x8, // enable eos register 2 | |
| EOIDIS_BIT = 0x10, // disable EOI interrupt when doing rfd holdoff on end? | |
| XFER_COUNTER_ENABLE_BIT = 0x20, | |
| XFER_COUNTER_OUTPUT_BIT = 0x40, // use counter for output, clear for input | |
| // when xfer counter hits 0, assert EOI on write or RFD holdoff on read | |
| LAST_BYTE_HANDLING_BIT = 0x80, | |
| }; | |
| enum extend_status_bits { | |
| OUTPUT_MESSAGE_IN_PROGRESS_BIT = 0x1, | |
| SCSEL_BIT = 0x2, // statue of SCSEL pin | |
| LISTEN_DISABLED = 0x4, | |
| IN_FIFO_EMPTY_BIT = 0x8, | |
| OUT_FIFO_FULL_BIT = 0x10, | |
| }; | |
| // ines adds fifo enable bits to address mode register | |
| enum ines_admr_bits { | |
| IN_FIFO_ENABLE_BIT = 0x8, | |
| OUT_FIFO_ENABLE_BIT = 0x4, | |
| }; | |
| enum xdma_control_bits { | |
| DMA_OUTPUT_BIT = 0x1, // use dma for output, clear for input | |
| ENABLE_SYNC_DMA_BIT = 0x2, | |
| DMA_ACCESS_EVERY_CYCLE = 0x4, // dma accesses fifo every cycle, clear for every other cycle | |
| DMA_16BIT = 0x8, // clear for 8 bit transfers | |
| }; | |
| enum bus_control_monitor_bits { | |
| BCM_DAV_BIT = 0x1, | |
| BCM_NRFD_BIT = 0x2, | |
| BCM_NDAC_BIT = 0x4, | |
| BCM_IFC_BIT = 0x8, | |
| BCM_ATN_BIT = 0x10, | |
| BCM_SRQ_BIT = 0x20, | |
| BCM_REN_BIT = 0x40, | |
| BCM_EOI_BIT = 0x80, | |
| }; | |
| enum ines_aux_reg_bits { | |
| INES_AUXD = 0x40, | |
| }; | |
| enum ines_aux_cmds { | |
| INES_RFD_HLD_IMMEDIATE = 0x4, | |
| INES_AUX_CLR_OUT_FIFO = 0x5, | |
| INES_AUX_CLR_IN_FIFO = 0x6, | |
| INES_AUX_XMODE = 0xa, | |
| }; | |
| enum ines_auxd_bits { | |
| INES_FOLLOWING_T1_MASK = 0x3, | |
| INES_FOLLOWING_T1_500ns = 0x0, | |
| INES_FOLLOWING_T1_350ns = 0x1, | |
| INES_FOLLOWING_T1_250ns = 0x2, | |
| INES_INITIAL_TI_MASK = 0xc, | |
| INES_INITIAL_T1_2000ns = 0x0, | |
| INES_INITIAL_T1_1100ns = 0x4, | |
| INES_INITIAL_T1_700ns = 0x8, | |
| INES_T6_2us = 0x0, | |
| INES_T6_50us = 0x10, | |
| }; | |
| enum ines72130_regs { | |
| BUS_STATUS_REG = 0xc, | |
| }; | |
| enum ines_72130_bus_status_bits { | |
| BSR_NRFD_BIT = 0x1, | |
| BSR_NDAC_BIT = 0x2, | |
| BSR_DAV_BIT = 0x4, | |
| BSR_EOI_BIT = 0x8, | |
| BSR_SRQ_BIT = 0x10, | |
| BSR_ATN_BIT = 0x20, | |
| BSR_REN_BIT = 0x40, | |
| BSR_IFC_BIT = 0x80, | |
| }; | |
| #endif // _INES_GPIB_H |