Commit 686f4c25 authored by Adam Wujek's avatar Adam Wujek 💬

userspace/libwr: add vendor name to sfp structure in shmem

Update dump_shmem accordingly.
Increment HAL_SHMEM_VERSION due to changes in shw_sfp_caldata structure.
Still missing matching based on vendor name and part number.
Update hal_shmem.h in ppsi
Signed-off-by: Adam Wujek's avatarAdam Wujek <adam.wujek@cern.ch>
parent 202451db
......@@ -569,6 +569,7 @@ int shw_sfp_read_db(void)
sfp = calloc(1, sizeof(*sfp));
strncpy(sfp->part_num, s, sizeof(sfp->part_num));
sfp->vendor_name[0] = 0;
sfp->vendor_serial[0] = 0;
sfp->flags = SFP_FLAG_CLASS_DATA; /* never used */
......@@ -638,6 +639,7 @@ struct shw_sfp_caldata *shw_sfp_get_cal_data(int num,
/* In the first pass, look for serial number */
while (t) {
// printf("search1 %s %s\n", t->part_num, t->vendor_serial);
/* TODO: Add vendor matching */
if (strncmp(pn, t->part_num, 16) == 0
&& strncmp(t->vendor_serial, "", 16) == 0)
other = t;
......
......@@ -103,8 +103,8 @@ struct hal_port_state {
};
/* This is the overall structure stored in shared memory */
#define HAL_SHMEM_VERSION 4 /* Version 4 because of new fields in struct
* hal_port_state */
#define HAL_SHMEM_VERSION 5 /* Version 5 because of new field vendor_name in
* struct shw_sfp_caldata */
struct hal_shmem_header {
int nports;
struct hal_port_state *ports;
......
......@@ -22,12 +22,13 @@
#define SFP_FLAG_DEVICE_DATA (1 << 1)
struct shw_sfp_caldata {
int flags;
uint32_t flags;
/*
* Part number used to identify it. Serial number because we
* may specify per-specimen delays, but it is not used at this
* point in time
*/
char vendor_name[16];
char part_num[16];
char vendor_serial[16];
/* Callibration data */
......
ppsi @ c22cd7cb
Subproject commit 14583c205cf103fd917076712cc89faec00c0b4e
Subproject commit c22cd7cb69cacc5053f3306aa17d5ef30dc05330
......@@ -218,6 +218,7 @@ struct dump_info hal_port_info [] = {
/* Another internal structure, with a final pointer */
DUMP_FIELD(int, calib.sfp.flags),
DUMP_FIELD_SIZE(char, calib.sfp.vendor_name, 16),
DUMP_FIELD_SIZE(char, calib.sfp.part_num, 16),
DUMP_FIELD_SIZE(char, calib.sfp.vendor_serial, 16),
DUMP_FIELD(double, calib.sfp.alpha),
......
......@@ -466,14 +466,16 @@ static void hal_port_insert_sfp(struct hal_port_state * p)
memcpy(&p->calib.sfp, cdata,
sizeof(struct shw_sfp_caldata));
} else {
fprintf(stderr, "Unknown SFP \"%.16s\" on port %s\n",
shdr.vendor_pn, p->name);
fprintf(stderr, "Unknown SFP vn=\"%.16s\" pn=\"%.16s\" "
"vs=\"%.16s\" on port %s\n", shdr.vendor_name,
shdr.vendor_pn, shdr.vendor_serial, p->name);
memset(&p->calib.sfp, 0, sizeof(p->calib.sfp));
}
p->state = HAL_PORT_STATE_LINK_DOWN;
shw_sfp_set_tx_disable(p->hw_index, 0);
/* Copy the strings anyways, for informative value in shmem */
strncpy(p->calib.sfp.vendor_name, (void *)shdr.vendor_name, 16);
strncpy(p->calib.sfp.part_num, (void *)shdr.vendor_pn, 16);
strncpy(p->calib.sfp.vendor_serial, (void *)shdr.vendor_serial, 16);
......@@ -500,8 +502,10 @@ static void hal_port_insert_sfp(struct hal_port_state * p)
return;
}
fprintf(stderr, "Port %s, SFP \"%.16s\", fiber %i: no alpha known\n",
p->name, p->calib.sfp.part_num, p->fiber_index);
fprintf(stderr, "Port %s, SFP vn=\"%.16s\" pn=\"%.16s\" vs=\"%.16s\", "
"fiber %i: no alpha known\n", p->name,
p->calib.sfp.vendor_name, p->calib.sfp.part_num,
p->calib.sfp.vendor_serial, p->fiber_index);
p->calib.sfp.alpha = 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