patch-2.1.53 linux/include/asm-sparc64/io.h
Next file: linux/include/asm-sparc64/keyboard.h
Previous file: linux/include/asm-sparc64/ide.h
Back to the patch index
Back to the overall index
- Lines: 181
- Date:
Thu Sep 4 12:54:49 1997
- Orig file:
v2.1.52/linux/include/asm-sparc64/io.h
- Orig date:
Mon Apr 14 16:28:22 1997
diff -u --recursive --new-file v2.1.52/linux/include/asm-sparc64/io.h linux/include/asm-sparc64/io.h
@@ -1,4 +1,4 @@
-/* $Id: io.h,v 1.10 1997/04/10 05:13:29 davem Exp $ */
+/* $Id: io.h,v 1.12 1997/08/19 03:11:52 davem Exp $ */
#ifndef __SPARC64_IO_H
#define __SPARC64_IO_H
@@ -7,83 +7,122 @@
#include <asm/page.h> /* IO address mapping routines need this */
#include <asm/system.h>
+#include <asm/asi.h>
-extern __inline__ unsigned long inb_local(unsigned long addr)
-{
- return 0;
-}
+/* PC crapola... */
+#define __SLOW_DOWN_IO do { } while (0)
+#define SLOW_DOWN_IO do { } while (0)
-extern __inline__ void outb_local(unsigned char b, unsigned long addr)
+extern __inline__ unsigned long virt_to_phys(volatile void *addr)
{
- return;
+ return ((((unsigned long)addr) - PAGE_OFFSET) | 0x80000000UL);
}
-extern __inline__ unsigned long inb(unsigned long addr)
+extern __inline__ void *phys_to_virt(unsigned long addr)
{
- return 0;
+ return ((void *)((addr & ~0x80000000) + PAGE_OFFSET));
}
-extern __inline__ unsigned long inw(unsigned long addr)
-{
- return 0;
-}
+#define virt_to_bus virt_to_phys
+#define bus_to_virt phys_to_virt
-extern __inline__ unsigned long inl(unsigned long addr)
+extern __inline__ unsigned int inb(unsigned long addr)
{
- return 0;
-}
+ unsigned int ret;
-extern __inline__ void outb(unsigned char b, unsigned long addr)
-{
- return;
-}
+ __asm__ __volatile__("lduba [%1] %2, %0"
+ : "=r" (ret)
+ : "r" (addr), "i" (ASI_PL));
-extern __inline__ void outw(unsigned short b, unsigned long addr)
-{
- return;
+ return ret;
}
-extern __inline__ void outl(unsigned int b, unsigned long addr)
+extern __inline__ unsigned int inw(unsigned long addr)
{
- return;
-}
+ unsigned int ret;
-/*
- * Memory functions
- */
-extern __inline__ unsigned long readb(unsigned long addr)
-{
- return 0;
-}
+ __asm__ __volatile__("lduha [%1] %2, %0"
+ : "=r" (ret)
+ : "r" (addr), "i" (ASI_PL));
-extern __inline__ unsigned long readw(unsigned long addr)
-{
- return 0;
+ return ret;
}
-extern __inline__ unsigned long readl(unsigned long addr)
+extern __inline__ unsigned int inl(unsigned long addr)
{
- return 0;
+ unsigned int ret;
+
+ __asm__ __volatile__("lduwa [%1] %2, %0"
+ : "=r" (ret)
+ : "r" (addr), "i" (ASI_PL));
+
+ return ret;
}
-extern __inline__ void writeb(unsigned short b, unsigned long addr)
+extern __inline__ void outb(unsigned char b, unsigned long addr)
{
- return;
+ __asm__ __volatile__("stba %0, [%1] %2"
+ : /* no outputs */
+ : "r" (b), "r" (addr), "i" (ASI_PL));
}
-extern __inline__ void writew(unsigned short b, unsigned long addr)
+extern __inline__ void outw(unsigned short w, unsigned long addr)
{
- return;
+ __asm__ __volatile__("stha %0, [%1] %2"
+ : /* no outputs */
+ : "r" (w), "r" (addr), "i" (ASI_PL));
}
-extern __inline__ void writel(unsigned int b, unsigned long addr)
+extern __inline__ void outl(unsigned int l, unsigned long addr)
{
- return;
+ __asm__ __volatile__("stwa %0, [%1] %2"
+ : /* no outputs */
+ : "r" (l), "r" (addr), "i" (ASI_PL));
}
#define inb_p inb
#define outb_p outb
+extern void outsb(unsigned long addr, const void *src, unsigned long count);
+extern void outsw(unsigned long addr, const void *src, unsigned long count);
+extern void outsl(unsigned long addr, const void *src, unsigned long count);
+extern void insb(unsigned long addr, void *dst, unsigned long count);
+extern void insw(unsigned long addr, void *dst, unsigned long count);
+extern void insl(unsigned long addr, void *dst, unsigned long count);
+
+/* Memory functions, same as I/O accesses on Ultra. */
+#define readb(addr) inb(addr)
+#define readw(addr) inw(addr)
+#define readl(addr) inl(addr)
+#define writeb(b, addr) outb((b), (addr))
+#define writew(w, addr) outw((w), (addr))
+#define writel(l, addr) outl((l), (addr))
+
+/* Memcpy to/from I/O space is just a regular memory operation on Ultra as well. */
+
+#if 0 /* XXX Not exactly, we need to use ASI_*L from/to the I/O end,
+ * XXX so these are disabled until we code that stuff.
+ */
+#define memset_io(a,b,c) memset(((char *)(a)),(b),(c))
+#define memcpy_fromio(a,b,c) memcpy((a),((char *)(b)),(c))
+#define memcpy_toio(a,b,c) memcpy(((char *)(a)),(b),(c))
+#define eth_io_copy_and_sum(a,b,c,d) eth_copy_and_sum((a),((char *)(b)),(c),(d))
+#endif
+
+static inline int check_signature(unsigned long io_addr,
+ const unsigned char *signature,
+ int length)
+{
+ int retval = 0;
+ do {
+ if (readb(io_addr++) != *signature++)
+ goto out;
+ } while (--length);
+ retval = 1;
+out:
+ return retval;
+}
+
extern void sparc_ultra_mapioaddr (unsigned long physaddr, unsigned long virt_addr,
int bus, int rdonly);
extern void sparc_ultra_unmapioaddr (unsigned long virt_addr);
@@ -102,8 +141,5 @@
extern void *sparc_alloc_io (u32 pa, void *va, int sz, char *name, u32 io, int rdonly);
extern void sparc_free_io (void *va, int sz);
extern void *sparc_dvma_malloc (int sz, char *name, __u32 *dvma_addr);
-
-#define virt_to_phys(x) __pa((unsigned long)(x))
-#define phys_to_virt(x) __va((unsigned long)(x))
#endif /* !(__SPARC64_IO_H) */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov