1de6ed120SBrad Bishop#!/usr/bin/env python 240a360c2SBrad Bishop 3d65b2d50SCamVan Nguyen# TODO: openbmc/openbmc#2994 remove python 2 support 4d65b2d50SCamVan Nguyentry: # python 2 540a360c2SBrad Bishop import gobject 6d65b2d50SCamVan Nguyenexcept ImportError: # python 3 7d65b2d50SCamVan Nguyen from gi.repository import GObject as gobject 840a360c2SBrad Bishopimport dbus 940a360c2SBrad Bishopimport dbus.service 1040a360c2SBrad Bishopimport dbus.mainloop.glib 1140a360c2SBrad Bishopimport os 1240a360c2SBrad Bishopfrom obmc.dbuslib.bindings import DbusProperties, DbusObjectManager, get_dbus 1340a360c2SBrad Bishopimport obmc.enums 140b380f7bSBrad Bishopimport obmc_system_config as System 15f6e918e4SAndrew Geisslerimport obmc.inventory 16a7ac805bSBrad Bishopimport obmc.system 1740a360c2SBrad Bishop 18*75fe8cc4SPatrick WilliamsDBUS_NAME = "org.openbmc.managers.System" 19*75fe8cc4SPatrick WilliamsOBJ_NAME = "/org/openbmc/managers/System" 20*75fe8cc4SPatrick WilliamsINTF_SENSOR = "org.openbmc.SensorValue" 21*75fe8cc4SPatrick Williams 2240a360c2SBrad Bishop 2340a360c2SBrad Bishopclass SystemManager(DbusProperties, DbusObjectManager): 2440a360c2SBrad Bishop def __init__(self, bus, obj_name): 25*75fe8cc4SPatrick Williams super(SystemManager, self).__init__(conn=bus, object_path=obj_name) 26fa736499SBrad Bishop self.bus = bus 2740a360c2SBrad Bishop 28f6e918e4SAndrew Geissler # replace symbolic path in ID_LOOKUP 29f6e918e4SAndrew Geissler for category in System.ID_LOOKUP: 30f6e918e4SAndrew Geissler for key in System.ID_LOOKUP[category]: 31f6e918e4SAndrew Geissler val = System.ID_LOOKUP[category][key] 32f6e918e4SAndrew Geissler new_val = val.replace( 33*75fe8cc4SPatrick Williams "<inventory_root>", obmc.inventory.INVENTORY_ROOT 34*75fe8cc4SPatrick Williams ) 35f6e918e4SAndrew Geissler System.ID_LOOKUP[category][key] = new_val 36f6e918e4SAndrew Geissler 37d65b2d50SCamVan Nguyen print("SystemManager Init Done") 3840a360c2SBrad Bishop 39f6e918e4SAndrew Geissler def doObjectLookup(self, category, key): 40f6e918e4SAndrew Geissler obj_path = "" 41f6e918e4SAndrew Geissler intf_name = INTF_SENSOR 42f6e918e4SAndrew Geissler try: 43f6e918e4SAndrew Geissler obj_path = System.ID_LOOKUP[category][key] 44*75fe8cc4SPatrick Williams parts = obj_path.split("/") 45*75fe8cc4SPatrick Williams if parts[3] != "sensors": 46f6e918e4SAndrew Geissler print("ERROR SystemManager: SENSOR only supported type") 47f6e918e4SAndrew Geissler intf_name = "" 48f6e918e4SAndrew Geissler except Exception as e: 49f6e918e4SAndrew Geissler print("ERROR SystemManager: " + str(e) + " not found in lookup") 50f6e918e4SAndrew Geissler 51f6e918e4SAndrew Geissler return [obj_path, intf_name] 52f6e918e4SAndrew Geissler 53*75fe8cc4SPatrick Williams @dbus.service.method(DBUS_NAME, in_signature="ss", out_signature="(ss)") 54f6e918e4SAndrew Geissler def getObjectFromId(self, category, key): 55f6e918e4SAndrew Geissler return self.doObjectLookup(category, key) 56f6e918e4SAndrew Geissler 57*75fe8cc4SPatrick Williams @dbus.service.method(DBUS_NAME, in_signature="sy", out_signature="(ss)") 58f6e918e4SAndrew Geissler def getObjectFromByteId(self, category, key): 59f6e918e4SAndrew Geissler byte = int(key) 60f6e918e4SAndrew Geissler return self.doObjectLookup(category, byte) 61f6e918e4SAndrew Geissler 62*75fe8cc4SPatrick Williams @dbus.service.method(DBUS_NAME, in_signature="s", out_signature="sis") 6340a360c2SBrad Bishop def gpioInit(self, name): 64*75fe8cc4SPatrick Williams gpio_path = "" 6540a360c2SBrad Bishop gpio_num = -1 66*75fe8cc4SPatrick Williams r = ["", gpio_num, ""] 67416539dfSBrad Bishop if name not in System.GPIO_CONFIG: 68605620d2SXo Wang # TODO: Better error handling 69605620d2SXo Wang msg = "ERROR: " + name + " not found in GPIO config table" 70d65b2d50SCamVan Nguyen print(msg) 71605620d2SXo Wang raise Exception(msg) 7240a360c2SBrad Bishop else: 7340a360c2SBrad Bishop 7440a360c2SBrad Bishop gpio_num = -1 7540a360c2SBrad Bishop gpio = System.GPIO_CONFIG[name] 76*75fe8cc4SPatrick Williams if "gpio_num" in System.GPIO_CONFIG[name]: 77*75fe8cc4SPatrick Williams gpio_num = gpio["gpio_num"] 7840a360c2SBrad Bishop else: 79*75fe8cc4SPatrick Williams if "gpio_pin" in System.GPIO_CONFIG[name]: 80*75fe8cc4SPatrick Williams gpio_num = obmc.system.convertGpio(gpio["gpio_pin"]) 8140a360c2SBrad Bishop else: 82*75fe8cc4SPatrick Williams msg = ( 83*75fe8cc4SPatrick Williams "ERROR: SystemManager - GPIO lookup failed for " + name 84*75fe8cc4SPatrick Williams ) 85d65b2d50SCamVan Nguyen print(msg) 86605620d2SXo Wang raise Exception(msg) 8740a360c2SBrad Bishop 88*75fe8cc4SPatrick Williams if gpio_num != -1: 89*75fe8cc4SPatrick Williams r = [obmc.enums.GPIO_DEV, gpio_num, gpio["direction"]] 9040a360c2SBrad Bishop return r 9140a360c2SBrad Bishop 92*75fe8cc4SPatrick Williams @dbus.service.method( 93*75fe8cc4SPatrick Williams DBUS_NAME, in_signature="", out_signature="ssa(sb)a(sb)a(sbb)ssssa(sb)" 94*75fe8cc4SPatrick Williams ) 9575a18a23SLei YU def getGpioConfiguration(self): 96*75fe8cc4SPatrick Williams power_config = System.GPIO_CONFIGS.get("power_config", {}) 97*75fe8cc4SPatrick Williams power_good_in = power_config.get("power_good_in", "") 98*75fe8cc4SPatrick Williams latch_out = power_config.get("latch_out", "") 99*75fe8cc4SPatrick Williams power_up_outs = power_config.get("power_up_outs", []) 100*75fe8cc4SPatrick Williams reset_outs = power_config.get("reset_outs", []) 101*75fe8cc4SPatrick Williams pci_reset_outs = power_config.get("pci_reset_outs", []) 102*75fe8cc4SPatrick Williams hostctl_config = System.GPIO_CONFIGS.get("hostctl_config", {}) 103*75fe8cc4SPatrick Williams fsi_data = hostctl_config.get("fsi_data", "") 104*75fe8cc4SPatrick Williams fsi_clk = hostctl_config.get("fsi_clk", "") 105*75fe8cc4SPatrick Williams fsi_enable = hostctl_config.get("fsi_enable", "") 106*75fe8cc4SPatrick Williams cronus_sel = hostctl_config.get("cronus_sel", "") 107*75fe8cc4SPatrick Williams optionals = hostctl_config.get("optionals", []) 108*75fe8cc4SPatrick Williams r = [ 109*75fe8cc4SPatrick Williams power_good_in, 110*75fe8cc4SPatrick Williams latch_out, 111*75fe8cc4SPatrick Williams power_up_outs, 112*75fe8cc4SPatrick Williams reset_outs, 113*75fe8cc4SPatrick Williams pci_reset_outs, 114*75fe8cc4SPatrick Williams fsi_data, 115*75fe8cc4SPatrick Williams fsi_clk, 116*75fe8cc4SPatrick Williams fsi_enable, 117*75fe8cc4SPatrick Williams cronus_sel, 118*75fe8cc4SPatrick Williams optionals, 119*75fe8cc4SPatrick Williams ] 120d65b2d50SCamVan Nguyen print("Power GPIO config: " + str(r)) 1213f87de8bSXo Wang return r 1223f87de8bSXo Wang 12340a360c2SBrad Bishop 124*75fe8cc4SPatrick Williamsif __name__ == "__main__": 12540a360c2SBrad Bishop dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 12640a360c2SBrad Bishop bus = get_dbus() 12740a360c2SBrad Bishop obj = SystemManager(bus, OBJ_NAME) 12840a360c2SBrad Bishop mainloop = gobject.MainLoop() 129f0f3efe1SBrad Bishop obj.unmask_signals() 13070852a38SBrad Bishop name = dbus.service.BusName(DBUS_NAME, bus) 13140a360c2SBrad Bishop 132d65b2d50SCamVan Nguyen print("Running SystemManager") 13340a360c2SBrad Bishop mainloop.run() 13453066750SBrad Bishop 13553066750SBrad Bishop# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 136