Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
lpfc
lpfc_compat.h
Go to the documentation of this file.
1
/*******************************************************************
2
* This file is part of the Emulex Linux Device Driver for *
3
* Fibre Channel Host Bus Adapters. *
4
* Copyright (C) 2004-2011 Emulex. All rights reserved. *
5
* EMULEX and SLI are trademarks of Emulex. *
6
* www.emulex.com *
7
* *
8
* This program is free software; you can redistribute it and/or *
9
* modify it under the terms of version 2 of the GNU General *
10
* Public License as published by the Free Software Foundation. *
11
* This program is distributed in the hope that it will be useful. *
12
* ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND *
13
* WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, *
14
* FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE *
15
* DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
16
* TO BE LEGALLY INVALID. See the GNU General Public License for *
17
* more details, a copy of which can be found in the file COPYING *
18
* included with this package. *
19
*******************************************************************/
20
21
/*
22
* This file provides macros to aid compilation in the Linux 2.4 kernel
23
* over various platform architectures.
24
*/
25
26
/*******************************************************************
27
Note: HBA's SLI memory contains little-endian LW.
28
Thus to access it from a little-endian host,
29
memcpy_toio() and memcpy_fromio() can be used.
30
However on a big-endian host, copy 4 bytes at a time,
31
using writel() and readl().
32
*******************************************************************/
33
#include <asm/byteorder.h>
34
35
#ifdef __BIG_ENDIAN
36
37
static
inline
void
38
lpfc_memcpy_to_slim(
void
__iomem
*
dest
,
void
*
src
,
unsigned
int
bytes
)
39
{
40
uint32_t
__iomem
*dest32;
41
uint32_t
*src32;
42
unsigned
int
four_bytes;
43
44
45
dest32 = (
uint32_t
__iomem
*) dest;
46
src32 = (
uint32_t
*) src;
47
48
/* write input bytes, 4 bytes at a time */
49
for
(four_bytes = bytes /4; four_bytes > 0; four_bytes--) {
50
writel
( *src32, dest32);
51
readl
(dest32);
/* flush */
52
dest32++;
53
src32++;
54
}
55
56
return
;
57
}
58
59
static
inline
void
60
lpfc_memcpy_from_slim(
void
*dest,
void
__iomem
*src,
unsigned
int
bytes)
61
{
62
uint32_t
*dest32;
63
uint32_t
__iomem
*src32;
64
unsigned
int
four_bytes;
65
66
67
dest32 = (
uint32_t
*) dest;
68
src32 = (
uint32_t
__iomem
*) src;
69
70
/* read input bytes, 4 bytes at a time */
71
for
(four_bytes = bytes /4; four_bytes > 0; four_bytes--) {
72
*dest32 =
readl
( src32);
73
dest32++;
74
src32++;
75
}
76
77
return
;
78
}
79
80
#else
81
82
static
inline
void
83
lpfc_memcpy_to_slim(
void
__iomem
*dest,
void
*src,
unsigned
int
bytes)
84
{
85
/* convert bytes in argument list to word count for copy function */
86
__iowrite32_copy
(dest, src, bytes /
sizeof
(
uint32_t
));
87
}
88
89
static
inline
void
90
lpfc_memcpy_from_slim(
void
*dest,
void
__iomem
*src,
unsigned
int
bytes)
91
{
92
/* actually returns 1 byte past dest */
93
memcpy_fromio
( dest, src, bytes);
94
}
95
96
#endif
/* __BIG_ENDIAN */
Generated on Thu Jan 10 2013 14:21:43 for Linux Kernel by
1.8.2