Incorrect struct onfi_params definition
Kristof Provost
kristof at sigsegv.be
Wed Nov 6 23:00:38 UTC 2013
On 2013-11-06 13:56:46 (-0800), Warner Losh <imp at bsdimp.com> wrote:
> On Nov 6, 2013, at 1:28 PM, Kristof Provost wrote:
> > The definition of struct onfi_params in sys/dev/nand/nand.h is
> > incorrect. The total structure size should be 256 bytes, but it's only
> > 176 bytes.
> >
> > That's because the vendor_spec array was declared as being 8 bytes,
> > rather than the 88 bytes it should be. Clearly a typo.
> >
> > This patch should fix it:
>
> I'd add a CT_ASSERT sizeof(onfi_params) == 256 too.
>
Ok, here's an updated patch:
diff --git a/sys/dev/nand/nand.h b/sys/dev/nand/nand.h
index 0d6d7b4..6e3fc04 100644
--- a/sys/dev/nand/nand.h
+++ b/sys/dev/nand/nand.h
@@ -31,6 +31,7 @@
#include <sys/bus.h>
#include <sys/param.h>
+#include <sys/systm.h>
#include <sys/lock.h>
#include <sys/sx.h>
#include <sys/taskqueue.h>
@@ -217,9 +218,10 @@ struct onfi_params {
uint8_t driver_strength_support;
uint8_t res4[12];
uint16_t vendor_rev;
- uint8_t vendor_spec[8];
+ uint8_t vendor_spec[88];
uint16_t crc;
}__attribute__((packed));
+CTASSERT(sizeof(struct onfi_params) == 256);
struct nand_ecc_data {
int eccsize; /* Number of data bytes per ECC step */
Regards,
Kristof
More information about the freebsd-embedded
mailing list