diff options
Diffstat (limited to 'include/linux/firewire-cdev.h')
| -rw-r--r-- | include/linux/firewire-cdev.h | 118 |
1 files changed, 90 insertions, 28 deletions
diff --git a/include/linux/firewire-cdev.h b/include/linux/firewire-cdev.h index 520ecf86cbb3..68f883b30a53 100644 --- a/include/linux/firewire-cdev.h +++ b/include/linux/firewire-cdev.h | |||
| @@ -1,21 +1,26 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Char device interface. | 2 | * Char device interface. |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2005-2006 Kristian Hoegsberg <krh@bitplanet.net> | 4 | * Copyright (C) 2005-2007 Kristian Hoegsberg <krh@bitplanet.net> |
| 5 | * | 5 | * |
| 6 | * This program is free software; you can redistribute it and/or modify | 6 | * Permission is hereby granted, free of charge, to any person obtaining a |
| 7 | * it under the terms of the GNU General Public License as published by | 7 | * copy of this software and associated documentation files (the "Software"), |
| 8 | * the Free Software Foundation; either version 2 of the License, or | 8 | * to deal in the Software without restriction, including without limitation |
| 9 | * (at your option) any later version. | 9 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, |
| 10 | * | 10 | * and/or sell copies of the Software, and to permit persons to whom the |
| 11 | * This program is distributed in the hope that it will be useful, | 11 | * Software is furnished to do so, subject to the following conditions: |
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 12 | * |
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 13 | * The above copyright notice and this permission notice (including the next |
| 14 | * GNU General Public License for more details. | 14 | * paragraph) shall be included in all copies or substantial portions of the |
| 15 | * | 15 | * Software. |
| 16 | * You should have received a copy of the GNU General Public License | 16 | * |
| 17 | * along with this program; if not, write to the Free Software Foundation, | 17 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| 18 | * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 18 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| 19 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
| 20 | * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
| 21 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
| 22 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | ||
| 23 | * DEALINGS IN THE SOFTWARE. | ||
| 19 | */ | 24 | */ |
| 20 | 25 | ||
| 21 | #ifndef _LINUX_FIREWIRE_CDEV_H | 26 | #ifndef _LINUX_FIREWIRE_CDEV_H |
| @@ -248,13 +253,20 @@ union fw_cdev_event { | |||
| 248 | #define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request) | 253 | #define FW_CDEV_IOC_SEND_BROADCAST_REQUEST _IOW('#', 0x12, struct fw_cdev_send_request) |
| 249 | #define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet) | 254 | #define FW_CDEV_IOC_SEND_STREAM_PACKET _IOW('#', 0x13, struct fw_cdev_send_stream_packet) |
| 250 | 255 | ||
| 256 | /* available since kernel version 2.6.34 */ | ||
| 257 | #define FW_CDEV_IOC_GET_CYCLE_TIMER2 _IOWR('#', 0x14, struct fw_cdev_get_cycle_timer2) | ||
| 258 | |||
| 251 | /* | 259 | /* |
| 252 | * FW_CDEV_VERSION History | 260 | * FW_CDEV_VERSION History |
| 253 | * 1 (2.6.22) - initial version | 261 | * 1 (2.6.22) - initial version |
| 254 | * 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if | 262 | * 2 (2.6.30) - changed &fw_cdev_event_iso_interrupt.header if |
| 255 | * &fw_cdev_create_iso_context.header_size is 8 or more | 263 | * &fw_cdev_create_iso_context.header_size is 8 or more |
| 264 | * (2.6.32) - added time stamp to xmit &fw_cdev_event_iso_interrupt | ||
| 265 | * (2.6.33) - IR has always packet-per-buffer semantics now, not one of | ||
| 266 | * dual-buffer or packet-per-buffer depending on hardware | ||
| 267 | * 3 (2.6.34) - made &fw_cdev_get_cycle_timer reliable | ||
| 256 | */ | 268 | */ |
| 257 | #define FW_CDEV_VERSION 2 | 269 | #define FW_CDEV_VERSION 3 |
| 258 | 270 | ||
| 259 | /** | 271 | /** |
| 260 | * struct fw_cdev_get_info - General purpose information ioctl | 272 | * struct fw_cdev_get_info - General purpose information ioctl |
| @@ -431,7 +443,7 @@ struct fw_cdev_remove_descriptor { | |||
| 431 | * @type: %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE | 443 | * @type: %FW_CDEV_ISO_CONTEXT_TRANSMIT or %FW_CDEV_ISO_CONTEXT_RECEIVE |
| 432 | * @header_size: Header size to strip for receive contexts | 444 | * @header_size: Header size to strip for receive contexts |
| 433 | * @channel: Channel to bind to | 445 | * @channel: Channel to bind to |
| 434 | * @speed: Speed to transmit at | 446 | * @speed: Speed for transmit contexts |
| 435 | * @closure: To be returned in &fw_cdev_event_iso_interrupt | 447 | * @closure: To be returned in &fw_cdev_event_iso_interrupt |
| 436 | * @handle: Handle to context, written back by kernel | 448 | * @handle: Handle to context, written back by kernel |
| 437 | * | 449 | * |
| @@ -444,6 +456,9 @@ struct fw_cdev_remove_descriptor { | |||
| 444 | * If a context was successfully created, the kernel writes back a handle to the | 456 | * If a context was successfully created, the kernel writes back a handle to the |
| 445 | * context, which must be passed in for subsequent operations on that context. | 457 | * context, which must be passed in for subsequent operations on that context. |
| 446 | * | 458 | * |
| 459 | * For receive contexts, @header_size must be at least 4 and must be a multiple | ||
| 460 | * of 4. | ||
| 461 | * | ||
| 447 | * Note that the effect of a @header_size > 4 depends on | 462 | * Note that the effect of a @header_size > 4 depends on |
| 448 | * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt. | 463 | * &fw_cdev_get_info.version, as documented at &fw_cdev_event_iso_interrupt. |
| 449 | */ | 464 | */ |
| @@ -474,10 +489,34 @@ struct fw_cdev_create_iso_context { | |||
| 474 | * | 489 | * |
| 475 | * &struct fw_cdev_iso_packet is used to describe isochronous packet queues. | 490 | * &struct fw_cdev_iso_packet is used to describe isochronous packet queues. |
| 476 | * | 491 | * |
| 477 | * Use the FW_CDEV_ISO_ macros to fill in @control. The sy and tag fields are | 492 | * Use the FW_CDEV_ISO_ macros to fill in @control. |
| 478 | * specified by IEEE 1394a and IEC 61883. | 493 | * |
| 479 | * | 494 | * For transmit packets, the header length must be a multiple of 4 and specifies |
| 480 | * FIXME - finish this documentation | 495 | * the numbers of bytes in @header that will be prepended to the packet's |
| 496 | * payload; these bytes are copied into the kernel and will not be accessed | ||
| 497 | * after the ioctl has returned. The sy and tag fields are copied to the iso | ||
| 498 | * packet header (these fields are specified by IEEE 1394a and IEC 61883-1). | ||
| 499 | * The skip flag specifies that no packet is to be sent in a frame; when using | ||
| 500 | * this, all other fields except the interrupt flag must be zero. | ||
| 501 | * | ||
| 502 | * For receive packets, the header length must be a multiple of the context's | ||
| 503 | * header size; if the header length is larger than the context's header size, | ||
| 504 | * multiple packets are queued for this entry. The sy and tag fields are | ||
| 505 | * ignored. If the sync flag is set, the context drops all packets until | ||
| 506 | * a packet with a matching sy field is received (the sync value to wait for is | ||
| 507 | * specified in the &fw_cdev_start_iso structure). The payload length defines | ||
| 508 | * how many payload bytes can be received for one packet (in addition to payload | ||
| 509 | * quadlets that have been defined as headers and are stripped and returned in | ||
| 510 | * the &fw_cdev_event_iso_interrupt structure). If more bytes are received, the | ||
| 511 | * additional bytes are dropped. If less bytes are received, the remaining | ||
| 512 | * bytes in this part of the payload buffer will not be written to, not even by | ||
| 513 | * the next packet, i.e., packets received in consecutive frames will not | ||
| 514 | * necessarily be consecutive in memory. If an entry has queued multiple | ||
| 515 | * packets, the payload length is divided equally among them. | ||
| 516 | * | ||
| 517 | * When a packet with the interrupt flag set has been completed, the | ||
| 518 | * &fw_cdev_event_iso_interrupt event will be sent. An entry that has queued | ||
| 519 | * multiple receive packets is completed when its last packet is completed. | ||
| 481 | */ | 520 | */ |
| 482 | struct fw_cdev_iso_packet { | 521 | struct fw_cdev_iso_packet { |
| 483 | __u32 control; | 522 | __u32 control; |
| @@ -494,7 +533,7 @@ struct fw_cdev_iso_packet { | |||
| 494 | * Queue a number of isochronous packets for reception or transmission. | 533 | * Queue a number of isochronous packets for reception or transmission. |
| 495 | * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs, | 534 | * This ioctl takes a pointer to an array of &fw_cdev_iso_packet structs, |
| 496 | * which describe how to transmit from or receive into a contiguous region | 535 | * which describe how to transmit from or receive into a contiguous region |
| 497 | * of a mmap()'ed payload buffer. As part of the packet descriptors, | 536 | * of a mmap()'ed payload buffer. As part of transmit packet descriptors, |
| 498 | * a series of headers can be supplied, which will be prepended to the | 537 | * a series of headers can be supplied, which will be prepended to the |
| 499 | * payload during DMA. | 538 | * payload during DMA. |
| 500 | * | 539 | * |
| @@ -544,14 +583,18 @@ struct fw_cdev_stop_iso { | |||
| 544 | /** | 583 | /** |
| 545 | * struct fw_cdev_get_cycle_timer - read cycle timer register | 584 | * struct fw_cdev_get_cycle_timer - read cycle timer register |
| 546 | * @local_time: system time, in microseconds since the Epoch | 585 | * @local_time: system time, in microseconds since the Epoch |
| 547 | * @cycle_timer: isochronous cycle timer, as per OHCI 1.1 clause 5.13 | 586 | * @cycle_timer: Cycle Time register contents |
| 548 | * | 587 | * |
| 549 | * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer | 588 | * The %FW_CDEV_IOC_GET_CYCLE_TIMER ioctl reads the isochronous cycle timer |
| 550 | * and also the system clock. This allows to express the receive time of an | 589 | * and also the system clock (%CLOCK_REALTIME). This allows to express the |
| 551 | * isochronous packet as a system time with microsecond accuracy. | 590 | * receive time of an isochronous packet as a system time. |
| 552 | * | 591 | * |
| 553 | * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and | 592 | * @cycle_timer consists of 7 bits cycleSeconds, 13 bits cycleCount, and |
| 554 | * 12 bits cycleOffset, in host byte order. | 593 | * 12 bits cycleOffset, in host byte order. Cf. the Cycle Time register |
| 594 | * per IEEE 1394 or Isochronous Cycle Timer register per OHCI-1394. | ||
| 595 | * | ||
| 596 | * In version 1 and 2 of the ABI, this ioctl returned unreliable (non- | ||
| 597 | * monotonic) @cycle_timer values on certain controllers. | ||
| 555 | */ | 598 | */ |
| 556 | struct fw_cdev_get_cycle_timer { | 599 | struct fw_cdev_get_cycle_timer { |
| 557 | __u64 local_time; | 600 | __u64 local_time; |
| @@ -559,6 +602,25 @@ struct fw_cdev_get_cycle_timer { | |||
| 559 | }; | 602 | }; |
| 560 | 603 | ||
| 561 | /** | 604 | /** |
| 605 | * struct fw_cdev_get_cycle_timer2 - read cycle timer register | ||
| 606 | * @tv_sec: system time, seconds | ||
| 607 | * @tv_nsec: system time, sub-seconds part in nanoseconds | ||
| 608 | * @clk_id: input parameter, clock from which to get the system time | ||
| 609 | * @cycle_timer: Cycle Time register contents | ||
| 610 | * | ||
| 611 | * The %FW_CDEV_IOC_GET_CYCLE_TIMER2 works like | ||
| 612 | * %FW_CDEV_IOC_GET_CYCLE_TIMER but lets you choose a clock like with POSIX' | ||
| 613 | * clock_gettime function. Supported @clk_id values are POSIX' %CLOCK_REALTIME | ||
| 614 | * and %CLOCK_MONOTONIC and Linux' %CLOCK_MONOTONIC_RAW. | ||
| 615 | */ | ||
| 616 | struct fw_cdev_get_cycle_timer2 { | ||
| 617 | __s64 tv_sec; | ||
| 618 | __s32 tv_nsec; | ||
| 619 | __s32 clk_id; | ||
| 620 | __u32 cycle_timer; | ||
| 621 | }; | ||
| 622 | |||
| 623 | /** | ||
| 562 | * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth | 624 | * struct fw_cdev_allocate_iso_resource - (De)allocate a channel or bandwidth |
| 563 | * @closure: Passed back to userspace in correponding iso resource events | 625 | * @closure: Passed back to userspace in correponding iso resource events |
| 564 | * @channels: Isochronous channels of which one is to be (de)allocated | 626 | * @channels: Isochronous channels of which one is to be (de)allocated |
| @@ -590,8 +652,8 @@ struct fw_cdev_get_cycle_timer { | |||
| 590 | * instead of allocated. | 652 | * instead of allocated. |
| 591 | * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. | 653 | * An %FW_CDEV_EVENT_ISO_RESOURCE_DEALLOCATED event concludes this operation. |
| 592 | * | 654 | * |
| 593 | * To summarize, %FW_CDEV_IOC_DEALLOCATE_ISO_RESOURCE allocates iso resources | 655 | * To summarize, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE allocates iso resources |
| 594 | * for the lifetime of the fd or handle. | 656 | * for the lifetime of the fd or @handle. |
| 595 | * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources | 657 | * In contrast, %FW_CDEV_IOC_ALLOCATE_ISO_RESOURCE_ONCE allocates iso resources |
| 596 | * for the duration of a bus generation. | 658 | * for the duration of a bus generation. |
| 597 | * | 659 | * |
