author | ssadalka soniya.sadalkar@oracle.com |
Tue, 19 Apr 2016 22:11:38 -0700 | |
branch | s11u3-sru |
changeset 5812 | ac16f94826c3 |
permissions | -rw-r--r-- |
5812
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
1 |
/* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
2 |
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
3 |
*/ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
4 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
5 |
/* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
6 |
* Redistribution and use in source and binary forms, with or without modification, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
7 |
* are permitted provided that the following conditions are met: |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
8 |
* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
9 |
* 1. Redistributions of source code must retain the above copyright notice, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
10 |
* this list of conditions and the following disclaimer. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
11 |
* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
12 |
* 2. Redistributions in binary form must reproduce the above copyright notice, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
13 |
* this list of conditions and the following disclaimer in the documentation |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
14 |
* and/or other materials provided with the distribution. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
15 |
* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
16 |
* 3. Neither the name of the copyright holder nor the names of its contributors |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
17 |
* may be used to endorse or promote products derived from this software without |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
18 |
* specific prior written permission. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
19 |
* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
20 |
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
21 |
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
22 |
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
23 |
* IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
24 |
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
25 |
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
26 |
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
27 |
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
28 |
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
29 |
* OF THE POSSIBILITY OF SUCH DAMAGE. |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
30 |
*/ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
31 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
32 |
#ifndef _PSIF_ENDIAN_H |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
33 |
#define _PSIF_ENDIAN_H |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
34 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
35 |
#if defined(__arm__) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
36 |
#undef HOST_BIG_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
37 |
#define HOST_LITTLE_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
38 |
#else /* __arm__ */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
39 |
#if defined(__KERNEL__) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
40 |
# if defined(__BIG_ENDIAN) || defined(_BIG_ENDIAN) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
41 |
# define HOST_BIG_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
42 |
# elif defined(__LITTLE_ENDIAN) || defined(_LITTLE_ENDIAN) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
43 |
# define HOST_LITTLE_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
44 |
# else |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
45 |
# error "could not determine byte order" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
46 |
# endif |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
47 |
#else /* defined(__KERNEL__) */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
48 |
# include <assert.h> |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
49 |
# include "os_header.h" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
50 |
# if defined(__BYTE_ORDER) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
51 |
# if __BYTE_ORDER == __BIG_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
52 |
# define HOST_BIG_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
53 |
# elif __BYTE_ORDER == __LITTLE_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
54 |
# define HOST_LITTLE_ENDIAN |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
55 |
# else |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
56 |
# error "could not determine byte order" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
57 |
# endif |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
58 |
# else /* defined(__BYTE_ORDER) */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
59 |
# error "could not determine byte order" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
60 |
# endif |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
61 |
#endif /* defined(__KERNEL__) */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
62 |
#endif |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
63 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
64 |
#if !defined (__KERNEL__) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
65 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
66 |
#if !defined(__arm__) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
67 |
#include <infiniband/arch.h> |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
68 |
#include <stdlib.h> |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
69 |
#endif /* !__arm__ */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
70 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
71 |
#if defined(HOST_BIG_ENDIAN) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
72 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
73 |
#define copy_convert(dest,src,n) { memcpy((void *)dest, (void const *)(src), n); wmb(); } |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
74 |
#define copy_convert_to_hw(dest,src,n) copy_convert(dest,src,n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
75 |
#define copy_convert_to_sw(dest,src,n) copy_convert(dest,src,n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
76 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
77 |
#else /* HOST_LITTLE_ENDIAN */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
78 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
79 |
#if defined(__arm__) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
80 |
#include <assert.h> |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
81 |
#include <stdint.h> |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
82 |
#include "epsfw_misc.h" |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
83 |
#define htobe64(x) eps_htobe64(x) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
84 |
#define u64 uint64_t |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
85 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
86 |
static inline void __DSB(void) { |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
87 |
/* __dsb() doesn't serve as sequence point in armcc so adding |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
88 |
* __schedule_barrier() around it to force the compiler to see it as a |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
89 |
* sequence point */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
90 |
__schedule_barrier(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
91 |
__dsb(0xf); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
92 |
__schedule_barrier(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
93 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
94 |
#define wmb() __DSB(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
95 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
96 |
/* |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
97 |
* Alternatively, use this one as barrier? |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
98 |
* #define wmb() __memory_changed(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
99 |
*/ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
100 |
#endif /* __arm__ */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
101 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
102 |
static inline void _copy_convert(void *dest, void const *src, size_t n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
103 |
{ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
104 |
int i, words = n / 8; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
105 |
assert((n % 8) == 0); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
106 |
volatile u64 *dp = (volatile u64 *) dest; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
107 |
const volatile u64 *sp = (const volatile u64 *) src; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
108 |
for (i = 0; i < words; i++) { |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
109 |
*dp++ = htobe64(*sp); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
110 |
sp++; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
111 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
112 |
wmb(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
113 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
114 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
115 |
static inline void _copy_convert_to_hw(volatile void *dest, void const *src, size_t n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
116 |
{ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
117 |
int i, words = n / 8; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
118 |
assert((n % 8) == 0); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
119 |
volatile u64 *dp = (volatile u64 *) dest; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
120 |
const u64 *sp = (const u64 *) src; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
121 |
for (i = 0; i < words; i++) { |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
122 |
*dp++ = htobe64(*sp); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
123 |
sp++; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
124 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
125 |
wmb(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
126 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
127 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
128 |
static inline void _copy_convert_to_sw(void *dest, volatile void const *src, size_t n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
129 |
{ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
130 |
int i, words = n / 8; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
131 |
assert((n % 8) == 0); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
132 |
u64 *dp = (u64 *) dest; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
133 |
const volatile u64 *sp = (const volatile u64 *) src; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
134 |
for (i = 0; i < words; i++) { |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
135 |
*dp++ = htobe64(*sp); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
136 |
sp++; |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
137 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
138 |
wmb(); |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
139 |
} |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
140 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
141 |
#define copy_convert(dest,src,n) _copy_convert(dest,src,n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
142 |
#define copy_convert_to_hw(dest,src,n) _copy_convert_to_hw(dest,src,n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
143 |
#define copy_convert_to_sw(dest,src,n) _copy_convert_to_sw(dest,src,n) |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
144 |
|
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
145 |
#endif /* HOST_ENDIAN */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
146 |
#endif /* !__KERNEL__ */ |
ac16f94826c3
PSARC/2015/479 PSIF Solaris IB HCA Driver
ssadalka soniya.sadalkar@oracle.com
parents:
diff
changeset
|
147 |
#endif /* _PSIF_ENDIAN_H */ |