Lines Matching refs:pdev

30 static enum usb_status usb_core_set_stall(struct usb_handle *pdev, uint8_t ep_addr)  in usb_core_set_stall()  argument
33 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_set_stall()
49 pdev->driver->ep_set_stall(hpcd->instance, ep); in usb_core_set_stall()
51 pdev->driver->ep0_out_start(hpcd->instance); in usb_core_set_stall()
63 static void usb_core_get_desc(struct usb_handle *pdev, struct usb_setup_req *req) in usb_core_get_desc() argument
72 pbuf = pdev->desc->get_device_desc(&len); in usb_core_get_desc()
76 pbuf = pdev->desc->get_config_desc(&len); in usb_core_get_desc()
82 pbuf = pdev->desc->get_lang_id_desc(&len); in usb_core_get_desc()
86 pbuf = pdev->desc->get_manufacturer_desc(&len); in usb_core_get_desc()
90 pbuf = pdev->desc->get_product_desc(&len); in usb_core_get_desc()
94 pbuf = pdev->desc->get_serial_desc(&len); in usb_core_get_desc()
98 pbuf = pdev->desc->get_configuration_desc(&len); in usb_core_get_desc()
102 pbuf = pdev->desc->get_interface_desc(&len); in usb_core_get_desc()
108 pbuf = pdev->desc->get_usr_desc(desc_idx - USBD_IDX_USER0_STR, &len); in usb_core_get_desc()
114 pbuf = pdev->desc->get_device_qualifier_desc(&len); in usb_core_get_desc()
118 if (pdev->desc->get_other_speed_config_desc == NULL) { in usb_core_get_desc()
119 usb_core_ctl_error(pdev); in usb_core_get_desc()
122 pbuf = pdev->desc->get_other_speed_config_desc(&len); in usb_core_get_desc()
127 usb_core_ctl_error(pdev); in usb_core_get_desc()
135 usb_core_transmit_ep0(pdev, pbuf, len); in usb_core_get_desc()
145 static void usb_core_set_config(struct usb_handle *pdev, struct usb_setup_req *req) in usb_core_set_config() argument
152 usb_core_ctl_error(pdev); in usb_core_set_config()
156 switch (pdev->dev_state) { in usb_core_set_config()
159 pdev->dev_config = cfgidx; in usb_core_set_config()
160 pdev->dev_state = USBD_STATE_CONFIGURED; in usb_core_set_config()
161 if (!pdev->class) { in usb_core_set_config()
162 usb_core_ctl_error(pdev); in usb_core_set_config()
166 if (pdev->class->init(pdev, cfgidx) != 0U) { in usb_core_set_config()
167 usb_core_ctl_error(pdev); in usb_core_set_config()
175 pdev->dev_state = USBD_STATE_ADDRESSED; in usb_core_set_config()
176 pdev->dev_config = cfgidx; in usb_core_set_config()
177 pdev->class->de_init(pdev, cfgidx); in usb_core_set_config()
178 } else if (cfgidx != pdev->dev_config) { in usb_core_set_config()
179 if (pdev->class == NULL) { in usb_core_set_config()
180 usb_core_ctl_error(pdev); in usb_core_set_config()
184 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_set_config()
186 pdev->dev_config = cfgidx; in usb_core_set_config()
188 if (pdev->class->init(pdev, cfgidx) != 0U) { in usb_core_set_config()
189 usb_core_ctl_error(pdev); in usb_core_set_config()
196 usb_core_ctl_error(pdev); in usb_core_set_config()
201 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_set_config()
210 static void usb_core_get_status(struct usb_handle *pdev, in usb_core_get_status() argument
213 if ((pdev->dev_state != USBD_STATE_ADDRESSED) && in usb_core_get_status()
214 (pdev->dev_state != USBD_STATE_CONFIGURED)) { in usb_core_get_status()
215 usb_core_ctl_error(pdev); in usb_core_get_status()
219 pdev->dev_config_status = USB_CONFIG_SELF_POWERED; in usb_core_get_status()
221 if (pdev->dev_remote_wakeup != 0U) { in usb_core_get_status()
222 pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP; in usb_core_get_status()
226 usb_core_transmit_ep0(pdev, (uint8_t *)&pdev->dev_config_status, 2U); in usb_core_get_status()
235 static void usb_core_set_address(struct usb_handle *pdev, in usb_core_set_address() argument
241 usb_core_ctl_error(pdev); in usb_core_set_address()
246 if (pdev->dev_state != USBD_STATE_DEFAULT) { in usb_core_set_address()
247 usb_core_ctl_error(pdev); in usb_core_set_address()
251 pdev->dev_address = dev_addr; in usb_core_set_address()
252 pdev->driver->set_address(((struct pcd_handle *)(pdev->data))->instance, dev_addr); in usb_core_set_address()
255 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_set_address()
258 pdev->dev_state = USBD_STATE_ADDRESSED; in usb_core_set_address()
260 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_set_address()
271 static enum usb_status usb_core_dev_req(struct usb_handle *pdev, in usb_core_dev_req() argument
277 usb_core_get_desc(pdev, req); in usb_core_dev_req()
281 usb_core_set_config(pdev, req); in usb_core_dev_req()
285 usb_core_get_status(pdev, req); in usb_core_dev_req()
289 usb_core_set_address(pdev, req); in usb_core_dev_req()
297 usb_core_ctl_error(pdev); in usb_core_dev_req()
311 static enum usb_status usb_core_itf_req(struct usb_handle *pdev, in usb_core_itf_req() argument
314 if (pdev->dev_state != USBD_STATE_CONFIGURED) { in usb_core_itf_req()
315 usb_core_ctl_error(pdev); in usb_core_itf_req()
320 pdev->class->setup(pdev, req); in usb_core_itf_req()
323 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_itf_req()
326 usb_core_ctl_error(pdev); in usb_core_itf_req()
339 static enum usb_status usb_core_setup_stage(struct usb_handle *pdev, in usb_core_setup_stage() argument
342 struct usb_setup_req *req = &pdev->request; in usb_core_setup_stage()
351 pdev->ep0_state = USBD_EP0_SETUP; in usb_core_setup_stage()
352 pdev->ep0_data_len = pdev->request.length; in usb_core_setup_stage()
354 switch (pdev->request.bm_request & USB_REQ_RECIPIENT_MASK) { in usb_core_setup_stage()
356 usb_core_dev_req(pdev, &pdev->request); in usb_core_setup_stage()
360 usb_core_itf_req(pdev, &pdev->request); in usb_core_setup_stage()
366 pdev->request.bm_request & USB_REQ_RECIPIENT_MASK); in usb_core_setup_stage()
367 usb_core_set_stall(pdev, pdev->request.bm_request & USB_REQ_DIRECTION); in usb_core_setup_stage()
382 static enum usb_status usb_core_data_out(struct usb_handle *pdev, uint8_t epnum, in usb_core_data_out() argument
388 pep = &pdev->ep_out[0]; in usb_core_data_out()
389 if (pdev->ep0_state == USBD_EP0_DATA_OUT) { in usb_core_data_out()
393 usb_core_receive(pdev, 0U, pdata, in usb_core_data_out()
397 if (pdev->class->ep0_rx_ready && in usb_core_data_out()
398 (pdev->dev_state == USBD_STATE_CONFIGURED)) { in usb_core_data_out()
399 pdev->class->ep0_rx_ready(pdev); in usb_core_data_out()
402 usb_core_transmit_ep0(pdev, NULL, 0U); in usb_core_data_out()
405 } else if (pdev->class->data_out != NULL && in usb_core_data_out()
406 (pdev->dev_state == USBD_STATE_CONFIGURED)) { in usb_core_data_out()
407 pdev->class->data_out(pdev, epnum); in usb_core_data_out()
421 static enum usb_status usb_core_data_in(struct usb_handle *pdev, uint8_t epnum, in usb_core_data_in() argument
425 struct usb_endpoint *pep = &pdev->ep_in[0]; in usb_core_data_in()
427 if (pdev->ep0_state == USBD_EP0_DATA_IN) { in usb_core_data_in()
431 usb_core_transmit(pdev, 0U, pdata, in usb_core_data_in()
435 usb_core_receive(pdev, 0U, NULL, 0U); in usb_core_data_in()
440 (pep->total_length < pdev->ep0_data_len)) { in usb_core_data_in()
441 usb_core_transmit(pdev, 0U, NULL, 0U); in usb_core_data_in()
443 pdev->ep0_data_len = 0U; in usb_core_data_in()
446 usb_core_receive(pdev, 0U, NULL, 0U); in usb_core_data_in()
448 if (pdev->class->ep0_tx_sent != NULL && in usb_core_data_in()
449 (pdev->dev_state == in usb_core_data_in()
451 pdev->class->ep0_tx_sent(pdev); in usb_core_data_in()
454 usb_core_receive_ep0(pdev, NULL, 0U); in usb_core_data_in()
458 } else if ((pdev->class->data_in != NULL) && in usb_core_data_in()
459 (pdev->dev_state == USBD_STATE_CONFIGURED)) { in usb_core_data_in()
460 pdev->class->data_in(pdev, epnum); in usb_core_data_in()
472 static enum usb_status usb_core_suspend(struct usb_handle *pdev) in usb_core_suspend() argument
475 pdev->dev_old_state = pdev->dev_state; in usb_core_suspend()
476 pdev->dev_state = USBD_STATE_SUSPENDED; in usb_core_suspend()
487 static enum usb_status usb_core_resume(struct usb_handle *pdev) in usb_core_resume() argument
490 pdev->dev_state = pdev->dev_old_state; in usb_core_resume()
501 static enum usb_status usb_core_sof(struct usb_handle *pdev) in usb_core_sof() argument
503 if (pdev->dev_state == USBD_STATE_CONFIGURED) { in usb_core_sof()
504 if (pdev->class->sof != NULL) { in usb_core_sof()
505 pdev->class->sof(pdev); in usb_core_sof()
518 static enum usb_status usb_core_disconnect(struct usb_handle *pdev) in usb_core_disconnect() argument
521 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_disconnect()
522 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_disconnect()
527 enum usb_status usb_core_handle_it(struct usb_handle *pdev) in usb_core_handle_it() argument
533 switch (pdev->driver->it_handler(pdev->data->instance, &param)) { in usb_core_handle_it()
535 usb_core_data_out(pdev, param, in usb_core_handle_it()
536 pdev->data->out_ep[param].xfer_buff); in usb_core_handle_it()
540 usb_core_data_in(pdev, param, in usb_core_handle_it()
541 pdev->data->in_ep[param].xfer_buff); in usb_core_handle_it()
545 usb_core_setup_stage(pdev, (uint8_t *)pdev->data->setup); in usb_core_handle_it()
552 ep = &pdev->data->out_ep[param & USBD_OUT_EPNUM_MASK]; in usb_core_handle_it()
554 pdev->driver->read_packet(pdev->data->instance, in usb_core_handle_it()
561 ep = &pdev->data->out_ep[param & USBD_OUT_EPNUM_MASK]; in usb_core_handle_it()
563 pdev->driver->read_packet(pdev->data->instance, in usb_core_handle_it()
564 (uint8_t *)pdev->data->setup, 8); in usb_core_handle_it()
569 pdev->dev_state = USBD_STATE_DEFAULT; in usb_core_handle_it()
573 if (pdev->data->lpm_state == LPM_L1) { in usb_core_handle_it()
574 pdev->data->lpm_state = LPM_L0; in usb_core_handle_it()
576 usb_core_resume(pdev); in usb_core_handle_it()
581 usb_core_suspend(pdev); in usb_core_handle_it()
585 if (pdev->data->lpm_state == LPM_L0) { in usb_core_handle_it()
586 pdev->data->lpm_state = LPM_L1; in usb_core_handle_it()
588 usb_core_suspend(pdev); in usb_core_handle_it()
593 usb_core_sof(pdev); in usb_core_handle_it()
597 usb_core_disconnect(pdev); in usb_core_handle_it()
601 pdev->driver->write_empty_tx_fifo(pdev->data->instance, param, in usb_core_handle_it()
602 pdev->data->in_ep[param].xfer_len, in usb_core_handle_it()
603 (uint32_t *)&pdev->data->in_ep[param].xfer_count, in usb_core_handle_it()
604 pdev->data->in_ep[param].maxpacket, in usb_core_handle_it()
605 &pdev->data->in_ep[param].xfer_buff); in usb_core_handle_it()
616 static void usb_core_start_xfer(struct usb_handle *pdev, in usb_core_start_xfer() argument
621 pdev->driver->ep0_start_xfer(handle, ep); in usb_core_start_xfer()
623 pdev->driver->ep_start_xfer(handle, ep); in usb_core_start_xfer()
636 enum usb_status usb_core_receive(struct usb_handle *pdev, uint8_t ep_addr, in usb_core_receive() argument
640 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_receive()
656 usb_core_start_xfer(pdev, hpcd->instance, ep); in usb_core_receive()
670 enum usb_status usb_core_transmit(struct usb_handle *pdev, uint8_t ep_addr, in usb_core_transmit() argument
674 struct pcd_handle *hpcd = (struct pcd_handle *)pdev->data; in usb_core_transmit()
690 usb_core_start_xfer(pdev, hpcd->instance, ep); in usb_core_transmit()
703 enum usb_status usb_core_receive_ep0(struct usb_handle *pdev, uint8_t *buf, in usb_core_receive_ep0() argument
708 pdev->ep0_state = USBD_EP0_DATA_OUT; in usb_core_receive_ep0()
710 pdev->ep0_state = USBD_EP0_STATUS_OUT; in usb_core_receive_ep0()
713 pdev->ep_out[0].total_length = len; in usb_core_receive_ep0()
714 pdev->ep_out[0].rem_length = len; in usb_core_receive_ep0()
717 return usb_core_receive(pdev, 0U, buf, len); in usb_core_receive_ep0()
728 enum usb_status usb_core_transmit_ep0(struct usb_handle *pdev, uint8_t *buf, in usb_core_transmit_ep0() argument
733 pdev->ep0_state = USBD_EP0_DATA_IN; in usb_core_transmit_ep0()
735 pdev->ep0_state = USBD_EP0_STATUS_IN; in usb_core_transmit_ep0()
738 pdev->ep_in[0].total_length = len; in usb_core_transmit_ep0()
739 pdev->ep_in[0].rem_length = len; in usb_core_transmit_ep0()
742 return usb_core_transmit(pdev, 0U, buf, len); in usb_core_transmit_ep0()
753 void usb_core_ctl_error(struct usb_handle *pdev) in usb_core_ctl_error() argument
756 usb_core_set_stall(pdev, EP0_IN); in usb_core_ctl_error()
757 usb_core_set_stall(pdev, EP0_OUT); in usb_core_ctl_error()
766 enum usb_status usb_core_start(struct usb_handle *pdev) in usb_core_start() argument
769 pdev->driver->start_device(pdev->data->instance); in usb_core_start()
780 enum usb_status usb_core_stop(struct usb_handle *pdev) in usb_core_stop() argument
783 pdev->class->de_init(pdev, pdev->dev_config); in usb_core_stop()
786 pdev->driver->stop_device(pdev->data->instance); in usb_core_stop()
800 enum usb_status register_usb_driver(struct usb_handle *pdev, in register_usb_driver() argument
807 assert(pdev != NULL); in register_usb_driver()
813 pdev->driver = driver; in register_usb_driver()
814 pdev->data = pcd_handle; in register_usb_driver()
815 pdev->data->instance = driver_handle; in register_usb_driver()
816 pdev->dev_state = USBD_STATE_DEFAULT; in register_usb_driver()
817 pdev->ep0_state = USBD_EP0_IDLE; in register_usb_driver()
821 pdev->ep_in[i].maxpacket = pdev->data->in_ep[i].maxpacket; in register_usb_driver()
822 pdev->ep_out[i].maxpacket = pdev->data->out_ep[i].maxpacket; in register_usb_driver()
835 enum usb_status register_platform(struct usb_handle *pdev, in register_platform() argument
838 assert(pdev != NULL); in register_platform()
842 pdev->desc = plat_call_back; in register_platform()