STRUCT FW_CDEV_ISO_PACKET(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ struct fw_cdev_iso_packet(9) πŸŽ€

Okay bestie, welcome to the Kernel API Manual β€” this is the main-character page for the isochronous packet struct, and it's lowkey a lot, but we're gonna get through it together. πŸ’–


πŸ’– NAME πŸ’–

struct fw_cdev_iso_packet β€” Isochronous packet πŸ¦‹

✨ SYNOPSIS ✨

struct fw_cdev_iso_packet {
    __u32 control;
    __u32 header[];
};

🫢 Members 🫢

  • control β€” Contains the header length (8 uppermost bits), the sy field (4 bits), the tag field (2 bits), a sync flag or a skip flag (1 bit), an interrupt flag (1 bit), and the payload length (16 lowermost bits) πŸ’…
  • header β€” Header and payload in case of a transmit context.

🌸 Description 🌸

struct fw_cdev_iso_packet is used to describe isochronous packet queues. Use the FW_CDEV_ISO_* macros to fill in control, okay? The header array is empty in case of receive contexts. 🫢


πŸ”₯ Context type FW_CDEV_ISO_CONTEXT_TRANSMIT: πŸ”₯

control.HEADER_LENGTH must be a multiple of 4. It specifies the numbers of bytes in header that will be prepended to the packet's payload. These bytes are copied into the kernel and will not be accessed after the ioctl has returned. ✨

The control.SY and TAG fields are copied to the iso packet header. These fields are specified by IEEE 1394a and IEC 61883-1. 🧚

The control.SKIP flag specifies that no packet is to be sent in a frame. When using this, all other fields except control.INTERRUPT must be zero β€” no cap, that's mandatory. πŸ’€

When a packet with the control.INTERRUPT flag set has been completed, an fw_cdev_event_iso_interrupt event will be sent. πŸŽ€

πŸ¦‹ Context type FW_CDEV_ISO_CONTEXT_RECEIVE: πŸ¦‹

control.HEADER_LENGTH must be a multiple of the context's header_size. If the HEADER_LENGTH is larger than the context's header_size, multiple packets are queued for this entry. πŸ‘‘

The control.SY and TAG fields are ignored. πŸ™ˆ

If the control.SYNC flag is set, the context drops all packets until a packet with a sy field is received which matches fw_cdev_start_iso.sync. πŸ“

control.PAYLOAD_LENGTH defines how many payload bytes can be received for one packet (in addition to payload quadlets that have been defined as headers and are stripped and returned in the fw_cdev_event_iso_interrupt structure). If more bytes are received, the additional bytes are dropped. If less bytes are received, the remaining bytes in this part of the payload buffer will not be written to, not even by the next packet. I.e., packets received in consecutive frames will not necessarily be consecutive in memory. If an entry has queued multiple packets, the PAYLOAD_LENGTH is divided equally among them. 🌈

When a packet with the control.INTERRUPT flag set has been completed, an fw_cdev_event_iso_interrupt event will be sent. An entry that has queued multiple receive packets is completed when its last packet is completed. πŸ’œ

🌟 Context type FW_CDEV_ISO_CONTEXT_RECEIVE_MULTICHANNEL: 🌟

Here, fw_cdev_iso_packet would be more aptly named _iso_buffer_chunk since it specifies a chunk of the mmap'ed buffer, while the number and alignment of packets to be placed into the buffer chunk is not known beforehand. 😭

control.PAYLOAD_LENGTH is the size of the buffer chunk and specifies room for header, payload, padding, and trailer bytes of one or more packets. It must be a multiple of 4. ⭐

control.HEADER_LENGTH, TAG and SY are ignored. SYNC is treated as described for single-channel reception. 🧚

When a buffer chunk with the control.INTERRUPT flag set has been filled entirely, an fw_cdev_event_iso_interrupt_mc event will be sent. πŸ”₯

πŸ¦‹ SEE ALSO πŸ¦‹

Kernel file: ./include/uapi/linux/firewire-cdev.h

  • struct fw_cdev_event_common(9)
  • struct fw_cdev_event_bus_reset(9)
  • struct fw_cdev_event_response(9)
  • struct fw_cdev_event_response2(9)
  • struct fw_cdev_event_request(9)
  • struct fw_cdev_event_request2(9)
  • struct fw_cdev_event_request3(9)
  • struct fw_cdev_event_iso_interrupt(9)
  • struct fw_cdev_event_iso_interrupt_mc(9)
  • struct fw_cdev_event_iso_resource(9)
  • struct fw_cdev_event_phy_packet(9)
  • struct fw_cdev_event_phy_packet2(9)
  • union fw_cdev_event(9)
  • struct fw_cdev_get_info(9)
  • struct fw_cdev_send_request(9)
  • struct fw_cdev_send_response(9)
  • struct fw_cdev_allocate(9)
  • struct fw_cdev_deallocate(9)
  • struct fw_cdev_initiate_bus_reset(9)
  • struct fw_cdev_add_descriptor(9)
  • struct fw_cdev_remove_descriptor(9)
  • struct fw_cdev_create_iso_context(9)
  • struct fw_cdev_set_iso_channels(9)
  • struct fw_cdev_queue_iso(9)
  • struct fw_cdev_start_iso(9)
  • struct fw_cdev_stop_iso(9)
  • struct fw_cdev_flush_iso(9)
  • struct fw_cdev_get_cycle_timer(9)
  • struct fw_cdev_get_cycle_timer2(9)
  • struct fw_cdev_allocate_iso_resource(9)
  • struct fw_cdev_send_stream_packet(9)
  • struct fw_cdev_send_phy_packet(9)
  • struct fw_cdev_receive_phy_packets(9)

That's the whole tea, bestie πŸ«ΆπŸ’– β€” source/version <pink>./include/uapi/linux</pink>, dated <purple>October 2026</purple>, for <rainbow>struct fw_cdev_iso_packet(9)</rainbow> βœ¨πŸŽ€

πŸ“¦ where this page comes from