• Stefan Richter's avatar
    firewire: cdev: add PHY packet transmission · 850bb6f2
    Stefan Richter authored
    Add an FW_CDEV_IOC_SEND_PHY_PACKET ioctl() for /dev/fw* which can be
    used to implement bus management related functionality in userspace.
    
    This is also half of the functionality (the transmit part) that is
    needed to support a userspace implementation of a VersaPHY transaction
    layer.
    
    Safety considerations:
    
      - PHY packets are generally broadcasts and may have interesting
        effects on PHYs and the bus, e.g. make asynchronous arbitration
        impossible due to too low gap count.  Hence some kind of elevated
        privileges should be required of a process to be able to send
        PHY packets.  This implementation assumes that a process that is
        allowed to open the /dev/fw* of a local node does have this
        privilege.
    
        There was an inconclusive discussion about introducing POSIX
        capabilities as a means to check for user privileges for these
        kinds of operations.
    
      - The kernel does not check integrity of the supplied packet data.
        That would be far too much code, considering the many kinds of
        PHY packets.  A process which got the privilege to send these
        packets is trusted to do it correctly.
    
    Just like with the other "send packet" ioctls, a non-blocking API is
    chosen; i.e. the ioctl may return even before AT DMA started.  After
    transmission, an event for poll()/read() is enqueued.  Most users are
    going to need a blocking API, but a blocking userspace wrapper is easy
    to implement, and the second of the two existing libraw1394 calls
    raw1394_phy_packet_write() and raw1394_start_phy_packet_write() can be
    better supported that way.
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    850bb6f2
core-cdev.c 41.7 KB