Skip to content
Permalink
Browse files
Patched fbcon to compile on newer Linux kernels that don't #define PA…
…GE_SIZE,

 since a memory page's size may vary on various architectures and kernel
 configurations.

Will use getpagesize() if it exists, the PAGE_SIZE #define from older kernels
 if that doesn't, and #error out if that's not there either...but it's
 probably 4096 in that case. We may revisit this.

   Fixes Bugzilla #392.
  • Loading branch information
icculus committed Feb 15, 2007
1 parent 1db9e0b commit 517c9e8a6df2810ddb123a8f475e0dc48cb04b75
Showing with 17 additions and 1 deletion.
  1. +1 −0 configure.in
  2. +1 −0 include/SDL_config.h.in
  3. +15 −1 src/video/fbcon/SDL_fbvideo.c
@@ -1125,6 +1125,7 @@ AC_HELP_STRING([--enable-video-fbcon], [use framebuffer console video driver [[d
])
AC_MSG_RESULT($video_fbcon)
if test x$video_fbcon = xyes; then
AC_CHECK_FUNCS(getpagesize)
AC_DEFINE(SDL_VIDEO_DRIVER_FBCON)
SOURCES="$SOURCES $srcdir/src/video/fbcon/*.c"
have_video=yes
@@ -130,6 +130,7 @@
#undef HAVE_NANOSLEEP
#undef HAVE_CLOCK_GETTIME
#undef HAVE_DLVSYM
#undef HAVE_GETPAGESIZE

#else
/* We may need some replacement for stdarg.h here */
@@ -149,6 +149,19 @@ static void FB_SavePalette(_THIS, struct fb_fix_screeninfo *finfo,
struct fb_var_screeninfo *vinfo);
static void FB_RestorePalette(_THIS);

static int SDL_getpagesize(void)
{
#ifdef HAVE_GETPAGESIZE
return getpagesize();
#elif defined(PAGE_SIZE)
return PAGE_SIZE;
#else
#error Can not determine system page size.
return 4096; /* this is what it USED to be in Linux... */
#endif
}


/* Small wrapper for mmap() so we can play nicely with no-mmu hosts
* (non-mmu hosts disallow the MAP_SHARED flag) */

@@ -466,6 +479,7 @@ static void FB_SortModes(_THIS)

static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat)
{
const int pagesize = SDL_getpagesize();
struct fb_fix_screeninfo finfo;
struct fb_var_screeninfo vinfo;
int i, j;
@@ -547,7 +561,7 @@ static int FB_VideoInit(_THIS, SDL_PixelFormat *vformat)

/* Memory map the device, compensating for buggy PPC mmap() */
mapped_offset = (((long)finfo.smem_start) -
(((long)finfo.smem_start)&~(PAGE_SIZE-1)));
(((long)finfo.smem_start)&~(pagesize-1)));
mapped_memlen = finfo.smem_len+mapped_offset;
mapped_mem = do_mmap(NULL, mapped_memlen,
PROT_READ|PROT_WRITE, MAP_SHARED, console_fd, 0);

0 comments on commit 517c9e8

Please sign in to comment.