| /* SPDX-License-Identifier: GPL-2.0 */ |
| |
| /*************************************************************************** |
| * copyright : (C) 2002, 2004 by Frank Mori Hess |
| ***************************************************************************/ |
| |
| #ifndef _TNT4882_REGISTERS_H |
| #define _TNT4882_REGISTERS_H |
| |
| // tnt4882 register offsets |
| enum { |
| ACCWR = 0x5, |
| // offset of auxiliary command register in 9914 mode |
| AUXCR = 0x6, |
| INTRT = 0x7, |
| // register number for auxiliary command register when swap bit is set (9914 mode) |
| SWAPPED_AUXCR = 0xa, |
| HSSEL = 0xd, // handshake select register |
| CNT2 = 0x9, |
| CNT3 = 0xb, |
| CFG = 0x10, |
| SASR = 0x1b, |
| IMR0 = 0x1d, |
| IMR3 = 0x12, |
| CNT0 = 0x14, |
| CNT1 = 0x16, |
| KEYREG = 0x17, // key control register (7210 mode only) |
| CSR = KEYREG, |
| FIFOB = 0x18, |
| FIFOA = 0x19, |
| CCR = 0x1a, // carry cycle register |
| CMDR = 0x1c, // command register |
| TIMER = 0x1e, // timer register |
| |
| STS1 = 0x10, // T488 Status Register 1 |
| STS2 = 0x1c, // T488 Status Register 2 |
| ISR0 = IMR0, |
| ISR3 = 0x1a, // T488 Interrupt Status Register 3 |
| BCR = 0x1f, // bus control/status register |
| BSR = BCR, |
| }; |
| |
| enum { |
| tnt_pagein_offset = 0x11, |
| }; |
| |
| /*============================================================*/ |
| |
| /* TURBO-488 registers bit definitions */ |
| |
| enum bus_control_status_bits { |
| BCSR_REN_BIT = 0x1, |
| BCSR_IFC_BIT = 0x2, |
| BCSR_SRQ_BIT = 0x4, |
| BCSR_EOI_BIT = 0x8, |
| BCSR_NRFD_BIT = 0x10, |
| BCSR_NDAC_BIT = 0x20, |
| BCSR_DAV_BIT = 0x40, |
| BCSR_ATN_BIT = 0x80, |
| }; |
| |
| /* CFG -- Configuration Register (write only) */ |
| enum cfg_bits { |
| TNT_COMMAND = 0x80, /* bytes are command bytes instead of data bytes |
| * (tnt4882 one-chip and newer only?) |
| */ |
| TNT_TLCHE = (1 << 6), /* halt transfer on imr0, imr1, or imr2 interrupt */ |
| TNT_IN = (1 << 5), /* transfer is GPIB read */ |
| TNT_A_B = (1 << 4), /* order to use fifos 1=fifo A first(big endian), |
| * 0=fifo b first(little endian) |
| */ |
| TNT_CCEN = (1 << 3), /* enable carry cycle */ |
| TNT_TMOE = (1 << 2), /* enable CPU bus time limit */ |
| TNT_TIM_BYTN = (1 << 1), /* tmot reg is: 1=125ns clocks, 0=num bytes */ |
| TNT_B_16BIT = (1 << 0), /* 1=FIFO is 16-bit register, 0=8-bit */ |
| }; |
| |
| /* CMDR -- Command Register */ |
| enum cmdr_bits { |
| CLRSC = 0x2, /* clear the system controller bit */ |
| SETSC = 0x3, /* set the system controller bit */ |
| GO = 0x4, /* start fifos */ |
| STOP = 0x8, /* stop fifos */ |
| RESET_FIFO = 0x10, /* reset the FIFOs */ |
| SOFT_RESET = 0x22, /* issue a software reset */ |
| HARD_RESET = 0x40 /* 500x only? */ |
| }; |
| |
| /* HSSEL -- handshake select register (write only) */ |
| enum hssel_bits { |
| TNT_ONE_CHIP_BIT = 0x1, |
| NODMA = 0x10, |
| TNT_GO2SIDS_BIT = 0x20, |
| }; |
| |
| /* IMR0 -- Interrupt Mode Register 0 */ |
| enum imr0_bits { |
| TNT_SYNCIE_BIT = 0x1, /* handshake sync */ |
| TNT_TOIE_BIT = 0x2, /* timeout */ |
| TNT_ATNIE_BIT = 0x4, /* ATN interrupt */ |
| TNT_IFCIE_BIT = 0x8, /* interface clear interrupt */ |
| TNT_BTO_BIT = 0x10, /* byte timeout */ |
| TNT_NLEN_BIT = 0x20, /* treat new line as EOS char */ |
| TNT_STBOIE_BIT = 0x40, /* status byte out */ |
| TNT_IMR0_ALWAYS_BITS = 0x80, /* always set this bit on write */ |
| }; |
| |
| /* ISR0 -- Interrupt Status Register 0 */ |
| enum isr0_bits { |
| TNT_SYNC_BIT = 0x1, /* handshake sync */ |
| TNT_TO_BIT = 0x2, /* timeout */ |
| TNT_ATNI_BIT = 0x4, /* ATN interrupt */ |
| TNT_IFCI_BIT = 0x8, /* interface clear interrupt */ |
| TNT_EOS_BIT = 0x10, /* end of string */ |
| TNT_NL_BIT = 0x20, /* new line receive */ |
| TNT_STBO_BIT = 0x40, /* status byte out */ |
| TNT_NBA_BIT = 0x80, /* new byte available */ |
| }; |
| |
| /* ISR3 -- Interrupt Status Register 3 (read only) */ |
| enum isr3_bits { |
| HR_DONE = (1 << 0), /* transfer done */ |
| HR_TLCI = (1 << 1), /* isr0, isr1, or isr2 interrupt asserted */ |
| HR_NEF = (1 << 2), /* NOT empty fifo */ |
| HR_NFF = (1 << 3), /* NOT full fifo */ |
| HR_STOP = (1 << 4), /* fifo empty or STOP command issued */ |
| HR_SRQI_CIC = (1 << 5), /* SRQ asserted and we are CIC (500x only?)*/ |
| HR_INTR = (1 << 7), /* isr3 interrupt active */ |
| }; |
| |
| enum keyreg_bits { |
| MSTD = 0x20, /* enable 350ns T1 delay */ |
| }; |
| |
| /* STS1 -- Status Register 1 (read only) */ |
| enum sts1_bits { |
| S_DONE = 0x80, /* DMA done */ |
| S_SC = 0x40, /* is system controller */ |
| S_IN = 0x20, /* DMA in (to memory) */ |
| S_DRQ = 0x10, /* DRQ line (for diagnostics) */ |
| S_STOP = 0x08, /* DMA stopped */ |
| S_NDAV = 0x04, /* inverse of DAV */ |
| S_HALT = 0x02, /* status of transfer machine */ |
| S_GSYNC = 0x01, /* indicates if GPIB is in sync w I/O */ |
| }; |
| |
| /* STS2 -- Status Register 2 */ |
| enum sts2_bits { |
| AFFN = (1 << 3), /* "A full FIFO NOT" (0=FIFO full) */ |
| AEFN = (1 << 2), /* "A empty FIFO NOT" (0=FIFO empty) */ |
| BFFN = (1 << 1), /* "B full FIFO NOT" (0=FIFO full) */ |
| BEFN = (1 << 0), /* "B empty FIFO NOT" (0=FIFO empty) */ |
| }; |
| |
| // Auxiliary commands |
| enum tnt4882_aux_cmds { |
| AUX_9914 = 0x15, // switch to 9914 mode |
| AUX_REQT = 0x18, |
| AUX_REQF = 0x19, |
| AUX_PAGEIN = 0x50, // page in alternate registers |
| AUX_HLDI = 0x51, // rfd holdoff immediately |
| AUX_CLEAR_END = 0x55, |
| AUX_7210 = 0x99, // switch to 7210 mode |
| }; |
| |
| enum tnt4882_aux_regs { |
| AUXRG = 0x40, |
| AUXRI = 0xe0, |
| }; |
| |
| enum auxg_bits { |
| /* no talking when no listeners bit (prevents bus errors when data written at wrong time) */ |
| NTNL_BIT = 0x8, |
| RPP2_BIT = 0x4, /* set/clear local rpp message */ |
| CHES_BIT = 0x1, /*clear holdoff on end select bit*/ |
| }; |
| |
| enum auxi_bits { |
| SISB = 0x1, // static interrupt bits (don't clear isr1, isr2 on read) |
| PP2 = 0x4, // ignore remote parallel poll configuration |
| USTD = 0x8, // ultra short (1100 nanosec) T1 delay |
| }; |
| |
| enum sasr_bits { |
| ACRDY_BIT = 0x4, /* acceptor ready state */ |
| ADHS_BIT = 0x8, /* acceptor data holdoff state */ |
| ANHS2_BIT = 0x10, /* acceptor not ready holdoff immediately state */ |
| ANHS1_BIT = 0x20, /* acceptor not ready holdoff state */ |
| AEHS_BIT = 0x40, /* acceptor end holdoff state */ |
| }; |
| |
| #endif // _TNT4882_REGISTERS_H |