pcireg.h revision 2665
1/*
2 * Copyright (c) 2001-2005 The Regents of The University of Michigan
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * Authors: Nathan Binkert
29 *          Miguel Serrano
30 */
31
32/* @file
33 * Device register definitions for a device's PCI config space
34 */
35
36#ifndef __PCIREG_H__
37#define __PCIREG_H__
38
39#include <sys/types.h>
40
41union PCIConfig {
42    uint8_t data[64];
43
44    struct {
45        uint16_t vendor;
46        uint16_t device;
47        uint16_t command;
48        uint16_t status;
49        uint8_t revision;
50        uint8_t progIF;
51        uint8_t subClassCode;
52        uint8_t classCode;
53        uint8_t cacheLineSize;
54        uint8_t latencyTimer;
55        uint8_t headerType;
56        uint8_t bist;
57        union {
58            uint32_t baseAddr[6];
59
60            struct {
61                uint32_t baseAddr0;
62                uint32_t baseAddr1;
63                uint32_t baseAddr2;
64                uint32_t baseAddr3;
65                uint32_t baseAddr4;
66                uint32_t baseAddr5;
67            };
68        };
69        uint32_t cardbusCIS;
70        uint16_t subsystemVendorID;
71        uint16_t subsystemID;
72        uint32_t expansionROM;
73        uint32_t reserved0;
74        uint32_t reserved1;
75        uint8_t interruptLine;
76        uint8_t interruptPin;
77        uint8_t minimumGrant;
78        uint8_t maximumLatency;
79    };
80};
81
82// Common PCI offsets
83#define PCI_VENDOR_ID		0x00	// Vendor ID			ro
84#define PCI_DEVICE_ID		0x02	// Device ID			ro
85#define PCI_COMMAND		0x04	// Command			rw
86#define PCI_STATUS		0x06	// Status			rw
87#define PCI_REVISION_ID 	0x08	// Revision ID			ro
88#define PCI_CLASS_CODE		0x09	// Class Code			ro
89#define PCI_SUB_CLASS_CODE	0x0A	// Sub Class Code		ro
90#define PCI_BASE_CLASS_CODE	0x0B	// Base Class Code		ro
91#define PCI_CACHE_LINE_SIZE	0x0C	// Cache Line Size		ro+
92#define PCI_LATENCY_TIMER	0x0D	// Latency Timer		ro+
93#define PCI_HEADER_TYPE		0x0E	// Header Type			ro
94#define PCI_BIST		0x0F	// Built in self test		rw
95
96// some pci command reg bitfields
97#define PCI_CMD_BME     0x04 // Bus master function enable
98#define PCI_CMD_MSE     0x02 // Memory Space Access enable
99#define PCI_CMD_IOSE    0x01 // I/O space enable
100
101// Type 0 PCI offsets
102#define PCI0_BASE_ADDR0		0x10	// Base Address 0		rw
103#define PCI0_BASE_ADDR1		0x14	// Base Address 1		rw
104#define PCI0_BASE_ADDR2		0x18	// Base Address 2		rw
105#define PCI0_BASE_ADDR3		0x1C	// Base Address 3		rw
106#define PCI0_BASE_ADDR4		0x20	// Base Address 4		rw
107#define PCI0_BASE_ADDR5		0x24	// Base Address 5		rw
108#define PCI0_CIS		0x28	// CardBus CIS Pointer		ro
109#define PCI0_SUB_VENDOR_ID	0x2C	// Sub-Vendor ID		ro
110#define PCI0_SUB_SYSTEM_ID	0x2E	// Sub-System ID		ro
111#define PCI0_ROM_BASE_ADDR	0x30	// Expansion ROM Base Address	rw
112#define PCI0_RESERVED0		0x34
113#define PCI0_RESERVED1		0x38
114#define PCI0_INTERRUPT_LINE	0x3C	// Interrupt Line		rw
115#define PCI0_INTERRUPT_PIN	0x3D	// Interrupt Pin		ro
116#define PCI0_MINIMUM_GRANT	0x3E	// Maximum Grant		ro
117#define PCI0_MAXIMUM_LATENCY	0x3F	// Maximum Latency		ro
118
119// Type 1 PCI offsets
120#define PCI1_BASE_ADDR0		0x10	// Base Address 0		rw
121#define PCI1_BASE_ADDR1		0x14	// Base Address 1		rw
122#define PCI1_PRI_BUS_NUM	0x18	// Primary Bus Number		rw
123#define PCI1_SEC_BUS_NUM	0x19	// Secondary Bus Number		rw
124#define PCI1_SUB_BUS_NUM	0x1A	// Subordinate Bus Number	rw
125#define PCI1_SEC_LAT_TIMER	0x1B	// Secondary Latency Timer	ro+
126#define PCI1_IO_BASE		0x1C	// I/O Base			rw
127#define PCI1_IO_LIMIT		0x1D	// I/O Limit			rw
128#define PCI1_SECONDARY_STATUS	0x1E	// Secondary Status		rw
129#define PCI1_MEM_BASE		0x20	// Memory Base			rw
130#define PCI1_MEM_LIMIT		0x22	// Memory Limit			rw
131#define PCI1_PRF_MEM_BASE	0x24	// Prefetchable Memory Base	rw
132#define PCI1_PRF_MEM_LIMIT	0x26	// Prefetchable Memory Limit	rw
133#define PCI1_PRF_BASE_UPPER	0x28	// Prefetchable Base Upper 32	rw
134#define PCI1_PRF_LIMIT_UPPER	0x2C	// Prefetchable Limit Upper 32	rw
135#define PCI1_IO_BASE_UPPER	0x30	// I/O Base Upper 16 bits	rw
136#define PCI1_IO_LIMIT_UPPER	0x32	// I/O Limit Upper 16 bits	rw
137#define PCI1_RESERVED		0x34	// Reserved			ro
138#define PCI1_ROM_BASE_ADDR	0x38	// Expansion ROM Base Address	rw
139#define PCI1_INTR_LINE		0x3C	// Interrupt Line		rw
140#define PCI1_INTR_PIN		0x3D	// Interrupt Pin		ro
141#define PCI1_BRIDGE_CTRL	0x3E	// Bridge Control		rw
142
143// Device specific offsets
144#define PCI_DEVICE_SPECIFIC     	0x40	// 192 bytes
145
146// Some Vendor IDs
147#define PCI_VENDOR_DEC			0x1011
148#define PCI_VENDOR_NCR			0x101A
149#define PCI_VENDOR_QLOGIC		0x1077
150#define PCI_VENDOR_SIMOS		0x1291
151
152// Some Product IDs
153#define PCI_PRODUCT_DEC_PZA		0x0008
154#define PCI_PRODUCT_NCR_810		0x0001
155#define PCI_PRODUCT_QLOGIC_ISP1020	0x1020
156#define PCI_PRODUCT_SIMOS_SIMOS		0x1291
157#define PCI_PRODUCT_SIMOS_ETHER		0x1292
158
159#endif // __PCIREG_H__
160