1  /* Copyright (C) 1996-2023 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, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #ifndef	_SYS_IO_H
      19  
      20  #define	_SYS_IO_H	1
      21  #include <features.h>
      22  
      23  __BEGIN_DECLS
      24  
      25  /* If TURN_ON is TRUE, request for permission to do direct i/o on the
      26     port numbers in the range [FROM,FROM+NUM-1].  Otherwise, turn I/O
      27     permission off for that range.  This call requires root privileges.
      28  
      29     Portability note: not all Linux platforms support this call.  Most
      30     platforms based on the PC I/O architecture probably will, however.
      31     E.g., Linux/Alpha for Alpha PCs supports this.  */
      32  extern int ioperm (unsigned long int __from, unsigned long int __num,
      33  		   int __turn_on) __THROW;
      34  
      35  /* Set the I/O privilege level to LEVEL.  If LEVEL>3, permission to
      36     access any I/O port is granted.  This call requires root
      37     privileges. */
      38  extern int iopl (int __level) __THROW;
      39  
      40  /* Return the physical address of the DENSE I/O memory or NULL if none
      41     is available (e.g. on a jensen).  */
      42  extern unsigned long int _bus_base (void) __THROW __attribute__ ((const));
      43  extern unsigned long int bus_base (void) __THROW __attribute__ ((const));
      44  
      45  /* Return the physical address of the SPARSE I/O memory.  */
      46  extern unsigned long _bus_base_sparse (void) __THROW __attribute__ ((const));
      47  extern unsigned long bus_base_sparse (void) __THROW __attribute__ ((const));
      48  
      49  /* Return the HAE shift used by the SPARSE I/O memory.  */
      50  extern int _hae_shift (void) __THROW __attribute__ ((const));
      51  extern int hae_shift (void) __THROW __attribute__ ((const));
      52  
      53  /* Previous three are deprecated in favour of the following, which
      54     knows about multiple PCI "hoses".  Provide the PCI bus and dfn
      55     numbers just as to pciconfig_read/write.  */
      56  
      57  enum __pciconfig_iobase_which
      58  {
      59    IOBASE_HOSE = 0,		/* Return hose index. */
      60    IOBASE_SPARSE_MEM = 1,	/* Return physical memory addresses.  */
      61    IOBASE_DENSE_MEM = 2,
      62    IOBASE_SPARSE_IO = 3,
      63    IOBASE_DENSE_IO = 4
      64  };
      65  
      66  extern long pciconfig_iobase(enum __pciconfig_iobase_which __which,
      67  			     unsigned long int __bus,
      68  			     unsigned long int __dfn)
      69       __THROW __attribute__ ((const));
      70  
      71  /* Access PCI space protected from machine checks.  */
      72  extern int pciconfig_read (unsigned long int __bus,
      73  			   unsigned long int __dfn,
      74  			   unsigned long int __off,
      75  			   unsigned long int __len,
      76  			   unsigned char *__buf) __THROW;
      77  
      78  extern int pciconfig_write (unsigned long int __bus,
      79  			    unsigned long int __dfn,
      80  			    unsigned long int __off,
      81  			    unsigned long int __len,
      82  			    unsigned char *__buf) __THROW;
      83  
      84  /* Userspace declarations.  */
      85  extern unsigned int inb (unsigned long __port) __THROW;
      86  extern unsigned int inw (unsigned long __port) __THROW;
      87  extern unsigned int inl (unsigned long __port) __THROW;
      88  extern void outb (unsigned char __b, unsigned long __port) __THROW;
      89  extern void outw (unsigned short __w, unsigned long __port) __THROW;
      90  extern void outl (unsigned int __l, unsigned long __port) __THROW;
      91  
      92  __END_DECLS
      93  
      94  #endif /* _SYS_IO_H */