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 { ...@@ -131,8 +131,6 @@ enum wrtd_in_structures_indexes {
enum wrtd_out_variables_indexes { enum wrtd_out_variables_indexes {
OUT_VAR_DEVICE_TIME_S=0, OUT_VAR_DEVICE_TIME_S=0,
OUT_VAR_DEVICE_TIME_T, OUT_VAR_DEVICE_TIME_T,
OUT_VAR_DEVICE_COUNTER_MESG,
OUT_VAR_DEVICE_COUNTER_LOOP,
__WRTD_OUT_VAR_MAX, __WRTD_OUT_VAR_MAX,
}; };
enum wrtd_out_structures_indexes { enum wrtd_out_structures_indexes {
...@@ -471,5 +469,10 @@ struct wrtd_out_channel { ...@@ -471,5 +469,10 @@ struct wrtd_out_channel {
struct wrtd_out_channel_private priv; struct wrtd_out_channel_private priv;
}; };
struct wrtd_out {
uint32_t counter_loopback;
uint32_t counter_etherbone;
struct wrtd_trigger_entry last_received;
};
#endif #endif
...@@ -158,6 +158,7 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output, ...@@ -158,6 +158,7 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
struct wrtd_output_state *state) struct wrtd_output_state *state)
{ {
struct wrtd_desc *wrtd = (struct wrtd_desc *)dev; struct wrtd_desc *wrtd = (struct wrtd_desc *)dev;
struct wrtd_out out;
struct wrtd_out_channel chan; struct wrtd_out_channel chan;
struct wrnc_structure_tlv tlv = { struct wrnc_structure_tlv tlv = {
.index = OUT_STRUCT_CHAN_0 + output, .index = OUT_STRUCT_CHAN_0 + output,
...@@ -166,8 +167,6 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output, ...@@ -166,8 +167,6 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
.structure = &chan, .structure = &chan,
}; };
struct wrnc_proto_header hdr = hdr_base_sync; 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; int err;
if (output >= FD_NUM_CHANNELS) { if (output >= FD_NUM_CHANNELS) {
...@@ -194,7 +193,6 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output, ...@@ -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_executed = chan.stats.last_executed;
state->last_enqueued = chan.stats.last_enqueued; state->last_enqueued = chan.stats.last_enqueued;
/* state->last_received = TODO;*/
state->last_lost = chan.stats.last_lost; state->last_lost = chan.stats.last_lost;
state->mode = chan.config.mode; state->mode = chan.config.mode;
...@@ -209,11 +207,16 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output, ...@@ -209,11 +207,16 @@ int wrtd_out_state_get(struct wrtd_node *dev, unsigned int output,
state->dead_time.frac = 0; state->dead_time.frac = 0;
state->dead_time.ticks = chan.config.dead_time; 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) if (err)
return err; return err;
state->received_messages = variables[1]; state->received_messages = out.counter_etherbone;
state->received_loopback = variables[3]; state->received_loopback = out.counter_loopback;
state->last_received = out.last_received;
return 0; return 0;
} }
......
...@@ -114,6 +114,7 @@ unsigned int tlist_count = 0; /**< number of valid trigger entry ...@@ -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 static struct wrtd_out_channel wrtd_out_channels[FD_NUM_CHANNELS]; /**< Output
state state
array */ array */
static struct wrtd_out wrtd_out_device;
int trigger_search(struct wrtd_out_trigger **tlist, int trigger_search(struct wrtd_out_trigger **tlist,
struct wrtd_trig_id *id, struct wrtd_trig_id *id,
...@@ -586,7 +587,7 @@ static void filter_trigger(struct wrtd_trigger_entry *trig) ...@@ -586,7 +587,7 @@ static void filter_trigger(struct wrtd_trigger_entry *trig)
int j; int j;
log_trigger(WRTD_LOG_PROMISC, 0, NULL, trig); log_trigger(WRTD_LOG_PROMISC, 0, NULL, trig);
last_received = *trig; wrtd_out_device.last_received = *trig;
#ifdef RTDEBUG #ifdef RTDEBUG
pp_printf("%s:%d Trigger %d:%d:%d - entry %p\n", pp_printf("%s:%d Trigger %d:%d:%d - entry %p\n",
__func__, __LINE__, __func__, __LINE__,
...@@ -613,14 +614,14 @@ void do_rx(void) ...@@ -613,14 +614,14 @@ void do_rx(void)
filter_trigger (&msg->triggers[i]); filter_trigger (&msg->triggers[i]);
mq_discard (1, WRTD_REMOTE_IN_FD); mq_discard (1, WRTD_REMOTE_IN_FD);
rx_ebone++; wrtd_out_device.counter_etherbone++;
} }
struct wrtd_trigger_entry *ent = loop_queue_pop(); struct wrtd_trigger_entry *ent = loop_queue_pop();
if (ent) { if (ent) {
filter_trigger (ent); filter_trigger (ent);
rx_loopback++; wrtd_out_device.counter_loopback++;
} }
} }
...@@ -791,7 +792,12 @@ err: ...@@ -791,7 +792,12 @@ err:
* the function init() * the function init()
*/ */
static struct rt_structure wrtd_out_structures[__WRTD_OUT_STRUCT_MAX 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[] = { static struct rt_variable wrtd_out_variables[] = {
[OUT_VAR_DEVICE_TIME_S] = { [OUT_VAR_DEVICE_TIME_S] = {
...@@ -804,16 +810,6 @@ static struct rt_variable wrtd_out_variables[] = { ...@@ -804,16 +810,6 @@ static struct rt_variable wrtd_out_variables[] = {
.mask = 0xFFFFFFFF, .mask = 0xFFFFFFFF,
.offset = 0, .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[] = { static action_t *wrtd_out_actions[] = {
...@@ -887,6 +883,9 @@ void init(void) ...@@ -887,6 +883,9 @@ void init(void)
wr_state = WR_LINK_OFFLINE; wr_state = WR_LINK_OFFLINE;
wr_enable_lock(0); wr_enable_lock(0);
/* device */
memset(&wrtd_out_device, 0, sizeof(struct wrtd_out));
/* Channels */ /* Channels */
for (i = 0; i < FD_NUM_CHANNELS; i++) { for (i = 0; i < FD_NUM_CHANNELS; i++) {
memset(&wrtd_out_channels[i], 0, 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