Lines Matching refs:pdev
19 static enum usb_status usb_core_set_stall(struct usb_handle *pdev, in usb_core_set_stall() argument
23 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_set_stall()
39 pdev->driver->ep_set_stall(hpcd->instance, ep); in usb_core_set_stall()
41 pdev->driver->ep0_out_start(hpcd->instance); in usb_core_set_stall()
53 static void usb_core_get_desc(struct usb_handle *pdev, in usb_core_get_desc() argument
63 pbuf = pdev->desc->get_device_desc(&len); in usb_core_get_desc()
67 pbuf = pdev->desc->get_config_desc(&len); in usb_core_get_desc()
73 pbuf = pdev->desc->get_lang_id_desc(&len); in usb_core_get_desc()
77 pbuf = pdev->desc->get_manufacturer_desc(&len); in usb_core_get_desc()
81 pbuf = pdev->desc->get_product_desc(&len); in usb_core_get_desc()
85 pbuf = pdev->desc->get_serial_desc(&len); in usb_core_get_desc()
89 pbuf = pdev->desc->get_configuration_desc(&len); in usb_core_get_desc()
93 pbuf = pdev->desc->get_interface_desc(&len); in usb_core_get_desc()
99 pbuf = pdev->desc->get_usr_desc( in usb_core_get_desc()
106 pbuf = pdev->desc->get_device_qualifier_desc(&len); in usb_core_get_desc()
110 if (pdev->desc->get_other_speed_config_desc == NULL) { in usb_core_get_desc()
111 usb_core_ctl_error(pdev); in usb_core_get_desc()
114 pbuf = pdev->desc->get_other_speed_config_desc(&len); in usb_core_get_desc()
119 usb_core_ctl_error(pdev); in usb_core_get_desc()
127 usb_core_transmit_ep0(pdev, pbuf, len); in usb_core_get_desc()
137 static void usb_core_set_config(struct usb_handle *pdev, in usb_core_set_config() argument
145 usb_core_ctl_error(pdev); in usb_core_set_config()
149 switch (pdev->dev_state) { in usb_core_set_config()
152 pdev->dev_config = cfgidx; in usb_core_set_config()
153 pdev->dev_state = USBD_STATE_CONFIGURED; in usb_core_set_config()
154 if (!pdev->class) { in usb_core_set_config()
155 usb_core_ctl_error(pdev); in usb_core_set_config()
159 if (pdev->class->init(pdev, cfgidx) != 0U) { in usb_core_set_config()
160 usb_core_ctl_error(pdev); in usb_core_set_config()
168 pdev->dev_state = USBD_STATE_ADDRESSED; in usb_core_set_config()
169 pdev->dev_config = cfgidx; in usb_core_set_config()
170 pdev->class->de_init(pdev, cfgidx); in usb_core_set_config()
171 } else if (cfgidx != pdev->dev_config) { in usb_core_set_config()
172 if (pdev->class == NULL) { in usb_core_set_config()
173 usb_core_ctl_error(pdev); in usb_core_set_config()
177 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_set_config()
179 pdev->dev_config = cfgidx; in usb_core_set_config()
181 if (pdev->class->init(pdev, cfgidx) != 0U) { in usb_core_set_config()
182 usb_core_ctl_error(pdev); in usb_core_set_config()
189 usb_core_ctl_error(pdev); in usb_core_set_config()
194 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_set_config()
203 static void usb_core_get_status(struct usb_handle *pdev, in usb_core_get_status() argument
206 if ((pdev->dev_state != USBD_STATE_ADDRESSED) && in usb_core_get_status()
207 (pdev->dev_state != USBD_STATE_CONFIGURED)) { in usb_core_get_status()
208 usb_core_ctl_error(pdev); in usb_core_get_status()
212 pdev->dev_config_status = USB_CONFIG_SELF_POWERED; in usb_core_get_status()
214 if (pdev->dev_remote_wakeup != 0U) { in usb_core_get_status()
215 pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP; in usb_core_get_status()
219 usb_core_transmit_ep0(pdev, (uint8_t *)&pdev->dev_config_status, 2U); in usb_core_get_status()
228 static void usb_core_set_address(struct usb_handle *pdev, in usb_core_set_address() argument
234 usb_core_ctl_error(pdev); in usb_core_set_address()
239 if (pdev->dev_state != USBD_STATE_DEFAULT) { in usb_core_set_address()
240 usb_core_ctl_error(pdev); in usb_core_set_address()
244 pdev->dev_address = dev_addr; in usb_core_set_address()
245 pdev->driver->set_address(((struct pcd_handle *)(pdev->data))->instance, in usb_core_set_address()
249 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_set_address()
252 pdev->dev_state = USBD_STATE_ADDRESSED; in usb_core_set_address()
254 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_set_address()
265 static enum usb_status usb_core_dev_req(struct usb_handle *pdev, in usb_core_dev_req() argument
271 usb_core_get_desc(pdev, req); in usb_core_dev_req()
275 usb_core_set_config(pdev, req); in usb_core_dev_req()
279 usb_core_get_status(pdev, req); in usb_core_dev_req()
283 usb_core_set_address(pdev, req); in usb_core_dev_req()
291 usb_core_ctl_error(pdev); in usb_core_dev_req()
305 static enum usb_status usb_core_itf_req(struct usb_handle *pdev, in usb_core_itf_req() argument
308 if (pdev->dev_state != USBD_STATE_CONFIGURED) { in usb_core_itf_req()
309 usb_core_ctl_error(pdev); in usb_core_itf_req()
314 pdev->class->setup(pdev, req); in usb_core_itf_req()
317 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_itf_req()
320 usb_core_ctl_error(pdev); in usb_core_itf_req()
333 static enum usb_status usb_core_setup_stage(struct usb_handle *pdev, in usb_core_setup_stage() argument
336 struct usb_setup_req *req = &pdev->request; in usb_core_setup_stage()
345 pdev->ep0_state = USBD_EP0_SETUP; in usb_core_setup_stage()
346 pdev->ep0_data_len = pdev->request.length; in usb_core_setup_stage()
348 switch (pdev->request.bm_request & USB_REQ_RECIPIENT_MASK) { in usb_core_setup_stage()
350 usb_core_dev_req(pdev, &pdev->request); in usb_core_setup_stage()
354 usb_core_itf_req(pdev, &pdev->request); in usb_core_setup_stage()
360 pdev->request.bm_request & USB_REQ_RECIPIENT_MASK); in usb_core_setup_stage()
361 usb_core_set_stall(pdev, pdev->request.bm_request & in usb_core_setup_stage()
377 static enum usb_status usb_core_data_out(struct usb_handle *pdev, uint8_t epnum, in usb_core_data_out() argument
383 pep = &pdev->ep_out[0]; in usb_core_data_out()
384 if (pdev->ep0_state == USBD_EP0_DATA_OUT) { in usb_core_data_out()
388 usb_core_receive(pdev, 0U, pdata, in usb_core_data_out()
392 if (pdev->class->ep0_rx_ready && in usb_core_data_out()
393 (pdev->dev_state == in usb_core_data_out()
395 pdev->class->ep0_rx_ready(pdev); in usb_core_data_out()
398 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_data_out()
401 } else if (pdev->class->data_out != NULL && in usb_core_data_out()
402 (pdev->dev_state == USBD_STATE_CONFIGURED)) { in usb_core_data_out()
403 pdev->class->data_out(pdev, epnum); in usb_core_data_out()
417 static enum usb_status usb_core_data_in(struct usb_handle *pdev, uint8_t epnum, in usb_core_data_in() argument
421 struct usb_endpoint *pep = &pdev->ep_in[0]; in usb_core_data_in()
423 if (pdev->ep0_state == USBD_EP0_DATA_IN) { in usb_core_data_in()
427 usb_core_transmit(pdev, 0U, pdata, in usb_core_data_in()
431 usb_core_receive(pdev, 0U, NULL, 0U); in usb_core_data_in()
437 (pep->total_length < pdev->ep0_data_len)) { in usb_core_data_in()
438 usb_core_transmit(pdev, 0U, NULL, 0U); in usb_core_data_in()
440 pdev->ep0_data_len = 0U; in usb_core_data_in()
443 usb_core_receive(pdev, 0U, NULL, 0U); in usb_core_data_in()
445 if (pdev->class->ep0_tx_sent != NULL && in usb_core_data_in()
446 (pdev->dev_state == in usb_core_data_in()
448 pdev->class->ep0_tx_sent(pdev); in usb_core_data_in()
451 usb_core_receive_ep0(pdev, NULL, 0U); in usb_core_data_in()
455 } else if ((pdev->class->data_in != NULL) && in usb_core_data_in()
456 (pdev->dev_state == USBD_STATE_CONFIGURED)) { in usb_core_data_in()
457 pdev->class->data_in(pdev, epnum); in usb_core_data_in()
469 static enum usb_status usb_core_suspend(struct usb_handle *pdev) in usb_core_suspend() argument
472 pdev->dev_old_state = pdev->dev_state; in usb_core_suspend()
473 pdev->dev_state = USBD_STATE_SUSPENDED; in usb_core_suspend()
484 static enum usb_status usb_core_resume(struct usb_handle *pdev) in usb_core_resume() argument
487 pdev->dev_state = pdev->dev_old_state; in usb_core_resume()
498 static enum usb_status usb_core_sof(struct usb_handle *pdev) in usb_core_sof() argument
500 if (pdev->dev_state == USBD_STATE_CONFIGURED) { in usb_core_sof()
501 if (pdev->class->sof != NULL) { in usb_core_sof()
502 pdev->class->sof(pdev); in usb_core_sof()
515 static enum usb_status usb_core_disconnect(struct usb_handle *pdev) in usb_core_disconnect() argument
518 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_disconnect()
519 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_disconnect()
524 enum usb_status usb_core_handle_it(struct usb_handle *pdev) in usb_core_handle_it() argument
530 switch (pdev->driver->it_handler(pdev->data->instance, ¶m)) { in usb_core_handle_it()
532 usb_core_data_out(pdev, param, in usb_core_handle_it()
533 pdev->data->out_ep[param].xfer_buff); in usb_core_handle_it()
537 usb_core_data_in(pdev, param, in usb_core_handle_it()
538 pdev->data->in_ep[param].xfer_buff); in usb_core_handle_it()
542 usb_core_setup_stage(pdev, (uint8_t *)pdev->data->setup); in usb_core_handle_it()
549 ep = &pdev->data->out_ep[param & USBD_OUT_EPNUM_MASK]; in usb_core_handle_it()
551 pdev->driver->read_packet(pdev->data->instance, ep->xfer_buff, in usb_core_handle_it()
558 ep = &pdev->data->out_ep[param & USBD_OUT_EPNUM_MASK]; in usb_core_handle_it()
560 pdev->driver->read_packet(pdev->data->instance, in usb_core_handle_it()
561 (uint8_t *)pdev->data->setup, 8); in usb_core_handle_it()
566 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_handle_it()
570 if (pdev->data->lpm_state == LPM_L1) { in usb_core_handle_it()
571 pdev->data->lpm_state = LPM_L0; in usb_core_handle_it()
573 usb_core_resume(pdev); in usb_core_handle_it()
578 usb_core_suspend(pdev); in usb_core_handle_it()
582 if (pdev->data->lpm_state == LPM_L0) { in usb_core_handle_it()
583 pdev->data->lpm_state = LPM_L1; in usb_core_handle_it()
585 usb_core_suspend(pdev); in usb_core_handle_it()
590 usb_core_sof(pdev); in usb_core_handle_it()
594 usb_core_disconnect(pdev); in usb_core_handle_it()
598 pdev->driver->write_empty_tx_fifo( in usb_core_handle_it()
599 pdev->data->instance, param, in usb_core_handle_it()
600 pdev->data->in_ep[param].xfer_len, in usb_core_handle_it()
601 (uint32_t *)&pdev->data->in_ep[param].xfer_count, in usb_core_handle_it()
602 pdev->data->in_ep[param].maxpacket, in usb_core_handle_it()
603 &pdev->data->in_ep[param].xfer_buff); in usb_core_handle_it()
614 static void usb_core_start_xfer(struct usb_handle *pdev, void *handle, in usb_core_start_xfer() argument
618 pdev->driver->ep0_start_xfer(handle, ep); in usb_core_start_xfer()
620 pdev->driver->ep_start_xfer(handle, ep); in usb_core_start_xfer()
633 enum usb_status usb_core_receive(struct usb_handle *pdev, uint8_t ep_addr, in usb_core_receive() argument
637 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_receive()
653 usb_core_start_xfer(pdev, hpcd->instance, ep); in usb_core_receive()
667 enum usb_status usb_core_transmit(struct usb_handle *pdev, uint8_t ep_addr, in usb_core_transmit() argument
671 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_transmit()
687 usb_core_start_xfer(pdev, hpcd->instance, ep); in usb_core_transmit()
700 enum usb_status usb_core_receive_ep0(struct usb_handle *pdev, uint8_t *buf, in usb_core_receive_ep0() argument
705 pdev->ep0_state = USBD_EP0_DATA_OUT; in usb_core_receive_ep0()
707 pdev->ep0_state = USBD_EP0_STATUS_OUT; in usb_core_receive_ep0()
710 pdev->ep_out[0].total_length = len; in usb_core_receive_ep0()
712 pdev->ep_out[0].rem_length = 0; in usb_core_receive_ep0()
714 pdev->ep_out[0].rem_length = len; in usb_core_receive_ep0()
718 return usb_core_receive(pdev, 0U, buf, len); in usb_core_receive_ep0()
729 enum usb_status usb_core_transmit_ep0(struct usb_handle *pdev, uint8_t *buf, in usb_core_transmit_ep0() argument
734 pdev->ep0_state = USBD_EP0_DATA_IN; in usb_core_transmit_ep0()
736 pdev->ep0_state = USBD_EP0_STATUS_IN; in usb_core_transmit_ep0()
739 pdev->ep_in[0].total_length = len; in usb_core_transmit_ep0()
741 pdev->ep_in[0].rem_length = 0; in usb_core_transmit_ep0()
743 pdev->ep_in[0].rem_length = len; in usb_core_transmit_ep0()
747 return usb_core_transmit(pdev, 0U, buf, len); in usb_core_transmit_ep0()
758 void usb_core_ctl_error(struct usb_handle *pdev) in usb_core_ctl_error() argument
761 usb_core_set_stall(pdev, EP0_IN); in usb_core_ctl_error()
762 usb_core_set_stall(pdev, EP0_OUT); in usb_core_ctl_error()
771 enum usb_status usb_core_start(struct usb_handle *pdev) in usb_core_start() argument
774 pdev->driver->start_device(pdev->data->instance); in usb_core_start()
785 enum usb_status usb_core_stop(struct usb_handle *pdev) in usb_core_stop() argument
788 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_stop()
791 pdev->driver->stop_device(pdev->data->instance); in usb_core_stop()
805 enum usb_status register_usb_driver(struct usb_handle *pdev, in register_usb_driver() argument
812 assert(pdev != NULL); in register_usb_driver()
818 pdev->driver = driver; in register_usb_driver()
819 pdev->data = pcd_handle; in register_usb_driver()
820 pdev->data->instance = driver_handle; in register_usb_driver()
821 pdev->dev_state = USBD_STATE_DEFAULT; in register_usb_driver()
822 pdev->ep0_state = USBD_EP0_IDLE; in register_usb_driver()
826 pdev->ep_in[i].maxpacket = pdev->data->in_ep[i].maxpacket; in register_usb_driver()
827 pdev->ep_out[i].maxpacket = pdev->data->out_ep[i].maxpacket; in register_usb_driver()
840 enum usb_status register_platform(struct usb_handle *pdev, in register_platform() argument
843 assert(pdev != NULL); in register_platform()
847 pdev->desc = plat_call_back; in register_platform()