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