Module Name: src
Committed By: tnn
Date: Thu Aug 5 00:02:51 UTC 2021
Modified Files:
src/sys/dev/ic: ssdfb.c
Log Message:
ssdfb: make it work on big-endian
To generate a diff of this commit:
cvs rdiff -u -r1.15 -r1.16 src/sys/dev/ic/ssdfb.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/ic/ssdfb.c
diff -u src/sys/dev/ic/ssdfb.c:1.15 src/sys/dev/ic/ssdfb.c:1.16
--- src/sys/dev/ic/ssdfb.c:1.15 Mon Aug 2 14:00:48 2021
+++ src/sys/dev/ic/ssdfb.c Thu Aug 5 00:02:51 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: ssdfb.c,v 1.15 2021/08/02 14:00:48 tnn Exp $ */
+/* $NetBSD: ssdfb.c,v 1.16 2021/08/05 00:02:51 tnn Exp $ */
/*
* Copyright (c) 2019 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ssdfb.c,v 1.15 2021/08/02 14:00:48 tnn Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ssdfb.c,v 1.16 2021/08/05 00:02:51 tnn Exp $");
#include "opt_ddb.h"
@@ -1126,24 +1126,27 @@ ssdfb_sync_ssd1322(struct ssdfb_softc *s
src = (uint16_t*)&ri->ri_bits[y * ri->ri_stride];
src32 = (uint32_t*)src;
for (x = 0; x < width_in_blocks; x++) {
-#if _BYTE_ORDER == _LITTLE_ENDIAN
-# ifdef SSDFB_USE_NATIVE_DEPTH
+#ifdef SSDFB_USE_NATIVE_DEPTH
raw_block =
((*src << 12) & 0xf000) |
- ((*src << 4) & 0x0f00) |
- ((*src >> 4) & 0x00f0) |
+ ((*src << 4) & 0x0f00) |
+ ((*src >> 4) & 0x00f0) |
((*src >> 12) & 0x000f);
src++;
-# else
+#else
raw_block =
+# if _BYTE_ORDER == _LITTLE_ENDIAN
((*src32 << 8) & 0x0f00) |
((*src32 << 4) & 0xf000) |
((*src32 >> 16) & 0x000f) |
((*src32 >> 20) & 0x00f0);
+# else
+ ((*src32 >> 24) & 0x000f) |
+ ((*src32 >> 12) & 0x00f0) |
+ ((*src32 ) & 0x0f00) |
+ ((*src32 << 12) & 0xf000);
# endif
src32++;
-#else
-# error please add big endian host support here
#endif
if (raw_block != *blockp) {
*blockp = raw_block;
@@ -1159,7 +1162,6 @@ ssdfb_sync_ssd1322(struct ssdfb_softc *s
blockp++;
}
}
-
blockp = (uint16_t*)sc->sc_gddram;
if (x2 != -1)
return sc->sc_transfer_rect(sc->sc_cookie,