greybus: esX: use one byte to encode cport ids in header

We now limit the maximum value for both host and module CPort ids,
and we know they can always be represented in a single byte.

Make use of this by using only one of the two pad bytes for encoding
the CPort id in a message header.

(Note that we have never used a CPort higher than 255.  Encoding
such a small CPort id in little endian 2-byte format has the same
result as what is done here.)

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Alex Elder 2015-06-13 11:02:11 -05:00 committed by Greg Kroah-Hartman
parent 88d18a975d
commit 4bc1389de9
2 changed files with 12 additions and 6 deletions

View File

@ -173,19 +173,19 @@ static void free_urb(struct es1_ap_dev *es1, struct urb *urb)
static void
gb_message_cport_pack(struct gb_operation_msg_hdr *header, u16 cport_id)
{
put_unaligned_le16(cport_id, header->pad);
header->pad[0] = cport_id;
}
/* Clear the pad bytes used for the CPort id */
static void gb_message_cport_clear(struct gb_operation_msg_hdr *header)
{
put_unaligned_le16(0, header->pad);
header->pad[0] = 0;
}
/* Extract the CPort id packed into the header, and clear it */
static u16 gb_message_cport_unpack(struct gb_operation_msg_hdr *header)
{
u16 cport_id = get_unaligned_le16(header->pad);
u16 cport_id = header->pad[0];
gb_message_cport_clear(header);
@ -574,6 +574,9 @@ static int ap_probe(struct usb_interface *interface,
u8 ap_intf_id = 0x01; // FIXME - get endo "ID" from the SVC
u8 svc_interval = 0;
/* We need to fit a CPort ID in one byte of a message header */
BUILD_BUG_ON(CPORT_ID_MAX > U8_MAX);
udev = usb_get_dev(interface_to_usbdev(interface));
hd = greybus_create_hd(&es1_driver, &udev->dev, ES1_GBUF_MSG_SIZE_MAX);

View File

@ -173,19 +173,19 @@ static void free_urb(struct es1_ap_dev *es1, struct urb *urb)
static void
gb_message_cport_pack(struct gb_operation_msg_hdr *header, u16 cport_id)
{
put_unaligned_le16(cport_id, header->pad);
header->pad[0] = cport_id;
}
/* Clear the pad bytes used for the CPort id */
static void gb_message_cport_clear(struct gb_operation_msg_hdr *header)
{
put_unaligned_le16(0, header->pad);
header->pad[0] = 0;
}
/* Extract the CPort id packed into the header, and clear it */
static u16 gb_message_cport_unpack(struct gb_operation_msg_hdr *header)
{
u16 cport_id = get_unaligned_le16(header->pad);
u16 cport_id = header->pad[0];
gb_message_cport_clear(header);
@ -574,6 +574,9 @@ static int ap_probe(struct usb_interface *interface,
u8 ap_intf_id = 0x01; // FIXME - get endo "ID" from the SVC
u8 svc_interval = 0;
/* We need to fit a CPort ID in one byte of a message header */
BUILD_BUG_ON(CPORT_ID_MAX > U8_MAX);
udev = usb_get_dev(interface_to_usbdev(interface));
hd = greybus_create_hd(&es1_driver, &udev->dev, ES1_GBUF_MSG_SIZE_MAX);