GLAST / LAT > DAQ and FSW > FSW > Doxygen Index> LATC / V9-1-2 > latc_wb / mv2304
#include "LATC/LATC_msgs.h"
#include "latp_p.h"
#include "data.h"
#include "AG_descriptions_s.h"
#include "AG_lem_s.h"
#include "AG_addr_s.h"
#include "AG_fldEnums_s.h"
#include "AG_regEnums_s.h"
#include "number.ic"
#include "LEM/msg_macros.h"
#include "LEM/list.h"
#include "LEM/decode.h"
Defines | |
#define | NELEM(x) (sizeof x / sizeof x[0]) |
Functions | |
static unsigned | traverseRead (LATC_imm *imm, LEM_read *lem_r, LATC_type type, unsigned *index, LATC_addr *addr, unsigned depth, const LATC_map *ign) |
Traverse the LAT reading the configuration for all nodes. | |
static unsigned | traverseLoad (LATC_imm *imm, LEM_load *lem_l, LATC_type type, unsigned *index, LATC_addr *addr, unsigned depth) |
Traverse the LAT reading the configuration for all nodes. | |
static unsigned | loadReg (LEM_load *lem_l, LATC_addr *addr, unsigned reg, unsigned short *ptr) |
Load a single register. | |
static unsigned | readReg (LEM_read *lem_r, LATC_addr *addr, unsigned reg, void *dst) |
Read a single register. | |
static void | handleReadErrors (unsigned error, unsigned index, void *ptr) |
Read error callback routine for LATC. | |
static unsigned | loadSimple (LATC_imm *imm, LEM_load *lem_l, LATC_type type) |
Load a generic LAT component. | |
static unsigned | loadSplit (LATC_imm *imm, LEM_load *lem_l, int nLow, int nHigh) |
Load the layer splits. | |
static unsigned | loadLayerSplit (LEM_load *lem_l, LATC_addr *addr, short low, short high) |
Load the splits for a single layer. | |
static unsigned | loadTracker (LATC_imm *imm, LEM_load *lem_l, LATC_type type) |
Load the tracker front ends from the configuration tree. | |
static unsigned | loadCpt (LATC_imm *imm, LEM_load *lem_l, LATC_type type, unsigned index, LATC_addr *addr) |
Set all the registers of the target component. | |
static unsigned | readSimple (LATC_imm *imm, LEM_read *lem_r, LATC_type type, const LATC_map *ign) |
Read the current configuration for a register type. | |
static unsigned | readSplit (LATC_imm *imm, LEM_read *lem_r, const LATC_map *ign) |
Read the current layer splits from the TRC TFE_CNT settings. | |
static unsigned | readTracker (LATC_imm *imm, LEM_read *lem_r, LATC_type type, const LATC_map *ign) |
Read the current TFE settings. | |
static unsigned | readCpt (LATC_imm *imm, LEM_read *lem_r, LATC_type type, unsigned index, LATC_addr *addr) |
Read all the registers of the current component. | |
unsigned | LATC_read (LATC_imm *imm, LEM_micr *cr, LATC_di *di, const LATC_map *ign) |
Read the current configuration of the LAT. | |
unsigned | LATC_load (LATC_imm *imm, LEM_micr *cr) |
Load the LAT with the configuration held in imm. | |
unsigned | loadAfeConfig (LATC_imm *imm, unsigned int mask, unsigned int value0, unsigned int value1, unsigned int rcMask, unsigned int feMask, LEM_micr *cr) |
Load the AFE configuration register. | |
unsigned | loadCfeConfig0 (LATC_imm *imm, unsigned int mask, unsigned int value, LEM_micr *cr) |
Load CFE configuration register 0. | |
unsigned | loadCfeConfig1 (LATC_imm *imm, unsigned int mask, unsigned int value0, unsigned int value1, unsigned int cMask, LEM_micr *cr) |
Load CFE configuration register 1. | |
unsigned | loadTkrSplits (LATC_imm *imm, int nLow, int nHigh, LEM_micr *cr) |
Load TKR splits values. | |
unsigned | loadTfeDac (LATC_imm *imm, unsigned int mask, unsigned int value, int nLow, int nHigh, LEM_micr *cr) |
Load the TFE DAC register. | |
unsigned | setTrigger (LATC_imm *imm, int enable, int marker, LEM_micr *cr) |
Enable or disable triggers. |
void handleReadErrors | ( | unsigned | error, | |
unsigned | index, | |||
void * | ptr | |||
) | [static] |
Read error callback routine for LATC.
This routine clears the bit in the LATC_map corresponding to the register that failed to read
error | Error field from a result item | |
index | Index of the command the failed | |
ptr | Pointer to the array of LATC_di |
References clearBit().
Referenced by LATC_read().
unsigned LATC_load | ( | LATC_imm * | imm, | |
LEM_micr * | cr | |||
) |
Load the LAT with the configuration held in imm.
imm | The IMM structure to use as the basis for the load commands sent to the LAT | |
cr | Pointer to structure holding multi-item command and response lists (plus some state information) |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References LEM_load::cr, LEM_load::ldfn, loadSimple(), loadSplit(), and loadTracker().
Referenced by LATC_configure().
unsigned LATC_read | ( | LATC_imm * | imm, | |
LEM_micr * | cr, | |||
LATC_di * | di, | |||
const LATC_map * | ign | |||
) |
Read the current configuration of the LAT.
imm | Pointer to the IMM structure to populate from the LAT | |
cr | Pointer to structure holding multi-item command and response lists (plus some state information) | |
di | Array of lem_max_ci latc_di objects that capture read errors from the corresponding command items | |
ign | Map of the sections of the lat known to be bad or not present so can be ignored. |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds. | |
LEM_* | An error concerning the queuing of the c/r list
|
References LEM_read::cr, LEM_read::ddfn, LEM_read::di, handleReadErrors(), LEM_read::rdfn, readSimple(), readSplit(), and readTracker().
Referenced by LATC_capture().
unsigned loadAfeConfig | ( | LATC_imm * | imm, | |
unsigned int | mask, | |||
unsigned int | value0, | |||
unsigned int | value1, | |||
unsigned int | rcMask, | |||
unsigned int | feMask, | |||
LEM_micr * | cr | |||
) |
Load the AFE configuration register.
The AFE configuration register is loaded with a modified version of the value from the LAT configuration, with the specified bits replaced.
imm | Pointer to the cached in-memory model of the LATC registers | |
mask | Mask of bits to be changed from the configuration. | |
value0 | The value to be masked and merged with the configuration value for front-ends not selected by the RC and FE masks. | |
value1 | The value to be masked and merged with the configuration value for front-ends selected by the RC and FE masks. | |
rcMask | Mask of bits, one per RC, specifying which RCs are selected. | |
feMask | Mask of bits, one per FE, specifying which FEs within selected RCs are selected. | |
cr | Multi-item command-response list used to load the modified registers |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
References LATC_addr::acd, checkBit(), LEM_load::cr, ACD_addr::fe, LEM_load::ldfn, loadReg(), and ACD_addr::rc.
Referenced by LATC_loadAfeConfig().
unsigned loadCfeConfig0 | ( | LATC_imm * | imm, | |
unsigned int | mask, | |||
unsigned int | value, | |||
LEM_micr * | cr | |||
) |
Load CFE configuration register 0.
CFE configuration register 0 is loaded with a modified version of the value from the LAT configuration, with the specified bits replaced.
imm | Pointer to the cached in-memory model of the LATC registers | |
mask | Mask of bits to be changed from the configuration. | |
value | The value to be masked and merged with the configuration value. | |
cr | Multi-item command-response list used to load the modified registers |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
References TEM_addr::cc, checkBit(), LEM_load::cr, TEM_addr::fe, LEM_load::ldfn, loadReg(), TEM_addr::rc, LATC_addr::tem, and TEM_addr::to.
Referenced by LATC_loadCfeConfig0().
unsigned loadCfeConfig1 | ( | LATC_imm * | imm, | |
unsigned int | mask, | |||
unsigned int | value0, | |||
unsigned int | value1, | |||
unsigned int | cMask, | |||
LEM_micr * | cr | |||
) |
Load CFE configuration register 1.
CFE configuration register 1 is loaded with a modified version of the value from the LAT configuration, with the specified bits replaced.
imm | Pointer to the cached in-memory model of the LATC registers | |
mask | Mask of bits to be changed from the configuration. | |
value0 | The value to be masked and merged with the configuration value for front-ends whose bit is clear in the column mask. | |
value1 | The value to be masked and merged with the configuration value for front-ends whose bit is set in the column mask. | |
cMask | Mask of bits, one per column, specifying which value is to be used for loading the config register. | |
cr | Multi-item command-response list used to load the modified registers |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
References TEM_addr::cc, checkBit(), LEM_load::cr, TEM_addr::fe, LEM_load::ldfn, loadReg(), TEM_addr::rc, LATC_addr::tem, and TEM_addr::to.
Referenced by LATC_loadCfeConfig1().
unsigned loadCpt | ( | LATC_imm * | imm, | |
LEM_load * | lem_l, | |||
LATC_type | type, | |||
unsigned | index, | |||
LATC_addr * | addr | |||
) | [static] |
Set all the registers of the target component.
imm | IMM structure containing the values to load onto the LAT | |
lem_l | Pointer to the command/response lists to use for loading the LAT | |
type | Component type | |
index | Componenet instance being loaded | |
addr | Hierarchical representation of the index (address of the instance) |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References checkBit(), loadReg(), CptDescription::nregs, CptDescription::rd, RegDescription::regId, and CptDescription::width.
Referenced by loadSimple(), loadTracker(), and traverseLoad().
Load the splits for a single layer.
This routine loads the mode registers on all the TFEs in the layer and sets the split values in the CSRs of the two TRCs in the layer.
lem_l | Pointer to the command and response lists used for loading the LAT | |
addr | Pointer to an address structure used for loading the TFEs and TRC | |
low | ID of the highest low talking TFE | |
high | ID of the lowest high talking TFE |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References TEM_addr::fe, LATC_addr::layer, LEM_load::ldfn, loadReg(), and LATC_addr::tem.
Referenced by loadSplit().
unsigned loadReg | ( | LEM_load * | lem_l, | |
LATC_addr * | addr, | |||
unsigned | reg, | |||
unsigned short * | ptr | |||
) | [static] |
Load a single register.
lem_l | Pointer to the command/response lists to use for register loads | |
addr | Pointer to a LATC_addr address structure | |
reg | Register index | |
ptr | Pointer to data to be loaded |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References LEM_load::cr, and LEM_load::ldfn.
Referenced by loadAfeConfig(), loadCfeConfig0(), loadCfeConfig1(), loadCpt(), loadLayerSplit(), and loadTfeDac().
unsigned loadSimple | ( | LATC_imm * | imm, | |
LEM_load * | lem_l, | |||
LATC_type | type | |||
) | [static] |
Load a generic LAT component.
imm | IMM structure containing the values to load onto the LAT | |
lem_l | Pointer to command and response lists used for loading the LAT | |
type | Type of LAT component to load |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References LATC_addr::cpt, loadCpt(), and traverseLoad().
Referenced by LATC_load().
unsigned loadSplit | ( | LATC_imm * | imm, | |
LEM_load * | lem_l, | |||
int | nLow, | |||
int | nHigh | |||
) | [static] |
Load the layer splits.
imm | IMM structure containing the values to load onto the LAT | |
lem_l | Pointer to the command response lists used for loading the LAT | |
nLow | Number of TFEs to talk on the low side, or -1 if the configured values are to be used. | |
nHigh | Number of TFEs to talk on the high side, or -1 if the configured values are to be used. |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References checkBit(), Layer_addr::la, LATC_addr::layer, loadLayerSplit(), and Layer_addr::to.
Referenced by LATC_load(), and loadTkrSplits().
unsigned loadTfeDac | ( | LATC_imm * | imm, | |
unsigned int | mask, | |||
unsigned int | value, | |||
int | nLow, | |||
int | nHigh, | |||
LEM_micr * | cr | |||
) |
Load the TFE DAC register.
The TFE DAC register is loaded with a modified version of the value from the LAT configuration, with the specified bits replaced.
imm | Pointer to the cached in-memory model of the LATC registers | |
mask | Mask of bits to be changed from the configuration. | |
value | The value to be masked and merged with the configuration value. | |
nLow | Number of TFEs talking on the low side, or -1 if the configured values are being used. | |
nHigh | Number of TFEs talking on the high side, or -1 if the configured values are being used. | |
cr | Multi-item command-response list used to load the modified registers |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
References checkBit(), LEM_load::cr, Layer_addr::fe, Layer_addr::la, LATC_addr::layer, LEM_load::ldfn, loadReg(), LATC_addr::tem, and Layer_addr::to.
Referenced by LATC_loadTfeDac().
unsigned loadTkrSplits | ( | LATC_imm * | imm, | |
int | nLow, | |||
int | nHigh, | |||
LEM_micr * | cr | |||
) |
Load TKR splits values.
The tracker RC and FE registers are loaded to reflect the given split values.
imm | Pointer to the cached in-memory model of the LATC registers | |
nLow | Number of TFEs to talk on the low side, or -1 if the configured values are to be used. | |
nHigh | Number of TFEs to talk on the high side, or -1 if the configured values are to be used. | |
cr | Multi-item command-response list used to load the modified registers |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
References LEM_load::cr, LEM_load::ldfn, and loadSplit().
Referenced by LATC_loadTkrSplits().
unsigned loadTracker | ( | LATC_imm * | imm, | |
LEM_load * | lem_l, | |||
LATC_type | type | |||
) | [static] |
Load the tracker front ends from the configuration tree.
imm | IMM structure containing the values to load onto the LAT | |
lem_l | Pointer to the command/response lists used for loading the LAT | |
type | Type of component being loaded, either TFE or TDC |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References checkBit(), Layer_addr::fe, Layer_addr::la, LATC_addr::layer, loadCpt(), LATC_addr::tem, and Layer_addr::to.
Referenced by LATC_load().
unsigned readCpt | ( | LATC_imm * | imm, | |
LEM_read * | lem_r, | |||
LATC_type | type, | |||
unsigned | index, | |||
LATC_addr * | addr | |||
) | [static] |
Read all the registers of the current component.
imm | Pointer to the structure to populate from the LAT register values | |
lem_r | Command/response lists to use for the read | |
type | Cpt type being read | |
index | Instance of the component being read | |
addr | Hierarchical representation of the index (address of the instance to read). |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References LEM_read::cr, LEM_read::di, LATC_di::index, LATC_di::map, CptDescription::nregs, CptDescription::rd, readReg(), RegDescription::regId, setBit(), LATC_di::type, and CptDescription::width.
Referenced by readSimple(), readTracker(), and traverseRead().
Read a single register.
lem_r | Pointer to command/response lists for reading the LAT registers | |
addr | Hierarchical identification of the instance to read | |
reg | Identification of the register to read | |
dst | Location to place value read from register |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References LEM_read::cr, LEM_read::ddfn, and LEM_read::rdfn.
Referenced by readCpt(), and readSplit().
unsigned readSimple | ( | LATC_imm * | imm, | |
LEM_read * | lem_r, | |||
LATC_type | type, | |||
const LATC_map * | ign | |||
) | [static] |
Read the current configuration for a register type.
imm | IMM structure being populated by the read operation | |
lem_r | Pointer to the command/response lists and other structures used to read the LAT | |
type | Component type to read | |
ign | Map of the sections of the LAT known to be bad or not present so can be ignored. |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References readCpt(), and traverseRead().
Referenced by LATC_read().
unsigned readSplit | ( | LATC_imm * | imm, | |
LEM_read * | lem_r, | |||
const LATC_map * | ign | |||
) | [static] |
Read the current layer splits from the TRC TFE_CNT settings.
imm | Pointer to the structure to populate from the LAT register values | |
lem_r | Pointer to the command response lists | |
ign | Map of the sections of the LAT known to be bad or not present so can be ignored. |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References checkBit(), LEM_read::cr, LEM_read::di, LATC_di::index, Layer_addr::la, LATC_addr::layer, LATC_di::map, readReg(), setBit(), LATC_addr::tem, Layer_addr::to, and LATC_di::type.
Referenced by LATC_read().
unsigned readTracker | ( | LATC_imm * | imm, | |
LEM_read * | lem_r, | |||
LATC_type | type, | |||
const LATC_map * | ign | |||
) | [static] |
Read the current TFE settings.
imm | Pointer to the structure to populate from the LAT register values | |
lem_r | Pointer to the command/response lists used for reading the LAT | |
type | Component type being read (either TFE or TDC) | |
ign | Map of the sections of the LAT known to be bad or not present so can be ignored. |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References checkBit(), Layer_addr::fe, Layer_addr::la, LATC_addr::layer, readCpt(), LATC_addr::tem, and Layer_addr::to.
Referenced by LATC_read().
unsigned setTrigger | ( | LATC_imm * | imm, | |
int | enable, | |||
int | marker, | |||
LEM_micr * | cr | |||
) |
Enable or disable triggers.
This routine enables or disables LAT triggers. If the marker parameter is non-zero, the LAT is first configured to broadcast a trigger message to all CPUs upon receipt of a solicited trigger, a solicited trigger is issued, and the configuration restored from the IMM data.
imm | IMM structure containing LAT configuration data | |
enable | If non-zero, triggers are anabled; otherwise disabled | |
marker | If non-zero, causes a solicited trigger with this value in the event data. | |
cr | Pointer to the multi-item command/response list. |
LATC_SUCCESS | if all goes well | |
LEM_* | if there is an error arising from one of the register load commands |
Referenced by LATC_disableTriggers(), and LATC_enableTriggers().
unsigned traverseLoad | ( | LATC_imm * | imm, | |
LEM_load * | lem_l, | |||
LATC_type | type, | |||
unsigned * | index, | |||
LATC_addr * | addr, | |||
unsigned | depth | |||
) | [static] |
Traverse the LAT reading the configuration for all nodes.
This routine loads the configuration for any instances of the current component whose configuration differs from the default
imm | IMM structure containing the values to load onto the LAT | |
lem_l | Pointer to the command response lists used for loading the LAT | |
type | Type of component to load | |
index | Pointer to the index of the next instance to load | |
addr | Hierarchical representation of the index | |
depth | Number of recursive calls to traverse_Load |
LATC_SUCCESS | If the LAT is loaded successfully | |
LEM_* | If there is an error arising from one of the load commands |
References LATC_addr::cpt, and loadCpt().
Referenced by loadSimple().
unsigned traverseRead | ( | LATC_imm * | imm, | |
LEM_read * | lem_r, | |||
LATC_type | type, | |||
unsigned * | index, | |||
LATC_addr * | addr, | |||
unsigned | depth, | |||
const LATC_map * | ign | |||
) | [static] |
Traverse the LAT reading the configuration for all nodes.
imm | Pointer to the structure to populate from the LAT register values | |
lem_r | Pointer to the command/response lists used for reading the LAT | |
type | The type of component to read | |
index | Pointer to a variable tracking the current instance being read | |
addr | Pointer to an address structure containing the same information as index, but in heirarchical form | |
depth | Number of times this function has been recursively called. | |
ign | Map of the sections of the LAT known to be bad or not present so can be ignored. |
LATC_SUCCESS | If all goes well - note that individual register reads may fail but the operation as a whole still succeeds | |
LEM_* | An error concerning the queuing of the C/R list
|
References checkBit(), LATC_addr::cpt, and readCpt().
Referenced by readSimple().