diff options
Diffstat (limited to 'include/linux/firewire-cdev.h')
-rw-r--r-- | include/linux/firewire-cdev.h | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h index da0fec7e8dc0..14831119ff71 100644 --- a/include/linux/firewire-cdev.h +++ b/include/linux/firewire-cdev.h | |||
@@ -394,6 +394,7 @@ union fw_cdev_event { | |||
394 | * 4 (2.6.36) - added %FW_CDEV_EVENT_REQUEST2, %FW_CDEV_EVENT_PHY_PACKET_* | 394 | * 4 (2.6.36) - added %FW_CDEV_EVENT_REQUEST2, %FW_CDEV_EVENT_PHY_PACKET_* |
395 | * - implemented &fw_cdev_event_bus_reset.bm_node_id | 395 | * - implemented &fw_cdev_event_bus_reset.bm_node_id |
396 | * - added %FW_CDEV_IOC_SEND_PHY_PACKET, _RECEIVE_PHY_PACKETS | 396 | * - added %FW_CDEV_IOC_SEND_PHY_PACKET, _RECEIVE_PHY_PACKETS |
397 | * - added &fw_cdev_allocate.region_end | ||
397 | */ | 398 | */ |
398 | #define FW_CDEV_VERSION 3 /* Meaningless; don't use this macro. */ | 399 | #define FW_CDEV_VERSION 3 /* Meaningless; don't use this macro. */ |
399 | 400 | ||
@@ -473,17 +474,21 @@ struct fw_cdev_send_response { | |||
473 | }; | 474 | }; |
474 | 475 | ||
475 | /** | 476 | /** |
476 | * struct fw_cdev_allocate - Allocate a CSR address range | 477 | * struct fw_cdev_allocate - Allocate a CSR in an address range |
477 | * @offset: Start offset of the address range | 478 | * @offset: Start offset of the address range |
478 | * @closure: To be passed back to userspace in request events | 479 | * @closure: To be passed back to userspace in request events |
479 | * @length: Length of the address range, in bytes | 480 | * @length: Length of the CSR, in bytes |
480 | * @handle: Handle to the allocation, written by the kernel | 481 | * @handle: Handle to the allocation, written by the kernel |
482 | * @region_end: First address above the address range (added in ABI v4, 2.6.36) | ||
481 | * | 483 | * |
482 | * Allocate an address range in the 48-bit address space on the local node | 484 | * Allocate an address range in the 48-bit address space on the local node |
483 | * (the controller). This allows userspace to listen for requests with an | 485 | * (the controller). This allows userspace to listen for requests with an |
484 | * offset within that address range. When the kernel receives a request | 486 | * offset within that address range. Every time when the kernel receives a |
485 | * within the range, an &fw_cdev_event_request event will be written back. | 487 | * request within the range, an &fw_cdev_event_request2 event will be emitted. |
486 | * The @closure field is passed back to userspace in the response event. | 488 | * (If the kernel or the client implements ABI version <= 3, an |
489 | * &fw_cdev_event_request will be generated instead.) | ||
490 | * | ||
491 | * The @closure field is passed back to userspace in these request events. | ||
487 | * The @handle field is an out parameter, returning a handle to the allocated | 492 | * The @handle field is an out parameter, returning a handle to the allocated |
488 | * range to be used for later deallocation of the range. | 493 | * range to be used for later deallocation of the range. |
489 | * | 494 | * |
@@ -491,12 +496,26 @@ struct fw_cdev_send_response { | |||
491 | * is exclusive except for the FCP command and response registers. If an | 496 | * is exclusive except for the FCP command and response registers. If an |
492 | * exclusive address region is already in use, the ioctl fails with errno set | 497 | * exclusive address region is already in use, the ioctl fails with errno set |
493 | * to %EBUSY. | 498 | * to %EBUSY. |
499 | * | ||
500 | * If kernel and client implement ABI version >= 4, the kernel looks up a free | ||
501 | * spot of size @length inside [@offset..@region_end) and, if found, writes | ||
502 | * the start address of the new CSR back in @offset. I.e. @offset is an | ||
503 | * in and out parameter. If this automatic placement of a CSR in a bigger | ||
504 | * address range is not desired, the client simply needs to set @region_end | ||
505 | * = @offset + @length. | ||
506 | * | ||
507 | * If the kernel or the client implements ABI version <= 3, @region_end is | ||
508 | * ignored and effectively assumed to be @offset + @length. | ||
509 | * | ||
510 | * @region_end is only present in a kernel header >= 2.6.36. If necessary, | ||
511 | * this can for example be tested by #ifdef FW_CDEV_EVENT_REQUEST2. | ||
494 | */ | 512 | */ |
495 | struct fw_cdev_allocate { | 513 | struct fw_cdev_allocate { |
496 | __u64 offset; | 514 | __u64 offset; |
497 | __u64 closure; | 515 | __u64 closure; |
498 | __u32 length; | 516 | __u32 length; |
499 | __u32 handle; | 517 | __u32 handle; |
518 | __u64 region_end; /* available since kernel version 2.6.36 */ | ||
500 | }; | 519 | }; |
501 | 520 | ||
502 | /** | 521 | /** |