Commit 60d300c02fe2e0be9bb02904361e41e0307264b2

Authored by Stuart Brady
Committed by Linus Torvalds
1 parent 42d77c7017

[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>

Showing 3 changed files with 75 additions and 10 deletions Side-by-side Diff

include/linux/awe_voice.h
... ... @@ -29,9 +29,9 @@
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
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 */
include/linux/soundcard.h
... ... @@ -39,6 +39,13 @@
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 */
... ... @@ -179,13 +186,26 @@
179 186 * Some big endian/little endian handling macros
180 187 */
181 188  
182   -#if defined(_AIX) || defined(AIX) || defined(sparc) || defined(__sparc__) || defined(HPPA) || defined(PPC) || defined(__mc68000__)
183   -/* Big endian machines */
184   -# define _PATCHKEY(id) (0xfd00|id)
185   -# define AFMT_S16_NE AFMT_S16_BE
186   -#else
187   -# define _PATCHKEY(id) ((id<<8)|0xfd)
188   -# define AFMT_S16_NE AFMT_S16_LE
  189 +#define _LINUX_PATCHKEY_H_INDIRECT
  190 +#include <linux/patchkey.h>
  191 +#undef _LINUX_PATCHKEY_H_INDIRECT
  192 +
  193 +#if defined(__KERNEL__)
  194 +# if defined(__BIG_ENDIAN)
  195 +# define AFMT_S16_NE AFMT_S16_BE
  196 +# elif defined(__LITTLE_ENDIAN)
  197 +# define AFMT_S16_NE AFMT_S16_LE
  198 +# else
  199 +# error "could not determine byte order"
  200 +# endif
  201 +#elif defined(__BYTE_ORDER)
  202 +# if __BYTE_ORDER == __BIG_ENDIAN
  203 +# define AFMT_S16_NE AFMT_S16_BE
  204 +# elif __BYTE_ORDER == __LITTLE_ENDIAN
  205 +# define AFMT_S16_NE AFMT_S16_LE
  206 +# else
  207 +# error "could not determine byte order"
  208 +# endif
189 209 #endif
190 210  
191 211 /*