core,bindings: Allow bindings to specify packet size

Currently, we fix all packet sizes to the baseline MTU size. However,
bindings may support larger packet sizes.

This change makes the packet allocator use binding-specific parameters
to suit the binding itself, and uses the max packet size in the
packetisation path.

Since packet sizes may now exceed 255, we change the size and offset
types from uint8_t to size_t.

Signed-off-by: Jeremy Kerr <jk@ozlabs.org>
Change-Id: Ica932479f251dc33c67ea19e9e3e5a193cbe0b32
diff --git a/serial.c b/serial.c
index 7e27b1c..081538f 100644
--- a/serial.c
+++ b/serial.c
@@ -149,7 +149,7 @@
 static void mctp_serial_start_packet(struct mctp_binding_serial *serial,
 		uint8_t len)
 {
-	serial->rx_pkt = mctp_pktbuf_alloc(len);
+	serial->rx_pkt = mctp_pktbuf_alloc(&serial->binding, len);
 }
 
 static void mctp_rx_consume_one(struct mctp_binding_serial *serial,
@@ -183,8 +183,8 @@
 		}
 		break;
 	case STATE_WAIT_LEN:
-		if (c > (MCTP_MTU + sizeof(struct mctp_hdr))
-				|| c < sizeof(struct mctp_hdr)) {
+		if (c > serial->binding.pkt_size ||
+				c < sizeof(struct mctp_hdr)) {
 			mctp_prdebug("invalid size %d", c);
 			serial->rx_state = STATE_WAIT_SYNC_START;
 		} else {
@@ -305,6 +305,8 @@
 	serial->rx_pkt = NULL;
 	serial->binding.name = "serial";
 	serial->binding.version = 1;
+	serial->binding.pkt_size = MCTP_BMTU;
+	serial->binding.pkt_pad = 0;
 
 	serial->binding.tx = mctp_binding_serial_tx;