Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] include/linux/soundcard.h: endianness fix

Fixes for big-endian systems in soundcard.h and awe_voice.h

This patch fixes the AFMT_S16_NE (include/linux/soundcard.h) and AWE_PATCH
(awe_voice.h) macros on big-endian systems.

It also moves _PATCHKEY into a new file, patchkey.h, in order to remove a
duplicate definition of it from awe_voice.h.

Signed-off-by: Stuart Brady <sdbrady@ntlworld.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Stuart Brady and committed by
Linus Torvalds
60d300c0 42d77c70

+75 -10
+3 -3
include/linux/awe_voice.h
··· 29 29 #define SAMPLE_TYPE_AWE32 0x20 30 30 #endif 31 31 32 - #ifndef _PATCHKEY 33 - #define _PATCHKEY(id) ((id<<8)|0xfd) 34 - #endif 32 + #define _LINUX_PATCHKEY_H_INDIRECT 33 + #include <linux/patchkey.h> 34 + #undef _LINUX_PATCHKEY_H_INDIRECT 35 35 36 36 /*---------------------------------------------------------------- 37 37 * patch information record
+45
include/linux/patchkey.h
··· 1 + /* 2 + * <linux/patchkey.h> -- definition of _PATCHKEY macro 3 + * 4 + * Copyright (C) 2005 Stuart Brady 5 + * 6 + * This exists because awe_voice.h defined its own _PATCHKEY and it wasn't 7 + * clear whether removing this would break anything in userspace. 8 + * 9 + * Do not include this file directly. Please use <sys/soundcard.h> instead. 10 + * For kernel code, use <linux/soundcard.h> 11 + */ 12 + 13 + #ifndef _LINUX_PATCHKEY_H_INDIRECT 14 + #error "patchkey.h included directly" 15 + #endif 16 + 17 + #ifndef _LINUX_PATCHKEY_H 18 + #define _LINUX_PATCHKEY_H 19 + 20 + /* Endian macros. */ 21 + #ifdef __KERNEL__ 22 + # include <asm/byteorder.h> 23 + #else 24 + # include <endian.h> 25 + #endif 26 + 27 + #if defined(__KERNEL__) 28 + # if defined(__BIG_ENDIAN) 29 + # define _PATCHKEY(id) (0xfd00|id) 30 + # elif defined(__LITTLE_ENDIAN) 31 + # define _PATCHKEY(id) ((id<<8)|0x00fd) 32 + # else 33 + # error "could not determine byte order" 34 + # endif 35 + #elif defined(__BYTE_ORDER) 36 + # if __BYTE_ORDER == __BIG_ENDIAN 37 + # define _PATCHKEY(id) (0xfd00|id) 38 + # elif __BYTE_ORDER == __LITTLE_ENDIAN 39 + # define _PATCHKEY(id) ((id<<8)|0x00fd) 40 + # else 41 + # error "could not determine byte order" 42 + # endif 43 + #endif 44 + 45 + #endif /* _LINUX_PATCHKEY_H */
+27 -7
include/linux/soundcard.h
··· 39 39 /* In Linux we need to be prepared for cross compiling */ 40 40 #include <linux/ioctl.h> 41 41 42 + /* Endian macros. */ 43 + #ifdef __KERNEL__ 44 + # include <asm/byteorder.h> 45 + #else 46 + # include <endian.h> 47 + #endif 48 + 42 49 /* 43 50 * Supported card ID numbers (Should be somewhere else?) 44 51 */ ··· 186 179 * Some big endian/little endian handling macros 187 180 */ 188 181 189 - #if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__sparc__) || defined(HPPA) || defined(PPC) || defined(__mc68000__) 190 - /* Big endian machines */ 191 - # define _PATCHKEY(id) (0xfd00|id) 192 - # define AFMT_S16_NE AFMT_S16_BE 193 - #else 194 - # define _PATCHKEY(id) ((id<<8)|0xfd) 195 - # define AFMT_S16_NE AFMT_S16_LE 182 + #define _LINUX_PATCHKEY_H_INDIRECT 183 + #include <linux/patchkey.h> 184 + #undef _LINUX_PATCHKEY_H_INDIRECT 185 + 186 + #if defined(__KERNEL__) 187 + # if defined(__BIG_ENDIAN) 188 + # define AFMT_S16_NE AFMT_S16_BE 189 + # elif defined(__LITTLE_ENDIAN) 190 + # define AFMT_S16_NE AFMT_S16_LE 191 + # else 192 + # error "could not determine byte order" 193 + # endif 194 + #elif defined(__BYTE_ORDER) 195 + # if __BYTE_ORDER == __BIG_ENDIAN 196 + # define AFMT_S16_NE AFMT_S16_BE 197 + # elif __BYTE_ORDER == __LITTLE_ENDIAN 198 + # define AFMT_S16_NE AFMT_S16_LE 199 + # else 200 + # error "could not determine byte order" 201 + # endif 196 202 #endif 197 203 198 204 /*