diff --git a/media-sound/opensound/opensound-4.2_git.recipe b/media-sound/opensound/opensound-4.2_git.recipe index cdb876ffb..9ecc34225 100644 --- a/media-sound/opensound/opensound-4.2_git.recipe +++ b/media-sound/opensound/opensound-4.2_git.recipe @@ -4,9 +4,9 @@ HOMEPAGE="http://developer.opensound.com/" LICENSE="BSD (2-clause)" COPYRIGHT="1996-2008 Hannu Savolainen and Dev Mazumdar" SRC_URI="git://opensound.git.sourceforge.net/gitroot/opensound/opensound#f6048993e04bb50e8e98b7e4f4eadfae3e736fec" -REVISION="1" +REVISION="2" #CHECKSUM_MD5="" -ARCHITECTURES="?x86_gcc2 ?x86" +ARCHITECTURES="x86_gcc2 ?x86" PROVIDES=" opensound$secondaryArchSuffix = $portVersion @@ -33,6 +33,8 @@ BUILD_PREREQUIRES=" cmd:make " +PATCHES="opensound-4.2_git.patchset" + GLOBAL_WRITABLE_FILES="settings/kernel/drivers directory keep-old" BUILD() diff --git a/media-sound/opensound/patches/opensound-4.2_git.patchset b/media-sound/opensound/patches/opensound-4.2_git.patchset new file mode 100644 index 000000000..8be9340e2 --- /dev/null +++ b/media-sound/opensound/patches/opensound-4.2_git.patchset @@ -0,0 +1,64 @@ +From 736e82cd4b6405d3b9b8cb952dade64cf1f8bd8d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Fran=C3=A7ois=20Revol?= +Date: Thu, 7 Aug 2014 22:20:13 +0200 +Subject: [PATCH] Haiku: Fix physical address passing to oss_map_pci_mem() + +Avoids sign extension ending in General Protection Exception. +--- + kernel/OS/BeOS/os_beos.c | 6 +++--- + kernel/OS/BeOS/os_beos.h | 7 +++++-- + 2 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/kernel/OS/BeOS/os_beos.c b/kernel/OS/BeOS/os_beos.c +index 111e6b1..7bec36e 100644 +--- a/kernel/OS/BeOS/os_beos.c ++++ b/kernel/OS/BeOS/os_beos.c +@@ -598,17 +598,17 @@ oss_untimeout (timeout_id_t id) + + + caddr_t +-oss_map_pci_mem (oss_device_t * osdev, int nr, int phaddr, int size) ++oss_map_pci_mem (oss_device_t * osdev, int nr, phys_addr_t phaddr, int size) + { + status_t err; + void *va = NULL; +- FENTRYA("%p,%d,%u,%d", osdev, nr, phaddr, size); ++ FENTRYA("%p,%d,%Lx,%d", osdev, nr, (uint64)phaddr, size); + //XXX:align phaddr ? + /* round up to page size */ + size += B_PAGE_SIZE - 1; + size &= ~(B_PAGE_SIZE - 1); + +- err = map_physical_memory(OSS_PCI_AREA_NAME, (void *)phaddr, size, ++ err = map_physical_memory(OSS_PCI_AREA_NAME, phaddr, size, + B_ANY_KERNEL_BLOCK_ADDRESS, 0, &va); + if (err < B_OK) + va = NULL; +diff --git a/kernel/OS/BeOS/os_beos.h b/kernel/OS/BeOS/os_beos.h +index 31fd27e..5ee9deb 100644 +--- a/kernel/OS/BeOS/os_beos.h ++++ b/kernel/OS/BeOS/os_beos.h +@@ -101,6 +101,9 @@ typedef uint32 oss_native_word; /* Same as the address and status register size + typedef int64 oss_int64_t; /* Signed 64 bit integer */ + typedef uint64 oss_uint64_t; /* Unsigned 64 bit integer */ + typedef unsigned long offset_t; ++#ifndef __HAIKU__ ++typedef uint32 phys_addr_t; ++#endif + + + extern void oss_cmn_err (int level, char *format, ...); +@@ -413,8 +416,8 @@ typedef struct _oss_poll_event_t oss_poll_event_t; + extern int detect_trace; + #define DDB(x) if (detect_trace) x + +-extern caddr_t oss_map_pci_mem (oss_device_t * osdev, int nr, int phaddr, +- int size); ++extern caddr_t oss_map_pci_mem (oss_device_t * osdev, int nr, ++ phys_addr_t phaddr, int size); + extern void oss_unmap_pci_mem (void *addr); + #define MAP_PCI_IOADDR(osdev, nr, io) (oss_native_word)io + #define MAP_PCI_MEM(osdev, ix, phaddr, size) oss_map_pci_mem(osdev, ix, phaddr, size) +-- +1.8.3.4 +