components/open-fabrics/libsif/include/psifapi/psif_endian.h
author ssadalka soniya.sadalkar@oracle.com
Tue, 19 Apr 2016 22:11:38 -0700
branchs11u3-sru
changeset 5812 ac16f94826c3
permissions -rw-r--r--
PSARC/2015/479 PSIF Solaris IB HCA Driver 22111504 RFE for libsif integration into userland gate
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 */