new devmems for barreleye
diff --git a/objects/control_bmc_barreleye.c b/objects/control_bmc_barreleye.c
new file mode 100644
index 0000000..0e6c5cb
--- /dev/null
+++ b/objects/control_bmc_barreleye.c
@@ -0,0 +1,213 @@
+#include <stdint.h>

+#include <stdio.h>

+#include <stdlib.h>

+#include <string.h>

+#include <fcntl.h>

+#include <unistd.h>

+#include <sys/stat.h>

+#include <sys/mman.h>

+#include "interfaces/openbmc_intf.h"

+#include "openbmc.h"

+#include "gpio.h"

+

+/* ---------------------------------------------------------------------------------------------------- */

+static const gchar* dbus_object_path = "/org/openbmc/control";

+static const gchar* dbus_name        = "org.openbmc.control.Bmc";

+

+//this probably should come from some global SOC config

+

+#define LPC_BASE		(off_t)0x1e789000

+#define LPC_HICR6		0x80

+#define LPC_HICR7		0x88

+#define LPC_HICR8		0x8c

+#define SPI_BASE		(off_t)0x1e630000

+#define SCU_BASE                (off_t)0x1e780000

+#define UART_BASE               (off_t)0x1e783000

+#define UART_BASE2              (off_t)0x1e785000

+#define COM_BASE                (off_t)0x1e789000

+#define COM_BASE2               (off_t)0x1e789100

+#define GPIO_BASE		(off_t)0x1e6e2000

+

+static GDBusObjectManagerServer *manager = NULL;

+

+void* memmap(int mem_fd,off_t base)

+{

+	void* bmcreg;

+	bmcreg = mmap(NULL, getpagesize(),

+			PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, base);

+

+	if (bmcreg == MAP_FAILED) {

+		printf("ERROR: Unable to map LPC register memory");

+		exit(1);

+	}

+	return bmcreg;

+}

+

+void reg_init()

+{

+	g_print("BMC init\n");

+	// BMC init done here

+

+	void *bmcreg;

+	int mem_fd = open("/dev/mem", O_RDWR | O_SYNC);

+	if (mem_fd < 0) {

+		printf("ERROR: Unable to open /dev/mem");

+		exit(1);

+	}

+

+	bmcreg = memmap(mem_fd,LPC_BASE);

+	devmem(bmcreg+LPC_HICR6,0x00000500); //Enable LPC FWH cycles, Enable LPC to AHB bridge

+	devmem(bmcreg+LPC_HICR7,0x30000E00); //32M PNOR

+	devmem(bmcreg+LPC_HICR8,0xFC0003FF);

+

+	//flash controller

+	bmcreg = memmap(mem_fd,SPI_BASE);

+	devmem(bmcreg+0x00,0x00000003);

+	devmem(bmcreg+0x04,0x00002404);

+

+	//UART

+

+	

+	bmcreg = memmap(mem_fd,UART_BASE);

+	devmem(bmcreg+0x00,0x00000000);  //Set Baud rate divisor -> 13 (Baud 115200)

+	devmem(bmcreg+0x04,0x00000000);  //Set Baud rate divisor -> 13 (Baud 115200)

+	devmem(bmcreg+0x08,0x000000c1);  //Disable Parity, 1 stop bit, 8 bits

+

+	bmcreg = memmap(mem_fd,UART_BASE2);

+	devmem(bmcreg+0x0c,0x00000000);

+	devmem(bmcreg+0x2c,0x00000000);

+

+	bmcreg = memmap(mem_fd,COM_BASE);

+	devmem(bmcreg+0x9C,0x08060000);  //Set UART routing

+

+	bmcreg = memmap(mem_fd,SCU_BASE);

+	devmem(bmcreg+0x00,0x9f82fce7);

+	devmem(bmcreg+0x04,0x0370e677);

+	devmem(bmcreg+0x20,0xcfc8f7ff);

+	devmem(bmcreg+0x24,0xc738f20a);

+	devmem(bmcreg+0x80,0x0031ffaf);

+

+

+	//GPIO

+	bmcreg = memmap(mem_fd,GPIO_BASE);

+	devmem(bmcreg+0x84,0x00fff0c0);  //Enable UART1

+	devmem(bmcreg+0x70,0x120CE406);

+	devmem(bmcreg+0x80,0xCB000000);

+	devmem(bmcreg+0x88,0x01C000FF);

+	devmem(bmcreg+0x8c,0xC1C000FF);

+	devmem(bmcreg+0x90,0x003FA009);

+	devmem(bmcreg+0x88,0x01C0007F);

+

+

+	bmcreg = memmap(mem_fd,COM_BASE);

+	devmem(bmcreg+0x170,0x00000042);

+	devmem(bmcreg+0x174,0x00004000);

+

+

+	close(mem_fd);

+}

+

+static gboolean

+on_init (Control          *control,

+         GDBusMethodInvocation  *invocation,

+         gpointer                user_data)

+{

+	#ifdef __arm__

+	reg_init();

+	#endif

+	control_complete_init(control,invocation);

+	control_emit_goto_system_state(control,"BMC_STARTING");

+	

+	return TRUE;

+}

+

+static void 

+on_bus_acquired (GDBusConnection *connection,

+                 const gchar     *name,

+                 gpointer         user_data)

+{

+	ObjectSkeleton *object;

+ 	cmdline *cmd = user_data;

+	if (cmd->argc < 2)

+	{

+		g_print("No objects created.  Put object name(s) on command line\n");

+		return;

+	}	

+  	manager = g_dbus_object_manager_server_new (dbus_object_path);

+  	int i=0;

+  	for (i=1;i<cmd->argc;i++)

+  	{

+		gchar *s;

+  		s = g_strdup_printf ("%s/%s",dbus_object_path,cmd->argv[i]);

+  		object = object_skeleton_new (s);

+  		g_free (s);

+

+		ControlBmc* control_bmc = control_bmc_skeleton_new ();

+		object_skeleton_set_control_bmc (object, control_bmc);

+		g_object_unref (control_bmc);

+

+		Control* control = control_skeleton_new ();

+		object_skeleton_set_control (object, control);

+		g_object_unref (control);

+

+		//define method callbacks here

+		g_signal_connect (control,

+        	            "handle-init",

+                	    G_CALLBACK (on_init),

+                	    NULL); /* user_data */

+

+		/* Export the object (@manager takes its own reference to @object) */

+		g_dbus_object_manager_server_export (manager, G_DBUS_OBJECT_SKELETON (object));

+		g_object_unref (object);

+	}

+	/* Export all objects */

+	g_dbus_object_manager_server_set_connection (manager, connection);

+}

+

+static void

+on_name_acquired (GDBusConnection *connection,

+                  const gchar     *name,

+                  gpointer         user_data)

+{

+}

+

+static void

+on_name_lost (GDBusConnection *connection,

+              const gchar     *name,

+              gpointer         user_data)

+{

+}

+

+

+

+

+/*----------------------------------------------------------------*/

+/* Main Event Loop                                                */

+

+gint

+main (gint argc, gchar *argv[])

+{

+  GMainLoop *loop;

+  cmdline cmd;

+  cmd.argc = argc;

+  cmd.argv = argv;

+

+  guint id;

+  loop = g_main_loop_new (NULL, FALSE);

+

+  id = g_bus_own_name (DBUS_TYPE,

+                       dbus_name,

+                       G_BUS_NAME_OWNER_FLAGS_ALLOW_REPLACEMENT |

+                       G_BUS_NAME_OWNER_FLAGS_REPLACE,

+                       on_bus_acquired,

+                       on_name_acquired,

+                       on_name_lost,

+                       &cmd,

+                       NULL);

+

+  g_main_loop_run (loop);

+  

+  g_bus_unown_name (id);

+  g_main_loop_unref (loop);

+  return 0;

+}