00001 #if !defined(__PCI_BRIDGE_HPP__) 00002 #define __PCI_BRIDGE_HPP__ 00003 00004 // 00005 // local includes 00006 // 00007 #include "pci_device.hpp" 00008 #include "pci_devfn.hpp" 00009 00015 struct pci_bridge 00016 { 00021 struct search_result : public pci_device::search_result 00022 { 00026 const pci_device *device; 00027 00028 inline search_result(const pci_device *device=nullptr, 00029 const pci_device::search_result &result=pci_device::search_result()) 00030 : pci_device::search_result(result), device(device) 00031 {} 00032 00037 inline bool is_valid(void) const 00038 { 00039 return device && pci_device::search_result::is_valid(); 00040 } 00041 }; 00042 00046 virtual inline ~pci_bridge(void) 00047 {} 00048 00052 virtual int reset(void) = 0; 00053 00054 // 00055 // device management functions 00056 // 00061 virtual int register_device(pci_device *device) = 0; 00062 00066 virtual int unregister_device(const pci_device *device) = 0; 00067 00071 virtual pci_device *get_device(pci_devfn devfn) const = 0; 00072 00073 // 00074 // search region functions 00075 // 00081 virtual const search_result search_ioregion(enum pci_ioregion::type type, 00082 l4_gpa_t base, l4_gpa_t size=1) const = 0; 00083 }; 00084 00085 #endif 00086 00087 // ***** end of source ***** // 00088