Blame view

buildroot/buildroot-2016.08.1/package/chocolate-doom/0003-opl-limit-use-of-ioperm-inb-outb-to-x86-architecture.patch 2.52 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
  From 87c7399305b30045a856d737bbfd8f59b8f52392 Mon Sep 17 00:00:00 2001
  From: Rodrigo Rebello <rprebello@gmail.com>
  Date: Fri, 6 Nov 2015 12:14:01 -0200
  Subject: [PATCH] opl: limit use of ioperm/inb/outb to x86 architecture
  
  The use of I/O ports in the Linux driver to directly control OPL chips
  is x86 specific and only really makes sense for x86-based PC's with
  compatible hardware.
  
  For some architectures (e.g. ARM), ioperm, inb and outb do exist and are
  detected by the configure script (via AC_CHECK_FUNCS(ioperm)), but their
  use is inappropriate in these cases and should be avoided.
  
  In some other scenarios, like when using a GNU toolchain + uClibc for
  PowerPC, the build even fails with the following error:
  
    opl_linux.c:26:20: fatal error: sys/io.h: No such file or directory
  
  That is so because ioperm() is exported by uClibc and gets detected by
  configure, which enables the "Linux" driver via definition of
  HAVE_IOPERM, but in practice 'sys/io.h' is missing for ppc (inb/outb is
  not implemented, and the call to ioperm() would return EIO anyway).
  
  So, besides testing for HAVE_IOPERM, also test if either __i386__ or
  __x86_64__ are defined before enabling this OPL driver.
  
  Upstream-status: accepted, not yet released.
  https://github.com/chocolate-doom/chocolate-doom/pull/638
  
  Signed-off-by: Rodrigo Rebello <rprebello@gmail.com>
  ---
   opl/opl.c       | 4 ++--
   opl/opl_linux.c | 4 ++--
   2 files changed, 4 insertions(+), 4 deletions(-)
  
  diff --git a/opl/opl.c b/opl/opl.c
  index 60f027d..0d25689 100644
  --- a/opl/opl.c
  +++ b/opl/opl.c
  @@ -27,7 +27,7 @@
   
   //#define OPL_DEBUG_TRACE
   
  -#ifdef HAVE_IOPERM
  +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM)
   extern opl_driver_t opl_linux_driver;
   #endif
   #if defined(HAVE_LIBI386) || defined(HAVE_LIBAMD64)
  @@ -40,7 +40,7 @@ extern opl_driver_t opl_sdl_driver;
   
   static opl_driver_t *drivers[] =
   {
  -#ifdef HAVE_IOPERM
  +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM)
       &opl_linux_driver,
   #endif
   #if defined(HAVE_LIBI386) || defined(HAVE_LIBAMD64)
  diff --git a/opl/opl_linux.c b/opl/opl_linux.c
  index 5df5d46..19e4c3e 100644
  --- a/opl/opl_linux.c
  +++ b/opl/opl_linux.c
  @@ -17,7 +17,7 @@
   
   #include "config.h"
   
  -#ifdef HAVE_IOPERM
  +#if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM)
   
   #include <stdio.h>
   #include <string.h>
  @@ -99,5 +99,5 @@ opl_driver_t opl_linux_driver =
       OPL_Timer_AdjustCallbacks,
   };
   
  -#endif /* #ifdef HAVE_IOPERM */
  +#endif /* #if (defined(__i386__) || defined(__x86_64__)) && defined(HAVE_IOPERM) */
   
  -- 
  2.1.4