This commit is contained in:
christos 2017-10-16 11:37:20 +00:00
parent 5bf5a8b9c7
commit d72cb7ab3f
1 changed files with 21 additions and 25 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: spdmem.c,v 1.25 2017/10/16 08:33:48 msaitoh Exp $ */
/* $NetBSD: spdmem.c,v 1.26 2017/10/16 11:37:20 christos Exp $ */
/*
* Copyright (c) 2007 Nicolas Joly
@ -35,7 +35,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: spdmem.c,v 1.25 2017/10/16 08:33:48 msaitoh Exp $");
__KERNEL_RCSID(0, "$NetBSD: spdmem.c,v 1.26 2017/10/16 11:37:20 christos Exp $");
#include <sys/param.h>
#include <sys/device.h>
@ -748,23 +748,30 @@ decode_ddr2(const struct sysctlnode *node, device_t self, struct spdmem *s)
}
static void
decode_ddr3(const struct sysctlnode *node, device_t self, struct spdmem *s)
print_part(const char *part, size_t pnsize)
{
int dimm_size, cycle_time, bits;
unsigned char buf[sizeof(s->sm_ddr3.ddr3_part) + 1];
int i, pnsize;
char buf[64]; /* big enough */
pnsize = sizeof(s->sm_ddr3.ddr3_part);
memcpy(buf, s->sm_ddr3.ddr3_part, pnsize);
buf[pnsize] = 0; /* Terminate for full string */
for (i = pnsize - 1; i >= 0; i--) {
KASSERT(pnsize < sizeof(buf));
memcpy(buf, part, pnsize);
buf[pnsize] = '\0'; /* Terminate for full string */
for (size_t i = pnsize; i-- > 0;) {
if (buf[i] == 0x20) /* remove trailing spaces */
buf[i] = 0;
buf[i] = '\0';
else
break;
}
aprint_naive("\n");
aprint_normal(": %s\n", buf);
}
static void
decode_ddr3(const struct sysctlnode *node, device_t self, struct spdmem *s)
{
int dimm_size, cycle_time, bits;
aprint_naive("\n");
print_part(s->sm_ddr3.ddr3_part, sizeof(s->sm_ddr3.ddr3_part));
aprint_normal_dev(self, "%s", spdmem_basic_types[s->sm_type]);
if (s->sm_ddr3.ddr3_mod_type ==
@ -873,21 +880,10 @@ decode_ddr4(const struct sysctlnode *node, device_t self, struct spdmem *s)
{
int dimm_size, cycle_time;
int tAA_clocks, tRCD_clocks,tRP_clocks, tRAS_clocks;
unsigned char buf[sizeof(s->sm_ddr4.ddr4_part_number) + 1];
int i, pnsize;
pnsize = sizeof(s->sm_ddr4.ddr4_part_number);
memcpy(buf, s->sm_ddr4.ddr4_part_number, pnsize);
buf[pnsize] = 0; /* Terminate for full string */
for (i = pnsize - 1; i >= 0; i--) {
if (buf[i] == 0x20) /* remove trailing spaces */
buf[i] = 0;
else
break;
}
aprint_naive("\n");
aprint_normal(": %s\n", buf);
print_part(s->sm_ddr4.ddr4_part_number,
sizeof(s->sm_ddr4.ddr4_part_number));
aprint_normal_dev(self, "%s", spdmem_basic_types[s->sm_type]);
if (s->sm_ddr4.ddr4_mod_type < __arraycount(spdmem_ddr4_module_types))
aprint_normal(" (%s)",