コード例 #1
0
void  	update_nonperio_stransfer(td_t *parent_td)
{
	switch(parent_td->parent_ed_p->ed_desc.endpoint_type)
	{	
		case BULK_TRANSFER:
			parent_td->cur_stransfer.start_phy_buf_addr	= parent_td->phy_buf_addr+parent_td->transferred_szie;
			parent_td->cur_stransfer.start_vir_buf_addr	= parent_td->vir_buf_addr+parent_td->transferred_szie;
			parent_td->cur_stransfer.buf_size		= ((parent_td->buf_size - parent_td->transferred_szie)>MAX_CH_TRANSFER_SIZE)
								?MAX_CH_TRANSFER_SIZE
								:parent_td->buf_size - parent_td->transferred_szie;		
		break;		
		
		case CONTROL_TRANSFER:
			if(parent_td->standard_dev_req_info.conrol_transfer_stage == SETUP_STAGE)
			{
				// but, this case will not be occured......
				parent_td->cur_stransfer.start_phy_buf_addr	= parent_td->standard_dev_req_info.phy_standard_dev_req_addr;
				parent_td->cur_stransfer.start_vir_buf_addr 	= parent_td->standard_dev_req_info.vir_standard_dev_req_addr;
				parent_td->cur_stransfer.buf_size		= 8;		
			}
			else if(parent_td->standard_dev_req_info.conrol_transfer_stage == DATA_STAGE)
			{
				parent_td->cur_stransfer.start_phy_buf_addr	= parent_td->phy_buf_addr+parent_td->transferred_szie;
				parent_td->cur_stransfer.start_vir_buf_addr 	= parent_td->vir_buf_addr+parent_td->transferred_szie;
				parent_td->cur_stransfer.buf_size		= ((parent_td->buf_size - parent_td->transferred_szie)>MAX_CH_TRANSFER_SIZE)
									?MAX_CH_TRANSFER_SIZE
									:parent_td->buf_size - parent_td->transferred_szie;				
			}
			else
			{
				parent_td->cur_stransfer.start_phy_buf_addr	= 0;
				parent_td->cur_stransfer.start_vir_buf_addr 	= 0;
				parent_td->cur_stransfer.buf_size		= 0;			
			}
			break;
			

		default:
			break;
	}
	
	parent_td->cur_stransfer.packet_cnt = calc_packet_cnt(parent_td->cur_stransfer.buf_size, parent_td->parent_ed_p->ed_desc.max_packet_size);	

}
コード例 #2
0
int  	init_nonperio_stransfer(bool	f_is_standard_dev_req,
				td_t       *parent_td)
{


	parent_td->cur_stransfer.ed_desc_p 	= &parent_td->parent_ed_p->ed_desc;
	parent_td->cur_stransfer.ed_status_p 	= &parent_td->parent_ed_p->ed_status;
	parent_td->cur_stransfer.alloc_chnum	= CH_NONE;
	parent_td->cur_stransfer.parent_td		= (u32)parent_td;
	parent_td->cur_stransfer.stransfer_id 	= (u32)&parent_td->cur_stransfer;

	otg_mem_set(&(parent_td->cur_stransfer.hc_reg), 0, sizeof(hc_reg_t));

	parent_td->cur_stransfer.hc_reg.hc_int_msk.b.chhltd = 1;

	if(f_is_standard_dev_req)
	{
		parent_td->cur_stransfer.buf_size		=	USB_20_STAND_DEV_REQUEST_SIZE;
		parent_td->cur_stransfer.start_phy_buf_addr	= 	parent_td->standard_dev_req_info.phy_standard_dev_req_addr;
		parent_td->cur_stransfer.start_vir_buf_addr	=	parent_td->standard_dev_req_info.vir_standard_dev_req_addr;
	}
	else
	{
		parent_td->cur_stransfer.buf_size		=	(parent_td->buf_size>MAX_CH_TRANSFER_SIZE)
								?MAX_CH_TRANSFER_SIZE
								:parent_td->buf_size;

		parent_td->cur_stransfer.start_phy_buf_addr	= 	parent_td->phy_buf_addr;
		parent_td->cur_stransfer.start_vir_buf_addr	=	parent_td->vir_buf_addr;
	}

	parent_td->cur_stransfer.packet_cnt = calc_packet_cnt(parent_td->cur_stransfer.buf_size
								, parent_td->parent_ed_p->ed_desc.max_packet_size);

	return USB_ERR_SUCCESS;
}