Skip to content

Commit 865efff

Browse files
committed
firewire: cdev: implement new event to notify request subaction with time stamp
In 1394 OHCI, the trailer quadlet of descriptor in Asynchronous Receive (AR) request context has timeStamp field, in which the 1394 OHCI controller record the isochronous cycle when the packet arrived. Current implementation of 1394 OHCI controller driver stores the value of field to internal structure as time stamp, while the implementation of FireWire character device doesn't have a field for the time stamp, thus it is not available in user space. The time stamp is convenient to some kind of application in which data from several sources are compared in isochronous cycle unit. This commit implement the new event, fw_cdev_event_request3, with an additional field, tstamp. Link: https://lore.kernel.org/r/20230529113406.986289-5-o-takashi@sakamocchi.jp Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
1 parent 7c22d4a commit 865efff

1 file changed

Lines changed: 17 additions & 1 deletion

File tree

drivers/firewire/core-cdev.c

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ struct inbound_transaction_event {
178178
union {
179179
struct fw_cdev_event_request request;
180180
struct fw_cdev_event_request2 request2;
181+
struct fw_cdev_event_request3 with_tstamp;
181182
} req;
182183
};
183184

@@ -709,7 +710,7 @@ static void handle_request(struct fw_card *card, struct fw_request *request,
709710
req->handle = r->resource.handle;
710711
req->closure = handler->closure;
711712
event_size0 = sizeof(*req);
712-
} else {
713+
} else if (handler->client->version < FW_CDEV_VERSION_EVENT_ASYNC_TSTAMP) {
713714
struct fw_cdev_event_request2 *req = &e->req.request2;
714715

715716
req->type = FW_CDEV_EVENT_REQUEST2;
@@ -723,6 +724,21 @@ static void handle_request(struct fw_card *card, struct fw_request *request,
723724
req->handle = r->resource.handle;
724725
req->closure = handler->closure;
725726
event_size0 = sizeof(*req);
727+
} else {
728+
struct fw_cdev_event_request3 *req = &e->req.with_tstamp;
729+
730+
req->type = FW_CDEV_EVENT_REQUEST3;
731+
req->tcode = tcode;
732+
req->offset = offset;
733+
req->source_node_id = source;
734+
req->destination_node_id = destination;
735+
req->card = card->index;
736+
req->generation = generation;
737+
req->length = length;
738+
req->handle = r->resource.handle;
739+
req->closure = handler->closure;
740+
req->tstamp = fw_request_get_timestamp(request);
741+
event_size0 = sizeof(*req);
726742
}
727743

728744
queue_event(handler->client, &e->event,

0 commit comments

Comments
 (0)