]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
greybus: drop host-driver buffer headroom
authorJohan Hovold <johan@hovoldconsulting.com>
Tue, 7 Apr 2015 09:27:21 +0000 (11:27 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 7 Apr 2015 15:31:05 +0000 (17:31 +0200)
Drop the host-driver buffer headroom that was used to transfer the cport
id on ES1 and ES2.

Rather than transferring additional bytes on the wire and having to deal
with buffer-alignment issues (e.g. requiring the headroom to be a
multiple of 8 bytes) simply drop the headroom functionality.

Host drivers are expected set up their transfer descriptors separately
from the data buffers and any intermediate drivers (e.g. for Greybus
over USB) can (ab)use the operation message pad bytes for now.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/es1.c
drivers/staging/greybus/es2.c
drivers/staging/greybus/greybus.h
drivers/staging/greybus/operation.c

index bf448353b55e847f45498063dc5b9d34b81b58bd..0df7bddbff691e0c5bc6ae7d8ca909c39721029c 100644 (file)
@@ -106,29 +106,11 @@ static void usb_log_disable(struct es1_ap_dev *es1);
  * which defines a region of memory used by the host driver for
  * transferring the data.  When Greybus allocates a buffer, it must
  * do so subject to the constraints associated with the host driver.
- * These constraints are specified by two parameters: the
- * headroom; and the maximum buffer size.
  *
- *                     +------------------+
- *                     |    Host driver   | \
- *                     |   reserved area  |  }- headroom
- *                     |      . . .       | /
- *  buffer pointer ---> +------------------+
- *                     | Buffer space for | \
- *                     | transferred data |  }- buffer size
- *                     |      . . .       | /   (limited to size_max)
- *                     +------------------+
- *
- *  headroom:  Every buffer must have at least this much space
- *             *before* the buffer pointer, reserved for use by the
- *             host driver.  I.e., ((char *)buffer - headroom) must
- *             point to valid memory, usable only by the host driver.
- *  size_max:  The maximum size of a buffer (not including the
- *             headroom) must not exceed this.
+ *  size_max:  The maximum size of a buffer
  */
 static void hd_buffer_constraints(struct greybus_host_device *hd)
 {
-       hd->buffer_headroom = 0;
        hd->buffer_size_max = ES1_GBUF_MSG_SIZE_MAX;
 }
 
index 45b6815dc06b904f7458e7137af35c1db50a5eab..dfadcb4ad93cd7b0c098523a8c37fd8301681913 100644 (file)
@@ -106,29 +106,11 @@ static void usb_log_disable(struct es1_ap_dev *es1);
  * which defines a region of memory used by the host driver for
  * transferring the data.  When Greybus allocates a buffer, it must
  * do so subject to the constraints associated with the host driver.
- * These constraints are specified by two parameters: the
- * headroom; and the maximum buffer size.
  *
- *                     +------------------+
- *                     |    Host driver   | \
- *                     |   reserved area  |  }- headroom
- *                     |      . . .       | /
- *  buffer pointer ---> +------------------+
- *                     | Buffer space for | \
- *                     | transferred data |  }- buffer size
- *                     |      . . .       | /   (limited to size_max)
- *                     +------------------+
- *
- *  headroom:  Every buffer must have at least this much space
- *             *before* the buffer pointer, reserved for use by the
- *             host driver.  I.e., ((char *)buffer - headroom) must
- *             point to valid memory, usable only by the host driver.
- *  size_max:  The maximum size of a buffer (not including the
- *             headroom) must not exceed this.
+ *  size_max:  The maximum size of a buffer
  */
 static void hd_buffer_constraints(struct greybus_host_device *hd)
 {
-       hd->buffer_headroom = 0;
        hd->buffer_size_max = ES1_GBUF_MSG_SIZE_MAX;
 }
 
index 6f156e5b08c94397879ba480c0da0d09d90d2aaf..8d4bde3815d6ab14937ce7434f4c77a58f7664ee 100644 (file)
 struct greybus_host_device;
 struct svc_msg;
 
-/*
- * When the Greybus code allocates a buffer it sets aside bytes
- * prior to the beginning of the payload area for the host device's
- * exclusive use.  The size is specified by hd->buffer_headroom, and
- * which can't be greater than GB_BUFFER_HEADROOM_MAX.
- */
-#define GB_BUFFER_HEADROOM_MAX         sizeof(u64)
-
 /* Greybus "Host driver" structure, needed by a host controller driver to be
  * able to handle both SVC control as well as "real" greybus messages
  */
@@ -103,7 +95,6 @@ struct greybus_host_device {
        u8 device_id;
 
        /* Host device buffer constraints */
-       size_t buffer_headroom;
        size_t buffer_size_max;
 
        /* Private data for the host driver */
index 4d9e321b9e1dbf338a4fa4d0924fadd5fdac6a81..3639e27e288a8c316168475ba808f032a9f2ab9c 100644 (file)
@@ -230,7 +230,7 @@ static void gb_operation_message_init(struct greybus_host_device *hd,
        u8 *buffer;
 
        buffer = message->buffer;
-       header = (struct gb_operation_msg_hdr *)(buffer + hd->buffer_headroom);
+       header = message->buffer;
 
        message->header = header;
        message->payload = payload_size ? header + 1 : NULL;
@@ -271,7 +271,6 @@ static void gb_operation_message_init(struct greybus_host_device *hd,
  * they'll be filled in by arriving data.
  *
  * Our message buffers have the following layout:
- *     headroom
  *     message header  \_ these combined are
  *     message payload /  the message size
  */
@@ -282,7 +281,6 @@ gb_operation_message_alloc(struct greybus_host_device *hd, u8 type,
        struct gb_message *message;
        struct gb_operation_msg_hdr *header;
        size_t message_size = payload_size + sizeof(*header);
-       size_t size;
 
        if (hd->buffer_size_max > GB_OPERATION_MESSAGE_SIZE_MAX) {
                pr_warn("limiting buffer size to %u\n",
@@ -301,8 +299,7 @@ gb_operation_message_alloc(struct greybus_host_device *hd, u8 type,
        if (!message)
                return NULL;
 
-       size = hd->buffer_headroom + message_size;
-       message->buffer = kzalloc(size, gfp_flags);
+       message->buffer = kzalloc(message_size, gfp_flags);
        if (!message->buffer)
                goto err_free_message;