On certain newer Intel Atom based motherboards, for instance the

D2500CC which I have, syscons in text-mode fails to show the expected
contents due to write errors into video-memory.

At least one of the causes is that we copy from syscons internal buffer
to the video memory with optimized bcopy(9) which uses >16bit operations.

Until now, 32bit and wider operations have always worked on the video
memory, but since I cannot find a single source which says that this
SHALL work, and since these chipsets/bugs are now out there, this
commit changes syscons to always use 16bit copies on i386 & amd64.

This may be relevevant for PR's:
	166262
	166639
and various other bug reports floating elsewhere on the net, but
I lack hardware to test those.
This commit is contained in:
phk 2012-06-17 21:02:48 +00:00
parent 77d92cc9de
commit 1b14ff5075

View File

@ -35,9 +35,16 @@
/* some macros */
#if defined(__amd64__) || defined(__i386__)
#define bcopy_io(s, d, c) bcopy((void *)(s), (void *)(d), (c))
#define bcopy_toio(s, d, c) bcopy((void *)(s), (void *)(d), (c))
#define bcopy_fromio(s, d, c) bcopy((void *)(s), (void *)(d), (c))
static __inline void
copyw(uint16_t *src, uint16_t *dst, size_t size)
{
while (size--)
*dst++ = *src++;
}
#define bcopy_io(s, d, c) copyw((void*)(s), (void*)(d), (c))
#define bcopy_toio(s, d, c) copyw((void*)(s), (void*)(d), (c))
#define bcopy_fromio(s, d, c) copyw((void*)(s), (void*)(d), (c))
#define bzero_io(d, c) bzero((void *)(d), (c))
#define fill_io(p, d, c) fill((p), (void *)(d), (c))
#define fillw_io(p, d, c) fillw((p), (void *)(d), (c))