pciaccess_private.h revision 49f872b5
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 <idr@us.ibm.com> 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 40struct pci_device_mapping; 41 42int pci_fill_capabilities_generic( struct pci_device * dev ); 43int pci_device_generic_unmap_range(struct pci_device *dev, 44 struct pci_device_mapping *map); 45 46struct 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 67struct pci_device_mapping { 68 pciaddr_t base; 69 pciaddr_t size; 70 unsigned region; 71 unsigned flags; 72 void *memory; 73}; 74 75struct 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 */ 116struct 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 141extern struct pci_system * pci_sys; 142 143extern int pci_system_linux_sysfs_create( void ); 144extern int pci_system_freebsd_create( void ); 145extern int pci_system_netbsd_create( void ); 146extern int pci_system_openbsd_create( void ); 147extern void pci_system_openbsd_init_dev_mem( int ); 148extern int pci_system_solx_devfs_create( void ); 149