Commit 13f7877bb5aeb1d5ad01ffbf17a80fb550fa6642

Authored by Harvey Harrison
Committed by Linus Torvalds
1 parent 156ca2bbf6

s390: introduce asm/swab.h

Signed-off-by: Harvey Harrison <harvey.harrison@gmail.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 3 changed files with 94 additions and 90 deletions Side-by-side Diff

arch/s390/include/asm/Kbuild
... ... @@ -13,4 +13,5 @@
13 13 unifdef-y += debug.h
14 14 unifdef-y += chpid.h
15 15 unifdef-y += schid.h
  16 +unifdef-y += swab.h
arch/s390/include/asm/byteorder.h
1 1 #ifndef _S390_BYTEORDER_H
2 2 #define _S390_BYTEORDER_H
3 3  
4   -/*
5   - * include/asm-s390/byteorder.h
6   - *
7   - * S390 version
8   - * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
9   - * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
10   - */
11   -
12   -#include <asm/types.h>
13   -
14   -#define __BIG_ENDIAN
15   -
16   -#ifndef __s390x__
17   -# define __SWAB_64_THRU_32__
18   -#endif
19   -
20   -#ifdef __s390x__
21   -static inline __u64 __arch_swab64p(const __u64 *x)
22   -{
23   - __u64 result;
24   -
25   - asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x));
26   - return result;
27   -}
28   -#define __arch_swab64p __arch_swab64p
29   -
30   -static inline __u64 __arch_swab64(__u64 x)
31   -{
32   - __u64 result;
33   -
34   - asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x));
35   - return result;
36   -}
37   -#define __arch_swab64 __arch_swab64
38   -
39   -static inline void __arch_swab64s(__u64 *x)
40   -{
41   - *x = __arch_swab64p(x);
42   -}
43   -#define __arch_swab64s __arch_swab64s
44   -#endif /* __s390x__ */
45   -
46   -static inline __u32 __arch_swab32p(const __u32 *x)
47   -{
48   - __u32 result;
49   -
50   - asm volatile(
51   -#ifndef __s390x__
52   - " icm %0,8,3(%1)\n"
53   - " icm %0,4,2(%1)\n"
54   - " icm %0,2,1(%1)\n"
55   - " ic %0,0(%1)"
56   - : "=&d" (result) : "a" (x), "m" (*x) : "cc");
57   -#else /* __s390x__ */
58   - " lrv %0,%1"
59   - : "=d" (result) : "m" (*x));
60   -#endif /* __s390x__ */
61   - return result;
62   -}
63   -#define __arch_swab32p __arch_swab32p
64   -
65   -#ifdef __s390x__
66   -static inline __u32 __arch_swab32(__u32 x)
67   -{
68   - __u32 result;
69   -
70   - asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x));
71   - return result;
72   -}
73   -#define __arch_swab32 __arch_swab32
74   -#endif /* __s390x__ */
75   -
76   -static inline __u16 __arch_swab16p(const __u16 *x)
77   -{
78   - __u16 result;
79   -
80   - asm volatile(
81   -#ifndef __s390x__
82   - " icm %0,2,1(%1)\n"
83   - " ic %0,0(%1)\n"
84   - : "=&d" (result) : "a" (x), "m" (*x) : "cc");
85   -#else /* __s390x__ */
86   - " lrvh %0,%1"
87   - : "=d" (result) : "m" (*x));
88   -#endif /* __s390x__ */
89   - return result;
90   -}
91   -#define __arch_swab16p __arch_swab16p
92   -
93   -#include <linux/byteorder.h>
  4 +#include <asm/swab.h>
  5 +#include <linux/byteorder/big_endian.h>
94 6  
95 7 #endif /* _S390_BYTEORDER_H */
arch/s390/include/asm/swab.h
  1 +#ifndef _S390_SWAB_H
  2 +#define _S390_SWAB_H
  3 +
  4 +/*
  5 + * include/asm-s390/swab.h
  6 + *
  7 + * S390 version
  8 + * Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
  9 + * Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com)
  10 + */
  11 +
  12 +#include <asm/types.h>
  13 +
  14 +#ifndef __s390x__
  15 +# define __SWAB_64_THRU_32__
  16 +#endif
  17 +
  18 +#ifdef __s390x__
  19 +static inline __u64 __arch_swab64p(const __u64 *x)
  20 +{
  21 + __u64 result;
  22 +
  23 + asm volatile("lrvg %0,%1" : "=d" (result) : "m" (*x));
  24 + return result;
  25 +}
  26 +#define __arch_swab64p __arch_swab64p
  27 +
  28 +static inline __u64 __arch_swab64(__u64 x)
  29 +{
  30 + __u64 result;
  31 +
  32 + asm volatile("lrvgr %0,%1" : "=d" (result) : "d" (x));
  33 + return result;
  34 +}
  35 +#define __arch_swab64 __arch_swab64
  36 +
  37 +static inline void __arch_swab64s(__u64 *x)
  38 +{
  39 + *x = __arch_swab64p(x);
  40 +}
  41 +#define __arch_swab64s __arch_swab64s
  42 +#endif /* __s390x__ */
  43 +
  44 +static inline __u32 __arch_swab32p(const __u32 *x)
  45 +{
  46 + __u32 result;
  47 +
  48 + asm volatile(
  49 +#ifndef __s390x__
  50 + " icm %0,8,3(%1)\n"
  51 + " icm %0,4,2(%1)\n"
  52 + " icm %0,2,1(%1)\n"
  53 + " ic %0,0(%1)"
  54 + : "=&d" (result) : "a" (x), "m" (*x) : "cc");
  55 +#else /* __s390x__ */
  56 + " lrv %0,%1"
  57 + : "=d" (result) : "m" (*x));
  58 +#endif /* __s390x__ */
  59 + return result;
  60 +}
  61 +#define __arch_swab32p __arch_swab32p
  62 +
  63 +#ifdef __s390x__
  64 +static inline __u32 __arch_swab32(__u32 x)
  65 +{
  66 + __u32 result;
  67 +
  68 + asm volatile("lrvr %0,%1" : "=d" (result) : "d" (x));
  69 + return result;
  70 +}
  71 +#define __arch_swab32 __arch_swab32
  72 +#endif /* __s390x__ */
  73 +
  74 +static inline __u16 __arch_swab16p(const __u16 *x)
  75 +{
  76 + __u16 result;
  77 +
  78 + asm volatile(
  79 +#ifndef __s390x__
  80 + " icm %0,2,1(%1)\n"
  81 + " ic %0,0(%1)\n"
  82 + : "=&d" (result) : "a" (x), "m" (*x) : "cc");
  83 +#else /* __s390x__ */
  84 + " lrvh %0,%1"
  85 + : "=d" (result) : "m" (*x));
  86 +#endif /* __s390x__ */
  87 + return result;
  88 +}
  89 +#define __arch_swab16p __arch_swab16p
  90 +
  91 +#endif /* _S390_SWAB_H */