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); }
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; }