/ src / core / vio.cc
vio.cc
 1  #include "version.h"
 2  #include "hw.h"
 3  #include "sysfs.h"
 4  #include "vio.h"
 5  
 6  #include <vector>
 7  
 8  __ID("@(#) $Id$");
 9  
10  using namespace std;
11  
12  
13  bool scan_vio(hwNode & n)
14  {
15    vector < sysfs::entry > entries = sysfs::entries_by_bus("vio");
16  
17    if (entries.empty())
18      return false;
19  
20    for (vector < sysfs::entry >::iterator it = entries.begin();
21        it != entries.end(); ++it)
22    {
23      const sysfs::entry & e = *it;
24  
25      if (e.name() == "vio")
26        continue; // skip root device
27  
28      string name = e.string_attr("name");
29      if (name.empty())
30        name = e.name();
31  
32      hwNode device(name);
33      device.setDescription("Virtual I/O device (" + name + ")");
34  
35      string businfo = e.businfo();
36      if (!businfo.empty())
37        device.setBusInfo(businfo);
38  
39      string driver = e.driver();
40      if (!driver.empty())
41        device.setConfig("driver", driver);
42  
43      string devicetree_node = e.string_attr("devspec");
44      if (!devicetree_node.empty() && devicetree_node[0] == '/')
45        device.setLogicalName("/proc/device-tree" + devicetree_node);
46  
47      n.addChild(device);
48    }
49  
50    return true;
51  }