KUNIT_EXPECT_EQ(test, 56, offsetof(struct fw_cdev_event_request3, data));
 }
 
+// Added at v6.5.
+static void structure_layout_event_response2(struct kunit *test)
+{
+       KUNIT_EXPECT_EQ(test, 32, sizeof(struct fw_cdev_event_response2));
+
+       KUNIT_EXPECT_EQ(test, 0, offsetof(struct fw_cdev_event_response2, closure));
+       KUNIT_EXPECT_EQ(test, 8, offsetof(struct fw_cdev_event_response2, type));
+       KUNIT_EXPECT_EQ(test, 12, offsetof(struct fw_cdev_event_response2, rcode));
+       KUNIT_EXPECT_EQ(test, 16, offsetof(struct fw_cdev_event_response2, length));
+       KUNIT_EXPECT_EQ(test, 20, offsetof(struct fw_cdev_event_response2, request_tstamp));
+       KUNIT_EXPECT_EQ(test, 24, offsetof(struct fw_cdev_event_response2, response_tstamp));
+       KUNIT_EXPECT_EQ(test, 32, offsetof(struct fw_cdev_event_response2, data));
+}
+
 static struct kunit_case structure_layout_test_cases[] = {
        KUNIT_CASE(structure_layout_event_response),
        KUNIT_CASE(structure_layout_event_request3),
+       KUNIT_CASE(structure_layout_event_response2),
        {}
 };
 
 
 
 /* available since kernel version 6.5 */
 #define FW_CDEV_EVENT_REQUEST3                         0x0a
+#define FW_CDEV_EVENT_RESPONSE2                                0x0b
 
 /**
  * struct fw_cdev_event_common - Common part of all fw_cdev_event_* types
  * @length:    Data length, i.e. the response's payload size in bytes
  * @data:      Payload data, if any
  *
+ * This event is sent instead of &fw_cdev_event_response if the kernel or the client implements
+ * ABI version <= 5. It has the lack of time stamp field comparing to &fw_cdev_event_response2.
+ */
+struct fw_cdev_event_response {
+       __u64 closure;
+       __u32 type;
+       __u32 rcode;
+       __u32 length;
+       __u32 data[];
+};
+
+/**
+ * struct fw_cdev_event_response2 - Sent when a response packet was received
+ * @closure:   See &fw_cdev_event_common; set by %FW_CDEV_IOC_SEND_REQUEST
+ *             or %FW_CDEV_IOC_SEND_BROADCAST_REQUEST
+ *             or %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl
+ * @type:      See &fw_cdev_event_common; always %FW_CDEV_EVENT_RESPONSE
+ * @rcode:     Response code returned by the remote node
+ * @length:    Data length, i.e. the response's payload size in bytes
+ * @request_tstamp:    The time stamp of isochronous cycle at which the request was sent.
+ * @response_tstamp:   The time stamp of isochronous cycle at which the response was sent.
+ * @data:      Payload data, if any
+ *
  * This event is sent when the stack receives a response to an outgoing request
  * sent by %FW_CDEV_IOC_SEND_REQUEST ioctl.  The payload data for responses
  * carrying data (read and lock responses) follows immediately and can be
  * involve response packets.  This includes unified write transactions,
  * broadcast write transactions, and transmission of asynchronous stream
  * packets.  @rcode indicates success or failure of such transmissions.
+ *
+ * The value of @request_tstamp expresses the isochronous cycle at which the request was sent to
+ * initiate the transaction. The value of @response_tstamp expresses the isochronous cycle at which
+ * the response arrived to complete the transaction. Each value is unsigned 16 bit integer
+ * containing three low order bits of second field and all 13 bits of cycle field in format of
+ * CYCLE_TIMER register.
  */
-struct fw_cdev_event_response {
+struct fw_cdev_event_response2 {
        __u64 closure;
        __u32 type;
        __u32 rcode;
        __u32 length;
+       __u32 request_tstamp;
+       __u32 response_tstamp;
+       /*
+        * Padding to keep the size of structure as multiples of 8 in various architectures since
+        * 4 byte alignment is used for 8 byte of object type in System V ABI for i386 architecture.
+        */
+       __u32 padding;
        __u32 data[];
 };
 
  *                             %FW_CDEV_EVENT_PHY_PACKET_RECEIVED
  *
  * @request3:          Valid if @common.type == %FW_CDEV_EVENT_REQUEST3
+ * @response2:         Valid if @common.type == %FW_CDEV_EVENT_RESPONSE2
  *
  * Convenience union for userspace use.  Events could be read(2) into an
  * appropriately aligned char buffer and then cast to this union for further
        struct fw_cdev_event_iso_resource       iso_resource;           /* added in 2.6.30 */
        struct fw_cdev_event_phy_packet         phy_packet;             /* added in 2.6.36 */
        struct fw_cdev_event_request3           request3;               /* added in 6.5 */
+       struct fw_cdev_event_response2          response2;              /* added in 6.5 */
 };
 
 /* available since kernel version 2.6.22 */
  *               - added %FW_CDEV_IOC_FLUSH_ISO
  *  6  (6.5)     - added some event for subactions of asynchronous transaction with time stamp
  *                   - %FW_CDEV_EVENT_REQUEST3
+ *                   - %FW_CDEV_EVENT_RESPONSE2
  */
 
 /**
  * @data:      Userspace pointer to payload
  * @generation:        The bus generation where packet is valid
  *
- * Send a request to the device.  This ioctl implements all outgoing requests.
- * Both quadlet and block request specify the payload as a pointer to the data
- * in the @data field.  Once the transaction completes, the kernel writes an
- * &fw_cdev_event_response event back.  The @closure field is passed back to
- * user space in the response event.
+ * Send a request to the device.  This ioctl implements all outgoing requests. Both quadlet and
+ * block request specify the payload as a pointer to the data in the @data field. Once the
+ * transaction completes, the kernel writes either &fw_cdev_event_response event or
+ * &fw_cdev_event_response event back. The @closure field is passed back to user space in the
+ * response event.
  */
 struct fw_cdev_send_request {
        __u32 tcode;
  * @generation:        The bus generation where packet is valid
  * @speed:     Speed to transmit at
  *
- * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet
- * to every device which is listening to the specified channel.  The kernel
- * writes an &fw_cdev_event_response event which indicates success or failure of
- * the transmission.
+ * The %FW_CDEV_IOC_SEND_STREAM_PACKET ioctl sends an asynchronous stream packet to every device
+ * which is listening to the specified channel. The kernel writes either &fw_cdev_event_response
+ * event or &fw_cdev_event_response2 event which indicates success or failure of the transmission.
  */
 struct fw_cdev_send_stream_packet {
        __u32 length;