/************************************************************************************ * primParams_pxl.h * * synopsis: Defines IDs and structures for pixel-specific primitives and tasks. * * Douglas Ferguson, UW Madison (510) 486-5230 dpferguson@lbl.gov ************************************************************************************/ #ifndef PRIM_PARAMS_PXL #define PRIM_PARAMS_PXL /************************************************************************************ * Primitives common to all DSPs go here * Note: some of these primitives are used to coordinate the DSPs with each other or * other electronics on the ROD (such as the router). These primitives should be sent * to the master DSP from the host; the master DSP primitive will then set the * appropriate board registers, etc. and pass on the primitive to the slave DSP. * The primitive passing software will not break if the host sends one of these * primitives directly to a slave, but slave applications might break as a result of * inconsistent parameter settings. See the code in eventTrapSetup and moduleMask for * examples of how to do this. ************************************************************************************/ #define COMMON_PIXEL_PRIMITIVES_BASE 0x800 #define TEST (COMMON_PIXEL_PRIMITIVES_BASE) #define R_TEST 100 struct TEST_IN { UINT32 dataLen, *dataPtr; }; #define LAST_COMMON_PIXEL_PRIMITIVE (TEST) #define NUM_COMMON_PIXEL_PRIMITIVES \ ((LAST_COMMON_PIXEL_PRIMITIVE)-(COMMON_PIXEL_PRIMITIVES_BASE)+1) /************************************************************************************ * Slave DSP primitives go here. ************************************************************************************/ #define SLAVE_PIXEL_PRIMITIVES_BASE 0x1800 #define HISTOGRAM_SETUP (SLAVE_PIXEL_PRIMITIVES_BASE) #define R_HISTOGRAM_SETUP 107 struct HISTOGRAM_SETUP_IN { UINT32 *base, nBins; UINT8 padding[2]; UINT8 dataType[2]; UINT8 binSize, unused[3]; UINT8 opt[4]; UINT32 validModules[2]; UINT32 moduleRangeMap[2][2]; MDAT32 *xPtr[2]; }; struct HISTOGRAM_SETUP_OUT { UINT32 *ctrlPtr, *pulseCtrPtr, *varRangePtr; }; #define HISTOGRAM_8BIT 8 #define HISTOGRAM_16BIT 16 #define HISTOGRAM_32BIT 32 /* #define R_HISTOGRAM_SETUP 108 struct HISTOGRAM_SETUP_IN { UINT32 *base, nBins; UINT8 dataType[2]; UINT8 binSize; UINT8 hashScheme; UINT8 routineType; UINT8 unused[3]; UINT8 opt[4]; UINT32 validModules[2]; UINT32 moduleRangeMap[2][2]; MDAT32 *xPtr[2]; }; #define HISTO_ROUTINE_C 0 #define HISTO_ROUTINE_ASM 1 */ #define FIT_HISTOGRAMS (1 +(HISTOGRAM_SETUP)) #define R_FIT_HISTOGRAMS 100 struct FIT_HISTOGRAMS_IN { UINT32 module; UINT32 routineType; }; struct FIT_HISTOGRAMS_OUT { UINT32 *fitData; UINT32 dataLen; }; #define FIT_ROUTINE_C 0 #define FIT_ROUTINE_ASM 1 #define LAST_SLAVE_PIXEL_PRIMITIVE (FIT_HISTOGRAMS) #define NUM_SLAVE_PIXEL_PRIMITIVES \ ((LAST_SLAVE_PIXEL_PRIMITIVE)-(SLAVE_PIXEL_PRIMITIVES_BASE)+1) /************************************************************************************ * Master DSP primitives go here. ************************************************************************************/ #define MASTER_PIXEL_PRIMITIVES_BASE 0x2800 /* configure a module, or send it's data (resident in memory) to control links. For input data, the pointer to configData is the start. */ #define RW_MODULE_DATA (MASTER_PIXEL_PRIMITIVES_BASE) #define R_RW_MODULE_DATA 102 struct RW_MODULE_DATA_IN { UINT32 readNotWrite, structId, moduleNum; Module *configData; }; struct RW_MODULE_DATA_OUT { Module configData; }; #define PHYSICS_MODULE_CONFIG 0 #define SCAN_MODULE_CONFIG 1 #define SPARE_MODULE_CONFIG 2 #define N_MODULE_CONFIG_SETS ((SPARE_MODULE_CONFIG) -(PHYSICS_MODULE_CONFIG) +1) #define RW_MODULE_VARIABLE (1 + (RW_MODULE_DATA)) #define R_RW_MODULE_VARIABLE 101 struct RW_MODULE_VARIABLE_IN { UINT32 read, structId, groupId, module, chip, varType, dataLen; MDAT32 *data; }; struct RW_MODULE_VARIABLE_OUT { UINT32 dataLen; MDAT32 *data; }; #define MVAR_GROUP_ID 100 #define MVAR_ACTIVE 101 #define MVAR_SELECT 102 #define SEND_CONFIG (1 + (RW_MODULE_VARIABLE)) #define R_SEND_CONFIG 105 struct SEND_CONFIG_IN { UINT32 port, captureSerOn, moduleNum[2], chipNum, setLinks, restore, structId, groupId, dataType, activeOnly, enableDataTaking; }; #define NO_CONFIG_LOOP 0 #define NORMAL_CONFIG_LOOP 1 //Pixel additive bitwise definitions; the 1st 14 correspond to the bit //definitions in the pixel control register. #define CONFIG_MODULE_ENABLE 0 #define CONFIG_MODULE_SELECT 1 #define CONFIG_MODULE_PREAMP 2 #define CONFIG_MODULE_HITBUS 3 #define CONFIG_MODULE_TDAC_0 4 #define CONFIG_MODULE_TDAC_1 5 #define CONFIG_MODULE_TDAC_2 6 #define CONFIG_MODULE_TDAC_3 7 #define CONFIG_MODULE_TDAC_4 8 #define CONFIG_MODULE_FDAC_0 9 #define CONFIG_MODULE_FDAC_1 10 #define CONFIG_MODULE_FDAC_2 11 #define CONFIG_MODULE_FDAC_3 12 #define CONFIG_MODULE_FDAC_4 13 #define CONFIG_MODULE_GLOBAL 16 #define CONFIG_MODULE_CONTROL 17 #define CONFIG_MODULE_TDAC 18 #define CONFIG_MODULE_FDAC 19 #define CONFIG_MODULE_SCAN_TDAC 20 #define CONFIG_MODULE_SCAN_FDAC 21 #define CONFIG_MODULE_MCC 22 #define CONFIG_MODULE_ALL 23 //More definitions are in serialStreams.h #define TEST_GLOBAL_REG (1 +(SEND_CONFIG)) #define R_TEST_GLOBAL_REG 112 typedef struct TestGlobalRegIn { UINT32 structId; UINT32 moduleId; UINT32 FEIndex; } TestGlobalRegIn; typedef struct TestGlobalRegOut { UINT32 testResult; UINT32 dataLen; MDAT32 *data; } TestGlobalRegOut; #define TEST_PIXEL_REG (1 +(TEST_GLOBAL_REG)) #define R_TEST_PIXEL_REG 100 typedef struct TestPixelRegIn { UINT32 structId; UINT32 moduleId; UINT32 FEIndex; UINT32 regId; } TestPixelRegIn; typedef struct TestPixelRegOut { UINT32 testResult; UINT32 dataLen; MDAT32 *data; } TestPixelRegOut; #define SET_MODULE_SCAN_MODE (1 +(TEST_PIXEL_REG)) #define R_SET_MODULE_SCAN_MODE 100 typedef struct SetModuleScanModeIn { UINT32 cfgSet; UINT32 moduleId; PixelScanStrobe scanStrobe; PixelScanTrigger scanTrigger; PixelScanFE scanFE; PixelScanMCC scanMCC; } SetModuleScanModeIn; #define SET_MASK_STAGE (1+(SET_MODULE_SCAN_MODE)) #define R_SET_MASK_STAGE 100 typedef struct SetMaskStageIn { UINT32 stage; } SetMaskStageIn; #define LAST_MASTER_PIXEL_PRIMITIVE (SET_MASK_STAGE) #define NUM_MASTER_PIXEL_PRIMITIVES \ ((LAST_MASTER_PIXEL_PRIMITIVE)-(MASTER_PIXEL_PRIMITIVES_BASE)+1) /************************************************************************************ * Primitive function prototypes (not needed by the host processor). ************************************************************************************/ #if (defined(I_AM_MASTER_DSP) || defined(I_AM_SLAVE_DSP)) INT32 test(struct PRIM_DATA *); INT32 histogramSetup(struct PRIM_DATA *); INT32 fitHistograms(struct PRIM_DATA *); INT32 rwModuleData(struct PRIM_DATA *); INT32 rwModuleVariable(struct PRIM_DATA *); INT32 sendConfig(struct PRIM_DATA *); INT32 testGlobalReg(struct PRIM_DATA *); INT32 testPixelReg(struct PRIM_DATA *); INT32 setModuleScanMode(struct PRIM_DATA *); INT32 setMaskStage(struct PRIM_DATA *); #endif /* primitive parameters definition block */ #endif