i2c: Add binding for MCTP over I2C transport

Implements DSP0237. This has a fixed neighbor table (currently 4
entries), with neighbors learned on reception, or set with
mctp_i2c_set_neighbour().

Change-Id: I9b1e2c3673149cd0b9fee0d8113f3cac0e336bc7
Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
diff --git a/libmctp-i2c.h b/libmctp-i2c.h
new file mode 100644
index 0000000..d8f23ca
--- /dev/null
+++ b/libmctp-i2c.h
@@ -0,0 +1,31 @@
+#include <stdint.h>
+
+#include "libmctp.h"
+
+struct mctp_binding_i2c;
+
+typedef int (*mctp_i2c_tx_fn)(const void *buf, size_t len, void *ctx);
+
+/* Configures the i2c binding. */
+int mctp_i2c_setup(struct mctp_binding_i2c *i2c, uint8_t own_addr,
+		   mctp_i2c_tx_fn tx_fn, void *tx_ctx);
+void mctp_i2c_cleanup(struct mctp_binding_i2c *i2c);
+
+int mctp_i2c_set_address(struct mctp_binding_i2c *i2c, uint8_t own_addr);
+
+struct mctp_binding *mctp_binding_i2c_core(struct mctp_binding_i2c *i2c);
+
+int mctp_i2c_set_neighbour(struct mctp_binding_i2c *i2c, uint8_t eid,
+			   uint8_t addr);
+
+void mctp_i2c_rx(struct mctp_binding_i2c *i2c, const void *data, size_t len);
+int mctp_i2c_parse_hdr(const void *data, size_t len, uint8_t *src_addr,
+		       uint8_t *dest_addr, uint8_t *bytecount);
+void mctp_i2c_tx_poll(struct mctp_binding_i2c *i2c);
+
+/* Can be customised if needed */
+#ifndef I2C_BTU
+#define I2C_BTU MCTP_BTU
+#endif
+
+#define MCTP_I2C_PACKET_SIZE (MCTP_PACKET_SIZE(I2C_BTU) + 4)