Commit 4a4572bf authored by Federico Vaga's avatar Federico Vaga

wrtd:*:out use structure instead of variables

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>


NOTE
This commit has been created by `git subtree` on the Mock Turtle repository
on tag mock-turtle-2.0

This commit will not compile
parent bdb3da77
......@@ -131,8 +131,6 @@ enum wrtd_in_structures_indexes {
enum wrtd_out_variables_indexes {
OUT_VAR_DEVICE_TIME_S=0,
OUT_VAR_DEVICE_TIME_T,
OUT_VAR_DEVICE_COUNTER_MESG,
OUT_VAR_DEVICE_COUNTER_LOOP,
__WRTD_OUT_VAR_MAX,
};
enum wrtd_out_structures_indexes {
......@@ -471,5 +469,10 @@ struct wrtd_out_channel {
struct wrtd_out_channel_private priv;
};
struct wrtd_out {
uint32_t counter_loopback;
uint32_t counter_etherbone;
struct wrtd_trigger_entry last_received;
};
#endif
......@@ -158,6 +158,7 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
struct wrtd_output_state *state)
{
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrtd_out out;
struct wrtd_out_channel chan;
struct wrnc_structure_tlv tlv = {
.index = OUT_STRUCT_CHAN_0 + output,
......@@ -166,8 +167,6 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
.structure = &chan,
};
struct wrnc_proto_header hdr = hdr_base_sync;
uint32_t variables[] = {OUT_VAR_DEVICE_COUNTER_MESG, 0,
OUT_VAR_DEVICE_COUNTER_LOOP, 0};
int err;
if (output >= FD_NUM_CHANNELS) {
......@@ -194,7 +193,6 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
state->last_executed = chan.stats.last_executed;
state->last_enqueued = chan.stats.last_enqueued;
/* state->last_received = TODO;*/
state->last_lost = chan.stats.last_lost;
state->mode = chan.config.mode;
......@@ -209,11 +207,16 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
state->dead_time.frac = 0;
state->dead_time.ticks = chan.config.dead_time;
err = wrnc_rt_variable_get(wrtd->wrnc, &hdr, variables, 1);
hdr.len = 0; /* reset len */
tlv.index = OUT_STRUCT_DEVICE;
tlv.size = sizeof(struct wrtd_out);
tlv.structure = &out;
err = wrnc_rt_structure_get(wrtd->wrnc, &hdr, &tlv, 1);
if (err)
return err;
state->received_messages = variables[1];
state->received_loopback = variables[3];
state->received_messages = out.counter_etherbone;
state->received_loopback = out.counter_loopback;
state->last_received = out.last_received;
return 0;
}
......
......@@ -114,6 +114,7 @@ unsigned int tlist_count = 0; /**< number of valid trigger entry
static struct wrtd_out_channel wrtd_out_channels[FD_NUM_CHANNELS]; /**< Output
state
array */
static struct wrtd_out wrtd_out_device;
int trigger_search(struct wrtd_out_trigger **tlist,
struct wrtd_trig_id *id,
......@@ -586,7 +587,7 @@ static void filter_trigger(struct wrtd_trigger_entry *trig)
int j;
log_trigger(WRTD_LOG_PROMISC, 0, NULL, trig);
last_received = *trig;
wrtd_out_device.last_received = *trig;
#ifdef RTDEBUG
pp_printf("%s:%d Trigger %d:%d:%d - entry %p\n",
__func__, __LINE__,
......@@ -613,14 +614,14 @@ void do_rx(void)
filter_trigger (&msg->triggers[i]);
mq_discard (1, WRTD_REMOTE_IN_FD);
rx_ebone++;
wrtd_out_device.counter_etherbone++;
}
struct wrtd_trigger_entry *ent = loop_queue_pop();
if (ent) {
filter_trigger (ent);
rx_loopback++;
wrtd_out_device.counter_loopback++;
}
}
......@@ -791,7 +792,12 @@ err:
* the function init()
*/
static struct rt_structure wrtd_out_structures[__WRTD_OUT_STRUCT_MAX
+ FD_HASH_ENTRIES];
+ FD_HASH_ENTRIES] = {
[OUT_STRUCT_DEVICE] = {
.struct_ptr = &wrtd_out_device,
.len = sizeof(struct wrtd_out),
},
};
static struct rt_variable wrtd_out_variables[] = {
[OUT_VAR_DEVICE_TIME_S] = {
......@@ -804,16 +810,6 @@ static struct rt_variable wrtd_out_variables[] = {
.mask = 0xFFFFFFFF,
.offset = 0,
},
[OUT_VAR_DEVICE_COUNTER_MESG] = {
.addr = (uint32_t)&rx_ebone,
.mask = 0xFFFFFFFF,
.offset = 0,
},
[OUT_VAR_DEVICE_COUNTER_LOOP] = {
.addr = (uint32_t)&rx_loopback,
.mask = 0xFFFFFFFF,
.offset = 0,
},
};
static action_t *wrtd_out_actions[] = {
......@@ -887,6 +883,9 @@ void init(void)
wr_state = WR_LINK_OFFLINE;
wr_enable_lock(0);
/* device */
memset(&wrtd_out_device, 0, sizeof(struct wrtd_out));
/* Channels */
for (i = 0; i < FD_NUM_CHANNELS; i++) {
memset(&wrtd_out_channels[i], 0,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment