⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xf86_pci.h

📁 基于组件方式开发操作系统的OSKIT源代码
💻 H
字号:
/* $XFree86: xc/programs/Xserver/hw/xfree86/common_hw/xf86_PCI.h,v 3.12 1996/12/23 06:44:27 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. * *//* $XConsortium: xf86_PCI.h /main/13 1996/10/25 10:25:59 kaleb $ */#ifndef _XF86_PCI_H#define _XF86_PCI_H 1#if 0#define USE_OLD_PCI_CODE#endiftypedef struct pci_config_reg {    /* start of official PCI config space header */    union {	CARD32 device_vendor;	struct {	    CARD16 vendor;	    CARD16 device;	} dv;    } dv_id;#define _device_vendor dv_id.device_vendor#define _vendor dv_id.dv.vendor#define _device dv_id.dv.device    union {        CARD32 status_command;	struct {	    CARD16 command;	    CARD16 status;	} sc;    } stat_cmd;#define _status_command stat_cmd.status_command#define _command stat_cmd.sc.command#define _status  stat_cmd.sc.status    union {        CARD32 class_revision;	struct {	    CARD8 rev_id;	    CARD8 prog_if;	    CARD8 sub_class;	    CARD8 base_class;	} cr;    } class_rev;#define _class_revision class_rev.class_revision#define _rev_id     class_rev.cr.rev_id#define _prog_if    class_rev.cr.prog_if#define _sub_class  class_rev.cr.sub_class#define _base_class class_rev.cr.base_class    union {        CARD32 bist_header_latency_cache;	struct {	    CARD8 cache_line_size;	    CARD8 latency_timer;	    CARD8 header_type;	    CARD8 bist;	} bhlc;    } bhlc;#define _bist_header_latency_cache bhlc.bist_header_latency_cache#define _cache_line_size bhlc.bhlc.cache_line_size#define _latency_timer   bhlc.bhlc.latency_timer#define _header_type     bhlc.bhlc.header_type#define _bist            bhlc.bhlc.bist    union {	struct {	    CARD32 dv_base0;	    CARD32 dv_base1;	    CARD32 dv_base2;	    CARD32 dv_base3;	    CARD32 dv_base4;	    CARD32 dv_base5;	} dv;	struct {	    CARD32 bg_rsrvd[2];	    CARD8 primary_bus_number;	    CARD8 secondary_bus_number;	    CARD8 subordinate_bus_number;	    CARD8 secondary_latency_timer;	    CARD8 io_base;	    CARD8 io_limit;	    CARD16 secondary_status;	    CARD16 mem_base;	    CARD16 mem_limit;	    CARD16 prefetch_mem_base;	    CARD16 prefetch_mem_limit;	} bg;    } bc;#define	_base0				bc.dv.dv_base0#define	_base1				bc.dv.dv_base1#define	_base2				bc.dv.dv_base2#define	_base3				bc.dv.dv_base3#define	_base4				bc.dv.dv_base4#define	_base5				bc.dv.dv_base5#define	_primary_bus_number		bc.bg.primary_bus_number#define	_secondary_bus_number		bc.bg.secondary_bus_number#define	_subordinate_bus_number		bc.bg.subordinate_bus_number#define	_secondary_latency_timer	bc.bg.secondary_latency_timer#define _io_base			bc.bg.io_base#define _io_limit			bc.bg.io_limit#define _secondary_status		bc.bg.secondary_status#define _mem_base			bc.bg.mem_base#define _mem_limit			bc.bg.mem_limit#define _prefetch_mem_base		bc.bg.prefetch_mem_base#define _prefetch_mem_limit		bc.bg.prefetch_mem_limit    CARD32 rsvd1;    CARD32 rsvd2;    CARD32 _baserom;    CARD32 rsvd3;    CARD32 rsvd4;    union {        CARD32 max_min_ipin_iline;	struct {	    CARD8 int_line;	    CARD8 int_pin;	    CARD8 min_gnt;	    CARD8 max_lat;	} mmii;    } mmii;#define _max_min_ipin_iline mmii.max_min_ipin_iline#define _int_line mmii.mmii.int_line#define _int_pin  mmii.mmii.int_pin#define _min_gnt  mmii.mmii.min_gnt#define _max_lat  mmii.mmii.max_lat    /* I don't know how accurate or standard this is (DHD) */    union {	CARD32 user_config;	struct {	    CARD8 user_config_0;	    CARD8 user_config_1;	    CARD8 user_config_2;	    CARD8 user_config_3;	} uc;    } uc;#define _user_config uc.user_config#define _user_config_0 uc.uc.user_config_0#define _user_config_1 uc.uc.user_config_1#define _user_config_2 uc.uc.user_config_2#define _user_config_3 uc.uc.user_config_3    /* end of official PCI config space header */#ifdef USE_OLD_PCI_CODE    CARD32 _pcibusidx;    CARD32 _pcinumbus;    CARD32 _pcibuses[16];    CARD16 _configtype;   /* config type found                   */    CARD16 _ioaddr;       /* config type 1 - private I/O addr    */#endif    CARD32 _bus;    CARD32 _cardnum;      /* config type 2 - private card number */    CARD32 _func;         /* function number */} pciConfigRec, *pciConfigPtr;typedef union {    CARD32 cfg1;    struct {	CARD8  enable;	CARD8  forward;	CARD16 port;    } cfg2;    CARD32 tag;} pciTagRec, *pciTagPtr;#define PCI_EN 0x80000000#define MAX_PCI_DEVICES 64#define PCI_CONFIG1_MAXDEV	32#define PCI_CONFIG2_MAXDEV	16/* Registers */#define PCI_REG_USERCONFIG 		0x40#define PCI_OPTION_REG	 		0x40/* PCI Configuration address */#define	PCI_MODE1_ADDRESS_REG		0xCF8#define	PCI_MODE1_DATA_REG		0xCFC#define	PCI_MODE2_ENABLE_REG		0xCF8#ifdef PC98#define	PCI_MODE2_FORWARD_REG		0xCF9#else#define	PCI_MODE2_FORWARD_REG		0xCFA#endif/* Device identification register */#define PCI_ID_REG			0x00/* Command and status register */#define	PCI_CMD_STAT_REG		0x04#define	PCI_CMD_MASK			0xffff#define	PCI_CMD_IO_ENABLE		0x01#define	PCI_CMD_MEM_ENABLE		0x02#define	PCI_CMD_MASTER_ENABLE		0x04#define PCI_CMD_SPECIAL_ENABLE		0x08#define PCI_CMD_INVALIDATE_ENABLE 	0x10#define PCI_CMD_PALETTE_ENABLE 		0x20#define	PCI_CMD_PARITY_ENABLE		0x40#define	PCI_CMD_STEPPING_ENABLE		0x80#define	PCI_CMD_SERR_ENABLE		0x100#define	PCI_CMD_BACKTOBACK_ENABLE	0x200/* base classes */#define PCI_CLASS_REG          		0x08#define PCI_CLASS_MASK          	0xff000000/* base classes as in _base_class */#define PCI_CLASS_PREHISTORIC           0x00#define PCI_CLASS_MASS_STORAGE          0x01#define PCI_CLASS_NETWORK               0x02#define PCI_CLASS_DISPLAY               0x03#define PCI_CLASS_MULTIMEDIA            0x04#define PCI_CLASS_MEMORY                0x05#define PCI_CLASS_BRIDGE                0x06#define PCI_CLASS_UNDEFINED             0xff/* Sub class */#define PCI_SUBCLASS_MASK       0x00ff0000/* Sub classes as in _sub_class *//* 0x00 prehistoric subclasses */#define PCI_SUBCLASS_PREHISTORIC_MISC   0x00#define PCI_SUBCLASS_PREHISTORIC_VGA    0x01/* 0x01 mass storage subclasses */#define PCI_SUBCLASS_MASS_STORAGE_SCSI  	0x00#define PCI_SUBCLASS_MASS_STORAGE_IDE   	0x01#define PCI_SUBCLASS_MASS_STORAGE_FLOPPY        0x02#define PCI_SUBCLASS_MASS_STORAGE_IPI   	0x03#define PCI_SUBCLASS_MASS_STORAGE_MISC  	0x80/* 0x02 network subclasses */#define PCI_SUBCLASS_NETWORK_ETHERNET   	0x00#define PCI_SUBCLASS_NETWORK_TOKENRING  	0x01#define PCI_SUBCLASS_NETWORK_FDDI       	0x02#define PCI_SUBCLASS_NETWORK_MISC       	0x80/* 0x03 display subclasses */#define PCI_SUBCLASS_DISPLAY_VGA        0x00#define PCI_SUBCLASS_DISPLAY_XGA        0x01#define PCI_SUBCLASS_DISPLAY_MISC       0x80/* 0x04 multimedia subclasses */#define PCI_SUBCLASS_MULTIMEDIA_VIDEO   0x00#define PCI_SUBCLASS_MULTIMEDIA_AUDIO   0x01#define PCI_SUBCLASS_MULTIMEDIA_MISC    0x80/* 0x05 memory subclasses */#define PCI_SUBCLASS_MEMORY_RAM         0x00#define PCI_SUBCLASS_MEMORY_FLASH       0x01#define PCI_SUBCLASS_MEMORY_MISC        0x80/* 0x06 bridge subclasses */#define PCI_SUBCLASS_BRIDGE_HOST        0x00#define PCI_SUBCLASS_BRIDGE_ISA         0x01#define PCI_SUBCLASS_BRIDGE_EISA        0x02#define PCI_SUBCLASS_BRIDGE_MC          0x03#define PCI_SUBCLASS_BRIDGE_PCI         0x04#define PCI_SUBCLASS_BRIDGE_PCMCIA      0x05#define PCI_SUBCLASS_BRIDGE_MISC        0x80/* Header */#define PCI_HEADER_MISC			0x0c#define PCI_HEADER_MULTIFUNCTION	0x00800000/* Interrupt configration register */#define PCI_INTERRUPT_REG		0x3c#define PCI_INTERRUPT_PIN_MASK          0x0000ff00#define PCI_INTERRUPT_PIN_EXTRACT(x)    ((((x) & PCI_INTERRUPT_PIN_MASK) >> 8) & 0xff)#define PCI_INTERRUPT_PIN_NONE          0x00#define PCI_INTERRUPT_PIN_A             0x01#define PCI_INTERRUPT_PIN_B             0x02#define PCI_INTERRUPT_PIN_C             0x03#define PCI_INTERRUPT_PIN_D             0x04#define PCI_INTERRUPT_LINE_MASK         0x000000ff#define PCI_INTERRUPT_LINE_EXTRACT(x)   ((((x) & PCI_INTERRUPT_LINE_MASK) >> 0) & 0xff) #define PCI_INTERRUPT_LINE_INSERT(x,v)  (((x) & ~PCI_INTERRUPT_LINE_MASK) | ((v) << 0))/* Mapping registers */#define PCI_MAP_REG_START               0x10#define PCI_MAP_REG_END                 0x28#define PCI_MAP_ROM_REG			0x30#define PCI_MAP_MEMORY                  0x00000000#define PCI_MAP_IO                      0x00000001  #define PCI_MAP_MEMORY_TYPE_32BIT       0x00000000#define PCI_MAP_MEMORY_TYPE_32BIT_1M    0x00000002#define PCI_MAP_MEMORY_TYPE_64BIT       0x00000004#define PCI_MAP_MEMORY_TYPE_MASK        0x00000006#define PCI_MAP_MEMORY_CACHABLE         0x00000008#define PCI_MAP_MEMORY_ADDRESS_MASK     0xfffffff0#define PCI_MAP_IO_ADDRESS_MASK         0xfffffffc/* PCI-PCI bridge mapping registers */#define PCI_PCI_BRIDGE_BUS_REG          0x18#define PCI_PCI_BRIDGE_IO_REG           0x1c#define PCI_PCI_BRIDGE_MEM_REG          0x20#define PCI_PCI_BRIDGE_PMEM_REG         0x24#define PCI_SUBORDINATE_BUS_MASK        0x00ff0000#define PCI_SECONDARY_BUS_MASK          0x0000ff00#define PCI_PRIMARY_BUS_MASK            0x000000ff#define PCI_SUBORDINATE_BUS_EXTRACT(x)  (((x) >> 16) & 0xff)#define PCI_SECONDARY_BUS_EXTRACT(x)    (((x) >>  8) & 0xff)#define PCI_PRIMARY_BUS_EXTRACT(x)      (((x)      ) & 0xff)#define PCI_PRIMARY_BUS_INSERT(x, y)    (((x) & ~PCI_PRIMARY_BUS_MASK) | ((y) << 0))#define PCI_SECONDARY_BUS_INSERT(x, y)  (((x) & ~PCI_SECONDARY_BUS_MASK) | ((y) <<  8)) #define PCI_SUBORDINATE_BUS_INSERT(x, y) (((x) & ~PCI_SUBORDINATE_BUS_MASK) | (( y) << 16))#define PCI_PPB_IOBASE_EXTRACT(x)       (((x) << 8) & 0xFF00)#define PCI_PPB_IOLIMIT_EXTRACT(x)      (((x) << 0) & 0xFF00)#define PCI_PPB_MEMBASE_EXTRACT(x)      (((x) << 16) & 0xFFFF0000)#define PCI_PPB_MEMLIMIT_EXTRACT(x)     (((x) <<  0) & 0xFFFF0000)pciConfigPtr *xf86scanpci(#if NeedFunctionPrototypes	int#endif);#ifdef USE_OLD_PCI_CODEvoid xf86writepci(#if NeedFunctionPrototypes	int,	int,	int,	int,	int,	unsigned long,	unsigned long#endif);#elsevoid xf86writepci(#if NeedFunctionPrototypes	int,	int,	int,		int,	int,	CARD32,	CARD32#endif);#endifvoid xf86cleanpci(#if NeedFunctionPrototypes	void#endif);pciTagRec pcibusTag(#if NeedFunctionPrototypes	CARD8,	CARD8,	CARD8#endif);CARD32 pcibusRead(#if NeedFunctionPrototypes	pciTagRec,	CARD32#endif);#define pciReadLong(tag, addr) pcibusRead(tag, addr)CARD16 pciReadWord(#if NeedFunctionPrototypes	pciTagRec,	CARD32#endif);CARD8 pciReadByte(#if NeedFunctionPrototypes	pciTagRec,	CARD32#endif);void pcibusWrite(#if NeedFunctionPrototypes	pciTagRec,	CARD32,	CARD32#endif);#define pciWriteLong(tag, addr, data) pcibusWrite(tag, addr, data)void pciWriteWord(#if NeedFunctionPrototypes	pciTagRec,	CARD32,	CARD16#endif);void pciWriteByte(#if NeedFunctionPrototypes	pciTagRec,	CARD32,	CARD8#endif);#endif /* _XF86_PCI_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -