blob: 7e9965f88e2f26909004a1cd9743cbcd71a37dcb [file] [log] [blame]
Norman James362a80f2015-09-14 14:04:39 -05001#include <stdint.h>
2#include <stdio.h>
3#include <stdlib.h>
4#include <string.h>
5#include <fcntl.h>
6#include <unistd.h>
7#include <sys/stat.h>
8#include <sys/mman.h>
9#include "interfaces/openbmc_intf.h"
10#include "openbmc.h"
11#include "gpio.h"
12
13/* ---------------------------------------------------------------------------------------------------- */
14static const gchar* dbus_object_path = "/org/openbmc/control";
15static const gchar* dbus_name = "org.openbmc.control.Bmc";
16
17
18static GDBusObjectManagerServer *manager = NULL;
19
20static gboolean
21on_init (Control *control,
22 GDBusMethodInvocation *invocation,
23 gpointer user_data)
24{
25 g_print("BMC init\n");
26 // BMC init done here
Norman James6f8d0422015-09-14 18:48:00 -050027 /*
28 devmem(0x1e789080,0x00000500); //Enable LPC FWH cycles, Enable LPC to AHB bridge
29 devmem(0x1e789088,0x30000E00); //32M PNOR
30 devmem(0x1e78908C,0xFE0001FF);
31
32 //flash controller
33 devmem(0x1e630000,0x00000003);
34 devmem(0x1e630004,0x00002404);
35
36 //UART
37 devmem(0x1e6e2084,0x00fff0c0); //Enable UART1
38 devmem(0x1e783000,0x00000000); //Set Baud rate divisor -> 13 (Baud 115200)
39 devmem(0x1e783004,0x00000000); //Set Baud rate divisor -> 13 (Baud 115200)
40 devmem(0x1e783008,0x000000c1); //Disable Parity, 1 stop bit, 8 bits
41 devmem(0x1E78909C,0x00000000); //Set routing UART1 -> COM 1
42
43
44 //GPIO
45 devmem(0x1e6e2070,0x120CE406);
46 devmem(0x1e6e2080,0xCB000000);
47 devmem(0x1e6e2088,0x01C000FF);
48 devmem(0x1e6e208c,0xC1C000FF);
49 devmem(0x1e6e2090,0x003FA009);
50
51 devmem(0x1E780000,0x13008CE7);
52 devmem(0x1E780004,0x0370E677);
53 devmem(0x1E780020,0xDF48F7FF);
54 devmem(0x1E780024,0xC738F202);
55*/
56
Norman James362a80f2015-09-14 14:04:39 -050057 control_complete_init(control,invocation);
58 control_emit_goto_system_state(control,"STANDBY");
59
60 return TRUE;
61}
62
63static void
64on_bus_acquired (GDBusConnection *connection,
65 const gchar *name,
66 gpointer user_data)
67{
68 ObjectSkeleton *object;
69 //g_print ("Acquired a message bus connection: %s\n",name);
70 cmdline *cmd = user_data;
71 if (cmd->argc < 2)
72 {
73 g_print("No objects created. Put object name(s) on command line\n");
74 return;
75 }
76 manager = g_dbus_object_manager_server_new (dbus_object_path);
77 int i=0;
78 for (i=1;i<cmd->argc;i++)
79 {
80 gchar *s;
81 s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);
82 object = object_skeleton_new (s);
83 g_free (s);
84
85 ControlBmc* control_bmc = control_bmc_skeleton_new ();
86 object_skeleton_set_control_bmc (object, control_bmc);
87 g_object_unref (control_bmc);
88
89 Control* control = control_skeleton_new ();
90 object_skeleton_set_control (object, control);
91 g_object_unref (control);
92
93 EventLog* event_log = event_log_skeleton_new ();
94 object_skeleton_set_event_log (object, event_log);
95 g_object_unref (event_log);
96
97 //define method callbacks here
98 g_signal_connect (control,
99 "handle-init",
100 G_CALLBACK (on_init),
101 NULL); /* user_data */
102
103 /* Export the object (@manager takes its own reference to @object) */
104 g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));
105 g_object_unref (object);
106 }
107 /* Export all objects */
108 g_dbus_object_manager_server_set_connection (manager, connection);
109
110}
111
112static void
113on_name_acquired (GDBusConnection *connection,
114 const gchar *name,
115 gpointer user_data)
116{
117// g_print ("Acquired the name %s\n", name);
118}
119
120static void
121on_name_lost (GDBusConnection *connection,
122 const gchar *name,
123 gpointer user_data)
124{
125// g_print ("Lost the name %s\n", name);
126}
127
128
129
130
131/*----------------------------------------------------------------*/
132/* Main Event Loop */
133
134gint
135main (gint argc, gchar *argv[])
136{
137 GMainLoop *loop;
138 cmdline cmd;
139 cmd.argc = argc;
140 cmd.argv = argv;
141
142 guint id;
143 loop = g_main_loop_new (NULL, FALSE);
144
145 id = g_bus_own_name (G_BUS_TYPE_SESSION,
146 dbus_name,
147 G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |
148 G_BUS_NAME_OWNER_FLAGS_REPLACE,
149 on_bus_acquired,
150 on_name_acquired,
151 on_name_lost,
152 &cmd,
153 NULL);
154
155 g_main_loop_run (loop);
156
157 g_bus_unown_name (id);
158 g_main_loop_unref (loop);
159 return 0;
160}