• Bjorn Andersson's avatar
    rpmsg: Driver for user space endpoint interface · c0cdc19f
    Bjorn Andersson authored
    This driver allows rpmsg instances to expose access to rpmsg endpoints
    to user space processes. It provides a control interface, allowing
    userspace to export endpoints and an endpoint interface for each exposed
    endpoint.
    
    The implementation is based on prior art by Texas Instrument, Google,
    PetaLogix and was derived from a FreeRTOS performance statistics driver
    written by Michal Simek.
    
    The control interface provides a "create endpoint" ioctl, which is fed a
    name, source and destination address. The three values are used to
    create the endpoint, in a backend-specific way, and a rpmsg endpoint
    device is created - with the three parameters are available in sysfs for
    udev usage.
    
    E.g. to create an endpoint device for one of the Qualcomm SMD channel
    related to DIAG one would issue:
    
      struct rpmsg_endpoint_info info = { "DIAG_CNTL", 0, 0 };
      int fd = open("/dev/rpmsg_ctrl0", O_RDWR);
      ioctl(fd, RPMSG_CREATE_EPT_IOCTL, &info);
    
    Each created endpoint device shows up as an individual character device
    in /dev, allowing permission to be controlled on a per-endpoint basis.
    The rpmsg endpoint will be created and destroyed following the opening
    and closing of the endpoint device, allowing rpmsg backends to open and
    close the physical channel, if supported by the wire protocol.
    
    Cc: Marek Novak <marek.novak@nxp.com>
    Cc: Matteo Sartori <matteo.sartori@t3lab.it>
    Cc: Michal Simek <monstr@monstr.eu>
    Signed-off-by: default avatarBjorn Andersson <bjorn.andersson@linaro.org>
    c0cdc19f
rpmsg_char.c 13.7 KB