hw/net/can/ctucan_core: Handle big-endian hosts
commit676ea985c0d13c9d39b9ead4c60005abb9ea4218
authorPeter Maydell <peter.maydell@linaro.org>
Tue, 10 Nov 2020 21:52:49 +0000 (10 22:52 +0100)
committerJason Wang <jasowang@redhat.com>
Wed, 11 Nov 2020 12:34:36 +0000 (11 20:34 +0800)
treef9b6317f2d24de711595330538bb56c231dfd951
parente0784d8375962da584fa92be8457845f433e2ae2
hw/net/can/ctucan_core: Handle big-endian hosts

The ctucan driver defines types for its registers which are a union
of a uint32_t with a struct with bitfields for the individual
fields within that register. This is a bad idea, because bitfields
aren't portable. The ctu_can_fd_regs.h header works around the
most glaring of the portability issues by defining the
fields in two different orders depending on the setting of the
__LITTLE_ENDIAN_BITFIELD define. However, in ctucan_core.h this
is unconditionally set to 1, which is wrong for big-endian hosts.

Set it only if HOST_WORDS_BIGENDIAN is not set. There is no need
for a "have we defined it already" guard, because the only place
that should set it is ctucan_core.h, which has the usual
double-inclusion guard.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Acked-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Tested-by: Pavel Pisa <pisa@cmp.felk.cvut.cz>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/net/can/ctucan_core.h