Overview   API Reference  

pci_device.hpp

00001 #if !defined(__PCI_DEVICE_HPP__)
00002 #define __PCI_DEVICE_HPP__
00003 
00004 //
00005 // local includes
00006 //
00007 #include "pci_ioregion.hpp"
00008 
00013 struct pci_device
00014 {
00019     struct search_result
00020     {
00024         const pci_ioregion *region;
00025 
00030         short region_num;
00031 
00032         inline search_result(const pci_ioregion *region=nullptr, short region_num=-1)
00033             : region(region), region_num(region_num)
00034         {}
00035 
00040         inline bool is_valid(void) const
00041         {
00042             return region && (region_num >= 0);
00043         }
00044     };
00045 
00049     virtual inline ~pci_device(void)
00050     {}
00051 
00055     static inline const char *class_name(void)
00056     {
00057         return "PCI device";
00058     }
00059 
00063     virtual const char *name(void) const = 0;
00064 
00069     virtual int reset(void) = 0;
00070 
00071     //
00072     // I/O region functions: get & search regions
00073     //
00077     virtual const pci_ioregion *get_ioregion(uint8_t region_num) const = 0;
00078 
00084     virtual const search_result search_ioregion(enum pci_ioregion::type type,
00085                                                 l4_gpa_t base, l4_gpa_t size=1) const = 0;
00086 
00087     //
00088     // PCI configuration space access handlers
00089     //
00093     virtual const pci_config_header64 &get_config_space(void) const = 0;
00094 
00100     virtual l4_umword_t read_config_space(pci_config_header16::offset_t offset,
00101                                           access_size access_size) = 0;
00102 
00107     virtual int write_config_space(pci_config_header16::offset_t offset,
00108                                    l4_umword_t data, access_size access_size) = 0;
00109 };
00110 
00111 #endif
00112 
00113 // ***** end of source ***** //
00114 

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