From afd4c7bbff2487a3d40121e4c22e53db6fcddeb4 Mon Sep 17 00:00:00 2001 From: Till Straumann Date: Wed, 13 Dec 2006 20:04:05 +0000 Subject: * vmeUniverse/vme_am_defs.h: Added address modifiers for 2eVME. Added flags for 2eSST and DBW16. * vmeUniverse/vmeUniverse.h: Removed AM definitions and include vme_am_defs.h instead. Declare new routine vmeUniverseMapCRG(). Export 'irq manager' API only if __INSIDE_RTEMS_BSP__ defined. Renamed 'shared' argument to vmeUniverseInstallIrqMgrAlt() to 'flags' since now more options are available. Added new flag to install 'posted-write' workaround. * vmeUniverse/vmeUniverse.c: Allow BSP to override BSP_PCI2LOCAL_ADDR() macro. Data width of outbound port can now be restricted to 16-bit (if new DBW16 flag set in address modifier). Added vmeUniverseMapCRG() for mapping local registers onto VME. Interrupt manager now implements a workaround (enabled at installation time) which flushes the write-fifo after user ISR returns. This requires the universe's registers to be accessible from VME (either CSR space or CRG mapped to A16/A24/A32), though. * vmeUniverse/vmeTsi148.h: vmeTsi148ClearVMEBusErrors() now returns the fault address as a 32-bit address (not ulonglong anymore). The driver only supports 32-bit addresses. Declare new routine vmeTsi148MapCRG(). Export 'irq manager' API only if __INSIDE_RTEMS_BSP__ defined. Renamed 'shared' argument to vmeTsi148InstallIrqMgrAlt() to 'flags' to allow more options to be supported. Added comments explaining the 'posted-write' workaround implemented by the interrupt manager. * vmeUniverse/vmeTsi148.c: Clear 'SYSFAIL' during initialization. Allow BSP to override BSP_PCI2LOCAL_ADDR() macro. Added support for 2eSST when configuring windows (untested - I have no 2eSST). Added vmeTsi148MapCRG() for mapping local registers onto VME. Implemented 'posted-write' workaround for interrupt manager (consult source for details). --- c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h | 34 +++++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) (limited to 'c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h') diff --git a/c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h b/c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h index c822ae086f..7a45327f62 100644 --- a/c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h +++ b/c/src/lib/libbsp/shared/vmeUniverse/vme_am_defs.h @@ -3,6 +3,8 @@ /* vxworks compatible addressing modes */ +/* NOTE: 64-bit *addresses* are not supported [data are]. */ + #ifndef VME_AM_STD_SUP_BLT #define VME_AM_STD_SUP_BLT 0x3f #endif @@ -63,6 +65,12 @@ #ifndef VME_AM_EXT_USR_MBLT #define VME_AM_EXT_USR_MBLT 0x08 #endif +#ifndef VME_AM_2eVME_6U +#define VME_AM_2eVME_6U 0x20 +#endif +#ifndef VME_AM_2eVME_3U +#define VME_AM_2eVME_3U 0x21 +#endif #ifndef VME_AM_CSR #define VME_AM_CSR 0x2f #endif @@ -99,8 +107,30 @@ #define VME_AM_IS_MEMORY (1<<8) #endif -/* Flags 1<<11 .. 1<<8 are reserved - * Flags 1<<12 .. 1<<31 are for driver specific options +/* I don't know AMs for 2eSST so we use some extra bits; + * HOWEVER: these are just qualifiers to the VME_AM_2eVME_xx modes + * i.e., if you want 2eSST you must also select 2eVME... + */ + +/* 2eSST broadcast; you still need to set one of the speed bits */ +#define VME_AM_2eSST_BCST (1<<9) +/* Low speed (driver specific) */ +#define VME_AM_2eSST_LO (1<<10) +/* Mid speed (driver specific) */ +#define VME_AM_2eSST_MID (2<<10) +/* High speed (driver specific) */ +#define VME_AM_2eSST_HI (3<<10) + +#define VME_AM_IS_2eSST(am) ((am) & (3<<10)) + +/* Use 16-bit transfers for coupled- or BLT cycles + * (MBLT, 2exxx are probably always 64-bit) + */ +#define VME_MODE_DBW16 (1<<12) + +/* Unused Flags 1<<12 .. 1<<23 are reserved + * Flags 1<<24 .. 1<<31 are for driver specific options */ + #endif -- cgit v1.2.3