return init_iso_resource(client, request, ISO_RES_DEALLOC_ONCE);
 }
 
+static int ioctl_get_speed(struct client *client, void *buffer)
+{
+       struct fw_cdev_get_speed *request = buffer;
+
+       request->max_speed = client->device->max_speed;
+
+       return 0;
+}
+
 static int (* const ioctl_handlers[])(struct client *client, void *buffer) = {
        ioctl_get_info,
        ioctl_send_request,
        ioctl_deallocate_iso_resource,
        ioctl_allocate_iso_resource_once,
        ioctl_deallocate_iso_resource_once,
+       ioctl_get_speed,
 };
 
 static int dispatch_ioctl(struct client *client,
 
 #define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE      _IOW('#', 0x0e, struct fw_cdev_deallocate)
 #define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE   _IOW('#', 0x0f, struct fw_cdev_allocate_iso_resource)
 #define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE_ONCE _IOW('#', 0x10, struct fw_cdev_allocate_iso_resource)
+#define FW_CDEV_IOC_GET_SPEED                    _IOR('#', 0x11, struct fw_cdev_get_speed)
 
 /* FW_CDEV_VERSION History
  *
        __u32 handle;
 };
 
+/**
+ * struct fw_cdev_get_speed - Query maximum speed to or from this device
+ * @max_speed: Speed code; minimum of the device's link speed, the local node's
+ *             link speed, and all PHY port speeds between the two links
+ */
+struct fw_cdev_get_speed {
+       __u32 max_speed;
+};
+
 #endif /* _LINUX_FIREWIRE_CDEV_H */