Updates for new rawiso ioctl interface.
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@103 53a565d1-3bb7-0310-b661-cf11e63c67ab
This commit is contained in:
parent
2ecf31c96d
commit
e753a09b38
|
@ -0,0 +1,105 @@
|
||||||
|
/* Base file for all ieee1394 ioctl's. Linux-1394 has allocated base '#'
|
||||||
|
* with a range of 0x00-0x3f. */
|
||||||
|
|
||||||
|
#ifndef __IEEE1394_IOCTL_H
|
||||||
|
#define __IEEE1394_IOCTL_H
|
||||||
|
|
||||||
|
#include <linux/ioctl.h>
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
|
||||||
|
/* AMDTP Gets 6 */
|
||||||
|
#define AMDTP_IOC_CHANNEL _IOW('#', 0x00, struct amdtp_ioctl)
|
||||||
|
#define AMDTP_IOC_PLUG _IOW('#', 0x01, struct amdtp_ioctl)
|
||||||
|
#define AMDTP_IOC_PING _IOW('#', 0x02, struct amdtp_ioctl)
|
||||||
|
#define AMDTP_IOC_ZAP _IO ('#', 0x03)
|
||||||
|
|
||||||
|
|
||||||
|
/* DV1394 Gets 10 */
|
||||||
|
|
||||||
|
/* Get the driver ready to transmit video. pass a struct dv1394_init* as
|
||||||
|
* the parameter (see below), or NULL to get default parameters */
|
||||||
|
#define DV1394_IOC_INIT _IOW('#', 0x06, struct dv1394_init)
|
||||||
|
|
||||||
|
/* Stop transmitting video and free the ringbuffer */
|
||||||
|
#define DV1394_IOC_SHUTDOWN _IO ('#', 0x07)
|
||||||
|
|
||||||
|
/* Submit N new frames to be transmitted, where the index of the first new
|
||||||
|
* frame is first_clear_buffer, and the index of the last new frame is
|
||||||
|
* (first_clear_buffer + N) % n_frames */
|
||||||
|
#define DV1394_IOC_SUBMIT_FRAMES _IO ('#', 0x08)
|
||||||
|
|
||||||
|
/* Block until N buffers are clear (pass N as the parameter) Because we
|
||||||
|
* re-transmit the last frame on underrun, there will at most be n_frames
|
||||||
|
* - 1 clear frames at any time */
|
||||||
|
#define DV1394_IOC_WAIT_FRAMES _IO ('#', 0x09)
|
||||||
|
|
||||||
|
/* Capture new frames that have been received, where the index of the
|
||||||
|
* first new frame is first_clear_buffer, and the index of the last new
|
||||||
|
* frame is (first_clear_buffer + N) % n_frames */
|
||||||
|
#define DV1394_IOC_RECEIVE_FRAMES _IO ('#', 0x0a)
|
||||||
|
|
||||||
|
/* Tell card to start receiving DMA */
|
||||||
|
#define DV1394_IOC_START_RECEIVE _IO ('#', 0x0b)
|
||||||
|
|
||||||
|
/* Pass a struct dv1394_status* as the parameter */
|
||||||
|
#define DV1394_IOC_GET_STATUS _IOR('#', 0x0c, struct dv1394_status)
|
||||||
|
|
||||||
|
|
||||||
|
/* Video1394 Gets 10 */
|
||||||
|
|
||||||
|
#define VIDEO1394_IOC_LISTEN_CHANNEL \
|
||||||
|
_IOWR('#', 0x10, struct video1394_mmap)
|
||||||
|
#define VIDEO1394_IOC_UNLISTEN_CHANNEL \
|
||||||
|
_IOW ('#', 0x11, int)
|
||||||
|
#define VIDEO1394_IOC_LISTEN_QUEUE_BUFFER \
|
||||||
|
_IOW ('#', 0x12, struct video1394_wait)
|
||||||
|
#define VIDEO1394_IOC_LISTEN_WAIT_BUFFER \
|
||||||
|
_IOWR('#', 0x13, struct video1394_wait)
|
||||||
|
#define VIDEO1394_IOC_TALK_CHANNEL \
|
||||||
|
_IOWR('#', 0x14, struct video1394_mmap)
|
||||||
|
#define VIDEO1394_IOC_UNTALK_CHANNEL \
|
||||||
|
_IOW ('#', 0x15, int)
|
||||||
|
#define VIDEO1394_IOC_TALK_QUEUE_BUFFER \
|
||||||
|
_IOW ('#', 0x16, sizeof (struct video1394_wait) + \
|
||||||
|
sizeof (struct video1394_queue_variable))
|
||||||
|
#define VIDEO1394_IOC_TALK_WAIT_BUFFER \
|
||||||
|
_IOW ('#', 0x17, struct video1394_wait)
|
||||||
|
#define VIDEO1394_IOC_LISTEN_POLL_BUFFER \
|
||||||
|
_IOWR('#', 0x18, struct video1394_wait)
|
||||||
|
|
||||||
|
|
||||||
|
/* Raw1394's ISO interface */
|
||||||
|
#define RAW1394_IOC_ISO_XMIT_INIT \
|
||||||
|
_IOW ('#', 0x1a, struct raw1394_iso_status)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_INIT \
|
||||||
|
_IOWR('#', 0x1b, struct raw1394_iso_status)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_START \
|
||||||
|
_IOC (_IOC_WRITE, '#', 0x1c, sizeof(int) * 3)
|
||||||
|
#define RAW1394_IOC_ISO_XMIT_START \
|
||||||
|
_IOC (_IOC_WRITE, '#', 0x1d, sizeof(int) * 2)
|
||||||
|
#define RAW1394_IOC_ISO_XMIT_RECV_STOP \
|
||||||
|
_IO ('#', 0x1e)
|
||||||
|
#define RAW1394_IOC_ISO_GET_STATUS \
|
||||||
|
_IOR ('#', 0x1f, struct raw1394_iso_status)
|
||||||
|
#define RAW1394_IOC_ISO_SHUTDOWN \
|
||||||
|
_IO ('#', 0x20)
|
||||||
|
#define RAW1394_IOC_ISO_QUEUE_ACTIVITY \
|
||||||
|
_IO ('#', 0x21)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_LISTEN_CHANNEL \
|
||||||
|
_IOW ('#', 0x22, unsigned char)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_UNLISTEN_CHANNEL \
|
||||||
|
_IOW ('#', 0x23, unsigned char)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_SET_CHANNEL_MASK \
|
||||||
|
_IOW ('#', 0x24, __u64)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_PACKETS \
|
||||||
|
_IOW ('#', 0x25, struct raw1394_iso_packets)
|
||||||
|
#define RAW1394_IOC_ISO_RECV_RELEASE_PACKETS \
|
||||||
|
_IOW ('#', 0x26, unsigned int)
|
||||||
|
#define RAW1394_IOC_ISO_XMIT_PACKETS \
|
||||||
|
_IOW ('#', 0x27, struct raw1394_iso_packets)
|
||||||
|
#define RAW1394_IOC_ISO_XMIT_SYNC \
|
||||||
|
_IO ('#', 0x28)
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* __IEEE1394_IOCTL_H */
|
38
src/iso.c
38
src/iso.c
|
@ -151,7 +151,7 @@ static int do_iso_init(raw1394handle_t handle,
|
||||||
|
|
||||||
if(handle->iso_buffer == (unsigned char*) MAP_FAILED) {
|
if(handle->iso_buffer == (unsigned char*) MAP_FAILED) {
|
||||||
handle->iso_buffer = NULL;
|
handle->iso_buffer = NULL;
|
||||||
ioctl(handle->fd, RAW1394_ISO_SHUTDOWN, 0);
|
ioctl(handle->fd, RAW1394_IOC_ISO_SHUTDOWN, 0);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -186,7 +186,7 @@ int raw1394_iso_xmit_init(raw1394handle_t handle,
|
||||||
int irq_interval)
|
int irq_interval)
|
||||||
{
|
{
|
||||||
if(do_iso_init(handle, buf_packets, max_packet_size, channel, speed,
|
if(do_iso_init(handle, buf_packets, max_packet_size, channel, speed,
|
||||||
irq_interval, RAW1394_ISO_XMIT_INIT))
|
irq_interval, RAW1394_IOC_ISO_XMIT_INIT))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
handle->iso_mode = ISO_XMIT;
|
handle->iso_mode = ISO_XMIT;
|
||||||
|
@ -216,7 +216,7 @@ int raw1394_iso_recv_init(raw1394handle_t handle,
|
||||||
{
|
{
|
||||||
/* any speed will work */
|
/* any speed will work */
|
||||||
if(do_iso_init(handle, buf_packets, max_packet_size, channel, RAW1394_ISO_SPEED_100,
|
if(do_iso_init(handle, buf_packets, max_packet_size, channel, RAW1394_ISO_SPEED_100,
|
||||||
irq_interval, RAW1394_ISO_RECV_INIT))
|
irq_interval, RAW1394_IOC_ISO_RECV_INIT))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
handle->iso_mode = ISO_RECV;
|
handle->iso_mode = ISO_RECV;
|
||||||
|
@ -242,7 +242,7 @@ int raw1394_iso_multichannel_recv_init(raw1394handle_t handle,
|
||||||
{
|
{
|
||||||
/* any speed will work */
|
/* any speed will work */
|
||||||
if(do_iso_init(handle, buf_packets, max_packet_size, -1, RAW1394_ISO_SPEED_100,
|
if(do_iso_init(handle, buf_packets, max_packet_size, -1, RAW1394_ISO_SPEED_100,
|
||||||
irq_interval, RAW1394_ISO_RECV_INIT))
|
irq_interval, RAW1394_IOC_ISO_RECV_INIT))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
handle->iso_mode = ISO_RECV;
|
handle->iso_mode = ISO_RECV;
|
||||||
|
@ -260,7 +260,7 @@ int raw1394_iso_recv_listen_channel(raw1394handle_t handle, unsigned char channe
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ioctl(handle->fd, RAW1394_ISO_RECV_LISTEN_CHANNEL, channel);
|
return ioctl(handle->fd, RAW1394_IOC_ISO_RECV_LISTEN_CHANNEL, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -273,7 +273,7 @@ int raw1394_iso_recv_unlisten_channel(raw1394handle_t handle, unsigned char chan
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ioctl(handle->fd, RAW1394_ISO_RECV_UNLISTEN_CHANNEL, channel);
|
return ioctl(handle->fd, RAW1394_IOC_ISO_RECV_UNLISTEN_CHANNEL, channel);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -290,7 +290,7 @@ int raw1394_iso_recv_set_channel_mask(raw1394handle_t handle, u_int64_t mask)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ioctl(handle->fd, RAW1394_ISO_RECV_SET_CHANNEL_MASK, (void*) &mask);
|
return ioctl(handle->fd, RAW1394_IOC_ISO_RECV_SET_CHANNEL_MASK, (void*) &mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -312,7 +312,7 @@ int raw1394_iso_recv_start(raw1394handle_t handle, int start_on_cycle, int tag_m
|
||||||
args[1] = tag_mask;
|
args[1] = tag_mask;
|
||||||
args[2] = sync;
|
args[2] = sync;
|
||||||
|
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_RECV_START, &args[0]))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_RECV_START, &args[0]))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
handle->iso_state = ISO_GO;
|
handle->iso_state = ISO_GO;
|
||||||
|
@ -364,7 +364,7 @@ static int _raw1394_iso_xmit_queue_packets(raw1394handle_t handle)
|
||||||
|
|
||||||
if(disp == RAW1394_ISO_DEFER) {
|
if(disp == RAW1394_ISO_DEFER) {
|
||||||
/* queue an event so that we don't hang in the next read() */
|
/* queue an event so that we don't hang in the next read() */
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_QUEUE_ACTIVITY, 0))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_QUEUE_ACTIVITY, 0))
|
||||||
goto out_produce;
|
goto out_produce;
|
||||||
break;
|
break;
|
||||||
} else if(disp == RAW1394_ISO_STOP) {
|
} else if(disp == RAW1394_ISO_STOP) {
|
||||||
|
@ -383,7 +383,7 @@ static int _raw1394_iso_xmit_queue_packets(raw1394handle_t handle)
|
||||||
|
|
||||||
out_produce:
|
out_produce:
|
||||||
if(packets.n_packets > 0) {
|
if(packets.n_packets > 0) {
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_XMIT_PACKETS, &packets))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_PACKETS, &packets))
|
||||||
retval = -1;
|
retval = -1;
|
||||||
}
|
}
|
||||||
out_free:
|
out_free:
|
||||||
|
@ -442,7 +442,7 @@ int raw1394_iso_xmit_write(raw1394handle_t handle, unsigned char *data, unsigned
|
||||||
packets.n_packets = 1;
|
packets.n_packets = 1;
|
||||||
packets.infos = &info;
|
packets.infos = &info;
|
||||||
|
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_XMIT_PACKETS, &packets))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_PACKETS, &packets))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
stat->n_packets--;
|
stat->n_packets--;
|
||||||
|
@ -470,7 +470,7 @@ int raw1394_iso_xmit_start(raw1394handle_t handle, int start_on_cycle, int prebu
|
||||||
args[0] = start_on_cycle;
|
args[0] = start_on_cycle;
|
||||||
args[1] = prebuffer_packets;
|
args[1] = prebuffer_packets;
|
||||||
|
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_XMIT_START, &args[0]))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_START, &args[0]))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
handle->iso_state = ISO_GO;
|
handle->iso_state = ISO_GO;
|
||||||
|
@ -486,7 +486,7 @@ int raw1394_iso_xmit_sync(raw1394handle_t handle)
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return ioctl(handle->fd, RAW1394_ISO_XMIT_SYNC, 0);
|
return ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_SYNC, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -498,7 +498,7 @@ void raw1394_iso_stop(raw1394handle_t handle)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ioctl(handle->fd, RAW1394_ISO_XMIT_RECV_STOP, 0);
|
ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_RECV_STOP, 0);
|
||||||
handle->iso_state = ISO_STOP;
|
handle->iso_state = ISO_STOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -514,7 +514,7 @@ void raw1394_iso_shutdown(raw1394handle_t handle)
|
||||||
|
|
||||||
if(handle->iso_mode != ISO_INACTIVE) {
|
if(handle->iso_mode != ISO_INACTIVE) {
|
||||||
raw1394_iso_stop(handle);
|
raw1394_iso_stop(handle);
|
||||||
ioctl(handle->fd, RAW1394_ISO_SHUTDOWN, 0);
|
ioctl(handle->fd, RAW1394_IOC_ISO_SHUTDOWN, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
handle->iso_mode = ISO_INACTIVE;
|
handle->iso_mode = ISO_INACTIVE;
|
||||||
|
@ -538,7 +538,7 @@ static int _raw1394_iso_recv_packets(raw1394handle_t handle)
|
||||||
if(packets.infos == NULL)
|
if(packets.infos == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_RECV_PACKETS, &packets) < 0)
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_RECV_PACKETS, &packets) < 0)
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
while(stat->n_packets > 0) {
|
while(stat->n_packets > 0) {
|
||||||
|
@ -561,7 +561,7 @@ static int _raw1394_iso_recv_packets(raw1394handle_t handle)
|
||||||
|
|
||||||
if(disp == RAW1394_ISO_DEFER) {
|
if(disp == RAW1394_ISO_DEFER) {
|
||||||
/* queue an event so that we don't hang in the next read() */
|
/* queue an event so that we don't hang in the next read() */
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_QUEUE_ACTIVITY, 0))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_QUEUE_ACTIVITY, 0))
|
||||||
goto out_consume;
|
goto out_consume;
|
||||||
break;
|
break;
|
||||||
} else if(disp == RAW1394_ISO_STOP || disp == RAW1394_ISO_STOP_NOSYNC) {
|
} else if(disp == RAW1394_ISO_STOP || disp == RAW1394_ISO_STOP_NOSYNC) {
|
||||||
|
@ -577,7 +577,7 @@ static int _raw1394_iso_recv_packets(raw1394handle_t handle)
|
||||||
|
|
||||||
out_consume:
|
out_consume:
|
||||||
if(packets_done > 0) {
|
if(packets_done > 0) {
|
||||||
if(ioctl(handle->fd, RAW1394_ISO_RECV_RELEASE_PACKETS, packets_done))
|
if(ioctl(handle->fd, RAW1394_IOC_ISO_RECV_RELEASE_PACKETS, packets_done))
|
||||||
retval = -1;
|
retval = -1;
|
||||||
}
|
}
|
||||||
out_free:
|
out_free:
|
||||||
|
@ -594,7 +594,7 @@ int _raw1394_iso_iterate(raw1394handle_t handle)
|
||||||
if(handle->iso_mode == ISO_INACTIVE)
|
if(handle->iso_mode == ISO_INACTIVE)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err = ioctl(handle->fd, RAW1394_ISO_GET_STATUS, &handle->iso_status);
|
err = ioctl(handle->fd, RAW1394_IOC_ISO_GET_STATUS, &handle->iso_status);
|
||||||
if(err != 0)
|
if(err != 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
|
|
|
@ -116,24 +116,7 @@ typedef struct arm_request_response {
|
||||||
} *arm_request_response_t;
|
} *arm_request_response_t;
|
||||||
|
|
||||||
/* rawiso API */
|
/* rawiso API */
|
||||||
|
#include "ieee1394-ioctl.h"
|
||||||
/* ioctls */
|
|
||||||
#define RAW1394_ISO_XMIT_INIT 1 /* arg: raw1394_iso_status* */
|
|
||||||
#define RAW1394_ISO_RECV_INIT 2 /* arg: raw1394_iso_status* */
|
|
||||||
#define RAW1394_ISO_RECV_START 3 /* arg: int[3], { starting cycle, tag, sync } */
|
|
||||||
#define RAW1394_ISO_XMIT_START 8 /* arg: int[2], { starting cycle, prebuffer } */
|
|
||||||
#define RAW1394_ISO_XMIT_RECV_STOP 4
|
|
||||||
#define RAW1394_ISO_GET_STATUS 5 /* arg: raw1394_iso_status* */
|
|
||||||
#define RAW1394_ISO_PRODUCE_CONSUME 6 /* no longer used */
|
|
||||||
#define RAW1394_ISO_SHUTDOWN 7
|
|
||||||
#define RAW1394_ISO_QUEUE_ACTIVITY 9
|
|
||||||
#define RAW1394_ISO_RECV_LISTEN_CHANNEL 10 /* arg: channel number */
|
|
||||||
#define RAW1394_ISO_RECV_UNLISTEN_CHANNEL 11 /* arg: channel number */
|
|
||||||
#define RAW1394_ISO_RECV_SET_CHANNEL_MASK 12 /* arg: pointer to 64-bit mask */
|
|
||||||
#define RAW1394_ISO_RECV_PACKETS 13 /* arg: struct raw1394_iso_packets* */
|
|
||||||
#define RAW1394_ISO_RECV_RELEASE_PACKETS 14 /* arg: int n_packets */
|
|
||||||
#define RAW1394_ISO_XMIT_PACKETS 15 /* arg: struct raw1394_iso_packets* */
|
|
||||||
#define RAW1394_ISO_XMIT_SYNC 16
|
|
||||||
|
|
||||||
/* per-packet metadata embedded in the ringbuffer */
|
/* per-packet metadata embedded in the ringbuffer */
|
||||||
/* must be identical to hpsb_iso_packet_info in iso.h! */
|
/* must be identical to hpsb_iso_packet_info in iso.h! */
|
||||||
|
|
Reference in New Issue