/************************************************************************************ * 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 typedef struct { UINT32 dataLen, *dataPtr; } TestIn; #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 typedef struct { 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]; } HistogramSetupIn; typedef struct { UINT32 *ctrlPtr, *pulseCtrPtr, *varRangePtr; } HistogramSetupOut; #define HISTOGRAM_8BIT 8 #define HISTOGRAM_16BIT 16 #define HISTOGRAM_32BIT 32 /* #define R_HISTOGRAM_SETUP 108 typedef struct { UINT32 *base, nBins; UINT8 dataType[2]; UINT8 binSize; UINT8 hashScheme; UINT8 routineType; UINT8 unused[3]; UINT8 opt[4]; UINT32 validModules; UINT32 moduleRangeMap[2]; MDAT32 *xPtr[2]; } HistogramSetupIn; #define HISTO_ROUTINE_C 0 #define HISTO_ROUTINE_ASM 1 */ #define FIT_HISTOGRAMS (1 +(HISTOGRAM_SETUP)) #define R_FIT_HISTOGRAMS 100 typedef struct { UINT32 *fitBase; UINT32 fitFlags; UINT32 routineType; } FitHistogramsIn; typedef struct { UINT32 *fitBase; UINT32 dataLen; } FitHistogramsOut; /* flags: */ #define USER_WEIGHTS 1 #define USER_GUESS 2 #define MAX_LIKELIHOOD 4 /* routine: */ #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 103 typedef struct { UINT32 read, structId, groupId, module, chip, varType; UINT32 info; /* for writing: output message? */ UINT32 dataLen; /* for writing: length of data (e.g. mask= 4) */ MDAT32 *data; /* for writing: *data is written to all selected chips/modules */ } RWModuleVariableIn; typedef struct { UINT32 nModData, dataLen; MDAT32 *data; } RWModuleVariableOut; #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 //#define R_SEND_CONFIG 106 typedef struct { UINT32 port, captureSerOn, moduleNum[2], chipNum, setLinks, restore, structId, groupId, dataType, activeOnly, enableDataTaking; } SendConfigIn; #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_TDAC_5 9 #define CONFIG_MODULE_TDAC_6 10 #define CONFIG_MODULE_FDAC_0 11 #define CONFIG_MODULE_FDAC_1 12 #define CONFIG_MODULE_FDAC_2 13 #define CONFIG_MODULE_FDAC_3 14 #define CONFIG_MODULE_FDAC_4 15 #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 { UINT32 structId; UINT32 moduleId; UINT32 FEIndex; } TestGlobalRegIn; typedef struct { 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 { 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 { 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 { UINT32 cfgSet; UINT32 moduleId; UINT32 chip; UINT32 stageMode; UINT32 stagePattern; 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(PrimData *); //**1 INT32 histogramSetup(PrimData *); INT32 fitHistograms(PrimData *); INT32 rwModuleData(PrimData *); INT32 rwModuleVariable(PrimData *); INT32 sendConfig(PrimData *); INT32 testGlobalReg(PrimData *); INT32 testPixelReg(PrimData *); INT32 setModuleScanMode(PrimData *); INT32 setMaskStage(PrimData *); #endif /* primitive parameters definition block */ #endif