aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/firewire-cdev.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/firewire-cdev.h')
-rw-r--r--include/linux/firewire-cdev.h100
1 files changed, 87 insertions, 13 deletions
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h
index 86c8ff5326f9..25b96dd0574f 100644
--- a/include/linux/firewire-cdev.h
+++ b/include/linux/firewire-cdev.h
@@ -25,10 +25,12 @@
25#include <linux/types.h> 25#include <linux/types.h>
26#include <linux/firewire-constants.h> 26#include <linux/firewire-constants.h>
27 27
28#define FW_CDEV_EVENT_BUS_RESET 0x00 28#define FW_CDEV_EVENT_BUS_RESET 0x00
29#define FW_CDEV_EVENT_RESPONSE 0x01 29#define FW_CDEV_EVENT_RESPONSE 0x01
30#define FW_CDEV_EVENT_REQUEST 0x02 30#define FW_CDEV_EVENT_REQUEST 0x02
31#define FW_CDEV_EVENT_ISO_INTERRUPT 0x03 31#define FW_CDEV_EVENT_ISO_INTERRUPT 0x03
32#define FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED 0x04
33#define FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED 0x05
32 34
33/** 35/**
34 * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types 36 * struct fw_cdev_event_common - Common part of all fw_cdev_event_ types
@@ -147,12 +149,46 @@ struct fw_cdev_event_iso_interrupt {
147}; 149};
148 150
149/** 151/**
152 * struct fw_cdev_event_iso_resource - Iso resources were allocated or freed
153 * @closure: See &fw_cdev_event_common;
154 * set by %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl
155 * @type: %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
156 * %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
157 * @handle: Reference by which an allocated resource can be deallocated
158 * @channel: Isochronous channel which was (de)allocated, if any
159 * @bandwidth: Bandwidth allocation units which were (de)allocated, if any
160 * @channels_available: Last known availability of channels
161 * @bandwidth_available: Last known availability of bandwidth
162 *
163 * An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED event is sent after an isochronous
164 * resource was allocated at the IRM. The client has to check @channel and
165 * @bandwidth for whether the allocation actually succeeded.
166 *
167 * @channel is <0 if no channel was allocated.
168 * @bandwidth is 0 if no bandwidth was allocated.
169 *
170 * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event is sent after an isochronous
171 * resource was deallocated at the IRM. It is also sent when automatic
172 * reallocation after a bus reset failed.
173 */
174struct fw_cdev_event_iso_resource {
175 __u64 closure;
176 __u32 type;
177 __u32 handle;
178 __s32 channel;
179 __s32 bandwidth;
180};
181
182/**
150 * union fw_cdev_event - Convenience union of fw_cdev_event_ types 183 * union fw_cdev_event - Convenience union of fw_cdev_event_ types
151 * @common: Valid for all types 184 * @common: Valid for all types
152 * @bus_reset: Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET 185 * @bus_reset: Valid if @common.type == %FW_CDEV_EVENT_BUS_RESET
153 * @response: Valid if @common.type == %FW_CDEV_EVENT_RESPONSE 186 * @response: Valid if @common.type == %FW_CDEV_EVENT_RESPONSE
154 * @request: Valid if @common.type == %FW_CDEV_EVENT_REQUEST 187 * @request: Valid if @common.type == %FW_CDEV_EVENT_REQUEST
155 * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT 188 * @iso_interrupt: Valid if @common.type == %FW_CDEV_EVENT_ISO_INTERRUPT
189 * @iso_resource: Valid if @common.type ==
190 * %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED or
191 * %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED
156 * 192 *
157 * Convenience union for userspace use. Events could be read(2) into an 193 * Convenience union for userspace use. Events could be read(2) into an
158 * appropriately aligned char buffer and then cast to this union for further 194 * appropriately aligned char buffer and then cast to this union for further
@@ -163,13 +199,15 @@ struct fw_cdev_event_iso_interrupt {
163 * not fit will be discarded so that the next read(2) will return a new event. 199 * not fit will be discarded so that the next read(2) will return a new event.
164 */ 200 */
165union fw_cdev_event { 201union fw_cdev_event {
166 struct fw_cdev_event_common common; 202 struct fw_cdev_event_common common;
167 struct fw_cdev_event_bus_reset bus_reset; 203 struct fw_cdev_event_bus_reset bus_reset;
168 struct fw_cdev_event_response response; 204 struct fw_cdev_event_response response;
169 struct fw_cdev_event_request request; 205 struct fw_cdev_event_request request;
170 struct fw_cdev_event_iso_interrupt iso_interrupt; 206 struct fw_cdev_event_iso_interrupt iso_interrupt;
207 struct fw_cdev_event_iso_resource iso_resource;
171}; 208};
172 209
210/* available since kernel version 2.6.22 */
173#define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info) 211#define FW_CDEV_IOC_GET_INFO _IOWR('#', 0x00, struct fw_cdev_get_info)
174#define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request) 212#define FW_CDEV_IOC_SEND_REQUEST _IOW('#', 0x01, struct fw_cdev_send_request)
175#define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate) 213#define FW_CDEV_IOC_ALLOCATE _IOWR('#', 0x02, struct fw_cdev_allocate)
@@ -178,13 +216,18 @@ union fw_cdev_event {
178#define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset) 216#define FW_CDEV_IOC_INITIATE_BUS_RESET _IOW('#', 0x05, struct fw_cdev_initiate_bus_reset)
179#define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor) 217#define FW_CDEV_IOC_ADD_DESCRIPTOR _IOWR('#', 0x06, struct fw_cdev_add_descriptor)
180#define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor) 218#define FW_CDEV_IOC_REMOVE_DESCRIPTOR _IOW('#', 0x07, struct fw_cdev_remove_descriptor)
181
182#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context) 219#define FW_CDEV_IOC_CREATE_ISO_CONTEXT _IOWR('#', 0x08, struct fw_cdev_create_iso_context)
183#define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso) 220#define FW_CDEV_IOC_QUEUE_ISO _IOWR('#', 0x09, struct fw_cdev_queue_iso)
184#define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso) 221#define FW_CDEV_IOC_START_ISO _IOW('#', 0x0a, struct fw_cdev_start_iso)
185#define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso) 222#define FW_CDEV_IOC_STOP_ISO _IOW('#', 0x0b, struct fw_cdev_stop_iso)
223
224/* available since kernel version 2.6.24 */
186#define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer) 225#define FW_CDEV_IOC_GET_CYCLE_TIMER _IOR('#', 0x0c, struct fw_cdev_get_cycle_timer)
187 226
227/* available since kernel version 2.6.30 */
228#define FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE _IOWR('#', 0x0d, struct fw_cdev_allocate_iso_resource)
229#define FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE _IOW('#', 0x0e, struct fw_cdev_deallocate)
230
188/* FW_CDEV_VERSION History 231/* FW_CDEV_VERSION History
189 * 232 *
190 * 1 Feb 18, 2007: Initial version. 233 * 1 Feb 18, 2007: Initial version.
@@ -284,9 +327,9 @@ struct fw_cdev_allocate {
284}; 327};
285 328
286/** 329/**
287 * struct fw_cdev_deallocate - Free an address range allocation 330 * struct fw_cdev_deallocate - Free a CSR address range or isochronous resource
288 * @handle: Handle to the address range, as returned by the kernel when the 331 * @handle: Handle to the address range or iso resource, as returned by the
289 * range was allocated 332 * kernel when the range or resource was allocated
290 */ 333 */
291struct fw_cdev_deallocate { 334struct fw_cdev_deallocate {
292 __u32 handle; 335 __u32 handle;
@@ -479,4 +522,35 @@ struct fw_cdev_get_cycle_timer {
479 __u32 cycle_timer; 522 __u32 cycle_timer;
480}; 523};
481 524
525/**
526 * struct fw_cdev_allocate_iso_resource - Allocate a channel or bandwidth
527 * @closure: Passed back to userspace in correponding iso resource events
528 * @channels: Isochronous channels of which one is to be allocated
529 * @bandwidth: Isochronous bandwidth units to be allocated
530 * @handle: Handle to the allocation, written by the kernel
531 *
532 * The %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE ioctl initiates allocation of an
533 * isochronous channel and/or of isochronous bandwidth at the isochronous
534 * resource manager (IRM). Only one of the channels specified in @channels is
535 * allocated. An %FW_CDEV_EVENT_ISO_RESOURCE_ALLOCATED is sent after
536 * communication with the IRM, indicating success or failure in the event data.
537 * The kernel will automatically reallocate the resources after bus resets.
538 * Should a reallocation fail, an %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event
539 * will be sent. The kernel will also automatically deallocate the resources
540 * when the file descriptor is closed.
541 *
542 * @channels is a host-endian bitfield with the most significant bit
543 * representing channel 0 and the least significant bit representing channel 63:
544 * 1ULL << (63 - c)
545 *
546 * @bandwidth is expressed in bandwidth allocation units, i.e. the time to send
547 * one quadlet of data (payload or header data) at speed S1600.
548 */
549struct fw_cdev_allocate_iso_resource {
550 __u64 closure;
551 __u64 channels;
552 __u32 bandwidth;
553 __u32 handle;
554};
555
482#endif /* _LINUX_FIREWIRE_CDEV_H */ 556#endif /* _LINUX_FIREWIRE_CDEV_H */