1 | /*
|
---|
2 | * (C) Copyright IBM Corporation 2006
|
---|
3 | * All Rights Reserved.
|
---|
4 | *
|
---|
5 | * Permission is hereby granted, free of charge, to any person obtaining a
|
---|
6 | * copy of this software and associated documentation files (the "Software"),
|
---|
7 | * to deal in the Software without restriction, including without limitation
|
---|
8 | * on the rights to use, copy, modify, merge, publish, distribute, sub
|
---|
9 | * license, and/or sell copies of the Software, and to permit persons to whom
|
---|
10 | * the Software is furnished to do so, subject to the following conditions:
|
---|
11 | *
|
---|
12 | * The above copyright notice and this permission notice (including the next
|
---|
13 | * paragraph) shall be included in all copies or substantial portions of the
|
---|
14 | * Software.
|
---|
15 | *
|
---|
16 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
---|
17 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
---|
18 | * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
---|
19 | * IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
---|
20 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
---|
21 | * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
---|
22 | * DEALINGS IN THE SOFTWARE.
|
---|
23 | */
|
---|
24 |
|
---|
25 | /**
|
---|
26 | * \file pciaccess_private.h
|
---|
27 | * Functions and datastructures that are private to the pciaccess library.
|
---|
28 | *
|
---|
29 | * \author Ian Romanick <[email protected]>
|
---|
30 | */
|
---|
31 |
|
---|
32 | #if defined(__GNUC__) && (__GNUC__ >= 4)
|
---|
33 | # define _pci_hidden __attribute__((visibility("hidden")))
|
---|
34 | #elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
|
---|
35 | # define _pci_hidden __hidden
|
---|
36 | #else /* not gcc >= 4 and not Sun Studio >= 8 */
|
---|
37 | # define _pci_hidden
|
---|
38 | #endif /* GNUC >= 4 */
|
---|
39 |
|
---|
40 | struct pci_device_mapping;
|
---|
41 |
|
---|
42 | int pci_fill_capabilities_generic( struct pci_device * dev );
|
---|
43 | int pci_device_generic_unmap_range(struct pci_device *dev,
|
---|
44 | struct pci_device_mapping *map);
|
---|
45 |
|
---|
46 | struct pci_system_methods {
|
---|
47 | void (*destroy)( void );
|
---|
48 | void (*destroy_device)( struct pci_device * dev );
|
---|
49 | int (*read_rom)( struct pci_device * dev, void * buffer );
|
---|
50 | int (*probe)( struct pci_device * dev );
|
---|
51 | int (*map_range)(struct pci_device *dev, struct pci_device_mapping *map);
|
---|
52 | int (*unmap_range)(struct pci_device * dev,
|
---|
53 | struct pci_device_mapping *map);
|
---|
54 |
|
---|
55 | int (*read)(struct pci_device * dev, void * data, pciaddr_t offset,
|
---|
56 | pciaddr_t size, pciaddr_t * bytes_read );
|
---|
57 |
|
---|
58 | int (*write)(struct pci_device * dev, const void * data, pciaddr_t offset,
|
---|
59 | pciaddr_t size, pciaddr_t * bytes_written );
|
---|
60 |
|
---|
61 | int (*fill_capabilities)( struct pci_device * dev );
|
---|
62 | void (*enable)( struct pci_device *dev );
|
---|
63 | int (*boot_vga)( struct pci_device *dev );
|
---|
64 | int (*has_kernel_driver)( struct pci_device *dev );
|
---|
65 | };
|
---|
66 |
|
---|
67 | struct pci_device_mapping {
|
---|
68 | pciaddr_t base;
|
---|
69 | pciaddr_t size;
|
---|
70 | unsigned region;
|
---|
71 | unsigned flags;
|
---|
72 | void *memory;
|
---|
73 | };
|
---|
74 |
|
---|
75 | struct pci_device_private {
|
---|
76 | struct pci_device base;
|
---|
77 | const char * device_string;
|
---|
78 |
|
---|
79 | uint8_t header_type;
|
---|
80 |
|
---|
81 | /**
|
---|
82 | * \name PCI Capabilities
|
---|
83 | */
|
---|
84 | /*@{*/
|
---|
85 | const struct pci_agp_info * agp; /**< AGP capability information. */
|
---|
86 | /*@}*/
|
---|
87 |
|
---|
88 | /**
|
---|
89 | * Base address of the device's expansion ROM.
|
---|
90 | */
|
---|
91 | pciaddr_t rom_base;
|
---|
92 |
|
---|
93 | /**
|
---|
94 | * \name Bridge information.
|
---|
95 | */
|
---|
96 | /*@{*/
|
---|
97 | union {
|
---|
98 | struct pci_bridge_info * pci;
|
---|
99 | struct pci_pcmcia_bridge_info * pcmcia;
|
---|
100 | } bridge;
|
---|
101 | /*@}*/
|
---|
102 |
|
---|
103 | /**
|
---|
104 | * \name Mappings active on this device.
|
---|
105 | */
|
---|
106 | /*@{*/
|
---|
107 | struct pci_device_mapping *mappings;
|
---|
108 | unsigned num_mappings;
|
---|
109 | /*@}*/
|
---|
110 | };
|
---|
111 |
|
---|
112 |
|
---|
113 | /**
|
---|
114 | * Base type for tracking PCI subsystem information.
|
---|
115 | */
|
---|
116 | struct pci_system {
|
---|
117 | /**
|
---|
118 | * Platform dependent implementations of specific API routines.
|
---|
119 | */
|
---|
120 | const struct pci_system_methods * methods;
|
---|
121 |
|
---|
122 | /**
|
---|
123 | * Number of known devices in the system.
|
---|
124 | */
|
---|
125 | size_t num_devices;
|
---|
126 |
|
---|
127 | /**
|
---|
128 | * Array of known devices.
|
---|
129 | */
|
---|
130 | struct pci_device_private * devices;
|
---|
131 |
|
---|
132 | #ifdef HAVE_MTRR
|
---|
133 | int mtrr_fd;
|
---|
134 | #endif
|
---|
135 | int vgaarb_fd;
|
---|
136 | int vga_count;
|
---|
137 | struct pci_device *vga_target;
|
---|
138 | struct pci_device *vga_default_dev;
|
---|
139 | };
|
---|
140 |
|
---|
141 | extern struct pci_system * pci_sys;
|
---|
142 |
|
---|
143 | extern int pci_system_linux_sysfs_create( void );
|
---|
144 | extern int pci_system_freebsd_create( void );
|
---|
145 | extern int pci_system_netbsd_create( void );
|
---|
146 | extern int pci_system_openbsd_create( void );
|
---|
147 | extern void pci_system_openbsd_init_dev_mem( int );
|
---|
148 | extern int pci_system_solx_devfs_create( void );
|
---|