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