generic: routerboot sysfs: move tag_show_u32()

This routine will be shared between hard and soft config drivers.

Tested-by: Koen Vandeputte <koen.vandeputte@ncentric.com>
Tested-by: Roger Pueyo Centelles <roger.pueyo@guifi.net>
Signed-off-by: Thibaut VARÈNE <hacks@slashdirt.org>
This commit is contained in:
Thibaut VARÈNE 2020-05-15 18:00:08 +02:00 committed by Koen Vandeputte
parent f36e710e2d
commit 89226b8666
3 changed files with 23 additions and 22 deletions

View File

@ -310,25 +310,6 @@ static struct hc_hwopt {
}, },
}; };
static ssize_t hc_tag_show_u32(const u8 *pld, u16 pld_len, char *buf)
{
char *out = buf;
u32 data; // cpu-endian
/* Caller ensures pld_len > 0 */
if (pld_len % sizeof(data))
return -EINVAL;
data = *(u32 *)pld;
do {
out += sprintf(out, "0x%08x\n", data);
data++;
} while ((pld_len -= sizeof(data)));
return out - buf;
}
/* /*
* The MAC is stored network-endian on all devices, in 2 32-bit segments: * The MAC is stored network-endian on all devices, in 2 32-bit segments:
* <XX:XX:XX:XX> <XX:XX:00:00>. Kernel print has us covered. * <XX:XX:XX:XX> <XX:XX:00:00>. Kernel print has us covered.
@ -389,7 +370,7 @@ static struct hc_attr {
} hc_attrs[] = { } hc_attrs[] = {
{ {
.tag_id = RB_ID_FLASH_INFO, .tag_id = RB_ID_FLASH_INFO,
.tshow = hc_tag_show_u32, .tshow = routerboot_tag_show_u32s,
.kattr = __ATTR(flash_info, S_IRUSR, hc_attr_show, NULL), .kattr = __ATTR(flash_info, S_IRUSR, hc_attr_show, NULL),
}, { }, {
.tag_id = RB_ID_MAC_ADDRESS_PACK, .tag_id = RB_ID_MAC_ADDRESS_PACK,
@ -409,11 +390,11 @@ static struct hc_attr {
.kattr = __ATTR(board_serial, S_IRUSR, hc_attr_show, NULL), .kattr = __ATTR(board_serial, S_IRUSR, hc_attr_show, NULL),
}, { }, {
.tag_id = RB_ID_MEMORY_SIZE, .tag_id = RB_ID_MEMORY_SIZE,
.tshow = hc_tag_show_u32, .tshow = routerboot_tag_show_u32s,
.kattr = __ATTR(mem_size, S_IRUSR, hc_attr_show, NULL), .kattr = __ATTR(mem_size, S_IRUSR, hc_attr_show, NULL),
}, { }, {
.tag_id = RB_ID_MAC_ADDRESS_COUNT, .tag_id = RB_ID_MAC_ADDRESS_COUNT,
.tshow = hc_tag_show_u32, .tshow = routerboot_tag_show_u32s,
.kattr = __ATTR(mac_count, S_IRUSR, hc_attr_show, NULL), .kattr = __ATTR(mac_count, S_IRUSR, hc_attr_show, NULL),
}, { }, {
.tag_id = RB_ID_HW_OPTIONS, .tag_id = RB_ID_HW_OPTIONS,

View File

@ -191,6 +191,25 @@ ssize_t routerboot_tag_show_string(const u8 *pld, u16 pld_len, char *buf)
return scnprintf(buf, pld_len+1, "%s\n", pld); return scnprintf(buf, pld_len+1, "%s\n", pld);
} }
ssize_t routerboot_tag_show_u32s(const u8 *pld, u16 pld_len, char *buf)
{
char *out = buf;
u32 data; // cpu-endian
/* Caller ensures pld_len > 0 */
if (pld_len % sizeof(data))
return -EINVAL;
data = *(u32 *)pld;
do {
out += sprintf(out, "0x%08x\n", data);
data++;
} while ((pld_len -= sizeof(data)));
return out - buf;
}
module_init(routerboot_init); module_init(routerboot_init);
module_exit(routerboot_exit); module_exit(routerboot_exit);

View File

@ -32,5 +32,6 @@ int __init rb_softconfig_init(struct kobject *rb_kobj);
void __exit rb_softconfig_exit(void); void __exit rb_softconfig_exit(void);
ssize_t routerboot_tag_show_string(const u8 *pld, u16 pld_len, char *buf); ssize_t routerboot_tag_show_string(const u8 *pld, u16 pld_len, char *buf);
ssize_t routerboot_tag_show_u32s(const u8 *pld, u16 pld_len, char *buf);
#endif /* _ROUTERBOOT_H_ */ #endif /* _ROUTERBOOT_H_ */