diff options
Diffstat (limited to 'include/linux/firewire-cdev.h')
| -rw-r--r-- | include/linux/firewire-cdev.h | 110 | 
1 files changed, 86 insertions, 24 deletions
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h index 520ecf86cbb..68f883b30a5 100644 --- a/include/linux/firewire-cdev.h +++ b/include/linux/firewire-cdev.h @@ -1,21 +1,26 @@  /*   * Char device interface.   * - * Copyright (C) 2005-2006  Kristian Hoegsberg <krh@bitplanet.net> + * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>   * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions:   * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software.   * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE.   */  #ifndef _LINUX_FIREWIRE_CDEV_H @@ -248,13 +253,20 @@ union fw_cdev_event {  #define FW_CDEV_IOC_SEND_BROADCAST_REQUEST       _IOW('#', 0x12, struct fw_cdev_send_request)  #define FW_CDEV_IOC_SEND_STREAM_PACKET           _IOW('#', 0x13, struct fw_cdev_send_stream_packet) +/* available since kernel version 2.6.34 */ +#define FW_CDEV_IOC_GET_CYCLE_TIMER2   _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2) +  /*   * FW_CDEV_VERSION History   *  1  (2.6.22)  - initial version   *  2  (2.6.30)  - changed &fw_cdev_event_iso_interrupt.header if   *                 &fw_cdev_create_iso_context.header_size is 8 or more + *     (2.6.32)  - added time stamp to xmit &fw_cdev_event_iso_interrupt + *     (2.6.33)  - IR has always packet-per-buffer semantics now, not one of + *                 dual-buffer or packet-per-buffer depending on hardware + *  3  (2.6.34)  - made &fw_cdev_get_cycle_timer reliable   */ -#define FW_CDEV_VERSION 2 +#define FW_CDEV_VERSION 3  /**   * struct fw_cdev_get_info - General purpose information ioctl @@ -431,7 +443,7 @@ struct fw_cdev_remove_descriptor {   * @type:	%FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE   * @header_size: Header size to strip for receive contexts   * @channel:	Channel to bind to - * @speed:	Speed to transmit at + * @speed:	Speed for transmit contexts   * @closure:	To be returned in &fw_cdev_event_iso_interrupt   * @handle:	Handle to context, written back by kernel   * @@ -444,6 +456,9 @@ struct fw_cdev_remove_descriptor {   * If a context was successfully created, the kernel writes back a handle to the   * context, which must be passed in for subsequent operations on that context.   * + * For receive contexts, @header_size must be at least 4 and must be a multiple + * of 4. + *   * Note that the effect of a @header_size > 4 depends on   * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt.   */ @@ -474,10 +489,34 @@ struct fw_cdev_create_iso_context {   *   * &struct fw_cdev_iso_packet is used to describe isochronous packet queues.   * - * Use the FW_CDEV_ISO_ macros to fill in @control.  The sy and tag fields are - * specified by IEEE 1394a and IEC 61883. + * Use the FW_CDEV_ISO_ macros to fill in @control.   * - * FIXME - finish this documentation + * For transmit packets, the header length must be a multiple of 4 and specifies + * the numbers of bytes in @header that will be prepended to the packet's + * payload; these bytes are copied into the kernel and will not be accessed + * after the ioctl has returned.  The sy and tag fields are copied to the iso + * packet header (these fields are specified by IEEE 1394a and IEC 61883-1). + * The skip flag specifies that no packet is to be sent in a frame; when using + * this, all other fields except the interrupt flag must be zero. + * + * For receive packets, the header length must be a multiple of the context's + * header size; if the header length is larger than the context's header size, + * multiple packets are queued for this entry.  The sy and tag fields are + * ignored.  If the sync flag is set, the context drops all packets until + * a packet with a matching sy field is received (the sync value to wait for is + * specified in the &fw_cdev_start_iso structure).  The payload length defines + * how many payload bytes can be received for one packet (in addition to payload + * quadlets that have been defined as headers and are stripped and returned in + * the &fw_cdev_event_iso_interrupt structure).  If more bytes are received, the + * additional bytes are dropped.  If less bytes are received, the remaining + * bytes in this part of the payload buffer will not be written to, not even by + * the next packet, i.e., packets received in consecutive frames will not + * necessarily be consecutive in memory.  If an entry has queued multiple + * packets, the payload length is divided equally among them. + * + * When a packet with the interrupt flag set has been completed, the + * &fw_cdev_event_iso_interrupt event will be sent.  An entry that has queued + * multiple receive packets is completed when its last packet is completed.   */  struct fw_cdev_iso_packet {  	__u32 control; @@ -494,7 +533,7 @@ struct fw_cdev_iso_packet {   * Queue a number of isochronous packets for reception or transmission.   * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs,   * which describe how to transmit from or receive into a contiguous region - * of a mmap()'ed payload buffer.  As part of the packet descriptors, + * of a mmap()'ed payload buffer.  As part of transmit packet descriptors,   * a series of headers can be supplied, which will be prepended to the   * payload during DMA.   * @@ -544,14 +583,18 @@ struct fw_cdev_stop_iso {  /**   * struct fw_cdev_get_cycle_timer - read cycle timer register   * @local_time:   system time, in microseconds since the Epoch - * @cycle_timer:  isochronous cycle timer, as per OHCI 1.1 clause 5.13 + * @cycle_timer:  Cycle Time register contents   *   * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer - * and also the system clock.  This allows to express the receive time of an - * isochronous packet as a system time with microsecond accuracy. + * and also the system clock (%CLOCK_REALTIME).  This allows to express the + * receive time of an isochronous packet as a system time.   *   * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and - * 12 bits cycleOffset, in host byte order. + * 12 bits cycleOffset, in host byte order.  Cf. the Cycle Time register + * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394. + * + * In version 1 and 2 of the ABI, this ioctl returned unreliable (non- + * monotonic) @cycle_timer values on certain controllers.   */  struct fw_cdev_get_cycle_timer {  	__u64 local_time; @@ -559,6 +602,25 @@ struct fw_cdev_get_cycle_timer {  };  /** + * struct fw_cdev_get_cycle_timer2 - read cycle timer register + * @tv_sec:       system time, seconds + * @tv_nsec:      system time, sub-seconds part in nanoseconds + * @clk_id:       input parameter, clock from which to get the system time + * @cycle_timer:  Cycle Time register contents + * + * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 works like + * %FW_CDEV_IOC_GET_CYCLE_TIMER but lets you choose a clock like with POSIX' + * clock_gettime function.  Supported @clk_id values are POSIX' %CLOCK_REALTIME + * and %CLOCK_MONOTONIC and Linux' %CLOCK_MONOTONIC_RAW. + */ +struct fw_cdev_get_cycle_timer2 { +	__s64 tv_sec; +	__s32 tv_nsec; +	__s32 clk_id; +	__u32 cycle_timer; +}; + +/**   * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth   * @closure:	Passed back to userspace in correponding iso resource events   * @channels:	Isochronous channels of which one is to be (de)allocated @@ -590,8 +652,8 @@ struct fw_cdev_get_cycle_timer {   * instead of allocated.   * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation.   * - * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources - * for the lifetime of the fd or handle. + * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources + * for the lifetime of the fd or @handle.   * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources   * for the duration of a bus generation.   *  |