1  /* Copyright (C) 1999-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  #define	_SYS_IO_H	1
      20  
      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);
      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);
      39  
      40  extern unsigned int _inb (unsigned long int __port);
      41  extern unsigned int _inb (unsigned long int __port);
      42  extern unsigned int _inw (unsigned long int __port);
      43  extern unsigned int _inl (unsigned long int __port);
      44  extern void _outb (unsigned char __val, unsigned long int __port);
      45  extern void _outw (unsigned short __val, unsigned long int __port);
      46  extern void _outl (unsigned int __val, unsigned long int __port);
      47  
      48  #define inb	_inb
      49  #define inw	_inw
      50  #define inl	_inl
      51  #define outb	_outb
      52  #define outw	_outw
      53  #define outl	_outl
      54  
      55  /* Access PCI space protected from machine checks.  */
      56  extern int pciconfig_read (unsigned long int __bus, unsigned long int __dfn,
      57  			   unsigned long int __off, unsigned long int __len,
      58  			   unsigned char *__buf);
      59  
      60  extern int pciconfig_write (unsigned long int __bus, unsigned long int __dfn,
      61  			    unsigned long int __off, unsigned long int __len,
      62  			    unsigned char *__buf);
      63  
      64  __END_DECLS
      65  
      66  #endif /* _SYS_IO_H */