446216bd8e
In packet-per-buffer mode for isochronous context of 1394 OHCI, software can schedule hardIRQ to the buffer in which the content of isochronous packet is processed. The actual behaviour is different between isochronous receive (IR) and transmit (IT) contexts in respect to isochronous cycle in which the hardIRQ occurs. In IR context, the hardIRQ occurs when the buffer is filled actually by the content of received packet. If there are any isochronous cycles in which the packet transmission is skipped, it is postponed to generate the hardIRQ in respect to the isochronous cycle. In IT context, software can schedule the content of packet every isochronous cycle including skipping, therefore the hardIRQ occurs in the isochronous cycle to which the software scheduled. ALSA firewire stack uses the packet-per-buffer mode for both IR/IT contexts. To process time stamp per packet (or per sample in some cases) steadily for media clock recovery against unexpected transmission skips, it uses an IT context to operate all of isochronous contexts by calls of fw_iso_context_flush_completions() in the bottom-half of hardIRQ for the IT context. Although it looks well to handle all of isochronous contexts in a single bottom-half context, it relatively takes longer time. In the future code integration (not yet), it is possible to apply parallelism method to process these context. In the case, it is useful to allow unit drivers to schedule work items to process these isochronous contexts. As a preparation, this commit exposes fw_iso_context_schedule_flush_completions() as a kernel API available by unit drivers. It is renamed from fw_iso_context_queue_work() since it is a counter part of fw_iso_context_flush_completions(). Link: https://lore.kernel.org/r/20240908040549.75304-2-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
51 lines
1.5 KiB
ReStructuredText
51 lines
1.5 KiB
ReStructuredText
===========================================
|
|
Firewire (IEEE 1394) driver Interface Guide
|
|
===========================================
|
|
|
|
Introduction and Overview
|
|
=========================
|
|
|
|
The Linux FireWire subsystem adds some interfaces into the Linux system to
|
|
use/maintain+any resource on IEEE 1394 bus.
|
|
|
|
The main purpose of these interfaces is to access address space on each node
|
|
on IEEE 1394 bus by ISO/IEC 13213 (IEEE 1212) procedure, and to control
|
|
isochronous resources on the bus by IEEE 1394 procedure.
|
|
|
|
Two types of interfaces are added, according to consumers of the interface. A
|
|
set of userspace interfaces is available via `firewire character devices`. A set
|
|
of kernel interfaces is available via exported symbols in `firewire-core` module.
|
|
|
|
Firewire char device data structures
|
|
====================================
|
|
|
|
.. include:: ../ABI/stable/firewire-cdev
|
|
:literal:
|
|
|
|
.. kernel-doc:: include/uapi/linux/firewire-cdev.h
|
|
:internal:
|
|
|
|
Firewire device probing and sysfs interfaces
|
|
============================================
|
|
|
|
.. include:: ../ABI/stable/sysfs-bus-firewire
|
|
:literal:
|
|
|
|
.. kernel-doc:: drivers/firewire/core-device.c
|
|
:export:
|
|
|
|
Firewire core transaction interfaces
|
|
====================================
|
|
|
|
.. kernel-doc:: drivers/firewire/core-transaction.c
|
|
:export:
|
|
|
|
Firewire Isochronous I/O interfaces
|
|
===================================
|
|
|
|
.. kernel-doc:: include/linux/firewire.h
|
|
:functions: fw_iso_context_schedule_flush_completions
|
|
.. kernel-doc:: drivers/firewire/core-iso.c
|
|
:export:
|
|
|