| 1 | 1325 | phoenix | /* Copyright (C) 1996, 1999 Free Software Foundation, Inc.
 | 
      
         | 2 |  |  |    This file is part of the GNU C Library.
 | 
      
         | 3 |  |  |  
 | 
      
         | 4 |  |  |    The GNU C Library is free software; you can redistribute it and/or
 | 
      
         | 5 |  |  |    modify it under the terms of the GNU Lesser General Public
 | 
      
         | 6 |  |  |    License as published by the Free Software Foundation; either
 | 
      
         | 7 |  |  |    version 2.1 of the License, or (at your option) any later version.
 | 
      
         | 8 |  |  |  
 | 
      
         | 9 |  |  |    The GNU C Library is distributed in the hope that it will be useful,
 | 
      
         | 10 |  |  |    but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
      
         | 11 |  |  |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | 
      
         | 12 |  |  |    Lesser General Public License for more details.
 | 
      
         | 13 |  |  |  
 | 
      
         | 14 |  |  |    You should have received a copy of the GNU Lesser General Public
 | 
      
         | 15 |  |  |    License along with the GNU C Library; if not, write to the Free
 | 
      
         | 16 |  |  |    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
 | 
      
         | 17 |  |  |    02111-1307 USA.  */
 | 
      
         | 18 |  |  |  
 | 
      
         | 19 |  |  | #ifndef _SYS_IO_H
 | 
      
         | 20 |  |  |  
 | 
      
         | 21 |  |  | #define _SYS_IO_H       1
 | 
      
         | 22 |  |  | #include <features.h>
 | 
      
         | 23 |  |  |  
 | 
      
         | 24 |  |  | __BEGIN_DECLS
 | 
      
         | 25 |  |  |  
 | 
      
         | 26 |  |  | /* If TURN_ON is TRUE, request for permission to do direct i/o on the
 | 
      
         | 27 |  |  |    port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
 | 
      
         | 28 |  |  |    permission off for that range.  This call requires root privileges.
 | 
      
         | 29 |  |  |  
 | 
      
         | 30 |  |  |    Portability note: not all Linux platforms support this call.  Most
 | 
      
         | 31 |  |  |    platforms based on the PC I/O architecture probably will, however.
 | 
      
         | 32 |  |  |    E.g., Linux/Alpha for Alpha PCs supports this.  */
 | 
      
         | 33 |  |  | extern int ioperm (unsigned long int __from, unsigned long int __num,
 | 
      
         | 34 |  |  |                    int __turn_on) __THROW;
 | 
      
         | 35 |  |  |  
 | 
      
         | 36 |  |  | /* Set the I/O privilege level to LEVEL.  If LEVEL>3, permission to
 | 
      
         | 37 |  |  |    access any I/O port is granted.  This call requires root
 | 
      
         | 38 |  |  |    privileges. */
 | 
      
         | 39 |  |  | extern int iopl (int __level) __THROW;
 | 
      
         | 40 |  |  |  
 | 
      
         | 41 |  |  | /* Return the physical address of the DENSE I/O memory or NULL if none
 | 
      
         | 42 |  |  |    is available (e.g. on a jensen).  */
 | 
      
         | 43 |  |  | extern unsigned long int _bus_base (void) __THROW __attribute__ ((const));
 | 
      
         | 44 |  |  | extern unsigned long int bus_base (void) __THROW __attribute__ ((const));
 | 
      
         | 45 |  |  |  
 | 
      
         | 46 |  |  | /* Return the physical address of the SPARSE I/O memory.  */
 | 
      
         | 47 |  |  | extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const));
 | 
      
         | 48 |  |  | extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const));
 | 
      
         | 49 |  |  |  
 | 
      
         | 50 |  |  | /* Return the HAE shift used by the SPARSE I/O memory.  */
 | 
      
         | 51 |  |  | extern int _hae_shift (void) __THROW __attribute__ ((const));
 | 
      
         | 52 |  |  | extern int hae_shift (void) __THROW __attribute__ ((const));
 | 
      
         | 53 |  |  |  
 | 
      
         | 54 |  |  | /* Previous three are deprecated in favour of the following, which
 | 
      
         | 55 |  |  |    knows about multiple PCI "hoses".  Provide the PCI bus and dfn
 | 
      
         | 56 |  |  |    numbers just as to pciconfig_read/write.  */
 | 
      
         | 57 |  |  |  
 | 
      
         | 58 |  |  | enum __pciconfig_iobase_which
 | 
      
         | 59 |  |  | {
 | 
      
         | 60 |  |  |   IOBASE_HOSE = 0,               /* Return hose index. */
 | 
      
         | 61 |  |  |   IOBASE_SPARSE_MEM = 1,        /* Return physical memory addresses.  */
 | 
      
         | 62 |  |  |   IOBASE_DENSE_MEM = 2,
 | 
      
         | 63 |  |  |   IOBASE_SPARSE_IO = 3,
 | 
      
         | 64 |  |  |   IOBASE_DENSE_IO = 4
 | 
      
         | 65 |  |  | };
 | 
      
         | 66 |  |  |  
 | 
      
         | 67 |  |  | extern long pciconfig_iobase(enum __pciconfig_iobase_which __which,
 | 
      
         | 68 |  |  |                              unsigned long int __bus,
 | 
      
         | 69 |  |  |                              unsigned long int __dfn)
 | 
      
         | 70 |  |  |      __THROW __attribute__ ((const));
 | 
      
         | 71 |  |  |  
 | 
      
         | 72 |  |  | /* Access PCI space protected from machine checks.  */
 | 
      
         | 73 |  |  | extern int pciconfig_read (unsigned long int __bus,
 | 
      
         | 74 |  |  |                            unsigned long int __dfn,
 | 
      
         | 75 |  |  |                            unsigned long int __off,
 | 
      
         | 76 |  |  |                            unsigned long int __len,
 | 
      
         | 77 |  |  |                            unsigned char *__buf) __THROW;
 | 
      
         | 78 |  |  |  
 | 
      
         | 79 |  |  | extern int pciconfig_write (unsigned long int __bus,
 | 
      
         | 80 |  |  |                             unsigned long int __dfn,
 | 
      
         | 81 |  |  |                             unsigned long int __off,
 | 
      
         | 82 |  |  |                             unsigned long int __len,
 | 
      
         | 83 |  |  |                             unsigned char *__buf) __THROW;
 | 
      
         | 84 |  |  |  
 | 
      
         | 85 |  |  | /* Userspace declarations.  */
 | 
      
         | 86 |  |  | extern unsigned int inb (unsigned long __port) __THROW;
 | 
      
         | 87 |  |  | extern unsigned int inw (unsigned long __port) __THROW;
 | 
      
         | 88 |  |  | extern unsigned int inl (unsigned long __port) __THROW;
 | 
      
         | 89 |  |  | extern void outb (unsigned char __b, unsigned long __port) __THROW;
 | 
      
         | 90 |  |  | extern void outw (unsigned short __w, unsigned long __port) __THROW;
 | 
      
         | 91 |  |  | extern void outl (unsigned int __l, unsigned long __port) __THROW;
 | 
      
         | 92 |  |  |  
 | 
      
         | 93 |  |  | __END_DECLS
 | 
      
         | 94 |  |  |  
 | 
      
         | 95 |  |  | #endif /* _SYS_IO_H */
 |