diff --git a/README.md b/README.md
index 50519e3..0079a2f 100644
--- a/README.md
+++ b/README.md
@@ -46,6 +46,40 @@
 Note that no EIDs are defined here; the bridge does not deliver any messages
 to a local rx callback, and messages are bridged as-is.
 
+Binding API
+-----------
+
+Hardware bindings provide a method for libmctp to send and receive packets
+to/from hardware. A binding defines a hardware specific structure (`struct
+mctp_binding_<name>`), which wraps the generic binding (`struct mctp_binding`):
+
+    struct mctp_binding_foo {
+	    struct mctp_binding binding;
+	    /* hardware-specific members here... */
+    };
+
+The binding code then provides a method (`_init`) to allocate and initialise
+the binding; this may be of any prototype (calling code will know what
+arguments to pass):
+
+    struct mctp_binding_foo *mctp_binding_foo_init(void);
+
+or maybe the `foo` binding needs a path argument:
+
+    struct mctp_binding_foo *mctp_binding_foo_init(const char *path);
+
+The binding then needs to provide a function (`_core`) to convert the
+hardware-specific struct to the libmctp generic core struct
+
+    struct mctp_binding *mctp_binding_foo_core(struct mctp_binding_foo *b);
+
+(Implementations of this will usually be fairly consistent, just returning
+`b->binding`). Callers can then use that generic pointer to register the
+binding with the core:
+
+    struct mctp_binding *binding = mctp_binding_foo_core(foo);
+    mctp_register_bus(mctp, binding, 8);
+
 
 Integration
 -----------
diff --git a/astlpc.c b/astlpc.c
index 4e6485c..cf75534 100644
--- a/astlpc.c
+++ b/astlpc.c
@@ -298,12 +298,6 @@
 	return 0;
 }
 
-void mctp_astlpc_register_bus(struct mctp_binding_astlpc *astlpc,
-		struct mctp *mctp, mctp_eid_t eid)
-{
-	mctp_register_bus(mctp, &astlpc->binding, eid);
-}
-
 static int mctp_astlpc_init_bmc(struct mctp_binding_astlpc *astlpc)
 {
 	struct mctp_lpcmap_hdr *hdr;
@@ -355,6 +349,11 @@
 	return astlpc;
 }
 
+struct mctp_binding *mctp_binding_astlpc_core(struct mctp_binding_astlpc *b)
+{
+	return &b->binding;
+}
+
 struct mctp_binding_astlpc *mctp_astlpc_init_ops(
 		struct mctp_binding_astlpc_ops *ops,
 		void *ops_data, void *lpc_map)
diff --git a/core.c b/core.c
index e0cb95d..61356e9 100644
--- a/core.c
+++ b/core.c
@@ -257,6 +257,10 @@
 	binding->bus = &mctp->busses[0];
 	binding->mctp = mctp;
 	mctp->route_policy = ROUTE_ENDPOINT;
+
+	if (binding->start)
+		binding->start(binding);
+
 	return 0;
 }
 
@@ -274,6 +278,13 @@
 	b2->mctp = mctp;
 
 	mctp->route_policy = ROUTE_BRIDGE;
+
+	if (b1->start)
+		b1->start(b1);
+
+	if (b2->start)
+		b2->start(b2);
+
 	return 0;
 }
 
diff --git a/libmctp-astlpc.h b/libmctp-astlpc.h
index 81f3b1b..92510c6 100644
--- a/libmctp-astlpc.h
+++ b/libmctp-astlpc.h
@@ -29,8 +29,9 @@
 struct mctp_binding_astlpc *mctp_astlpc_init_ops(
 		struct mctp_binding_astlpc_ops *ops,
 		void *ops_data, void *lpc_map);
-void mctp_astlpc_register_bus(struct mctp_binding_astlpc *astlpc,
-		struct mctp *mctp, mctp_eid_t eid);
+
+struct mctp_binding *mctp_binding_astlpc_core(struct mctp_binding_astlpc *b);
+
 int mctp_astlpc_poll(struct mctp_binding_astlpc *astlpc);
 
 /* fileio-based interface */
diff --git a/libmctp-serial.h b/libmctp-serial.h
index 5504864..5eaf948 100644
--- a/libmctp-serial.h
+++ b/libmctp-serial.h
@@ -13,8 +13,7 @@
 
 struct mctp_binding_serial *mctp_serial_init(void);
 
-void mctp_serial_register_bus(struct mctp_binding_serial *serial,
-		struct mctp *mctp, mctp_eid_t eid);
+struct mctp_binding *mctp_binding_serial_core(struct mctp_binding_serial *b);
 
 /* file-based IO */
 int mctp_serial_get_fd(struct mctp_binding_serial *serial);
diff --git a/libmctp.h b/libmctp.h
index 523891f..b36a943 100644
--- a/libmctp.h
+++ b/libmctp.h
@@ -97,6 +97,7 @@
 	struct mctp	*mctp;
 	int		pkt_size;
 	int		pkt_pad;
+	int		(*start)(struct mctp_binding *binding);
 	int		(*tx)(struct mctp_binding *binding,
 				struct mctp_pktbuf *pkt);
 };
diff --git a/serial.c b/serial.c
index f673a52..781a9c1 100644
--- a/serial.c
+++ b/serial.c
@@ -312,12 +312,15 @@
 	mctp_rx_consume(serial, buf, len);
 }
 
-void mctp_serial_register_bus(struct mctp_binding_serial *serial,
-		struct mctp *mctp, mctp_eid_t eid)
+static int mctp_serial_core_start(struct mctp_binding *binding)
 {
-	assert(serial->fd >= 0);
-	mctp_register_bus(mctp, &serial->binding, eid);
-	mctp_binding_set_tx_enabled(&serial->binding, true);
+	mctp_binding_set_tx_enabled(binding, true);
+	return 0;
+}
+
+struct mctp_binding *mctp_binding_serial_core(struct mctp_binding_serial *b)
+{
+	return &b->binding;
 }
 
 struct mctp_binding_serial *mctp_serial_init(void)
@@ -334,6 +337,7 @@
 	serial->binding.pkt_size = MCTP_BMTU;
 	serial->binding.pkt_pad = 0;
 
+	serial->binding.start = mctp_serial_core_start;
 	serial->binding.tx = mctp_binding_serial_tx;
 
 	return serial;
diff --git a/utils/mctp-demux-daemon.c b/utils/mctp-demux-daemon.c
index f64f029..96d9753 100644
--- a/utils/mctp-demux-daemon.c
+++ b/utils/mctp-demux-daemon.c
@@ -145,7 +145,7 @@
 	if (rc)
 		return -1;
 
-	mctp_serial_register_bus(serial, mctp, eid);
+	mctp_register_bus(mctp, mctp_binding_serial_core(serial), eid);
 
 	binding->data = serial;
 
@@ -179,7 +179,8 @@
 		return -1;
 	}
 
-	mctp_astlpc_register_bus(astlpc, mctp, eid);
+	mctp_register_bus(mctp, mctp_binding_astlpc_core(astlpc), eid);
+
 	binding->data = astlpc;
 	return 0;
 }
