~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/ia64/include/asm/sn/io.h

Version: ~ [ linux-5.5-rc6 ] ~ [ linux-5.4.11 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.95 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.164 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.209 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.209 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.19.8 ] ~ [ linux-3.18.140 ] ~ [ linux-3.17.8 ] ~ [ linux-3.16.81 ] ~ [ linux-3.15.10 ] ~ [ linux-3.14.79 ] ~ [ linux-3.13.11 ] ~ [ linux-3.12.74 ] ~ [ linux-3.11.10 ] ~ [ linux-3.10.108 ] ~ [ linux-3.9.11 ] ~ [ linux-3.8.13 ] ~ [ linux-3.7.10 ] ~ [ linux-3.6.11 ] ~ [ linux-3.5.7 ] ~ [ linux-3.4.113 ] ~ [ linux-3.3.8 ] ~ [ linux-3.2.102 ] ~ [ linux-3.1.10 ] ~ [ linux-3.0.101 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* 
  2  * This file is subject to the terms and conditions of the GNU General Public
  3  * License.  See the file "COPYING" in the main directory of this archive
  4  * for more details.
  5  *
  6  * Copyright (C) 2000-2004 Silicon Graphics, Inc. All rights reserved.
  7  */
  8 
  9 #ifndef _ASM_SN_IO_H
 10 #define _ASM_SN_IO_H
 11 #include <linux/compiler.h>
 12 #include <asm/intrinsics.h>
 13 
 14 extern void * sn_io_addr(unsigned long port) __attribute_const__; /* Forward definition */
 15 extern void __sn_mmiowb(void); /* Forward definition */
 16 
 17 extern int num_cnodes;
 18 
 19 #define __sn_mf_a()   ia64_mfa()
 20 
 21 extern void sn_dma_flush(unsigned long);
 22 
 23 #define __sn_inb ___sn_inb
 24 #define __sn_inw ___sn_inw
 25 #define __sn_inl ___sn_inl
 26 #define __sn_outb ___sn_outb
 27 #define __sn_outw ___sn_outw
 28 #define __sn_outl ___sn_outl
 29 #define __sn_readb ___sn_readb
 30 #define __sn_readw ___sn_readw
 31 #define __sn_readl ___sn_readl
 32 #define __sn_readq ___sn_readq
 33 #define __sn_readb_relaxed ___sn_readb_relaxed
 34 #define __sn_readw_relaxed ___sn_readw_relaxed
 35 #define __sn_readl_relaxed ___sn_readl_relaxed
 36 #define __sn_readq_relaxed ___sn_readq_relaxed
 37 
 38 /*
 39  * Convenience macros for setting/clearing bits using the above accessors
 40  */
 41 
 42 #define __sn_setq_relaxed(addr, val) \
 43         writeq((__sn_readq_relaxed(addr) | (val)), (addr))
 44 #define __sn_clrq_relaxed(addr, val) \
 45         writeq((__sn_readq_relaxed(addr) & ~(val)), (addr))
 46 
 47 /*
 48  * The following routines are SN Platform specific, called when
 49  * a reference is made to inX/outX set macros.  SN Platform
 50  * inX set of macros ensures that Posted DMA writes on the
 51  * Bridge is flushed.
 52  *
 53  * The routines should be self explainatory.
 54  */
 55 
 56 static inline unsigned int
 57 ___sn_inb (unsigned long port)
 58 {
 59         volatile unsigned char *addr;
 60         unsigned char ret = -1;
 61 
 62         if ((addr = sn_io_addr(port))) {
 63                 ret = *addr;
 64                 __sn_mf_a();
 65                 sn_dma_flush((unsigned long)addr);
 66         }
 67         return ret;
 68 }
 69 
 70 static inline unsigned int
 71 ___sn_inw (unsigned long port)
 72 {
 73         volatile unsigned short *addr;
 74         unsigned short ret = -1;
 75 
 76         if ((addr = sn_io_addr(port))) {
 77                 ret = *addr;
 78                 __sn_mf_a();
 79                 sn_dma_flush((unsigned long)addr);
 80         }
 81         return ret;
 82 }
 83 
 84 static inline unsigned int
 85 ___sn_inl (unsigned long port)
 86 {
 87         volatile unsigned int *addr;
 88         unsigned int ret = -1;
 89 
 90         if ((addr = sn_io_addr(port))) {
 91                 ret = *addr;
 92                 __sn_mf_a();
 93                 sn_dma_flush((unsigned long)addr);
 94         }
 95         return ret;
 96 }
 97 
 98 static inline void
 99 ___sn_outb (unsigned char val, unsigned long port)
100 {
101         volatile unsigned char *addr;
102 
103         if ((addr = sn_io_addr(port))) {
104                 *addr = val;
105                 __sn_mmiowb();
106         }
107 }
108 
109 static inline void
110 ___sn_outw (unsigned short val, unsigned long port)
111 {
112         volatile unsigned short *addr;
113 
114         if ((addr = sn_io_addr(port))) {
115                 *addr = val;
116                 __sn_mmiowb();
117         }
118 }
119 
120 static inline void
121 ___sn_outl (unsigned int val, unsigned long port)
122 {
123         volatile unsigned int *addr;
124 
125         if ((addr = sn_io_addr(port))) {
126                 *addr = val;
127                 __sn_mmiowb();
128         }
129 }
130 
131 /*
132  * The following routines are SN Platform specific, called when 
133  * a reference is made to readX/writeX set macros.  SN Platform 
134  * readX set of macros ensures that Posted DMA writes on the 
135  * Bridge is flushed.
136  * 
137  * The routines should be self explainatory.
138  */
139 
140 static inline unsigned char
141 ___sn_readb (const volatile void __iomem *addr)
142 {
143         unsigned char val;
144 
145         val = *(volatile unsigned char __force *)addr;
146         __sn_mf_a();
147         sn_dma_flush((unsigned long)addr);
148         return val;
149 }
150 
151 static inline unsigned short
152 ___sn_readw (const volatile void __iomem *addr)
153 {
154         unsigned short val;
155 
156         val = *(volatile unsigned short __force *)addr;
157         __sn_mf_a();
158         sn_dma_flush((unsigned long)addr);
159         return val;
160 }
161 
162 static inline unsigned int
163 ___sn_readl (const volatile void __iomem *addr)
164 {
165         unsigned int val;
166 
167         val = *(volatile unsigned int __force *)addr;
168         __sn_mf_a();
169         sn_dma_flush((unsigned long)addr);
170         return val;
171 }
172 
173 static inline unsigned long
174 ___sn_readq (const volatile void __iomem *addr)
175 {
176         unsigned long val;
177 
178         val = *(volatile unsigned long __force *)addr;
179         __sn_mf_a();
180         sn_dma_flush((unsigned long)addr);
181         return val;
182 }
183 
184 /*
185  * For generic and SN2 kernels, we have a set of fast access
186  * PIO macros.  These macros are provided on SN Platform
187  * because the normal inX and readX macros perform an
188  * additional task of flushing Post DMA request on the Bridge.
189  *
190  * These routines should be self explainatory.
191  */
192 
193 static inline unsigned int
194 sn_inb_fast (unsigned long port)
195 {
196         volatile unsigned char *addr = (unsigned char *)port;
197         unsigned char ret;
198 
199         ret = *addr;
200         __sn_mf_a();
201         return ret;
202 }
203 
204 static inline unsigned int
205 sn_inw_fast (unsigned long port)
206 {
207         volatile unsigned short *addr = (unsigned short *)port;
208         unsigned short ret;
209 
210         ret = *addr;
211         __sn_mf_a();
212         return ret;
213 }
214 
215 static inline unsigned int
216 sn_inl_fast (unsigned long port)
217 {
218         volatile unsigned int *addr = (unsigned int *)port;
219         unsigned int ret;
220 
221         ret = *addr;
222         __sn_mf_a();
223         return ret;
224 }
225 
226 static inline unsigned char
227 ___sn_readb_relaxed (const volatile void __iomem *addr)
228 {
229         return *(volatile unsigned char __force *)addr;
230 }
231 
232 static inline unsigned short
233 ___sn_readw_relaxed (const volatile void __iomem *addr)
234 {
235         return *(volatile unsigned short __force *)addr;
236 }
237 
238 static inline unsigned int
239 ___sn_readl_relaxed (const volatile void __iomem *addr)
240 {
241         return *(volatile unsigned int __force *) addr;
242 }
243 
244 static inline unsigned long
245 ___sn_readq_relaxed (const volatile void __iomem *addr)
246 {
247         return *(volatile unsigned long __force *) addr;
248 }
249 
250 struct pci_dev;
251 
252 static inline int
253 sn_pci_set_vchan(struct pci_dev *pci_dev, unsigned long *addr, int vchan)
254 {
255 
256         if (vchan > 1) {
257                 return -1;
258         }
259 
260         if (!(*addr >> 32))     /* Using a mask here would be cleaner */
261                 return 0;       /* but this generates better code */
262 
263         if (vchan == 1) {
264                 /* Set Bit 57 */
265                 *addr |= (1UL << 57);
266         } else {
267                 /* Clear Bit 57 */
268                 *addr &= ~(1UL << 57);
269         }
270 
271         return 0;
272 }
273 
274 #endif  /* _ASM_SN_IO_H */
275 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp