1#!/usr/bin/env python 2 3# TODO: openbmc/openbmc#2994 remove python 2 support 4try: # python 2 5 import gobject 6except ImportError: # python 3 7 from gi.repository import GObject as gobject 8import dbus 9import dbus.service 10import dbus.mainloop.glib 11import os 12from obmc.dbuslib.bindings import DbusProperties, DbusObjectManager, get_dbus 13import obmc.enums 14import obmc_system_config as System 15import obmc.system 16 17DBUS_NAME = 'org.openbmc.managers.System' 18OBJ_NAME = '/org/openbmc/managers/System' 19 20 21class SystemManager(DbusProperties, DbusObjectManager): 22 def __init__(self, bus, obj_name): 23 super(SystemManager, self).__init__( 24 conn=bus, 25 object_path=obj_name) 26 self.bus = bus 27 28 print("SystemManager Init Done") 29 30 @dbus.service.method(DBUS_NAME, in_signature='s', out_signature='sis') 31 def gpioInit(self, name): 32 gpio_path = '' 33 gpio_num = -1 34 r = ['', gpio_num, ''] 35 if name not in System.GPIO_CONFIG: 36 # TODO: Better error handling 37 msg = "ERROR: "+name+" not found in GPIO config table" 38 print(msg) 39 raise Exception(msg) 40 else: 41 42 gpio_num = -1 43 gpio = System.GPIO_CONFIG[name] 44 if 'gpio_num' in System.GPIO_CONFIG[name]: 45 gpio_num = gpio['gpio_num'] 46 else: 47 if 'gpio_pin' in System.GPIO_CONFIG[name]: 48 gpio_num = obmc.system.convertGpio(gpio['gpio_pin']) 49 else: 50 msg = "ERROR: SystemManager - GPIO lookup failed for "+name 51 print(msg) 52 raise Exception(msg) 53 54 if (gpio_num != -1): 55 r = [obmc.enums.GPIO_DEV, gpio_num, gpio['direction']] 56 return r 57 58 @dbus.service.method(DBUS_NAME, in_signature='', 59 out_signature='ssa(sb)a(sb)a(sbb)ssssa(sb)') 60 def getGpioConfiguration(self): 61 power_config = System.GPIO_CONFIGS.get('power_config', {}) 62 power_good_in = power_config.get('power_good_in', '') 63 latch_out = power_config.get('latch_out', '') 64 power_up_outs = power_config.get('power_up_outs', []) 65 reset_outs = power_config.get('reset_outs', []) 66 pci_reset_outs = power_config.get('pci_reset_outs', []) 67 hostctl_config = System.GPIO_CONFIGS.get('hostctl_config', {}) 68 fsi_data = hostctl_config.get('fsi_data', '') 69 fsi_clk = hostctl_config.get('fsi_clk', '') 70 fsi_enable = hostctl_config.get('fsi_enable', '') 71 cronus_sel = hostctl_config.get('cronus_sel', '') 72 optionals = hostctl_config.get('optionals', []) 73 r = [power_good_in, latch_out, power_up_outs, reset_outs, 74 pci_reset_outs, fsi_data, fsi_clk, fsi_enable, cronus_sel, 75 optionals] 76 print("Power GPIO config: " + str(r)) 77 return r 78 79 80if __name__ == '__main__': 81 dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) 82 bus = get_dbus() 83 obj = SystemManager(bus, OBJ_NAME) 84 mainloop = gobject.MainLoop() 85 obj.unmask_signals() 86 name = dbus.service.BusName(DBUS_NAME, bus) 87 88 print("Running SystemManager") 89 mainloop.run() 90 91# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4 92