}
static void qcom_glink_rx_peak(struct qcom_glink *glink,
- void *data, size_t count)
+ void *data, unsigned int offset, size_t count)
{
- glink->rx_pipe->peak(glink->rx_pipe, data, count);
+ glink->rx_pipe->peak(glink->rx_pipe, data, offset, count);
}
static void qcom_glink_rx_advance(struct qcom_glink *glink, size_t count)
INIT_LIST_HEAD(&dcmd->node);
- qcom_glink_rx_peak(glink, &dcmd->msg, sizeof(dcmd->msg) + extra);
+ qcom_glink_rx_peak(glink, &dcmd->msg, 0, sizeof(dcmd->msg) + extra);
spin_lock(&glink->rx_lock);
list_add_tail(&dcmd->node, &glink->rx_queue);
return -EAGAIN;
}
- qcom_glink_rx_peak(glink, &hdr, sizeof(hdr));
+ qcom_glink_rx_peak(glink, &hdr, 0, sizeof(hdr));
chunk_size = le32_to_cpu(hdr.chunk_size);
left_size = le32_to_cpu(hdr.left_size);
goto advance_rx;
}
- qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr), 8));
qcom_glink_rx_peak(glink, intent->data + intent->offset,
- chunk_size);
+ sizeof(hdr), chunk_size);
intent->offset += chunk_size;
/* Handle message when no fragments remain to be received */
}
advance_rx:
- qcom_glink_rx_advance(glink, ALIGN(chunk_size, 8));
+ qcom_glink_rx_advance(glink, ALIGN(sizeof(hdr) + chunk_size, 8));
return ret;
}
if (avail < sizeof(msg))
break;
- qcom_glink_rx_peak(glink, &msg, sizeof(msg));
+ qcom_glink_rx_peak(glink, &msg, 0, sizeof(msg));
cmd = le16_to_cpu(msg.cmd);
param1 = le16_to_cpu(msg.param1);
}
static void glink_rpm_rx_peak(struct qcom_glink_pipe *glink_pipe,
- void *data, size_t count)
+ void *data, unsigned int offset, size_t count)
{
struct glink_rpm_pipe *pipe = to_rpm_pipe(glink_pipe);
unsigned int tail;
size_t len;
tail = readl(pipe->tail);
+ tail += offset;
+ if (tail >= pipe->native.length)
+ tail -= pipe->native.length;
len = min_t(size_t, count, pipe->native.length - tail);
if (len) {
}
static void glink_smem_rx_peak(struct qcom_glink_pipe *np,
- void *data, size_t count)
+ void *data, unsigned int offset, size_t count)
{
struct glink_smem_pipe *pipe = to_smem_pipe(np);
size_t len;
u32 tail;
tail = le32_to_cpu(*pipe->tail);
+ tail += offset;
+ if (tail >= pipe->native.length)
+ tail -= pipe->native.length;
len = min_t(size_t, count, pipe->native.length - tail);
if (len) {