Example #1
0
static u32 _mxc_ep_recv_data(u8 epnum, struct ep_queue_item *tqi)
{
	struct usb_endpoint_instance *epi = mxc_get_epi(epnum);
	struct urb *urb;
	u32 len = 0;

	if (!epi)
		return 0;

	invalidate_dcache_range((unsigned long)tqi,
		CACHE_ALIGNED_END(tqi, sizeof(struct ep_queue_item)));

	urb = epi->rcv_urb;
	if (urb) {
		u8 *data = urb->buffer + urb->actual_length;
		int remain_len = (tqi->info >> 16) & (0xefff);
		len = tqi->reserved[0] - remain_len;
		DBG("recv len %d-%d-%d\n", len, tqi->reserved[0], remain_len);


		invalidate_dcache_range((unsigned long)tqi->page_vir,
			CACHE_ALIGNED_END(tqi->page_vir, len));
		memcpy(data, (void *)tqi->page_vir, len);

		_dump_buf(data, len);
	}
	return len;
}
Example #2
0
static u32 _mxc_ep_recv_data(u8 epnum, struct ep_queue_item *tqi)
{
	struct usb_endpoint_instance *epi = mxc_get_epi(epnum);
	struct urb *urb;
	u32 len = 0;

	if (!epi)
		return 0;

	urb = epi->rcv_urb;
	if (urb) {
		u8 *data = urb->buffer + urb->actual_length;
		int remain_len = (tqi->info >> 16) & (0xefff);
		len = tqi->reserved[0] - remain_len;
		DBG("recv len %d-%d-%d\n", len, tqi->reserved[0], remain_len);
		memcpy(data, (void *)tqi->page_vir, len);
	}
	return len;
}