linux/drivers/firewire
Takashi Sakamoto dcadfd7f7c firewire: core: use union for callback of transaction completion
In 1394 OHCI, the OUTPUT_LAST descriptor of Asynchronous Transmit (AT)
request context has timeStamp field, in which 1394 OHCI controller
record the isochronous cycle when the packet was sent for the request
subaction. Additionally, for the case of split transaction in IEEE 1394,
Asynchronous Receive (AT) request context is used for response subaction
to finish the transaction. The trailer quadlet of descriptor in the
context has timeStamp field, in which 1394 OHCI controller records the
isochronous cycle when the packet arrived.

Current implementation of 1394 OHCI controller driver stores values of
both fields to internal structure as time stamp, while Linux FireWire
subsystem provides no way to access to it. When using asynchronous
transaction service provided by the subsystem, callback function is passed
to kernel API. The prototype of callback function has the lack of argument
for the values.

This commit adds a new callback function for the purpose. It has an
additional argument to point to the constant array with two elements. For
backward compatibility to kernel space, a new union is also adds to wrap
two different prototype of callback function. The fw_transaction structure
has the union as a member and a boolean flag to express which function
callback is available.

The core function is changed to handle the two cases; with or without
time stamp. For the error path to process transaction, the isochronous
cycle is computed by current value of CYCLE_TIMER register in 1394 OHCI
controller. Especially for the case of timeout of split transaction, the
expected isochronous cycle is computed.

Link: https://lore.kernel.org/r/20230529113406.986289-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
2023-05-30 08:12:40 +09:00
..
.kunitconfig firewire: add KUnit test to check layout of UAPI structures 2023-05-30 08:12:39 +09:00
core-card.c Merge branch 'for-linus' into for-next 2022-05-23 07:48:27 +02:00
core-cdev.c firewire: cdev: implement new event to notify request subaction with time stamp 2023-05-30 08:12:40 +09:00
core-device.c driver core: make struct device_type.uevent() take a const * 2023-01-27 13:45:36 +01:00
core-iso.c treewide: Use fallthrough pseudo-keyword 2020-08-23 17:36:59 -05:00
core-topology.c firewire: core: extend card->lock in fw_core_handle_bus_reset 2022-04-25 08:01:09 +02:00
core-transaction.c firewire: core: use union for callback of transaction completion 2023-05-30 08:12:40 +09:00
core.h firewire: core: use union for callback of transaction completion 2023-05-30 08:12:40 +09:00
init_ohci1394_dma.c firewire: init_ohci1394_dma: use correct function names in comments 2023-04-24 09:19:35 +09:00
Kconfig firewire: add KUnit test to check layout of UAPI structures 2023-05-30 08:12:39 +09:00
Makefile firewire: add KUnit test to check layout of UAPI structures 2023-05-30 08:12:39 +09:00
net.c firewire: net: fix unexpected release of object for asynchronous request packet 2023-05-11 09:06:49 +09:00
nosy-user.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
nosy.c firewire: nosy: switch from 'pci_' to 'dma_' API 2021-07-05 22:23:15 +02:00
nosy.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ohci.c firewire: core: use union for callback of transaction completion 2023-05-30 08:12:40 +09:00
ohci.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sbp2.c scsi: firewire: sbp2: Declare the SCSI host template const 2023-03-24 19:19:19 -04:00
uapi-test.c firewire: cdev: add new event to notify request subaction with time stamp 2023-05-30 08:12:39 +09:00