最終更新:2014-06-09 (月) 17:59:14 (3608d)  

usb_ep_ops
Top / usb_ep_ops

endpoint-specific parts of the api to the usb controller hardware.

  • unlike the urb model, (de)multiplexing layers are not required.
    • (so this api could slash overhead if used on the host side...)
  • note that device side usb controllers commonly differ in how many endpoints they support, as well as their capabilities.
struct usb_ep_ops {
        int (*enable) (struct usb_ep *ep,
                const struct usb_endpoint_descriptor *desc);
        int (*disable) (struct usb_ep *ep);

        struct usb_request *(*alloc_request) (struct usb_ep *ep,
                gfp_t gfp_flags);
        void (*free_request) (struct usb_ep *ep, struct usb_request *req);

        int (*queue) (struct usb_ep *ep, struct usb_request *req,
                gfp_t gfp_flags);
        int (*dequeue) (struct usb_ep *ep, struct usb_request *req);

        int (*set_halt) (struct usb_ep *ep, int value);
        int (*set_wedge) (struct usb_ep *ep);

        int (*fifo_status) (struct usb_ep *ep);
        void (*fifo_flush) (struct usb_ep *ep);
};

メンバ

usb_ep_ops.enable?

  • provides the necessary infrastructure to configure an endpoint by upper class driver layers.
  • This is required when a configuration is set or interfaces are changed and requires successful setting up of endpoint for transfers.

usb_ep_ops.disable?

usb_ep_ops.alloc_request?

  • provides the necessary infrastructure to allocate memory and returns a usb_request object.
  • The implementation is specific to a USB controller.

usb_ep_ops.free_request?

usb_ep_ops.queue

  • provides the necessary infrastructure to transfer data through the device controller and queue the USB transfer requests.
  • After successful completion or cancellation of the data transfer, the call- back triggers the completion routine.

usb_ep_ops.dequeue?

usb_ep_ops.set_halt?

  • provides the necessary infrastructure to halt a particular endpoint when there is a transaction error.

usb_ep_ops.set_wedge?

usb_ep_ops.fifo_status?

  • provides the necessary infrastructure for the class driver to query the status of hardware first in, first out (FIFO) for any garbage or unhandled bytes.

usb_ep_ops.fifo_flush?

  • provides the necessary infrastructure for the class driver to clear any garbage or unhandled bytes in the FIFO.

使われどころ

Chipidea

  • usb_ep_ops
    • usb_ep_ops.enable? = ep_enable?,
    • usb_ep_ops.disable? = ep_disable?,
    • usb_ep_ops.alloc_request? = ep_alloc_request?,
    • usb_ep_ops.free_request? = ep_free_request?,
    • usb_ep_ops.queue = ep_queue,
    • usb_ep_ops.dequeue? = ep_dequeue?,
    • usb_ep_ops.set_halt? = ep_set_halt?,
    • usb_ep_ops.set_wedge? = ep_set_wedge?,
    • usb_ep_ops.fifo_flush? = ep_fifo_flush?,

MUSB

  • musb_g_ep0_ops?
    • usb_ep_ops.enable? = musb_g_ep0_enable?,
    • usb_ep_ops.disable? = musb_g_ep0_disable?,
    • usb_ep_ops.alloc_request? = musb_alloc_request?,
    • usb_ep_ops.free_request? = musb_free_request?,
    • usb_ep_ops.queue = musb_g_ep0_queue?,
    • usb_ep_ops.dequeue? = musb_g_ep0_dequeue?,
    • usb_ep_ops.set_halt? = musb_g_ep0_halt?,
  • musb_ep_ops?
    • usb_ep_ops.enable? = musb_gadget_enable?,
    • usb_ep_ops.disable? = musb_gadget_disable?,
    • usb_ep_ops.alloc_request? = musb_alloc_request?,
    • usb_ep_ops.free_request? = musb_free_request?,
    • usb_ep_ops.queue = musb_gadget_queue?,
    • usb_ep_ops.dequeue? = musb_gadget_dequeue?,
    • usb_ep_ops.set_halt? = musb_gadget_set_halt?,
    • usb_ep_ops.set_wedge? = musb_gadget_set_wedge?,
    • usb_ep_ops.fifo_status? = musb_gadget_fifo_status?,
    • usb_ep_ops.fifo_flush? = musb_gadget_fifo_flush?

DWC3

  • dwc3_gadget_ep0_ops?
    • usb_ep_ops.enable? = dwc3_gadget_ep0_enable?,
    • usb_ep_ops.disable? = dwc3_gadget_ep0_disable?,
    • usb_ep_ops.alloc_request? = dwc3_gadget_ep_alloc_request?,
    • usb_ep_ops.free_request? = dwc3_gadget_ep_free_request?,
    • usb_ep_ops.queue = dwc3_gadget_ep0_queue,
    • usb_ep_ops.dequeue? = dwc3_gadget_ep_dequeue?,
    • usb_ep_ops.set_halt? = dwc3_gadget_ep0_set_halt?,
    • usb_ep_ops.set_wedge? = dwc3_gadget_ep_set_wedge?,
  • dwc3_gadget_ep_ops?
    • usb_ep_ops.enable? = dwc3_gadget_ep_enable?,
    • usb_ep_ops.disable? = dwc3_gadget_ep_disable?,
    • usb_ep_ops.alloc_request? = dwc3_gadget_ep_alloc_request?,
    • usb_ep_ops.free_request? = dwc3_gadget_ep_free_request?,
    • usb_ep_ops.queue = dwc3_gadget_ep_queue,
    • usb_ep_ops.dequeue? = dwc3_gadget_ep_dequeue?,
    • usb_ep_ops.set_halt? = dwc3_gadget_ep_set_halt?,
    • usb_ep_ops.set_wedge? = dwc3_gadget_ep_set_wedge?,

関連