Treat the kernel's iso context handle as opaque item
Libraw1394 must not rely on the kernel always handing out the value 0 as handle of the (first) allocated isochronous I/O context. For now this assumption is true but it may not stay that way forever. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
c321058ae3
commit
c18094afb2
13
src/fw-iso.c
13
src/fw-iso.c
|
@ -58,7 +58,7 @@ queue_packet(fw_handle_t handle,
|
||||||
queue_iso.packets = ptr_to_u64(handle->iso.packets);
|
queue_iso.packets = ptr_to_u64(handle->iso.packets);
|
||||||
queue_iso.size = handle->iso.packet_index * sizeof handle->iso.packets[0];
|
queue_iso.size = handle->iso.packet_index * sizeof handle->iso.packets[0];
|
||||||
queue_iso.data = ptr_to_u64(handle->iso.first_payload);
|
queue_iso.data = ptr_to_u64(handle->iso.first_payload);
|
||||||
queue_iso.handle = 0;
|
queue_iso.handle = handle->iso.kernel_handle;
|
||||||
handle->iso.packet_index = 0;
|
handle->iso.packet_index = 0;
|
||||||
handle->iso.first_payload = handle->iso.head;
|
handle->iso.first_payload = handle->iso.head;
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ int fw_iso_xmit_start(raw1394handle_t handle, int start_on_cycle,
|
||||||
start_iso.sync = 0; /* unused */
|
start_iso.sync = 0; /* unused */
|
||||||
start_iso.tags = 0; /* unused */
|
start_iso.tags = 0; /* unused */
|
||||||
start_iso.cycle = start_on_cycle;
|
start_iso.cycle = start_on_cycle;
|
||||||
start_iso.handle = 0;
|
start_iso.handle = fwhandle->iso.kernel_handle;
|
||||||
|
|
||||||
retval = ioctl(fwhandle->iso.fd,
|
retval = ioctl(fwhandle->iso.fd,
|
||||||
FW_CDEV_IOC_START_ISO, &start_iso);
|
FW_CDEV_IOC_START_ISO, &start_iso);
|
||||||
|
@ -262,7 +262,7 @@ int fw_iso_recv_start(fw_handle_t handle, int start_on_cycle,
|
||||||
tag_mask == -1 ? FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS : tag_mask;
|
tag_mask == -1 ? FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS : tag_mask;
|
||||||
/* sync is documented as 'not used' */
|
/* sync is documented as 'not used' */
|
||||||
start_iso.sync = 0;
|
start_iso.sync = 0;
|
||||||
start_iso.handle = 0;
|
start_iso.handle = handle->iso.kernel_handle;
|
||||||
|
|
||||||
if (ioctl(handle->iso.fd, FW_CDEV_IOC_START_ISO, &start_iso))
|
if (ioctl(handle->iso.fd, FW_CDEV_IOC_START_ISO, &start_iso))
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -351,7 +351,7 @@ int fw_iso_xmit_write(raw1394handle_t handle, unsigned char *data,
|
||||||
/* Set this to 0 to indicate that we're running. */
|
/* Set this to 0 to indicate that we're running. */
|
||||||
fwhandle->iso.prebuffer = 0;
|
fwhandle->iso.prebuffer = 0;
|
||||||
start_iso.cycle = fwhandle->iso.start_on_cycle;
|
start_iso.cycle = fwhandle->iso.start_on_cycle;
|
||||||
start_iso.handle = 0;
|
start_iso.handle = fwhandle->iso.kernel_handle;
|
||||||
|
|
||||||
retval = ioctl(fwhandle->iso.fd,
|
retval = ioctl(fwhandle->iso.fd,
|
||||||
FW_CDEV_IOC_START_ISO, &start_iso);
|
FW_CDEV_IOC_START_ISO, &start_iso);
|
||||||
|
@ -373,7 +373,7 @@ int fw_iso_xmit_sync(raw1394handle_t handle)
|
||||||
queue_iso.packets = ptr_to_u64(&skip);
|
queue_iso.packets = ptr_to_u64(&skip);
|
||||||
queue_iso.size = sizeof skip;
|
queue_iso.size = sizeof skip;
|
||||||
queue_iso.data = 0;
|
queue_iso.data = 0;
|
||||||
queue_iso.handle = 0;
|
queue_iso.handle = fwhandle->iso.kernel_handle;
|
||||||
|
|
||||||
len = ioctl(fwhandle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso);
|
len = ioctl(fwhandle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso);
|
||||||
if (len < 0)
|
if (len < 0)
|
||||||
|
@ -501,6 +501,7 @@ iso_init(fw_handle_t handle, int type,
|
||||||
handle->iso.packets = NULL;
|
handle->iso.packets = NULL;
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
handle->iso.kernel_handle = create.handle;
|
||||||
|
|
||||||
handle->iso.buffer =
|
handle->iso.buffer =
|
||||||
mmap(NULL, buf_packets * handle->iso.max_packet_size,
|
mmap(NULL, buf_packets * handle->iso.max_packet_size,
|
||||||
|
@ -587,7 +588,7 @@ void fw_iso_stop(fw_handle_t handle)
|
||||||
{
|
{
|
||||||
struct fw_cdev_stop_iso stop_iso;
|
struct fw_cdev_stop_iso stop_iso;
|
||||||
|
|
||||||
stop_iso.handle = 0;
|
stop_iso.handle = handle->iso.kernel_handle;
|
||||||
ioctl(handle->iso.fd, FW_CDEV_IOC_STOP_ISO, &stop_iso);
|
ioctl(handle->iso.fd, FW_CDEV_IOC_STOP_ISO, &stop_iso);
|
||||||
|
|
||||||
handle->iso.head = handle->iso.buffer;
|
handle->iso.head = handle->iso.buffer;
|
||||||
|
|
Reference in New Issue