ports.c
来自「linux下的MPEG1」· C语言 代码 · 共 220 行
C
220 行
/* (C) 2002 - library implementation by Nick Kyrshev XFree86 3.3.3 scanpci.c, modified for GATOS/win/gfxdump by Øyvind Aabling. *//* $XConsortium: scanpci.c /main/25 1996/10/27 11:48:40 kaleb $ *//* * name: scanpci.c * * purpose: This program will scan for and print details of * devices on the PCI bus. * author: Robin Cutshaw (robin@xfree86.org) * * supported O/S's: SVR4, UnixWare, SCO, Solaris, * FreeBSD, NetBSD, 386BSD, BSDI BSD/386, * Linux, Mach/386, ISC * DOS (WATCOM 9.5 compiler) * * compiling: [g]cc scanpci.c -o scanpci * for SVR4 (not Solaris), UnixWare use: * [g]cc -DSVR4 scanpci.c -o scanpci * for DOS, watcom 9.5: * wcc386p -zq -omaxet -7 -4s -s -w3 -d2 name.c * and link with PharLap or other dos extender for exe * */ /* $XFree86: xc/programs/Xserver/hw/xfree86/etc/scanpci.c,v 3.34.2.17 1998/11/10 11:55:40 dawes Exp $ */ /* * Copyright 1995 by Robin Cutshaw <robin@XFree86.Org> * * Permission to use, copy, modify, distribute, and sell this software and its * documentation for any purpose is hereby granted without fee, provided that * the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation, and that the names of the above listed copyright holder(s) * not be used in advertising or publicity pertaining to distribution of * the software without specific, written prior permission. The above listed * copyright holder(s) make(s) no representations about the suitability of this * software for any purpose. It is provided "as is" without express or * implied warranty. * * THE ABOVE LISTED COPYRIGHT HOLDER(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * */#include <sys/ioctl.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <fcntl.h>#include <sys/stat.h>#include <sys/types.h>#ifdef ARCH_ALPHA#include <sys/io.h>#endif#include <unistd.h>#include "libdha.h"#include "AsmMacros.h"#include "kernelhelper/dhahelper.h"/* OS depended stuff */#if defined (linux)#include "sysdep/pci_linux.c"#elif defined (__FreeBSD__)#include "sysdep/pci_freebsd.c"#elif defined (__386BSD__)#include "sysdep/pci_386bsd.c"#elif defined (__NetBSD__)#include "sysdep/pci_netbsd.c"#elif defined (__OpenBSD__)#include "sysdep/pci_openbsd.c"#elif defined (__bsdi__)#include "sysdep/pci_bsdi.c"#elif defined (Lynx)#include "sysdep/pci_lynx.c"#elif defined (MACH386)#include "sysdep/pci_mach386.c"#elif defined (__SVR4)#if !defined(SVR4)#define SVR4#endif#include "sysdep/pci_svr4.c"#elif defined (SCO)#include "sysdep/pci_sco.c"#elif defined (ISC)#include "sysdep/pci_isc.c"#elif defined (__EMX__)#include "sysdep/pci_os2.c"#elif defined (_WIN32) || defined(__CYGWIN__)#include "sysdep/pci_win32.c"#else#include "sysdep/pci_generic_os.c"#endifstatic int dhahelper_fd=-1;static unsigned dhahelper_counter=0;int enable_app_io( void ){ if((dhahelper_fd=open("/dev/dhahelper",O_RDWR)) < 0) return enable_os_io(); dhahelper_counter++; return 0;}int disable_app_io( void ){ dhahelper_counter--; if(dhahelper_fd > 0) { if(!dhahelper_counter) { close(dhahelper_fd); dhahelper_fd = -1; } } else return disable_os_io(); return 0;}unsigned char INPORT8(unsigned idx){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_READ; _port.addr = idx; _port.size = 1; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return _port.value; } return inb(idx);}unsigned short INPORT16(unsigned idx){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_READ; _port.addr = idx; _port.size = 2; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return _port.value; } return inw(idx);}unsigned INPORT32(unsigned idx){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_READ; _port.addr = idx; _port.size = 4; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return _port.value; } return inl(idx);}void OUTPORT8(unsigned idx,unsigned char val){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_WRITE; _port.addr = idx; _port.size = 1; _port.value = val; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return; } else outb(idx,val);}void OUTPORT16(unsigned idx,unsigned short val){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_WRITE; _port.addr = idx; _port.size = 2; _port.value = val; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return; } else outw(idx,val);}void OUTPORT32(unsigned idx,unsigned val){ if (dhahelper_fd > 0) { dhahelper_port_t _port; _port.operation = PORT_OP_WRITE; _port.addr = idx; _port.size = 4; _port.value = val; if (ioctl(dhahelper_fd, DHAHELPER_PORT, &_port) == 0) return; } else outl(idx,val);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?