• Robert Baldyga's avatar
    usb: gadget: f_fs: virtual endpoint address mapping · 1b0bf88f
    Robert Baldyga authored
    This patch introduces virtual endpoint address mapping. It separates
    function logic form physical endpoint addresses making it more hardware
    independent.
    
    Following modifications changes user space API, so to enable them user
    have to switch on the FUNCTIONFS_VIRTUAL_ADDR flag in descriptors.
    
    Endpoints are now refered using virtual endpoint addresses chosen by
    user in endpoint descpriptors. This applies to each context when endpoint
    address can be used:
    - when accessing endpoint files in FunctionFS filesystemi (in file name),
    - in setup requests directed to specific endpoint (in wIndex field),
    - in descriptors returned by FUNCTIONFS_ENDPOINT_DESC ioctl.
    
    In endpoint file names the endpoint address number is formatted as
    double-digit hexadecimal value ("ep%02x") which has few advantages -
    it is easy to parse, allows to easly recognize endpoint direction basing
    on its name (IN endpoint number starts with digit 8, and OUT with 0)
    which can be useful for debugging purpose, and it makes easier to introduce
    further features allowing to use each endpoint number in both directions
    to have more endpoints available for function if hardware supports this
    (for example we could have ep01 which is endpoint 1 with OUT direction,
    and ep81 which is endpoint 1 with IN direction).
    
    Physical endpoint address can be still obtained using ioctl named
    FUNCTIONFS_ENDPOINT_REVMAP, but now it's not neccesary to handle
    USB transactions properly.
    Signed-off-by: default avatarRobert Baldyga <r.baldyga@samsung.com>
    Acked-by: default avatarMichal Nazarewicz <mina86@mina86.com>
    Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
    1b0bf88f
f_fs.c 77.3 KB