Hi, They did the following to vt_buffer.h. diff -ruN linux-2.2.15/include/linux/vt_buffer.h linux-2.2.15-LL/include/linux/vt_buffer.h --- linux-2.2.15/include/linux/vt_buffer.h Wed Mar 8 10:13:29 2000 +++ linux-2.2.15-LL/include/linux/vt_buffer.h Wed Mar 8 10:47:31 2000 @@ -19,25 +19,129 @@ #include <asm/vga.h> #endif +#define VT_DOUBLEBUF 1 + #ifndef VT_BUF_HAVE_RW -#define scr_writew(val, addr) (*(addr) = (val)) -#define scr_readw(addr) (*(addr)) -#define scr_memcpyw(d, s, c) memcpy(d, s, c) -#define scr_memmovew(d, s, c) memmove(d, s, c) -#define VT_BUF_HAVE_MEMCPYW -#define VT_BUF_HAVE_MEMMOVEW -#define scr_memcpyw_from(d, s, c) memcpy(d, s, c) -#define scr_memcpyw_to(d, s, c) memcpy(d, s, c) -#define VT_BUF_HAVE_MEMCPYF + +#if VT_DOUBLEBUF + +extern unsigned long vga_vram_base, vga_vram_end; + +extern inline unsigned short * __v2m(const unsigned short * s, int cons) +{ + struct vc_data *c; + unsigned short * __res; + + c = vc_cons[cons].d; + + if (*c->vc_display_fg == c) { + __res = (unsigned short *)(c->vc_videobuf+ + ((unsigned long)(s) - vga_vram_base)); + /* + * debugging hacks: + */ + if (((unsigned int)s < vga_vram_base) || + ((unsigned int)s > vga_vram_end)) { +// printk("P1:<%p->%p(%p)>?\n", s, __res, (void *)&&__y); + __res = (unsigned short *)(s); + } else { + if ((__res < (unsigned short *)c->vc_videobuf) || (__res >= (unsigned short *)(c->vc_videobuf+128*1024))) { +// printk("P2:<%p->%p(%p)>?\n", s, __res, (void *)&&__y); + __res = (unsigned short *)(s); + } + } + } else + __res = (unsigned short *)(s); + return __res; +} + +#define v2m(x) __v2m(x,currcons) + +// #define v2m(x) ({ unsigned short * __res; if (vc_cons[currcons].d->vc_videobuf) __res = (unsigned short *)(vc_cons[currcons].d->vc_videobuf+((unsigned long)(x)-vc_cons[currcons].d->vc_origin)); else { extern int magic_flag; magic_flag++; __res = (unsigned short *)(x); } __res; }) +// #define v2m(x) ({ unsigned short * __res; __res = (unsigned short *)(vc_cons[currcons].d->vc_videobuf+((unsigned long)(x)-vga_vram_base)); __res; }) + +#if 1 +extern inline void __scr_writew(u16 val, u16 *addr, int currcons) +{ + *addr = val; + *(v2m(addr)) = val; +} +#define scr_writew(val, addr) __scr_writew(val, addr, currcons) + +# define scr_readw(addr) ({*(v2m(addr));}) +#else +# define scr_writew(val, addr) ({*(addr) = (val); }) +# define scr_readw(addr) ({*(addr);}) +#endif + +extern inline void __scr_memcpyw(void * d, void * s, + unsigned int c, int currcons) +{ + memcpy(v2m(d), v2m(s), c); + memcpy(d, v2m(d), c); +} +#define scr_memcpyw(d, s, c) __scr_memcpyw(d, s, c, currcons) + +extern inline void __scr_memmovew(void * d, void * s, + unsigned int c, int currcons) +{ + memmove(v2m(d), v2m(s), c); + memcpy(d, v2m(d), c); +} +# define scr_memmovew(d, s, c) __scr_memmovew(d, s, c, currcons) +# define VT_BUF_HAVE_MEMCPYW +# define VT_BUF_HAVE_MEMMOVEW +extern inline void __scr_memcpyw_to(void * d, void * s, + unsigned int c, int currcons) +{ + memcpy(v2m(d), s, c); + memcpy(d, s, c); +} +# define scr_memcpyw_to(d, s, c) __scr_memcpyw_to(d, s, c, currcons) +# define scr_memcpyw_from(d, s, c) ({ memcpy(d, v2m(s), c);}) +# define VT_BUF_HAVE_MEMCPYF + +# define scr_writew_nonbuffered(val, addr) ({*(addr) = (val); }) +# define scr_readw_nonbuffered(addr) ({*(addr);}) +# define scr_memcpyw_nonbuffered(d, s, c) ({ memcpy(d, s, c); }) +# define scr_memmovew_nonbuffered(d, s, c) ({ memmove(d, s, c); }) +# define VT_BUF_HAVE_MEMCPYW +# define VT_BUF_HAVE_MEMMOVEW +# define scr_memcpyw_from_nonbuffered(d, s, c) ({ memcpy(d, s, c);}) +# define scr_memcpyw_to_nonbuffered(d, s, c) ({ memcpy(d, s, c);}) +# define VT_BUF_HAVE_MEMCPYF +#else + +# define scr_writew(val, addr) ({*(addr) = (val); }) +# define scr_readw(addr) ({*(addr);}) +# define scr_memcpyw(d, s, c) ({ memcpy(d, s, c); }) +# define scr_memmovew(d, s, c) ({ memmove(d, s, c); }) +# define VT_BUF_HAVE_MEMCPYW +# define VT_BUF_HAVE_MEMMOVEW +# define scr_memcpyw_from(d, s, c) ({ memcpy(d, s, c);}) +# define scr_memcpyw_to(d, s, c) ({ memcpy(d, s, c);}) +# define VT_BUF_HAVE_MEMCPYF +#endif + #endif #ifndef VT_BUF_HAVE_MEMSETW -extern inline void scr_memsetw(u16 *s, u16 c, unsigned int count) +extern inline void __scr_memsetw(u16 *s, u16 c, + unsigned int count, int currcons) { count /= 2; while (count--) scr_writew(c, s++); } +#define scr_memsetw(s,c,count) __scr_memsetw(s,c,count,currcons) +extern inline void scr_memsetw_nonbuffered(u16 *s, u16 c, + unsigned int count) +{ + count /= 2; + while (count--) + scr_writew_nonbuffered(c, s++); +} + #endif #ifndef VT_BUF_HAVE_MEMCPYW diff -ruN linux-2.2.15/ipc/shm.c linux-2.2.15-LL/ipc/shm.c In the new year, Kirk Reiser wrote: > Hi: Did you save copies of your patching output for either or both > the low latency patch or speakup patch? I would check carefully to > see if something like a hunk failed during the patching process. I > don't know other than that. The scr_readw macro is pretty important > so I can't imagine them replacing it with something else. It would > break a lot more than speakup. > > Kirk > > -- > > Kirk Reiser The Computer Braille Facility > e-mail: kirk at braille.uwo.ca University of Western Ontario > phone: (519) 661-3061 > > _______________________________________________ > Speakup mailing list > Speakup at braille.uwo.ca > http://speech.braille.uwo.ca/mailman/listinfo/speakup >