00001 #if !defined(__RESOURCES_HPP__) 00002 #define __RESOURCES_HPP__ 00003 00004 // 00005 // local includes 00006 // 00007 #include "core/machine/generic/resource_region.hpp" 00008 00012 struct resource_descriptor 00013 { 00014 typedef detail::resource_region<l4_port_t> port_region; 00015 typedef detail::resource_region<l4_gpa_t> memory_region; 00016 00020 static const uint8_t NUM_PORTS = 4; 00021 00025 static const uint8_t NUM_MEMORY = 1; 00026 00030 static const uint8_t NUM_IRQS = 2; 00031 00035 const char *name; 00036 00040 port_region ports[NUM_PORTS+1]; 00041 00045 memory_region memory[NUM_MEMORY+1]; 00046 00050 l4_irq_t irqs[NUM_IRQS+1]; 00051 00055 static const resource_descriptor *get(const string &name); 00056 00060 static const resource_descriptor *get(const l4_port_t port); 00061 }; 00062 00066 struct pci_class_descriptor 00067 { 00071 const char *name; 00072 00078 uint32_t code; 00079 00083 static const pci_class_descriptor *get(const string &name); 00084 00089 static uint32_t get_code(const string &name); 00090 }; 00091 00096 struct pci_resource_descriptor 00097 { 00101 const char *name; 00102 00108 uint32_t class_code; 00109 00113 const resource_descriptor *resources; 00114 00118 static const pci_resource_descriptor *get(const string &name); 00119 }; 00120 00121 // 00122 // internal resource get implementation 00123 // 00124 template <typename DescriptorT> 00125 inline const DescriptorT *search_descriptor(const DescriptorT *descriptors, const string &name) 00126 { 00127 for (const DescriptorT *descriptor=descriptors; descriptor->name; descriptor++) 00128 if (name == descriptor->name) return descriptor; 00129 return nullptr; 00130 } 00131 00132 #endif 00133 00134 // ***** end of source ***** // 00135