RTEMS
6.3
Toggle main menu visibility
Loading...
Searching...
No Matches
cpukit
include
pci.h
Go to the documentation of this file.
1
/* SPDX-License-Identifier: BSD-2-Clause */
2
12
13
/*
14
* COPYRIGHT (c) 2009 Cobham Gaisler AB.
15
*
16
* Redistribution and use in source and binary forms, with or without
17
* modification, are permitted provided that the following conditions
18
* are met:
19
* 1. Redistributions of source code must retain the above copyright
20
* notice, this list of conditions and the following disclaimer.
21
* 2. Redistributions in binary form must reproduce the above copyright
22
* notice, this list of conditions and the following disclaimer in the
23
* documentation and/or other materials provided with the distribution.
24
*
25
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
26
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
28
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
29
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
30
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
31
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
32
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
33
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
34
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
35
* POSSIBILITY OF SUCH DAMAGE.
36
*/
37
38
#ifndef __PCI_H__
39
#define __PCI_H__
40
41
#include <pci/pcireg.h>
42
#include <pci/ids.h>
43
44
#define PCI_INVALID_VENDORDEVICEID 0xffffffff
45
46
#define PCID_CLASS(class, dev) ((class << 8) | dev)
47
#define PCID_PCI2PCI_BRIDGE PCID_CLASS(PCIC_BRIDGE, PCIS_BRIDGE_PCI)
48
49
#include <
pci/access.h
>
50
51
#ifdef __cplusplus
52
extern
"C"
{
53
#endif
54
55
/* The PCI Library have the following build time configuration options. It is
56
* up to the BSP header file (bsp.h) to set options properly.
57
*
58
* BSP_PCI_BIG_ENDIAN - Access inline routines will be for a big-endian PCI
59
* bus, if not defined the routines will assume that
60
* PCI is as the standard defines: little-endian.
61
*
62
* Note that drivers may be run-time configurable,
63
* meaning that they may adopt to either big-endian or
64
* little-endian PCI bus, the host driver or BSP may
65
* detect endianness during run-time.
66
*/
67
68
/* Error return values */
69
enum
{
70
PCISTS_ERR = -1,
/* Undefined Error */
71
PCISTS_OK = 0,
72
PCISTS_EINVAL = 1,
/* Bad input arguments */
73
PCISTS_MSTABRT = 2,
/* CFG space access error (can be ignored) */
74
};
75
76
/* PCI System type can be used to determine system for drivers. Normally
77
* the system is Host, but the peripheral configuration library also supports
78
* being PCI peripheral not allowed to access configuration space.
79
*
80
* The active configuration Library set this variable.
81
*/
82
enum
pci_system_type {
83
PCI_SYSTEM_NONE = 0,
84
PCI_SYSTEM_HOST = 1,
85
PCI_SYSTEM_PERIPHERAL = 2,
86
};
87
extern
enum
pci_system_type pci_system_type;
88
89
/* PCI Bus Endianness. The PCI specification is little endian, however on some
90
* embedded systems (AT697-LEON2 for example) the PCI bus is defined as big
91
* endian (non-standard) in order to avoid byte-twisting.
92
*/
93
enum
{
94
PCI_LITTLE_ENDIAN = 0,
95
PCI_BIG_ENDIAN = 1,
96
};
97
extern
int
pci_endian;
98
99
/* Return the number of PCI busses in the system */
100
extern
int
pci_bus_count(
void
);
101
102
/* Scan the PCI bus and print the PCI device/functions/bridges and their
103
* current resources and size to the system console.
104
*/
105
extern
void
pci_print(
void
);
106
107
/* Print current configuration of a single PCI device by reading PCI
108
* configuration space
109
*/
110
extern
void
pci_print_dev(pci_dev_t dev);
111
extern
void
pci_print_device(
int
bus,
int
slot,
int
function);
112
113
/*** PCI Configuration Space direct access routines ***/
114
115
/* Function iterates over all PCI buses/devices/functions and calls
116
* func(PCIDEV,arg) for each present device. The iteration is stopped if
117
* func() returns non-zero result the same result is returned. As long
118
* as func() returns zero the function will keep on iterating, when all
119
* devices has been processed the function return zero.
120
*
121
* The function iterates over all devices/functions on all buses by accessing
122
* configuration space directly (PCI RAM data structures not used). This
123
* function is valid to call after PCI buses have been enumrated.
124
*/
125
extern
int
pci_for_each(
int
(*func)(pci_dev_t,
void
*),
void
*arg);
126
127
/* Get PCI Configuration space BUS|SLOT|FUNC for a device matching PCI
128
* Vendor, Device and instance number 'index'.
129
*
130
* Return Values
131
* -1 pci_find_dev did not find a device matching the criterion.
132
* 0 device was found, *pdev was updated with the device's BUS|SLOT|FUNC
133
*/
134
extern
int
pci_find(uint16_t ven, uint16_t dev,
int
index, pci_dev_t *pdev);
135
136
#ifdef __cplusplus
137
}
138
#endif
139
140
#endif
/* __PCI_H__ */
access.h
PCI Access Methods.
Generated by
1.18.0