/* $OpenBSD: fgareg.h,v 1.1 1999/07/23 19:11:25 jason Exp $ */ /* * Copyright (c) 1999 Jason L. Wright (jason@thought.net) * All rights reserved. * * This software was developed by Jason L. Wright under contract with * RTMX Incorporated (http://www.rtmx.com). * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by Jason L. Wright for * RTMX Incorporated. * 4. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Register definitions for Force Gate Array 5000 * Definitions from: "Force Gate Array-5000 Technical Reference Manual" * revision 1, April 1995, Force Computers, Inc./GmbH. */ /* * FGA Register structure. * The register set takes up 512 bytes and is found in to sbus slot 5's * address space (you can change that). * Most of the bit registers use a negative logic sense: ie. writing * a zero means "setting the bit" and writing a one means "clearing" * the bit. */ struct fga_regs { volatile u_int32_t sbus_base; /* sbus base address reg */ volatile u_int32_t vme_range[16]; /* master range registers */ volatile u_int8_t _unused0[32]; volatile u_int8_t vme_master_cap[16];/* master capability */ volatile u_int8_t _unused1[8]; volatile u_int8_t sbus_ssel[8]; /* sbus slot select */ volatile u_int8_t _unused2[15]; volatile u_int8_t viack_emu1; /* vme intr ack emulation */ volatile u_int8_t _unused3[1]; volatile u_int8_t viack_emu2; volatile u_int8_t _unused4[1]; volatile u_int8_t viack_emu3; volatile u_int8_t _unused5[1]; volatile u_int8_t viack_emu4; volatile u_int8_t _unused6[1]; volatile u_int8_t viack_emu5; volatile u_int8_t _unused7[1]; volatile u_int8_t viack_emu6; volatile u_int8_t _unused8[1]; volatile u_int8_t viack_emu7; volatile u_int8_t _unused9[16]; volatile u_int8_t sbus_cap; /* sbus capabilities */ volatile u_int8_t sbus_retry_ctrl; /* sbus retry control */ volatile u_int8_t sbus_rerun_ctrl; /* sbus rerun control */ volatile u_int8_t sbus_cap2; /* sbus capabilities 2 */ volatile u_int32_t swpar; /* sbus write post err addr */ volatile u_int32_t slerr; /* sbus late err addr */ volatile u_int32_t _unused10; volatile u_int8_t vme_base; /* vme slave base addr */ volatile u_int8_t vme_ext[3]; /* vme slave addr extension */ volatile u_int32_t sbus_range[3]; /* vme->sbus slave addr */ volatile u_int16_t ibox_addr; /* ibox address */ volatile u_int16_t ibox_ctrl; /* ibox control */ volatile u_int8_t fmb_ctrl; /* FMB control reg */ volatile u_int8_t fmb_addr; /* FMB addresss reg */ volatile u_int8_t _unused11[10]; volatile u_int8_t vme_cap; /* vme capabilities */ volatile u_int8_t vmebus_handshake; /* vme handshake mode */ volatile u_int8_t _unused12[2]; volatile u_int32_t vwpar; /* vme write post addr */ volatile u_int8_t _unused13[8]; volatile u_int16_t dma_ctrl; /* dma control */ volatile u_int8_t dma_mode; /* dma mode */ volatile u_int8_t dma_stat; /* dma status */ volatile u_int32_t dma_src; /* dma source address */ volatile u_int32_t dma_dst; /* dma destination address */ volatile u_int32_t dma_captl; /* dma capabilities/length */ volatile u_int8_t _unused14[32]; volatile u_int8_t mbox[16]; /* mailboxes */ volatile u_int8_t sem[48]; /* semaphores */ volatile u_int8_t _unused15[32]; volatile u_int8_t id[4]; /* revision/id register */ volatile u_int8_t gcsr; /* global control/status */ volatile u_int8_t _unused16[3]; volatile u_int8_t reset_stat; /* reset status */ volatile u_int8_t _unused17[24]; volatile u_int8_t virq_map[7]; /* vme->sbus irq mapping */ volatile u_int8_t mbox_irq_map[16]; volatile u_int8_t acfail_irq_map; volatile u_int8_t sysfail_irq_map[2]; volatile u_int8_t abort_irq_map; volatile u_int8_t dma_irq_map; volatile u_int8_t wpe_irq_map; volatile u_int8_t arb_irq_map; volatile u_int8_t wdt_irq_map; volatile u_int8_t slerr_irq_map; volatile u_int8_t fmb_irq_map[2]; volatile u_int8_t ibox_irq_map; volatile u_int8_t _unused18[20]; volatile u_int16_t mbox_stat; /* mailbox status */ volatile u_int8_t _unused19[2]; volatile u_int8_t arb_ctrl; /* arbitration control */ volatile u_int8_t req_ctrl; /* vme request control */ volatile u_int8_t bus_ctrl; /* vme bus control */ volatile u_int8_t _unused20[1]; volatile u_int8_t mcsr0; /* misc control/status */ volatile u_int8_t _unused21[3]; volatile u_int8_t mcsr1; /* misc control/status */ volatile u_int8_t wdt_restart; /* watchdog restart */ volatile u_int8_t _unused22[2]; volatile u_int32_t intr_stat; /* interrupt status */ volatile u_int8_t _unused23[20]; }; /* sbus_base: sbus base address register */ #define SBUS_BASE_RMBA 0xffffe000 /* reg map base address */ #define SBUS_BASE_RMSS 0x00000007 /* reg map slot select bits */ /* vme_range0..15: master range registers */ #define VME_RANGE_VMRCC 0xfff80000 /* master range compare code */ #define VME_RANGE_VMAE 0x00078000 /* master adr extension bits */ #define VME_RANGE_VMAT 0x00007ff8 /* master adr xlation bits */ #define VME_RANGE_WPEN 0x00000002 /* write posting enable */ #define VME_RANGE_DECEN 0x00000001 /* range decoding enable */ /* vme_master_map0..15: master capability registers */ #define VME_MASTER_CAP_DATA 0xe0 /* data capabilities */ #define VME_MASTER_CAP_D8 0x00 /* vmebus D8 */ #define VME_MASTER_CAP_D16 0x20 /* vmebus D16 */ #define VME_MASTER_CAP_D32 0x40 /* vmebus D32 */ #define VME_MASTER_CAP_DBLT 0x60 /* vmebus BLT */ #define VME_MASTER_CAP_DMBLT 0x80 /* vmebus MBLT */ #define VME_MASTER_CAP_ADDR 0x1c /* addr capabilities */ #define VME_MASTER_CAP_A16 0x00 /* vmebus A16 */ #define VME_MASTER_CAP_A24 0x04 /* vmebus A24 */ #define VME_MASTER_CAP_A32 0x08 /* vmebus A32 */ #define FVME_MAX_RANGES 16 /* number of ranges avail */ /* sbus_ssel0..15: sbus slot select registers */ #define SBUS_SSEL_X 0x70 /* slot select pins range X */ #define SBUS_SSEL_X_SLOT1 0x00 /* sbus slot 1 */ #define SBUS_SSEL_X_SLOT2 0x10 /* sbus slot 2 */ #define SBUS_SSEL_X_SLOT3 0x20 /* sbus slot 3 */ #define SBUS_SSEL_X_SLOT4 0x30 /* sbus slot 4 */ #define SBUS_SSEL_X_SLOT5x 0x40 /* sbus slot 5? */ #define SBUS_SSEL_X_SLOT5 0x50 /* sbus slot 5 */ #define SBUS_SSEL_Y 0x07 /* slot select pins range X+1*/ #define SBUS_SSEL_Y_SLOT1 0x00 /* sbus slot 1 */ #define SBUS_SSEL_Y_SLOT2 0x01 /* sbus slot 2 */ #define SBUS_SSEL_Y_SLOT3 0x02 /* sbus slot 3 */ #define SBUS_SSEL_Y_SLOT4 0x03 /* sbus slot 4 */ #define SBUS_SSEL_Y_SLOT5x 0x04 /* sbus slot 5? */ #define SBUS_SSEL_Y_SLOT5 0x05 /* sbus slot 5 */ /* viack_emu1..7: iack emulation registers */ /* bits contain d00-d07 from VMEbus interrupter */ /* sbus_cap: sbus capability register */ #define SBUS_CAP_BURSTMASK 0xc0 /* dma burst size mask */ #define SBUS_CAP_BURST_64 0xc0 /* 64 byte burst */ #define SBUS_CAP_BURST_32 0x80 /* 32 byte burst */ #define SBUS_CAP_BURST_16 0x40 /* 16 byte burst */ #define SBUS_CAP_BURST_8 0x00 /* 8 byte burst */ #define SBUS_CAP_READSTOPMASK 0x30 /* master read stop point */ #define SBUS_CAP_READSTOP_64 0x30 /* stop at 64 byte boundary */ #define SBUS_CAP_READSTOP_32 0x20 /* stop at 32 byte boundary */ #define SBUS_CAP_READSTOP_16 0x10 /* stop at 16 byte boundary */ #define SBUS_CAP_READSTOP_8 0x00 /* stop at 8 byte boundary */ #define SBUS_CAP_BURSTDIS 0x08 /* disable sbus bursts */ #define SBUS_CAP_HIDDENARBDIS 0x04 /* disable sbus hidden arb */ #define SBUS_CAP_SPLITFLOW 0x02 /* disable flow through */ /* sbus_retry_ctrl: sbus retry register */ /* clock cycles with no acknowledge */ /* sbus_rerun_ctrl: sbus rerun limit register */ /* number of times to reruns to try on the bus */ /* swpar: sbus write posting error address register */ /* virtual sbus transfer address that was ack'd with an error */ /* slerr: sbus late error address register */ /* virtual sbus address that resulted in a late transfer */ /* vme_base: VMEbus base address register */ #define VME_BASE_RMVBA 0xfe /* reg map base address */ #define VME_BASE_RMACCEN 0x01 /* reg remote access enable */ /* vme_ext0..2: slave address extension registers */ /* extensions of A24 VMEbus address to 32bit sbus address (msb) */ /* sbus_range0..2: slave range registers */ #define SBUS_RANGE_VSRCC 0xfff00000 /* slave range compare code */ #define SBUS_RANGE_VSAT 0x000ffe00 /* slave address translation */ #define SBUS_RANGE_A32DIS 0x00000004 /* disable A32 (enable A24) */ #define SBUS_RANGE_WPDIS 0x00000002 /* disable write posting */ #define SBUS_RANGE_DECDIS 0x00000001 /* disable encoding */ /* ibox_addr: IBOX address register */ /* address within VME A16 space where the IBOX is accessed */ /* ibox_ctrl: IBOX control register */ #define IBOX_CTRL_DIS 0x01 /* disable ibox */ /* fmb_ctrl: force message broadcast control register */ #define FMB_CTRL_SELAM 0x80 /* supervisor/user access */ #define FMB_CTRL_DISCH1 0x40 /* disable channel 1 */ #define FMB_CTRL_DISCH2 0x20 /* disable channel 2 */ #define FMB_CTRL_SLOTID 0x1f /* slot id: 1-15 */ /* vme_cap: global master capability register */ #define VME_CAP_NPRV 0x80 /* supervisor access */ /* vmebus_handshake: VMEbus handshake configuration register */ #define VME_HANDSHAKE_DISSGLE 0x80 /* disable glitch filter */ #define VME_HANDSHAKE_DISASFAST 0x40 /* disable fast AS handshake */ #define VME_HANDSHAKE_DISDS 0x20 /* disable fast data strobe */ /* vwpar: VMEbus write posting address register */ /* contains address ack'd with a BERR from the VME bus */ /* dma_ctrl: dma control register */ #define DMA_CTRL_DMAEN 0x80 /* enable (start) dma */ #define DMA_CTRL_DMADIS 0x40 /* disable dma transaction */ #define DMA_CTRL_DMAHLT 0x20 /* stop dma transaction */ #define DMA_CTRL_DMARESU 0x10 /* resume dma transaction */ /* dma_mode: dma mode register */ #define DMA_MODE_DMASB 0x80 /* single buffer mode */ #define DMA_MODE_DMANRTRY 0x40 /* error on retry */ /* dma_stat: dma status register */ #define DMA_STAT_DMARUN 0x80 /* dma task is running */ #define DMA_STAT_DMAWT 0x40 /* dma task is halted */ #define DMA_STAT_DMANT 0x20 /* dma task successful */ #define DMA_STAT_ERRMASK 0x18 /* dma error mask */ #define DMA_STAT_ERR_SRC 0x00 /* error on source bus */ #define DMA_STAT_ERR_DST 0x08 /* error on destination bus */ #define DMA_STAT_ERR_NONE 0x10 /* no error termination */ #define DMA_STAT_ERR_NOERROR 0x18 /* no error termination */ /* dma_src: dma source address register */ #define DMA_SRC_ADDR 0xfffffffc /* source address */ #define DMA_SRC_VME 0x00000002 /* 0=vme, 1=sbus */ /* dma_dst: dma destination address register */ #define DMA_DST_ADDR 0xfffffffc /* destination address */ #define DMA_DST_VME 0x00000002 /* 0=vme, 1=sbus */ /* dma_captl: dma capability/transfer length */ #define DMA_CAPTL_SCAPD_MASK 0xe0000000 /* src data capability */ #define DMA_CAPTL_SCAPD_D8 0x00000000 /* D8 slave */ #define DMA_CAPTL_SCAPD_D16 0x20000000 /* D16 slave */ #define DMA_CAPTL_SCAPD_D32 0x40000000 /* D32 slave */ #define DMA_CAPTL_SCAPD_BLT 0x60000000 /* BLT slave */ #define DMA_CAPTL_SCAPD_MBLT 0x80000000 /* MBLT slave */ #define DMA_CAPTL_SCAPA_MASK 0x1c000000 /* src addr capability */ #define DMA_CAPTL_SCAPA_A16 0x00000000 /* A16 slave */ #define DMA_CAPTL_SCAPA_A24 0x04000000 /* A24 slave */ #define DMA_CAPTL_SCAPA_A32 0x08000000 /* A32 slave */ #define DMA_CAPTL_DCAPD_MASK 0x03800000 /* dst data capability */ /* mbox0..15: mailbox registers */ #define MBOX_SEM 0x80 /* semaphore bit */ /* sem0..47: semaphore registers */ #define SEM_SEM 0x80 /* semaphore bit */ /* gcsr: global control and status register */ #define GCSR_SETSYSFAIL 0x80 /* assert SYSFAIL* signal */ #define GCSR_ENSYSFAIL 0x40 /* enable SYSFAIL* output */ #define GCSR_SYSFAIL 0x20 /* SYSFAIL* input status */ #define GCSR_RESET 0x10 /* software reset */ #define GCSR_ACFAIL 0x08 /* ACFAIL input status */ #define GCSR_DISVDR 0x04 /* disable VME DTB drivers */ #define GCSR_ENSYSCON 0x02 /* enable system controller */ /* reset_stat: reset status register */ #define RESET_STAT_SBUS_RESET 0x80 /* sbus has been reset */ #define RESET_STAT_VME_SYSRES 0x40 /* vmebus has been reset */ #define RESET_STAT_WDT_RESET 0x20 /* watchdog has triggered */ #define RESET_STAT_SYSRES_CALL 0x04 /* sysreset in mcsr0 set */ #define RESET_STAT_RESET_CALL 0x02 /* reset in mcsr0 set */ #define RESET_STAT_LOCRES_CALL 0x01 /* reset in ccsr set */ /* *irq_map: interrupt request mapping registers */ #define IRQ_MAP_ENABLE 0x08 /* enable irq */ #define IRQ_MAP_INT_MASK 0x07 /* irq mapping mask */ #define IRQ_MAP_INT 0x00 /* NMI */ #define IRQ_MAP_SINT1 0x01 /* sbus pri 1 */ #define IRQ_MAP_SINT2 0x02 /* sbus pri 2 */ #define IRQ_MAP_SINT3 0x03 /* sbus pri 3 */ #define IRQ_MAP_SINT4 0x04 /* sbus pri 4 */ #define IRQ_MAP_SINT5 0x05 /* sbus pri 5 */ #define IRQ_MAP_SINT6 0x06 /* sbus pri 6 */ #define IRQ_MAP_SINT7 0x07 /* sbus pri 7 */ /* mbox_stat: mailbox status interrupt status register */ /* 1 bit for each mailbox, 0 = interrupt pending, 1 = no interrupt pending */ /* arb_ctrl: arbitration control register */ #define ARB_CTRL_MASK 0xc0 /* control mask */ #define ARB_CTRL_PRIORITY 0xc0 /* priority mode */ #define ARB_CTRL_ROBIN 0x40 /* round robin mode */ #define ARB_CTRL_PRIROBIN 0x80 /* priority round robin mode */ /* req_ctrl: VMEbus request control register */ #define REQ_CTRL_FM 0x80 /* 0=fair,1=demand mode */ #define REQ_CTRL_RM_MASK 0x70 /* release mode mask */ #define REQ_CTRL_RM_ROR 0x30 /* release on request */ #define REQ_CTRL_RM_ROC 0x40 /* release on bus clear */ #define REQ_CTRL_RM_RAT 0x60 /* release after timeout */ #define REQ_CTRL_RM_RWD 0x70 /* release when done */ #define REQ_CTRL_REC 0x08 /* 0=begin,1=end of cycle */ #define REQ_CTRL_RL_MASK 0x06 /* request level mask */ #define REQ_CTRL_RL_BR3 0x06 /* br3 priority */ #define REQ_CTRL_RL_BR2 0x04 /* br2 priority */ #define REQ_CTRL_RL_BR1 0x02 /* br1 priority */ #define REQ_CTRL_RL_BR0 0x00 /* br0 priority */ #define REQ_CTRL_GLFI 0x01 /* enable bbsy glitch filter */ /* bus_ctrl: VMEbus capture register */ #define BUS_CTRL_BCAP 0x80 /* request and keep bus */ #define BUS_CTRL_OWN 0x40 /* do we own the bus? */ /* mcsr0: miscellaneous control and status register 0 */ #define MCSR0_ABORTSW 0x80 /* status of abort switch */ #define MCSR0_SCON 0x40 /* status of SCON input */ #define MCSR0_SYSRESET 0x20 /* assert SYSRESET* */ #define MCSR0_RESET 0x10 /* software reset fga5000 */ #define MCSR0_ENA_VME_TIMEOUT 0x08 /* enable VME timeout */ #define MCSR0_VME_TIMEOUT_MASK 0x06 /* VME transaction timeout */ #define MCSR0_VME_TIMEOUT_32 0x02 /* 32 usec */ #define MCSR0_VME_TIMEOUT_128 0x04 /* 128 usec */ #define MCSR0_VME_TIMEOUT_512 0x06 /* 512 usec */ #define MCSR0_SYSRESET_IN 0x01 /* enable SYSRESET input */ /* mcsr1: miscellaneous control and status register 1 */ #define MCSR1_ENAWDT 0x80 /* enable watchdog timer */ #define MCSR1_TIMEOUT_MASK 0x70 /* watchdog timeout mask */ #define MCSR1_TIMEOUT_408MS 0x00 /* 408 msec */ #define MCSR1_TIMEOUT_168S 0x10 /* 1.68 sec */ #define MCSR1_TIMEOUT_67S 0x20 /* 6.7 sec */ #define MCSR1_TIMEOUT_268S 0x30 /* 26.8 sec */ #define MCSR1_TIMEOUT_1M48S 0x40 /* 1 min 48 sec */ #define MCSR1_TIMEOUT_7M9S 0x50 /* 7 min 9 sec */ #define MCSR1_TIMEOUT_28M38S 0x60 /* 28 min 38 sec */ #define MCSR1_TIMEOUT_1H54M 0x70 /* 1 hour 54 min */ #define MCSR1_IRQ_FREEZE 0x08 /* freeze irq map regs */ /* wdt_restart: watchdog timer restart register */ /* any read/write resets the watchdog timer */ /* intr_stat: interrupt status register */ #define INTR_STAT_ACFAIL 0x80000000 /* acfail pending */ #define INTR_STAT_SYSFAILASSERT 0x40000000 /* sysfail assert pending */ #define INTR_STAT_SYSFAILNEGATE 0x20000000 /* sysfail negate pending */ #define INTR_STAT_ABORT 0x10000000 /* abort pending */ #define INTR_STAT_ARBTIMEOUT 0x08000000 /* arbitration timeout */ #define INTR_STAT_MAILBOX 0x04000000 /* mailbox intr pending */ #define INTR_STAT_SBUS_WPERR 0x02000000 /* sbus wperr pending */ #define INTR_STAT_VME_WPERR 0x01000000 /* vme wperr pending */ #define INTR_STAT_DMATERM 0x00800000 /* dma finished */ #define INTR_STAT_WDT 0x00400000 /* watchdog half timeout */ #define INTR_STAT_SLERR 0x00200000 /* sbus late error pending */ #define INTR_STAT_IBOX 0x00100000 /* ibox pending */ #define INTR_STAT_FMB0 0x00080000 /* fmb channel 0 pending */ #define INTR_STAT_FMB1 0x00040000 /* fmb channel 1 pending */ #define INTR_STAT_VMEIRQ7 0x00000080 /* vme irq 7 pending */ #define INTR_STAT_VMEIRQ6 0x00000040 /* vme irq 6 pending */ #define INTR_STAT_VMEIRQ5 0x00000020 /* vme irq 5 pending */ #define INTR_STAT_VMEIRQ4 0x00000010 /* vme irq 4 pending */ #define INTR_STAT_VMEIRQ3 0x00000008 /* vme irq 3 pending */ #define INTR_STAT_VMEIRQ2 0x00000004 /* vme irq 2 pending */ #define INTR_STAT_VMEIRQ1 0x00000002 /* vme irq 1 pending */