/* buffer_icap_device_read - Transfer bytes from ICAP to the storage buffer. @drvdata: a pointer to the drvdata. @offset: The storage buffer start address. @count: The number of words (32 bit) to read from the device (ICAP).  */
static int buffer_icap_device_read(struct hwicap_drvdata *drvdata, u32 offset, u32 count)
/* buffer_icap_device_read - Transfer bytes from ICAP to the storage buffer. @drvdata: a pointer to the drvdata. @offset: The storage buffer start address. @count: The number of words (32 bit) to read from the device (ICAP).  */
static int buffer_icap_device_read(struct hwicap_drvdata *drvdata, u32 offset, u32 count)
{
	s32 retries = 0;
	void __iomem *base_address = drvdata->base_address;
	if (buffer_icap_busy(base_address))
		return -EBUSY;
	if ((offset + count) > XHI_MAX_BUFFER_INTS)
		return -EINVAL;
	buffer_icap_set_size(base_address, (count << 2));
	buffer_icap_set_offset(base_address, offset);
	buffer_icap_set_rnc(base_address, XHI_READBACK);
	while (buffer_icap_busy(base_address)) {
		retries++;
		if (retries > XHI_MAX_RETRIES)
			return -EBUSY;
	}
	return 0;
}