Lines Matching refs:usb
22 #include <linux/usb.h>
23 #include <linux/usb/hcd.h>
28 static void recycle_frame(struct fhci_usb *usb, struct packet *pkt)
36 cq_put(&usb->ep0->empty_frame_Q, pkt);
40 void fhci_transaction_confirm(struct fhci_usb *usb, struct packet *pkt)
48 td = fhci_remove_td_from_frame(usb->actual_frame);
56 cq_put(&usb->ep0->dummy_packets_Q, pkt->data);
59 recycle_frame(usb, pkt);
68 td_next->start_frame = usb->actual_frame->frame_num;
87 fhci_dbg(usb->fhci, "td err fu\n");
91 fhci_dbg(usb->fhci, "td err f!u\n");
94 fhci_dbg(usb->fhci, "td err !f\n");
102 fhci_vdbg(usb->fhci, "td nack\n");
118 fhci_move_td_from_ed_to_done_list(usb, ed);
126 void fhci_flush_all_transmissions(struct fhci_usb *usb)
131 mode = in_8(&usb->fhci->regs->usb_usmod);
132 clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_EN);
134 fhci_flush_bds(usb);
136 while ((td = fhci_peek_td_from_frame(usb->actual_frame)) != NULL) {
140 fhci_transaction_confirm(usb, pkt);
143 usb->actual_frame->frame_status = FRAME_END_TRANSMISSION;
146 out_be16(&usb->fhci->regs->usb_usber, 0xffff);
148 out_8(&usb->fhci->regs->usb_usmod, mode | USB_MODE_EN);
155 static int add_packet(struct fhci_usb *usb, struct ed *ed, struct td *td)
188 if (usb->port_status == FHCI_PORT_FULL)
194 if (usb->actual_frame->total_bytes + len + PROTOCOL_OVERHEAD >=
195 usb->max_bytes_per_frame) {
196 fhci_vdbg(usb->fhci, "not enough space in this frame: "
197 "%d %d %d\n", usb->actual_frame->total_bytes, len,
198 usb->max_bytes_per_frame);
203 if (usb->actual_frame->frame_status != FRAME_IS_PREPARED &&
204 (usb->actual_frame->frame_status & FRAME_END_TRANSMISSION ||
205 (fw_transaction_time + usb->sw_transaction_time >=
206 1000 - fhci_get_sof_timer_count(usb)))) {
207 fhci_dbg(usb->fhci, "not enough time in this frame\n");
212 pkt = cq_get(&usb->ep0->empty_frame_Q);
214 fhci_dbg(usb->fhci, "there is no empty frame\n");
221 data = cq_get(&usb->ep0->dummy_packets_Q);
231 usb->actual_frame->total_bytes += (len + PROTOCOL_OVERHEAD);
232 fhci_add_td_to_frame(usb->actual_frame, td);
234 if (usb->port_status != FHCI_PORT_FULL &&
235 usb->port_status != FHCI_PORT_LOW) {
238 fhci_transaction_confirm(usb, pkt);
239 } else if (fhci_host_transaction(usb, pkt, td->type, ed->dev_addr,
245 cq_put(&usb->ep0->dummy_packets_Q, pkt->data);
246 recycle_frame(usb, pkt);
247 usb->actual_frame->total_bytes -= (len + PROTOCOL_OVERHEAD);
248 fhci_err(usb->fhci, "host transaction failed\n");
268 static int scan_ed_list(struct fhci_usb *usb,
282 u32 save_transaction_time = usb->sw_transaction_time;
293 fhci_move_td_from_ed_to_done_list(usb, ed);
304 (((usb->actual_frame->frame_num -
308 if (add_packet(usb, ed, td) < 0)
312 td->start_frame = usb->actual_frame->frame_num;
313 usb->sw_transaction_time += save_transaction_time;
315 if (usb->actual_frame->total_bytes >=
316 usb->max_bytes_per_frame) {
317 usb->actual_frame->frame_status =
319 fhci_push_dummy_bd(usb->ep0);
324 if (usb->actual_frame->total_bytes >= frame_part[list_type])
330 usb->sw_transaction_time = save_transaction_time;
335 static u32 rotate_frames(struct fhci_usb *usb)
337 struct fhci_hcd *fhci = usb->fhci;
339 if (!list_empty(&usb->actual_frame->tds_list)) {
341 usb->actual_frame->frame_num) & 0x7ff) > 5)
342 fhci_flush_actual_frame(usb);
347 usb->actual_frame->frame_status = FRAME_IS_PREPARED;
348 usb->actual_frame->frame_num = in_be16(&fhci->pram->frame_num) & 0x7ff;
349 usb->actual_frame->total_bytes = 0;
358 void fhci_schedule_transactions(struct fhci_usb *usb)
362 if (usb->actual_frame->frame_status & FRAME_END_TRANSMISSION)
363 if (rotate_frames(usb) != 0)
366 if (usb->actual_frame->frame_status & FRAME_END_TRANSMISSION)
369 if (usb->actual_frame->total_bytes == 0) {
374 scan_ed_list(usb, &usb->hc_list->iso_list, FHCI_TF_ISO);
380 scan_ed_list(usb, &usb->hc_list->intr_list, FHCI_TF_INTR);
386 left = scan_ed_list(usb, &usb->hc_list->ctrl_list,
395 scan_ed_list(usb, &usb->hc_list->bulk_list, FHCI_TF_BULK);
401 struct fhci_usb *usb = fhci->usb_lld;
403 if ((usb->port_status == FHCI_PORT_DISABLED) &&
404 (usb->vroot_hub->port.wPortStatus & USB_PORT_STAT_CONNECTION) &&
405 !(usb->vroot_hub->port.wPortChange & USB_PORT_STAT_C_CONNECTION)) {
406 if (usb->vroot_hub->port.wPortStatus & USB_PORT_STAT_LOW_SPEED)
407 usb->port_status = FHCI_PORT_LOW;
409 usb->port_status = FHCI_PORT_FULL;
411 usb->saved_msk &= ~USB_E_IDLE_MASK;
412 out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
415 gtm_set_exact_timer16(fhci->timer, usb->max_frame_usage, false);
417 fhci_host_transmit_actual_frame(usb);
418 usb->actual_frame->frame_status = FRAME_IS_TRANSMITTED;
420 fhci_schedule_transactions(usb);
426 struct fhci_usb *usb = fhci->usb_lld;
430 fhci_usb_disable_interrupt(usb);
431 clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
432 usb->port_status = FHCI_PORT_DISABLED;
437 usb->saved_msk |= USB_E_IDLE_MASK;
438 out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
440 usb->vroot_hub->port.wPortStatus &= ~USB_PORT_STAT_CONNECTION;
441 usb->vroot_hub->port.wPortChange |= USB_PORT_STAT_C_CONNECTION;
442 usb->max_bytes_per_frame = 0;
443 fhci_usb_enable_interrupt(usb);
452 struct fhci_usb *usb = fhci->usb_lld;
458 fhci_usb_disable_interrupt(usb);
470 usb->port_status = FHCI_PORT_LOW;
471 setbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
472 usb->vroot_hub->port.wPortStatus |=
475 usb->vroot_hub->port.wPortChange |=
477 usb->max_bytes_per_frame =
479 fhci_port_enable(usb);
488 usb->port_status = FHCI_PORT_FULL;
489 clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
490 usb->vroot_hub->port.wPortStatus &=
492 usb->vroot_hub->port.wPortStatus |=
494 usb->vroot_hub->port.wPortChange |=
496 usb->max_bytes_per_frame = (MAX_BYTES_PER_FRAME - 15);
497 fhci_port_enable(usb);
500 fhci_usb_enable_interrupt(usb);
508 struct fhci_usb *usb = fhci->usb_lld;
514 if (usb->actual_frame->frame_status == FRAME_IS_TRANSMITTED) {
515 usb->actual_frame->frame_status = FRAME_TIMER_END_TRANSMISSION;
516 fhci_push_dummy_bd(usb->ep0);
519 fhci_schedule_transactions(usb);
527 static void abort_transmission(struct fhci_usb *usb)
529 fhci_dbg(usb->fhci, "-> %s\n", __func__);
533 out_8(&usb->fhci->regs->usb_uscom, USB_CMD_FLUSH_FIFO | EP_ZERO);
536 fhci_flush_bds(usb);
539 fhci_dbg(usb->fhci, "<- %s\n", __func__);
545 struct fhci_usb *usb;
551 usb = fhci->usb_lld;
553 usb_er |= in_be16(&usb->fhci->regs->usb_usber) &
554 in_be16(&usb->fhci->regs->usb_usbmr);
557 out_be16(&usb->fhci->regs->usb_usber, usb_er);
562 if ((usb->port_status == FHCI_PORT_FULL) ||
563 (usb->port_status == FHCI_PORT_LOW)) {
566 } else if (usb->port_status == FHCI_PORT_WAITING) {
567 usb->port_status = FHCI_PORT_DISCONNECTING;
570 usb->saved_msk |= USB_E_IDLE_MASK;
571 out_be16(&usb->fhci->regs->usb_usber,
572 usb->saved_msk);
573 } else if (usb->port_status == FHCI_PORT_DISABLED) {
601 if (usb->port_status == FHCI_PORT_DISABLED) {
604 } else if (usb->port_status ==
606 /* XXX usb->port_status = FHCI_PORT_WAITING; */
608 usb->saved_msk &= ~USB_E_IDLE_MASK;
609 out_be16(&usb->fhci->regs->usb_usbmr,
610 usb->saved_msk);