📄 vmeuniverse.h
字号:
/* $Id: vmeUniverse.h,v 1.1.4.2 2003/04/10 16:40:25 joel Exp $ */#ifndef VME_UNIVERSE_UTIL_H#define VME_UNIVERSE_UTIL_H/* Routines to configure and use the Tundra Universe VME bridge * Author: Till Straumann <strauman@slac.stanford.edu> * Nov 2000, July 2001 *//* Register definitions *//* NOTE: all registers contents in PCI space are LITTLE ENDIAN */#ifdef __vxworks#include <vme.h>#else/* vxworks compatible addressing modes */#define VME_AM_STD_SUP_ASCENDING 0x3f#define VME_AM_STD_SUP_PGM 0x3e#define VME_AM_STD_USR_ASCENDING 0x3b#define VME_AM_STD_USR_PGM 0x3a#define VME_AM_STD_SUP_DATA 0x3d#define VME_AM_STD_USR_DATA 0x39#define VME_AM_EXT_SUP_ASCENDING 0x0f#define VME_AM_EXT_SUP_PGM 0x0e#define VME_AM_EXT_USR_ASCENDING 0x0b#define VME_AM_EXT_USR_PGM 0x0a#define VME_AM_EXT_SUP_DATA 0x0d#define VME_AM_EXT_USR_DATA 0x09#define VME_AM_SUP_SHORT_IO 0x2d#define VME_AM_USR_SHORT_IO 0x29#define VME_AM_IS_SHORT(a) (((a) & 0xf0) == 0x20)#define VME_AM_IS_STD(a) (((a) & 0xf0) == 0x30)#define VME_AM_IS_EXT(a) (((a) & 0xf0) == 0x00)#endiftypedef unsigned long LERegister; /* emphasize contents are little endian *//* NOTE: DMA packet descriptors MUST be 32 byte aligned */typedef struct VmeUniverseDMAPacketRec_ { LERegister dctl __attribute__((aligned(32))); LERegister dtbc __attribute__((packed)); LERegister dla __attribute__((packed)); LERegister dummy1 __attribute__((packed)); LERegister dva __attribute__((packed)); LERegister dummy2 __attribute__((packed)); LERegister dcpp __attribute__((packed)); LERegister dummy3 __attribute__((packed));} VmeUniverseDMAPacketRec, *VmeUniverseDMAPacket;/* PCI CSR register */#define UNIV_REGOFF_PCI_CSR 0x4# define UNIV_PCI_CSR_D_PE (1<<31) /* detected parity error; write 1 to clear */# define UNIV_PCI_CSR_S_SERR (1<<30) /* SERR (signalled error) asserted; write 1 to clear */# define UNIV_PCI_CSR_R_MA (1<<29) /* received master abort; write 1 to clear */# define UNIV_PCI_CSR_R_TA (1<<28) /* received target abort; write 1 to clear */# define UNIV_PCI_CSR_S_TA (1<<27) /* signalled target abort; write 1 to clear */# define UNIV_PCI_CSR_DEVSEL_MASK (3<<25) /* device select timing (RO) */# define UNIV_PCI_CSR_DP_D (1<<24) /* data parity error detected; write 1 to clear */# define UNIV_PCI_CSR_TFBBC (1<<23) /* target fast back to back capable (RO) */# define UNIV_PCI_CSR_MFBBC (1<<9) /* master fast back to back capable (RO) */# define UNIV_PCI_CSR_SERR_EN (1<<8) /* enable SERR driver */# define UNIV_PCI_CSR_WAIT (1<<7) /* wait cycle control (RO) */# define UNIV_PCI_CSR_PERESP (1<<6) /* parity error response enable */# define UNIV_PCI_CSR_VGAPS (1<<5) /* VGA palette snoop (RO) */# define UNIV_PCI_CSR_MWI_EN (1<<4) /* Memory write and invalidate enable (RO) */# define UNIV_PCI_CSR_SC (1<<3) /* special cycles (RO) */# define UNIV_PCI_CSR_BM (1<<2) /* master enable (MUST SET TO ENABLE VME SLAVES) */# define UNIV_PCI_CSR_MS (1<<1) /* target memory enable */# define UNIV_PCI_CSR_IOS (1<<0) /* target IO enable *//* Special cycle (ADOH, RMW) control register */#define UNIV_REGOFF_SCYC_CTL 0x170 /* write 0 to disable */# define UNIV_SCYC_CTL_LAS_IO (1<<2) /* PCI address space (1: IO, 0: mem) */# define UNIV_SCYC_CTL_SCYC_RMW (1<<0) /* do a RMW cycle when reading PCI address */# define UNIV_SCYC_CTL_SCYC_ADOH (2<<0) /* do a ADOH cycle when reading/writing PCI address *//* Special cycle address register */#define UNIV_REGOFF_SCYC_ADDR 0x174 /* PCI address (must be long word aligned) *//* Special cycle Swap/Compare/Enable */#define UNIV_REGOFF_SCYC_EN 0x178 /* mask determining the bits involved in the compare and swap operations for VME RMW cycles *//* Special cycle compare data register */#define UNIV_REGOFF_SCYC_CMP 0x17c /* data to compare with word returned from VME RMW read *//* Special cycle swap data register */#define UNIV_REGOFF_SCYC_SWP 0x180 /* If enabled bits of CMP match, corresponding SWP bits are written back to VME (under control of EN) *//* PCI miscellaneous register */#define UNIV_REGOFF_LMISC 0x184# define UNIV_LMISC_CRT_MASK (7<<28) /* Univ. I only, not used on II */# define UNIV_LMISC_CRT_INF (0<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_128_US (1<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_256_US (2<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_512_US (3<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_1024_US (4<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_2048_US (5<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CRT_4096_US (6<<28) /* Coupled Request Timeout */# define UNIV_LMISC_CWT_MASK (7<<24) /* coupled window timer */# define UNIV_LMISC_CWT_DISABLE 0 /* disabled (release VME after 1 coupled xaction) */# define UNIV_LMISC_CWT_16 (1<<24) /* 16 PCI clock cycles */# define UNIV_LMISC_CWT_32 (2<<24) /* 32 PCI clock cycles */# define UNIV_LMISC_CWT_64 (3<<24) /* 64 PCI clock cycles */# define UNIV_LMISC_CWT_128 (4<<24) /* 128 PCI clock cycles */# define UNIV_LMISC_CWT_256 (5<<24) /* 256 PCI clock cycles */# define UNIV_LMISC_CWT_512 (6<<24) /* 512 PCI clock cycles *//* PCI Command Error Log Register */#define UNIV_REGOFF_L_CMDERR 0x18c# define UNIV_L_CMDERR_CMDERR(reg) (((reg)>>28)&0xf) /* extract PCI cmd error log */# define UNIV_L_CMDERR_M_ERR (1<<27) /* multiple errors have occurred */# define UNIV_L_CMDERR_L_STAT (1<<23) /* PCI error log status valid (write 1 to clear and enable logging) *//* PCI Address Error Log */#define UNIV_REGOFF_LAERR 0x190 /* PCI fault address (if L_CMDERR_L_STAT valid) *//* DMA Xfer Control Register */#define UNIV_REGOFF_DCTL 0x200# define UNIV_DCTL_L2V (1<<31) /* PCI->VME if set */# define UNIV_DCTL_VDW_MSK (3<<22) /* VME max. width mask 0x00c00000 */# define UNIV_DCTL_VDW_8 (0<<22) /* VME max. width 8 */# define UNIV_DCTL_VDW_16 (1<<22) /* VME max. width 16 */# define UNIV_DCTL_VDW_32 (2<<22) /* VME max. width 32 */# define UNIV_DCTL_VDW_64 (3<<22) /* VME max. width 64 */# define UNIV_DCTL_VAS_MSK (7<<16) /* VME AS mask 0x00070000 */# define UNIV_DCTL_VAS_A16 (0<<16) /* VME A16 */# define UNIV_DCTL_VAS_A24 (1<<16) /* VME A24 */# define UNIV_DCTL_VAS_A32 (2<<16) /* VME A32 */# define UNIV_DCTL_PGM_MSK (3<<14) /* VME PGM/DATA mask 0x0000c000 */# define UNIV_DCTL_PGM (1<<14) /* VME PGM(1)/DATA(0) */# define UNIV_DCTL_SUPER_MSK (3<<12) /* VME SUPER/USR mask 0x00003000 */# define UNIV_DCTL_SUPER (1<<12) /* VME SUPER(1)/USR(0) */# define UNIV_DCTL_VCT (1<<8) /* VME enable BLT */# define UNIV_DCTL_LD64EN (1<<7) /* PCI 64 enable *//* DMA Xfer byte count register (is updated by DMA) */#define UNIV_REGOFF_DTBC 0x204/* DMA Xfer local (PCI) address (direction is set in DCTL) */#define UNIV_REGOFF_DLA 0x208/* DMA Xfer VME address (direction is set in DCTL) * NOTE: (*UNIV_DVA) & ~7 == (*UNIV_DLA) & ~7 MUST HOLD */#define UNIV_REGOFF_DVA 0x210/* DMA Xfer VME command packet pointer * NOTE: The address stored here MUST be 32-byte aligned */#define UNIV_REGOFF_DCPP 0x218/* these bits are only used in linked lists */# define UNIV_DCPP_IMG_NULL (1<<0) /* last packet in list */# define UNIV_DCPP_IMG_PROCESSED (1<<1) /* packet processed *//* DMA Xfer General Control/Status register */#define UNIV_REGOFF_DGCS 0x220# define UNIV_DGCS_GO (1<<31) /* start xfer */# define UNIV_DGCS_STOP_REQ (1<<30) /* stop xfer (immediate abort) */# define UNIV_DGCS_HALT_REQ (1<<29) /* halt xfer (abort after current packet) */# define UNIV_DGCS_CHAIN (1<<27) /* enable linked list mode */# define UNIV_DGCS_VON_MSK (7<<20) /* VON mask */# define UNIV_DGCS_VON_DONE (0<<20) /* VON counter disabled (do until done) */# define UNIV_DGCS_VON_256 (1<<20) /* VON yield bus after 256 bytes */# define UNIV_DGCS_VON_512 (2<<20) /* VON yield bus after 512 bytes */# define UNIV_DGCS_VON_1024 (3<<20) /* VON yield bus after 512 bytes */# define UNIV_DGCS_VON_2048 (4<<20) /* VON yield bus after 1024 bytes */# define UNIV_DGCS_VON_4096 (5<<20) /* VON yield bus after 4096 bytes */# define UNIV_DGCS_VON_8192 (6<<20) /* VON yield bus after 8192 bytes */# define UNIV_DGCS_VOFF_MSK (15<<16) /* VOFF mask */# define UNIV_DGCS_VOFF_0_US (0<<16) /* re-request VME master after 0 us */# define UNIV_DGCS_VOFF_2_US (8<<16) /* re-request VME master after 2 us */# define UNIV_DGCS_VOFF_4_US (9<<16) /* re-request VME master after 4 us */# define UNIV_DGCS_VOFF_8_US (10<<16)/* re-request VME master after 8 us */# define UNIV_DGCS_VOFF_16_US (1<<16) /* re-request VME master after 16 us */# define UNIV_DGCS_VOFF_32_US (2<<16) /* re-request VME master after 32 us */# define UNIV_DGCS_VOFF_64_US (3<<16) /* re-request VME master after 64 us */# define UNIV_DGCS_VOFF_128_US (4<<16) /* re-request VME master after 128 us */# define UNIV_DGCS_VOFF_256_US (5<<16) /* re-request VME master after 256 us */# define UNIV_DGCS_VOFF_512_US (6<<16) /* re-request VME master after 512 us */# define UNIV_DGCS_VOFF_1024_US (7<<16) /* re-request VME master after 1024 us *//* Status Bits (write 1 to clear) */# define UNIV_DGCS_ACT (1<<15) /* DMA active */# define UNIV_DGCS_STOP (1<<14) /* DMA stopped */# define UNIV_DGCS_HALT (1<<13) /* DMA halted */# define UNIV_DGCS_DONE (1<<11) /* DMA done (OK) */# define UNIV_DGCS_LERR (1<<10) /* PCI bus error */# define UNIV_DGCS_VERR (1<<9) /* VME bus error */# define UNIV_DGCS_P_ERR (1<<8) /* programming protocol error (e.g. PCI master disabled) */# define UNIV_DGCS_STATUS_CLEAR\ (UNIV_DGCS_ACT|UNIV_DGCS_STOP|UNIV_DGCS_HALT|\ UNIV_DGCS_DONE|UNIV_DGCS_LERR|UNIV_DGCS_VERR|UNIV_DGCS_P_ERR)# define UNIV_DGCS_P_ERR (1<<8) /* programming protocol error (e.g. PCI master disabled) *//* Interrupt Mask Bits */# define UNIV_DGCS_INT_STOP (1<<6) /* interrupt when stopped */# define UNIV_DGCS_INT_HALT (1<<5) /* interrupt when halted */# define UNIV_DGCS_INT_DONE (1<<3) /* interrupt when done */# define UNIV_DGCS_INT_LERR (1<<2) /* interrupt on LERR */# define UNIV_DGCS_INT_VERR (1<<1) /* interrupt on VERR */# define UNIV_DGCS_INT_P_ERR (1<<0) /* interrupt on P_ERR */# define UNIV_DGCS_INT_MSK (0x0000006f) /* interrupt mask *//* DMA Linked List Update Enable Register */#define UNIV_REGOFF_D_LLUE 0x224# define UNIV_D_LLUE_UPDATE (1<<31)/* PCI (local) interrupt enable register */#define UNIV_REGOFF_LINT_EN 0x300# define UNIV_LINT_EN_LM3 (1<<23) /* location monitor 3 mask */# define UNIV_LINT_EN_LM2 (1<<22) /* location monitor 2 mask */# define UNIV_LINT_EN_LM1 (1<<21) /* location monitor 1 mask */# define UNIV_LINT_EN_LM0 (1<<20) /* location monitor 0 mask */# define UNIV_LINT_EN_MBOX3 (1<<19) /* mailbox 3 mask */# define UNIV_LINT_EN_MBOX2 (1<<18) /* mailbox 2 mask */# define UNIV_LINT_EN_MBOX1 (1<<17) /* mailbox 1 mask */# define UNIV_LINT_EN_MBOX0 (1<<16) /* mailbox 0 mask */# define UNIV_LINT_EN_ACFAIL (1<<15) /* ACFAIL irq mask */# define UNIV_LINT_EN_SYSFAIL (1<<14) /* SYSFAIL irq mask */# define UNIV_LINT_EN_SW_INT (1<<13) /* PCI (local) software irq */# define UNIV_LINT_EN_SW_IACK (1<<12) /* VME software IACK mask */# define UNIV_LINT_EN_VERR (1<<10) /* PCI VERR irq mask */# define UNIV_LINT_EN_LERR (1<<9) /* PCI LERR irq mask */# define UNIV_LINT_EN_DMA (1<<8) /* PCI DMA irq mask */# define UNIV_LINT_EN_VIRQ7 (1<<7) /* VIRQ7 mask (universe does IACK automatically) */# define UNIV_LINT_EN_VIRQ6 (1<<6) /* VIRQ6 mask */# define UNIV_LINT_EN_VIRQ5 (1<<5) /* VIRQ5 mask */# define UNIV_LINT_EN_VIRQ4 (1<<4) /* VIRQ4 mask */# define UNIV_LINT_EN_VIRQ3 (1<<3) /* VIRQ3 mask */# define UNIV_LINT_EN_VIRQ2 (1<<2) /* VIRQ2 mask */# define UNIV_LINT_EN_VIRQ1 (1<<1) /* VIRQ1 mask */# define UNIV_LINT_EN_VOWN (1<<0) /* VOWN mask *//* PCI (local) interrupt status register */#define UNIV_REGOFF_LINT_STAT 0x304# define UNIV_LINT_STAT_LM3 (1<<23) /* location monitor 3 status */# define UNIV_LINT_STAT_LM2 (1<<22) /* location monitor 2 status */# define UNIV_LINT_STAT_LM1 (1<<21) /* location monitor 1 status */# define UNIV_LINT_STAT_LM0 (1<<20) /* location monitor 0 status */# define UNIV_LINT_STAT_MBOX3 (1<<19) /* mailbox 3 status */# define UNIV_LINT_STAT_MBOX2 (1<<18) /* mailbox 2 status */# define UNIV_LINT_STAT_MBOX1 (1<<17) /* mailbox 1 status */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -