linux/arch/sh/boards/titan/io.c
<<
>>
Prefs
   1/*
   2 *      I/O routines for Titan
   3 */
   4#include <linux/pci.h>
   5#include <asm/machvec.h>
   6#include <asm/addrspace.h>
   7#include <asm/titan.h>
   8#include <asm/io.h>
   9
  10static inline unsigned int port2adr(unsigned int port)
  11{
  12        maybebadio((unsigned long)port);
  13        return port;
  14}
  15
  16u8 titan_inb(unsigned long port)
  17{
  18        if (PXSEG(port))
  19                return ctrl_inb(port);
  20        else if (is_pci_ioaddr(port))
  21                return ctrl_inb(pci_ioaddr(port));
  22        return ctrl_inw(port2adr(port)) & 0xff;
  23}
  24
  25u8 titan_inb_p(unsigned long port)
  26{
  27        u8 v;
  28
  29        if (PXSEG(port))
  30                v = ctrl_inb(port);
  31        else if (is_pci_ioaddr(port))
  32                v = ctrl_inb(pci_ioaddr(port));
  33        else
  34                v = ctrl_inw(port2adr(port)) & 0xff;
  35        ctrl_delay();
  36        return v;
  37}
  38
  39u16 titan_inw(unsigned long port)
  40{
  41        if (PXSEG(port))
  42                return ctrl_inw(port);
  43        else if (is_pci_ioaddr(port))
  44                return ctrl_inw(pci_ioaddr(port));
  45        else if (port >= 0x2000)
  46                return ctrl_inw(port2adr(port));
  47        else
  48                maybebadio(port);
  49        return 0;
  50}
  51
  52u32 titan_inl(unsigned long port)
  53{
  54        if (PXSEG(port))
  55                return ctrl_inl(port);
  56        else if (is_pci_ioaddr(port))
  57                return ctrl_inl(pci_ioaddr(port));
  58        else if (port >= 0x2000)
  59                return ctrl_inw(port2adr(port));
  60        else
  61                maybebadio(port);
  62        return 0;
  63}
  64
  65void titan_outb(u8 value, unsigned long port)
  66{
  67        if (PXSEG(port))
  68                ctrl_outb(value, port);
  69        else if (is_pci_ioaddr(port))
  70                ctrl_outb(value, pci_ioaddr(port));
  71        else
  72                ctrl_outw(value, port2adr(port));
  73}
  74
  75void titan_outb_p(u8 value, unsigned long port)
  76{
  77        if (PXSEG(port))
  78                ctrl_outb(value, port);
  79        else if (is_pci_ioaddr(port))
  80                ctrl_outb(value, pci_ioaddr(port));
  81        else
  82                ctrl_outw(value, port2adr(port));
  83        ctrl_delay();
  84}
  85
  86void titan_outw(u16 value, unsigned long port)
  87{
  88        if (PXSEG(port))
  89                ctrl_outw(value, port);
  90        else if (is_pci_ioaddr(port))
  91                ctrl_outw(value, pci_ioaddr(port));
  92        else if (port >= 0x2000)
  93                ctrl_outw(value, port2adr(port));
  94        else
  95                maybebadio(port);
  96}
  97
  98void titan_outl(u32 value, unsigned long port)
  99{
 100        if (PXSEG(port))
 101                ctrl_outl(value, port);
 102        else if (is_pci_ioaddr(port))
 103                ctrl_outl(value, pci_ioaddr(port));
 104        else
 105                maybebadio(port);
 106}
 107
 108void titan_insl(unsigned long port, void *dst, unsigned long count)
 109{
 110        maybebadio(port);
 111}
 112
 113void titan_outsl(unsigned long port, const void *src, unsigned long count)
 114{
 115        maybebadio(port);
 116}
 117
 118void __iomem *titan_ioport_map(unsigned long port, unsigned int size)
 119{
 120        if (PXSEG(port) || is_pci_memaddr(port))
 121                return (void __iomem *)port;
 122        else if (is_pci_ioaddr(port))
 123                return (void __iomem *)pci_ioaddr(port);
 124
 125        return (void __iomem *)port2adr(port);
 126}
 127