io.c (8a84fc15ae5cafcc366dd85cf8e1ab2040679abc) | io.c (4cb3cee03d558fd457cb58f56c80a2a09a66110c) |
---|---|
1/* 2 * I/O string operations 3 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) 4 * Copyright (C) 2006 IBM Corporation 5 * 6 * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) 7 * and Paul Mackerras. 8 * --- 11 unchanged lines hidden (view full) --- 20#include <linux/types.h> 21#include <linux/compiler.h> 22#include <linux/module.h> 23 24#include <asm/io.h> 25#include <asm/firmware.h> 26#include <asm/bug.h> 27 | 1/* 2 * I/O string operations 3 * Copyright (C) 1995-1996 Gary Thomas (gdt@linuxppc.org) 4 * Copyright (C) 2006 IBM Corporation 5 * 6 * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) 7 * and Paul Mackerras. 8 * --- 11 unchanged lines hidden (view full) --- 20#include <linux/types.h> 21#include <linux/compiler.h> 22#include <linux/module.h> 23 24#include <asm/io.h> 25#include <asm/firmware.h> 26#include <asm/bug.h> 27 |
28void _insb(volatile u8 __iomem *port, void *buf, long count) | 28void _insb(const volatile u8 __iomem *port, void *buf, long count) |
29{ 30 u8 *tbuf = buf; 31 u8 tmp; 32 | 29{ 30 u8 *tbuf = buf; 31 u8 tmp; 32 |
33 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 34 | |
35 if (unlikely(count <= 0)) 36 return; 37 asm volatile("sync"); 38 do { 39 tmp = *port; 40 asm volatile("eieio"); 41 *tbuf++ = tmp; 42 } while (--count != 0); 43 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 44} 45EXPORT_SYMBOL(_insb); 46 47void _outsb(volatile u8 __iomem *port, const void *buf, long count) 48{ 49 const u8 *tbuf = buf; 50 | 33 if (unlikely(count <= 0)) 34 return; 35 asm volatile("sync"); 36 do { 37 tmp = *port; 38 asm volatile("eieio"); 39 *tbuf++ = tmp; 40 } while (--count != 0); 41 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 42} 43EXPORT_SYMBOL(_insb); 44 45void _outsb(volatile u8 __iomem *port, const void *buf, long count) 46{ 47 const u8 *tbuf = buf; 48 |
51 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 52 | |
53 if (unlikely(count <= 0)) 54 return; 55 asm volatile("sync"); 56 do { 57 *port = *tbuf++; 58 } while (--count != 0); 59 asm volatile("sync"); 60} 61EXPORT_SYMBOL(_outsb); 62 | 49 if (unlikely(count <= 0)) 50 return; 51 asm volatile("sync"); 52 do { 53 *port = *tbuf++; 54 } while (--count != 0); 55 asm volatile("sync"); 56} 57EXPORT_SYMBOL(_outsb); 58 |
63void _insw_ns(volatile u16 __iomem *port, void *buf, long count) | 59void _insw_ns(const volatile u16 __iomem *port, void *buf, long count) |
64{ 65 u16 *tbuf = buf; 66 u16 tmp; 67 | 60{ 61 u16 *tbuf = buf; 62 u16 tmp; 63 |
68 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 69 | |
70 if (unlikely(count <= 0)) 71 return; 72 asm volatile("sync"); 73 do { 74 tmp = *port; 75 asm volatile("eieio"); 76 *tbuf++ = tmp; 77 } while (--count != 0); 78 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 79} 80EXPORT_SYMBOL(_insw_ns); 81 82void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count) 83{ 84 const u16 *tbuf = buf; 85 | 64 if (unlikely(count <= 0)) 65 return; 66 asm volatile("sync"); 67 do { 68 tmp = *port; 69 asm volatile("eieio"); 70 *tbuf++ = tmp; 71 } while (--count != 0); 72 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 73} 74EXPORT_SYMBOL(_insw_ns); 75 76void _outsw_ns(volatile u16 __iomem *port, const void *buf, long count) 77{ 78 const u16 *tbuf = buf; 79 |
86 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 87 | |
88 if (unlikely(count <= 0)) 89 return; 90 asm volatile("sync"); 91 do { 92 *port = *tbuf++; 93 } while (--count != 0); 94 asm volatile("sync"); 95} 96EXPORT_SYMBOL(_outsw_ns); 97 | 80 if (unlikely(count <= 0)) 81 return; 82 asm volatile("sync"); 83 do { 84 *port = *tbuf++; 85 } while (--count != 0); 86 asm volatile("sync"); 87} 88EXPORT_SYMBOL(_outsw_ns); 89 |
98void _insl_ns(volatile u32 __iomem *port, void *buf, long count) | 90void _insl_ns(const volatile u32 __iomem *port, void *buf, long count) |
99{ 100 u32 *tbuf = buf; 101 u32 tmp; 102 | 91{ 92 u32 *tbuf = buf; 93 u32 tmp; 94 |
103 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 104 | |
105 if (unlikely(count <= 0)) 106 return; 107 asm volatile("sync"); 108 do { 109 tmp = *port; 110 asm volatile("eieio"); 111 *tbuf++ = tmp; 112 } while (--count != 0); 113 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 114} 115EXPORT_SYMBOL(_insl_ns); 116 117void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count) 118{ 119 const u32 *tbuf = buf; 120 | 95 if (unlikely(count <= 0)) 96 return; 97 asm volatile("sync"); 98 do { 99 tmp = *port; 100 asm volatile("eieio"); 101 *tbuf++ = tmp; 102 } while (--count != 0); 103 asm volatile("twi 0,%0,0; isync" : : "r" (tmp)); 104} 105EXPORT_SYMBOL(_insl_ns); 106 107void _outsl_ns(volatile u32 __iomem *port, const void *buf, long count) 108{ 109 const u32 *tbuf = buf; 110 |
121 BUG_ON(firmware_has_feature(FW_FEATURE_ISERIES)); 122 | |
123 if (unlikely(count <= 0)) 124 return; 125 asm volatile("sync"); 126 do { 127 *port = *tbuf++; 128 } while (--count != 0); 129 asm volatile("sync"); 130} 131EXPORT_SYMBOL(_outsl_ns); | 111 if (unlikely(count <= 0)) 112 return; 113 asm volatile("sync"); 114 do { 115 *port = *tbuf++; 116 } while (--count != 0); 117 asm volatile("sync"); 118} 119EXPORT_SYMBOL(_outsl_ns); |