diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1998-08-25 09:12:35 +0000 |
commit | c7fc24dc4420057f103afe8fc64524ebc25c5d37 (patch) | |
tree | 3682407a599b8f9f03fc096298134cafba1c9b2f /include/asm-sparc64/io.h | |
parent | 1d793fade8b063fde3cf275bf1a5c2d381292cd9 (diff) |
o Merge with Linux 2.1.116.
o New Newport console code.
o New G364 console code.
Diffstat (limited to 'include/asm-sparc64/io.h')
-rw-r--r-- | include/asm-sparc64/io.h | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/include/asm-sparc64/io.h b/include/asm-sparc64/io.h index 3b8502189..a6bdff9a3 100644 --- a/include/asm-sparc64/io.h +++ b/include/asm-sparc64/io.h @@ -1,4 +1,4 @@ -/* $Id: io.h,v 1.16 1998/03/24 05:54:40 ecd Exp $ */ +/* $Id: io.h,v 1.18 1998/07/12 12:07:43 ecd Exp $ */ #ifndef __SPARC64_IO_H #define __SPARC64_IO_H @@ -13,27 +13,48 @@ #define __SLOW_DOWN_IO do { } while (0) #define SLOW_DOWN_IO do { } while (0) + +#define PCI_DVMA_HASHSZ 256 + extern unsigned long pci_dvma_offset; extern unsigned long pci_dvma_mask; +extern unsigned long pci_dvma_v2p_hash[PCI_DVMA_HASHSZ]; +extern unsigned long pci_dvma_p2v_hash[PCI_DVMA_HASHSZ]; + +#define pci_dvma_ahashfn(addr) (((addr) >> 24) & 0xff) + extern __inline__ unsigned long virt_to_phys(volatile void *addr) { unsigned long vaddr = (unsigned long)addr; + unsigned long off; /* Handle kernel variable pointers... */ if (vaddr < PAGE_OFFSET) vaddr += PAGE_OFFSET - (unsigned long)&empty_zero_page; - return ((vaddr - PAGE_OFFSET) | pci_dvma_offset); + + off = pci_dvma_v2p_hash[pci_dvma_ahashfn(vaddr - PAGE_OFFSET)]; + return vaddr + off; } extern __inline__ void *phys_to_virt(unsigned long addr) { - return ((void *)((addr & pci_dvma_mask) + PAGE_OFFSET)); + unsigned long paddr = addr & 0xffffffffUL; + unsigned long off; + + off = pci_dvma_p2v_hash[pci_dvma_ahashfn(paddr)]; + return (void *)(paddr + off); } #define virt_to_bus virt_to_phys #define bus_to_virt phys_to_virt +extern __inline__ unsigned long bus_dvma_to_mem(unsigned long vaddr) +{ + return vaddr & pci_dvma_mask; +} + + extern __inline__ unsigned int inb(unsigned long addr) { unsigned int ret; |