Overview   API Reference  

resources.hpp

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 

L4vmm Reference Manual, written by Mario Schwalbe  © 2006-2008