diff --git a/.cvsignore b/.cvsignore index 5de9d16..ad0dec6 100644 --- a/.cvsignore +++ b/.cvsignore @@ -1,3 +1,4 @@ libraw1394-1.2.0.tar.gz libraw1394-1.2.1.tar.gz fw-device-cdev.h +libraw1394-1.3.0.tar.gz diff --git a/libraw1394-juju.patch b/libraw1394-juju.patch index 47a5613..fe2d80b 100644 --- a/libraw1394-juju.patch +++ b/libraw1394-juju.patch @@ -1,49 +1,36 @@ -diff --git a/Makefile.am b/Makefile.am -index 04ed38a..21df527 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,6 +1,7 @@ - # process this file with automake to create a Makefile.in - --SUBDIRS = src tools doc debian -+SUBDIRS = $(LIB_SUBDIR) tools doc debian -+DIST_SUBDIRS = src juju - - pkgconfigdir = @libdir@/pkgconfig - pkgconfig_DATA = libraw1394.pc -diff --git a/configure.ac b/configure.ac -index fe23ca8..7e5dd66 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -24,6 +24,27 @@ AC_SUBST(lt_major) +diff -Naurp libraw1394-1.3.0.orig/configure.ac libraw1394-1.3.0/configure.ac +--- libraw1394-1.3.0.orig/configure.ac 2007-05-30 01:32:37.000000000 -0400 ++++ libraw1394-1.3.0/configure.ac 2007-10-18 22:21:34.000000000 -0400 +@@ -24,6 +24,28 @@ AC_SUBST(lt_major) AC_SUBST(lt_revision) AC_SUBST(lt_age) +AC_ARG_WITH(juju-dir,[ --with-juju-dir= Path to juju include files]) +if ! test -z "$with_juju_dir" ; then -+ JUJU_DIR="$with_juju_dir" -+ LIB_SUBDIR=juju -+ AC_SUBST(JUJU_DIR) ++ JUJU_DIR="$with_juju_dir" ++ LIB_SUBDIR=juju ++ AC_SUBST(JUJU_DIR) +else -+ LIB_SUBDIR=src ++ LIB_SUBDIR=src +fi +AC_SUBST(LIB_SUBDIR) + +AC_ARG_WITH(fw-device-prefix, -+ [ --with-fw-device-prefix= Prefix of firewire device file names (default "fw").], -+ [FW_DEVICE_PREFIX="\"$withval\""], [FW_DEVICE_PREFIX="\"fw\""]) ++ [ --with-fw-device-prefix= Prefix of firewire device file names (default "fw").], ++ [FW_DEVICE_PREFIX="\"$withval\""], [FW_DEVICE_PREFIX="\"fw\""]) +AC_ARG_WITH(fw-device-dir, -+ [ --with-fw-device-dir= Directory to watch for firewire device files (default "/dev").], -+ [FW_DEVICE_DIR="\"$withval\""], [FW_DEVICE_DIR="\"/dev\""]) ++ [ --with-fw-device-dir= Directory to watch for firewire device files (default "/dev").], ++ [FW_DEVICE_DIR="\"$withval\""], [FW_DEVICE_DIR="\"/dev\""]) + +AC_DEFINE_UNQUOTED(FW_DEVICE_PREFIX, $FW_DEVICE_PREFIX, -+ [Prefix of firewire device file names.]) ++ [Prefix of firewire device file names.]) +AC_DEFINE_UNQUOTED(FW_DEVICE_DIR, $FW_DEVICE_DIR, -+ [Directory to watch for firewire device files.]) - - #CFLAGS=${CFLAGS:-"-Wall"} - AC_OUTPUT([ -@@ -31,6 +52,7 @@ Makefile ++ [Directory to watch for firewire device files.]) ++ + dnl Check to see if valgrind is available + AC_ARG_WITH(valgrind, AC_HELP_STRING([--with-valgrind],[compile with valgrind support])) + if test x$with_valgrind = xyes ; then +@@ -36,6 +58,7 @@ Makefile libraw1394.pc libraw1394.spec src/Makefile @@ -51,25 +38,9 @@ index fe23ca8..7e5dd66 100644 tools/Makefile doc/Makefile doc/testlibraw.1 -diff --git a/juju/Makefile.am b/juju/Makefile.am -new file mode 100644 -index 0000000..6fd6a5e ---- /dev/null -+++ b/juju/Makefile.am -@@ -0,0 +1,8 @@ -+lib_LTLIBRARIES = libraw1394.la -+ -+INCLUDES = -I$(JUJU_DIR) -+libraw1394_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@ -+ -+libraw1394_la_SOURCES = raw1394.c raw1394-iso.c juju.h -+ -+pkginclude_HEADERS = ../src/raw1394.h ../src/csr.h ../src/ieee1394.h -diff --git a/juju/juju.h b/juju/juju.h -new file mode 100644 -index 0000000..c7a2ebd ---- /dev/null -+++ b/juju/juju.h +diff -Naurp libraw1394-1.3.0.orig/juju/juju.h libraw1394-1.3.0/juju/juju.h +--- libraw1394-1.3.0.orig/juju/juju.h 1969-12-31 19:00:00.000000000 -0500 ++++ libraw1394-1.3.0/juju/juju.h 2007-10-18 22:18:46.000000000 -0400 @@ -0,0 +1,143 @@ +/* -*- c-basic-offset: 8 -*- + * @@ -214,539 +185,21 @@ index 0000000..c7a2ebd +}; + +#endif -diff --git a/juju/raw1394-iso.c b/juju/raw1394-iso.c -new file mode 100644 -index 0000000..5e18dab ---- /dev/null -+++ b/juju/raw1394-iso.c -@@ -0,0 +1,522 @@ -+/* -*- c-basic-offset: 8 -*- -+ * -+ * raw1394-iso.c -- Emulation of the raw1394 rawiso API on the juju stack -+ * -+ * Copyright (C) 2007 Kristian Hoegsberg -+ * -+ * 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. -+ * -+ * 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. -+ * -+ * 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. -+ */ +diff -Naurp libraw1394-1.3.0.orig/juju/Makefile.am libraw1394-1.3.0/juju/Makefile.am +--- libraw1394-1.3.0.orig/juju/Makefile.am 1969-12-31 19:00:00.000000000 -0500 ++++ libraw1394-1.3.0/juju/Makefile.am 2007-10-18 22:18:46.000000000 -0400 +@@ -0,0 +1,8 @@ ++lib_LTLIBRARIES = libraw1394.la + -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include ++INCLUDES = -I$(JUJU_DIR) ++libraw1394_la_LDFLAGS = -version-info @lt_major@:@lt_revision@:@lt_age@ + -+#include "juju.h" ++libraw1394_la_SOURCES = raw1394.c raw1394-iso.c juju.h + -+static int -+queue_packet(raw1394handle_t handle, -+ unsigned int length, unsigned int header_length, -+ unsigned char tag, unsigned char sy) -+{ -+ struct fw_cdev_queue_iso queue_iso; -+ struct fw_cdev_iso_packet *p; -+ int err; -+ -+ p = &handle->iso.packets[handle->iso.packet_index]; -+ p->payload_length = length; -+ p->interrupt = -+ handle->iso.packet_phase == handle->iso.irq_interval - 1; -+ p->skip = 0; -+ p->tag = tag; -+ p->sy = sy; -+ p->header_length = header_length; -+ -+ handle->iso.head += length; -+ handle->iso.packet_count++; -+ handle->iso.packet_phase++; -+ handle->iso.packet_index++; -+ -+ if (handle->iso.packet_phase == handle->iso.irq_interval) -+ handle->iso.packet_phase = 0; -+ -+ if (handle->iso.head + handle->iso.max_packet_size > handle->iso.buffer_end) -+ handle->iso.head = handle->iso.buffer; -+ -+ /* Queue the packets in the kernel if we filled up the packets -+ * array or wrapped the payload buffer. */ -+ if (handle->iso.packet_index == handle->iso.irq_interval || -+ handle->iso.head == handle->iso.buffer) { -+ queue_iso.packets = ptr_to_u64(handle->iso.packets); -+ queue_iso.size = handle->iso.packet_index * sizeof handle->iso.packets[0]; -+ queue_iso.data = ptr_to_u64(handle->iso.first_payload); -+ queue_iso.handle = 0; -+ handle->iso.packet_index = 0; -+ handle->iso.first_payload = handle->iso.head; -+ -+ err = ioctl(handle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso); -+ if (err < 0) -+ return -1; -+ } -+} -+ -+static int -+queue_xmit_packets(raw1394handle_t handle, int limit) -+{ -+ enum raw1394_iso_disposition d; -+ unsigned char tag, sy; -+ int len, cycle, dropped; -+ -+ if (handle->iso.xmit_handler == NULL) -+ return 0; -+ -+ while (handle->iso.packet_count < limit) { -+ -+ d = handle->iso.xmit_handler(handle, handle->iso.head, -+ &len, &tag, &sy, cycle, dropped); -+ -+ switch (d) { -+ case RAW1394_ISO_OK: -+ queue_packet(handle, len, 0, tag, sy); -+ break; -+ case RAW1394_ISO_DEFER: -+ case RAW1394_ISO_AGAIN: -+ default: -+ return 0; -+ case RAW1394_ISO_ERROR: -+ return -1; -+ case RAW1394_ISO_STOP: -+ raw1394_iso_stop(handle); -+ return 0; -+ } -+ } -+ -+ return 0; -+} -+ -+int raw1394_iso_xmit_start(raw1394handle_t handle, int start_on_cycle, -+ int prebuffer_packets) -+{ -+ struct fw_cdev_start_iso start_iso; -+ int retval; -+ -+ if (prebuffer_packets == -1) -+ prebuffer_packets = handle->iso.irq_interval; -+ -+ handle->iso.prebuffer = prebuffer_packets; -+ handle->iso.start_on_cycle = start_on_cycle; -+ -+ queue_xmit_packets(handle, prebuffer_packets); -+ -+ if (handle->iso.prebuffer <= handle->iso.packet_count) { -+ start_iso.cycle = start_on_cycle; -+ start_iso.handle = 0; -+ -+ retval = ioctl(handle->iso.fd, -+ FW_CDEV_IOC_START_ISO, &start_iso); -+ if (retval < 0) -+ return retval; -+ } -+ -+ return queue_xmit_packets(handle, handle->iso.buf_packets); -+} -+ -+static int -+queue_recv_packets(raw1394handle_t handle) -+{ -+ while (handle->iso.packet_count <= handle->iso.buf_packets) -+ queue_packet(handle, handle->iso.max_packet_size, 4, 0, 0); -+ -+ return 0; -+} -+ -+static enum raw1394_iso_disposition -+flush_recv_packets(raw1394handle_t handle, -+ struct fw_cdev_event_iso_interrupt *interrupt) -+{ -+ enum raw1394_iso_disposition d; -+ quadlet_t header, *p, *end; -+ unsigned int len, cycle, dropped; -+ unsigned char channel, tag, sy; -+ -+ p = interrupt->header; -+ end = (void *) interrupt->header + interrupt->header_length; -+ cycle = interrupt->cycle; -+ dropped = 0; -+ d = RAW1394_ISO_OK; -+ -+ while (p < end) { -+ header = be32_to_cpu(*p++); -+ len = header >> 16; -+ tag = (header >> 14) & 0x3; -+ channel = (header >> 8) & 0x3f; -+ sy = header & 0x0f; -+ -+ d = handle->iso.recv_handler(handle, handle->iso.tail, len, -+ channel, tag, sy, cycle, dropped); -+ if (d != RAW1394_ISO_OK) -+ /* FIXME: we need to save the headers so we -+ * can restart this loop. */ -+ break; -+ cycle++; -+ -+ handle->iso.tail += handle->iso.max_packet_size; -+ handle->iso.packet_count--; -+ -+ if (handle->iso.tail + handle->iso.max_packet_size > handle->iso.buffer_end) -+ handle->iso.tail = handle->iso.buffer; -+ } -+ -+ switch (d) { -+ case RAW1394_ISO_OK: -+ case RAW1394_ISO_DEFER: -+ default: -+ break; -+ -+ case RAW1394_ISO_ERROR: -+ return -1; -+ -+ case RAW1394_ISO_STOP: -+ raw1394_iso_stop(handle); -+ return 0; -+ } -+ -+ queue_recv_packets(handle); -+ -+ return 0; -+} -+ -+int raw1394_iso_recv_start(raw1394handle_t handle, int start_on_cycle, -+ int tag_mask, int sync) -+{ -+ struct fw_cdev_start_iso start_iso; -+ -+ queue_recv_packets(handle); -+ -+ start_iso.cycle = start_on_cycle; -+ start_iso.tags = -+ tag_mask == -1 ? FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS : tag_mask; -+ /* sync is documented as 'not used' */ -+ start_iso.sync = 0; -+ start_iso.handle = 0; -+ -+ return ioctl(handle->iso.fd, FW_CDEV_IOC_START_ISO, &start_iso); -+} -+ -+static int handle_iso_event(raw1394handle_t handle, -+ struct epoll_closure *closure, __uint32_t events) -+{ -+ struct fw_cdev_event_iso_interrupt *interrupt; -+ int len; -+ -+ len = read(handle->iso.fd, handle->buffer, sizeof handle->buffer); -+ if (len < 0) -+ return -1; -+ -+ interrupt = (struct fw_cdev_event_iso_interrupt *) handle->buffer; -+ if (interrupt->type != FW_CDEV_EVENT_ISO_INTERRUPT) -+ return 0; -+ -+ switch (handle->iso.type) { -+ case FW_CDEV_ISO_CONTEXT_TRANSMIT: -+ handle->iso.packet_count -= handle->iso.irq_interval; -+ return queue_xmit_packets(handle, handle->iso.buf_packets); -+ case FW_CDEV_ISO_CONTEXT_RECEIVE: -+ return flush_recv_packets(handle, interrupt); -+ default: -+ /* Doesn't happen. */ -+ return -1; -+ } -+} -+ -+int raw1394_iso_xmit_write(raw1394handle_t handle, unsigned char *data, -+ unsigned int len, unsigned char tag, -+ unsigned char sy) -+{ -+ struct fw_cdev_queue_iso queue_iso; -+ struct fw_cdev_start_iso start_iso; -+ struct fw_cdev_iso_packet *p; -+ -+ if (len > handle->iso.max_packet_size) { -+ errno = EINVAL; -+ return -1; -+ } -+ -+ /* Block until we have space for another packet. */ -+ while (handle->iso.packet_count + handle->iso.irq_interval > -+ handle->iso.buf_packets) -+ raw1394_loop_iterate(handle); -+ -+ memcpy(handle->iso.head, data, len); -+ if (queue_packet(handle, len, 0, tag, sy) < 0) -+ return -1; -+ -+ /* Start the streaming if it's not already running and if -+ * we've buffered up enough packets. */ -+ if (handle->iso.prebuffer > 0 && -+ handle->iso.packet_count >= handle->iso.prebuffer) { -+ /* Set this to 0 to indicate that we're running. */ -+ handle->iso.prebuffer = 0; -+ start_iso.cycle = handle->iso.start_on_cycle; -+ start_iso.handle = 0; -+ -+ len = ioctl(handle->iso.fd, -+ FW_CDEV_IOC_START_ISO, &start_iso); -+ if (len < 0) -+ return len; -+ } -+ -+ return 0; -+} -+ -+int raw1394_iso_xmit_sync(raw1394handle_t handle) -+{ -+ struct fw_cdev_iso_packet skip; -+ struct fw_cdev_queue_iso queue_iso; -+ int len; -+ -+ skip.payload_length = 0; -+ skip.interrupt = 1; -+ skip.skip = 1; -+ skip.tag = 0; -+ skip.sy = 0; -+ skip.header_length = 0; -+ -+ queue_iso.packets = ptr_to_u64(&skip); -+ queue_iso.size = sizeof skip; -+ queue_iso.data = 0; -+ queue_iso.handle = 0; -+ -+ len = ioctl(handle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso); -+ if (len < 0) -+ return -1; -+ -+ /* Now that we've queued the skip packet, we'll get an -+ * interrupt when the transmit buffer is flushed, so all we do -+ * here is wait. */ -+ while (handle->iso.packet_count > 0) -+ raw1394_loop_iterate(handle); -+ -+ /* The iso mainloop thinks that interrutps indicate another -+ * irq_interval number of packets was sent, so the skip -+ * interrupt makes it go out of whack. We just reset it. */ -+ handle->iso.head = handle->iso.buffer; -+ handle->iso.tail = handle->iso.buffer; -+ handle->iso.first_payload = handle->iso.buffer; -+ handle->iso.packet_phase = 0; -+ handle->iso.packet_count = 0; -+ -+ return 0; -+} -+ -+int raw1394_iso_recv_flush(raw1394handle_t handle) -+{ -+ /* FIXME: huh, we'll need kernel support here... */ -+ -+ return 0; -+} -+ -+static unsigned int -+round_to_power_of_two(unsigned int value) -+{ -+ unsigned int pot; -+ -+ pot = 1; -+ while (pot < value) -+ pot <<= 1; -+ -+ return pot; -+} -+ -+static int -+iso_init(raw1394handle_t handle, int type, -+ raw1394_iso_xmit_handler_t xmit_handler, -+ raw1394_iso_recv_handler_t recv_handler, -+ unsigned int buf_packets, -+ unsigned int max_packet_size, -+ unsigned char channel, -+ enum raw1394_iso_speed speed, -+ int irq_interval) -+{ -+ struct fw_cdev_create_iso_context create; -+ struct epoll_event ep; -+ int retval, prot; -+ -+ if (handle->iso.fd != -1) { -+ errno = EBUSY; -+ return -1; -+ } -+ -+ switch (type) { -+ case FW_CDEV_ISO_CONTEXT_TRANSMIT: -+ prot = PROT_READ | PROT_WRITE; -+ break; -+ case FW_CDEV_ISO_CONTEXT_RECEIVE: -+ prot = PROT_READ; -+ break; -+ default: -+ errno = EINVAL; -+ return -1; -+ } -+ -+ handle->iso.type = type; -+ if (irq_interval < 0) -+ handle->iso.irq_interval = 256; -+ else -+ handle->iso.irq_interval = irq_interval; -+ handle->iso.xmit_handler = xmit_handler; -+ handle->iso.recv_handler = recv_handler; -+ handle->iso.buf_packets = buf_packets; -+ handle->iso.max_packet_size = round_to_power_of_two(max_packet_size); -+ handle->iso.packet_phase = 0; -+ handle->iso.packet_count = 0; -+ handle->iso.packets = -+ malloc(handle->iso.irq_interval * sizeof handle->iso.packets[0]); -+ if (handle->iso.packets == NULL) -+ return -1; -+ -+ handle->iso.fd = open(handle->local_filename, O_RDWR); -+ if (handle->iso.fd < 0) { -+ free(handle->iso.packets); -+ return -1; -+ } -+ -+ handle->iso.closure.func = handle_iso_event; -+ ep.events = EPOLLIN; -+ ep.data.ptr = &handle->iso.closure; -+ if (epoll_ctl(handle->epoll_fd, EPOLL_CTL_ADD, -+ handle->iso.fd, &ep) < 0) { -+ close(handle->iso.fd); -+ free(handle->iso.packets); -+ return -1; -+ } -+ -+ create.type = type; -+ create.channel = channel; -+ create.speed = speed; -+ create.header_size = 4; -+ -+ retval = ioctl(handle->iso.fd, -+ FW_CDEV_IOC_CREATE_ISO_CONTEXT, &create); -+ if (retval < 0) { -+ close(handle->iso.fd); -+ free(handle->iso.packets); -+ return retval; -+ } -+ -+ handle->iso.buffer = -+ mmap(NULL, buf_packets * max_packet_size, -+ prot, MAP_SHARED, handle->iso.fd, 0); -+ -+ if (handle->iso.buffer == MAP_FAILED) { -+ close(handle->iso.fd); -+ free(handle->iso.packets); -+ return -1; -+ } -+ -+ handle->iso.buffer_end = handle->iso.buffer + -+ buf_packets * max_packet_size; -+ handle->iso.head = handle->iso.buffer; -+ handle->iso.tail = handle->iso.buffer; -+ handle->iso.first_payload = handle->iso.buffer; -+ -+ return 0; -+} -+ -+int raw1394_iso_xmit_init(raw1394handle_t handle, -+ raw1394_iso_xmit_handler_t handler, -+ unsigned int buf_packets, -+ unsigned int max_packet_size, -+ unsigned char channel, -+ enum raw1394_iso_speed speed, -+ int irq_interval) -+{ -+ return iso_init(handle, FW_CDEV_ISO_CONTEXT_TRANSMIT, -+ handler, NULL, buf_packets, max_packet_size, -+ channel, speed, irq_interval); -+} -+ -+int raw1394_iso_recv_init(raw1394handle_t handle, -+ raw1394_iso_recv_handler_t handler, -+ unsigned int buf_packets, -+ unsigned int max_packet_size, -+ unsigned char channel, -+ enum raw1394_iso_dma_recv_mode mode, -+ int irq_interval) -+{ -+ return iso_init(handle, FW_CDEV_ISO_CONTEXT_RECEIVE, -+ NULL, handler, buf_packets, max_packet_size, -+ channel, 0, irq_interval); -+} -+ -+int raw1394_iso_multichannel_recv_init(raw1394handle_t handle, -+ raw1394_iso_recv_handler_t handler, -+ unsigned int buf_packets, -+ unsigned int max_packet_size, -+ int irq_interval) -+{ -+ /* FIXME: gah */ -+ errno = ENOSYS; -+ return -1; -+} -+ -+int raw1394_iso_recv_listen_channel(raw1394handle_t handle, -+ unsigned char channel) -+{ -+ /* FIXME: multichannel */ -+ errno = ENOSYS; -+ return -1; -+} -+ -+int raw1394_iso_recv_unlisten_channel(raw1394handle_t handle, -+ unsigned char channel) -+{ -+ /* FIXME: multichannel */ -+ errno = ENOSYS; -+ return -1; -+} -+ -+int raw1394_iso_recv_set_channel_mask(raw1394handle_t handle, u_int64_t mask) -+{ -+ /* FIXME: multichannel */ -+ errno = ENOSYS; -+ return -1; -+} -+ -+void raw1394_iso_stop(raw1394handle_t handle) -+{ -+ struct fw_cdev_stop_iso stop_iso; -+ -+ stop_iso.handle = 0; -+ ioctl(handle->iso.fd, FW_CDEV_IOC_STOP_ISO); -+ -+ handle->iso.head = handle->iso.buffer; -+ handle->iso.tail = handle->iso.buffer; -+ handle->iso.first_payload = handle->iso.buffer; -+ handle->iso.packet_phase = 0; -+ handle->iso.packet_count = 0; -+} -+ -+void raw1394_iso_shutdown(raw1394handle_t handle) -+{ -+ munmap(handle->iso.buffer, -+ handle->iso.buf_packets * handle->iso.max_packet_size); -+ close(handle->iso.fd); -+ free(handle->iso.packets); -+} -diff --git a/juju/raw1394.c b/juju/raw1394.c -new file mode 100644 -index 0000000..7f73b3b ---- /dev/null -+++ b/juju/raw1394.c ++pkginclude_HEADERS = ../src/raw1394.h ../src/csr.h ../src/ieee1394.h +diff -Naurp libraw1394-1.3.0.orig/juju/raw1394.c libraw1394-1.3.0/juju/raw1394.c +--- libraw1394-1.3.0.orig/juju/raw1394.c 1969-12-31 19:00:00.000000000 -0500 ++++ libraw1394-1.3.0/juju/raw1394.c 2007-10-18 22:18:46.000000000 -0400 @@ -0,0 +1,1441 @@ +/* -*- c-basic-offset: 8 -*- + * @@ -2189,20 +1642,556 @@ index 0000000..7f73b3b + + return 0; +} -diff --git a/tools/Makefile.am b/tools/Makefile.am -index 29b250e..5be1b6f 100644 ---- a/tools/Makefile.am -+++ b/tools/Makefile.am +diff -Naurp libraw1394-1.3.0.orig/juju/raw1394-iso.c libraw1394-1.3.0/juju/raw1394-iso.c +--- libraw1394-1.3.0.orig/juju/raw1394-iso.c 1969-12-31 19:00:00.000000000 -0500 ++++ libraw1394-1.3.0/juju/raw1394-iso.c 2007-10-18 22:18:46.000000000 -0400 +@@ -0,0 +1,522 @@ ++/* -*- c-basic-offset: 8 -*- ++ * ++ * raw1394-iso.c -- Emulation of the raw1394 rawiso API on the juju stack ++ * ++ * Copyright (C) 2007 Kristian Hoegsberg ++ * ++ * 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. ++ * ++ * 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. ++ * ++ * 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. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "juju.h" ++ ++static int ++queue_packet(raw1394handle_t handle, ++ unsigned int length, unsigned int header_length, ++ unsigned char tag, unsigned char sy) ++{ ++ struct fw_cdev_queue_iso queue_iso; ++ struct fw_cdev_iso_packet *p; ++ int err; ++ ++ p = &handle->iso.packets[handle->iso.packet_index]; ++ p->payload_length = length; ++ p->interrupt = ++ handle->iso.packet_phase == handle->iso.irq_interval - 1; ++ p->skip = 0; ++ p->tag = tag; ++ p->sy = sy; ++ p->header_length = header_length; ++ ++ handle->iso.head += length; ++ handle->iso.packet_count++; ++ handle->iso.packet_phase++; ++ handle->iso.packet_index++; ++ ++ if (handle->iso.packet_phase == handle->iso.irq_interval) ++ handle->iso.packet_phase = 0; ++ ++ if (handle->iso.head + handle->iso.max_packet_size > handle->iso.buffer_end) ++ handle->iso.head = handle->iso.buffer; ++ ++ /* Queue the packets in the kernel if we filled up the packets ++ * array or wrapped the payload buffer. */ ++ if (handle->iso.packet_index == handle->iso.irq_interval || ++ handle->iso.head == handle->iso.buffer) { ++ queue_iso.packets = ptr_to_u64(handle->iso.packets); ++ queue_iso.size = handle->iso.packet_index * sizeof handle->iso.packets[0]; ++ queue_iso.data = ptr_to_u64(handle->iso.first_payload); ++ queue_iso.handle = 0; ++ handle->iso.packet_index = 0; ++ handle->iso.first_payload = handle->iso.head; ++ ++ err = ioctl(handle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso); ++ if (err < 0) ++ return -1; ++ } ++} ++ ++static int ++queue_xmit_packets(raw1394handle_t handle, int limit) ++{ ++ enum raw1394_iso_disposition d; ++ unsigned char tag, sy; ++ int len, cycle, dropped; ++ ++ if (handle->iso.xmit_handler == NULL) ++ return 0; ++ ++ while (handle->iso.packet_count < limit) { ++ ++ d = handle->iso.xmit_handler(handle, handle->iso.head, ++ &len, &tag, &sy, cycle, dropped); ++ ++ switch (d) { ++ case RAW1394_ISO_OK: ++ queue_packet(handle, len, 0, tag, sy); ++ break; ++ case RAW1394_ISO_DEFER: ++ case RAW1394_ISO_AGAIN: ++ default: ++ return 0; ++ case RAW1394_ISO_ERROR: ++ return -1; ++ case RAW1394_ISO_STOP: ++ raw1394_iso_stop(handle); ++ return 0; ++ } ++ } ++ ++ return 0; ++} ++ ++int raw1394_iso_xmit_start(raw1394handle_t handle, int start_on_cycle, ++ int prebuffer_packets) ++{ ++ struct fw_cdev_start_iso start_iso; ++ int retval; ++ ++ if (prebuffer_packets == -1) ++ prebuffer_packets = handle->iso.irq_interval; ++ ++ handle->iso.prebuffer = prebuffer_packets; ++ handle->iso.start_on_cycle = start_on_cycle; ++ ++ queue_xmit_packets(handle, prebuffer_packets); ++ ++ if (handle->iso.prebuffer <= handle->iso.packet_count) { ++ start_iso.cycle = start_on_cycle; ++ start_iso.handle = 0; ++ ++ retval = ioctl(handle->iso.fd, ++ FW_CDEV_IOC_START_ISO, &start_iso); ++ if (retval < 0) ++ return retval; ++ } ++ ++ return queue_xmit_packets(handle, handle->iso.buf_packets); ++} ++ ++static int ++queue_recv_packets(raw1394handle_t handle) ++{ ++ while (handle->iso.packet_count <= handle->iso.buf_packets) ++ queue_packet(handle, handle->iso.max_packet_size, 4, 0, 0); ++ ++ return 0; ++} ++ ++static enum raw1394_iso_disposition ++flush_recv_packets(raw1394handle_t handle, ++ struct fw_cdev_event_iso_interrupt *interrupt) ++{ ++ enum raw1394_iso_disposition d; ++ quadlet_t header, *p, *end; ++ unsigned int len, cycle, dropped; ++ unsigned char channel, tag, sy; ++ ++ p = interrupt->header; ++ end = (void *) interrupt->header + interrupt->header_length; ++ cycle = interrupt->cycle; ++ dropped = 0; ++ d = RAW1394_ISO_OK; ++ ++ while (p < end) { ++ header = be32_to_cpu(*p++); ++ len = header >> 16; ++ tag = (header >> 14) & 0x3; ++ channel = (header >> 8) & 0x3f; ++ sy = header & 0x0f; ++ ++ d = handle->iso.recv_handler(handle, handle->iso.tail, len, ++ channel, tag, sy, cycle, dropped); ++ if (d != RAW1394_ISO_OK) ++ /* FIXME: we need to save the headers so we ++ * can restart this loop. */ ++ break; ++ cycle++; ++ ++ handle->iso.tail += handle->iso.max_packet_size; ++ handle->iso.packet_count--; ++ ++ if (handle->iso.tail + handle->iso.max_packet_size > handle->iso.buffer_end) ++ handle->iso.tail = handle->iso.buffer; ++ } ++ ++ switch (d) { ++ case RAW1394_ISO_OK: ++ case RAW1394_ISO_DEFER: ++ default: ++ break; ++ ++ case RAW1394_ISO_ERROR: ++ return -1; ++ ++ case RAW1394_ISO_STOP: ++ raw1394_iso_stop(handle); ++ return 0; ++ } ++ ++ queue_recv_packets(handle); ++ ++ return 0; ++} ++ ++int raw1394_iso_recv_start(raw1394handle_t handle, int start_on_cycle, ++ int tag_mask, int sync) ++{ ++ struct fw_cdev_start_iso start_iso; ++ ++ queue_recv_packets(handle); ++ ++ start_iso.cycle = start_on_cycle; ++ start_iso.tags = ++ tag_mask == -1 ? FW_CDEV_ISO_CONTEXT_MATCH_ALL_TAGS : tag_mask; ++ /* sync is documented as 'not used' */ ++ start_iso.sync = 0; ++ start_iso.handle = 0; ++ ++ return ioctl(handle->iso.fd, FW_CDEV_IOC_START_ISO, &start_iso); ++} ++ ++static int handle_iso_event(raw1394handle_t handle, ++ struct epoll_closure *closure, __uint32_t events) ++{ ++ struct fw_cdev_event_iso_interrupt *interrupt; ++ int len; ++ ++ len = read(handle->iso.fd, handle->buffer, sizeof handle->buffer); ++ if (len < 0) ++ return -1; ++ ++ interrupt = (struct fw_cdev_event_iso_interrupt *) handle->buffer; ++ if (interrupt->type != FW_CDEV_EVENT_ISO_INTERRUPT) ++ return 0; ++ ++ switch (handle->iso.type) { ++ case FW_CDEV_ISO_CONTEXT_TRANSMIT: ++ handle->iso.packet_count -= handle->iso.irq_interval; ++ return queue_xmit_packets(handle, handle->iso.buf_packets); ++ case FW_CDEV_ISO_CONTEXT_RECEIVE: ++ return flush_recv_packets(handle, interrupt); ++ default: ++ /* Doesn't happen. */ ++ return -1; ++ } ++} ++ ++int raw1394_iso_xmit_write(raw1394handle_t handle, unsigned char *data, ++ unsigned int len, unsigned char tag, ++ unsigned char sy) ++{ ++ struct fw_cdev_queue_iso queue_iso; ++ struct fw_cdev_start_iso start_iso; ++ struct fw_cdev_iso_packet *p; ++ ++ if (len > handle->iso.max_packet_size) { ++ errno = EINVAL; ++ return -1; ++ } ++ ++ /* Block until we have space for another packet. */ ++ while (handle->iso.packet_count + handle->iso.irq_interval > ++ handle->iso.buf_packets) ++ raw1394_loop_iterate(handle); ++ ++ memcpy(handle->iso.head, data, len); ++ if (queue_packet(handle, len, 0, tag, sy) < 0) ++ return -1; ++ ++ /* Start the streaming if it's not already running and if ++ * we've buffered up enough packets. */ ++ if (handle->iso.prebuffer > 0 && ++ handle->iso.packet_count >= handle->iso.prebuffer) { ++ /* Set this to 0 to indicate that we're running. */ ++ handle->iso.prebuffer = 0; ++ start_iso.cycle = handle->iso.start_on_cycle; ++ start_iso.handle = 0; ++ ++ len = ioctl(handle->iso.fd, ++ FW_CDEV_IOC_START_ISO, &start_iso); ++ if (len < 0) ++ return len; ++ } ++ ++ return 0; ++} ++ ++int raw1394_iso_xmit_sync(raw1394handle_t handle) ++{ ++ struct fw_cdev_iso_packet skip; ++ struct fw_cdev_queue_iso queue_iso; ++ int len; ++ ++ skip.payload_length = 0; ++ skip.interrupt = 1; ++ skip.skip = 1; ++ skip.tag = 0; ++ skip.sy = 0; ++ skip.header_length = 0; ++ ++ queue_iso.packets = ptr_to_u64(&skip); ++ queue_iso.size = sizeof skip; ++ queue_iso.data = 0; ++ queue_iso.handle = 0; ++ ++ len = ioctl(handle->iso.fd, FW_CDEV_IOC_QUEUE_ISO, &queue_iso); ++ if (len < 0) ++ return -1; ++ ++ /* Now that we've queued the skip packet, we'll get an ++ * interrupt when the transmit buffer is flushed, so all we do ++ * here is wait. */ ++ while (handle->iso.packet_count > 0) ++ raw1394_loop_iterate(handle); ++ ++ /* The iso mainloop thinks that interrutps indicate another ++ * irq_interval number of packets was sent, so the skip ++ * interrupt makes it go out of whack. We just reset it. */ ++ handle->iso.head = handle->iso.buffer; ++ handle->iso.tail = handle->iso.buffer; ++ handle->iso.first_payload = handle->iso.buffer; ++ handle->iso.packet_phase = 0; ++ handle->iso.packet_count = 0; ++ ++ return 0; ++} ++ ++int raw1394_iso_recv_flush(raw1394handle_t handle) ++{ ++ /* FIXME: huh, we'll need kernel support here... */ ++ ++ return 0; ++} ++ ++static unsigned int ++round_to_power_of_two(unsigned int value) ++{ ++ unsigned int pot; ++ ++ pot = 1; ++ while (pot < value) ++ pot <<= 1; ++ ++ return pot; ++} ++ ++static int ++iso_init(raw1394handle_t handle, int type, ++ raw1394_iso_xmit_handler_t xmit_handler, ++ raw1394_iso_recv_handler_t recv_handler, ++ unsigned int buf_packets, ++ unsigned int max_packet_size, ++ unsigned char channel, ++ enum raw1394_iso_speed speed, ++ int irq_interval) ++{ ++ struct fw_cdev_create_iso_context create; ++ struct epoll_event ep; ++ int retval, prot; ++ ++ if (handle->iso.fd != -1) { ++ errno = EBUSY; ++ return -1; ++ } ++ ++ switch (type) { ++ case FW_CDEV_ISO_CONTEXT_TRANSMIT: ++ prot = PROT_READ | PROT_WRITE; ++ break; ++ case FW_CDEV_ISO_CONTEXT_RECEIVE: ++ prot = PROT_READ; ++ break; ++ default: ++ errno = EINVAL; ++ return -1; ++ } ++ ++ handle->iso.type = type; ++ if (irq_interval < 0) ++ handle->iso.irq_interval = 256; ++ else ++ handle->iso.irq_interval = irq_interval; ++ handle->iso.xmit_handler = xmit_handler; ++ handle->iso.recv_handler = recv_handler; ++ handle->iso.buf_packets = buf_packets; ++ handle->iso.max_packet_size = round_to_power_of_two(max_packet_size); ++ handle->iso.packet_phase = 0; ++ handle->iso.packet_count = 0; ++ handle->iso.packets = ++ malloc(handle->iso.irq_interval * sizeof handle->iso.packets[0]); ++ if (handle->iso.packets == NULL) ++ return -1; ++ ++ handle->iso.fd = open(handle->local_filename, O_RDWR); ++ if (handle->iso.fd < 0) { ++ free(handle->iso.packets); ++ return -1; ++ } ++ ++ handle->iso.closure.func = handle_iso_event; ++ ep.events = EPOLLIN; ++ ep.data.ptr = &handle->iso.closure; ++ if (epoll_ctl(handle->epoll_fd, EPOLL_CTL_ADD, ++ handle->iso.fd, &ep) < 0) { ++ close(handle->iso.fd); ++ free(handle->iso.packets); ++ return -1; ++ } ++ ++ create.type = type; ++ create.channel = channel; ++ create.speed = speed; ++ create.header_size = 4; ++ ++ retval = ioctl(handle->iso.fd, ++ FW_CDEV_IOC_CREATE_ISO_CONTEXT, &create); ++ if (retval < 0) { ++ close(handle->iso.fd); ++ free(handle->iso.packets); ++ return retval; ++ } ++ ++ handle->iso.buffer = ++ mmap(NULL, buf_packets * max_packet_size, ++ prot, MAP_SHARED, handle->iso.fd, 0); ++ ++ if (handle->iso.buffer == MAP_FAILED) { ++ close(handle->iso.fd); ++ free(handle->iso.packets); ++ return -1; ++ } ++ ++ handle->iso.buffer_end = handle->iso.buffer + ++ buf_packets * max_packet_size; ++ handle->iso.head = handle->iso.buffer; ++ handle->iso.tail = handle->iso.buffer; ++ handle->iso.first_payload = handle->iso.buffer; ++ ++ return 0; ++} ++ ++int raw1394_iso_xmit_init(raw1394handle_t handle, ++ raw1394_iso_xmit_handler_t handler, ++ unsigned int buf_packets, ++ unsigned int max_packet_size, ++ unsigned char channel, ++ enum raw1394_iso_speed speed, ++ int irq_interval) ++{ ++ return iso_init(handle, FW_CDEV_ISO_CONTEXT_TRANSMIT, ++ handler, NULL, buf_packets, max_packet_size, ++ channel, speed, irq_interval); ++} ++ ++int raw1394_iso_recv_init(raw1394handle_t handle, ++ raw1394_iso_recv_handler_t handler, ++ unsigned int buf_packets, ++ unsigned int max_packet_size, ++ unsigned char channel, ++ enum raw1394_iso_dma_recv_mode mode, ++ int irq_interval) ++{ ++ return iso_init(handle, FW_CDEV_ISO_CONTEXT_RECEIVE, ++ NULL, handler, buf_packets, max_packet_size, ++ channel, 0, irq_interval); ++} ++ ++int raw1394_iso_multichannel_recv_init(raw1394handle_t handle, ++ raw1394_iso_recv_handler_t handler, ++ unsigned int buf_packets, ++ unsigned int max_packet_size, ++ int irq_interval) ++{ ++ /* FIXME: gah */ ++ errno = ENOSYS; ++ return -1; ++} ++ ++int raw1394_iso_recv_listen_channel(raw1394handle_t handle, ++ unsigned char channel) ++{ ++ /* FIXME: multichannel */ ++ errno = ENOSYS; ++ return -1; ++} ++ ++int raw1394_iso_recv_unlisten_channel(raw1394handle_t handle, ++ unsigned char channel) ++{ ++ /* FIXME: multichannel */ ++ errno = ENOSYS; ++ return -1; ++} ++ ++int raw1394_iso_recv_set_channel_mask(raw1394handle_t handle, u_int64_t mask) ++{ ++ /* FIXME: multichannel */ ++ errno = ENOSYS; ++ return -1; ++} ++ ++void raw1394_iso_stop(raw1394handle_t handle) ++{ ++ struct fw_cdev_stop_iso stop_iso; ++ ++ stop_iso.handle = 0; ++ ioctl(handle->iso.fd, FW_CDEV_IOC_STOP_ISO); ++ ++ handle->iso.head = handle->iso.buffer; ++ handle->iso.tail = handle->iso.buffer; ++ handle->iso.first_payload = handle->iso.buffer; ++ handle->iso.packet_phase = 0; ++ handle->iso.packet_count = 0; ++} ++ ++void raw1394_iso_shutdown(raw1394handle_t handle) ++{ ++ munmap(handle->iso.buffer, ++ handle->iso.buf_packets * handle->iso.max_packet_size); ++ close(handle->iso.fd); ++ free(handle->iso.packets); ++} +diff -Naurp libraw1394-1.3.0.orig/Makefile.am libraw1394-1.3.0/Makefile.am +--- libraw1394-1.3.0.orig/Makefile.am 2004-11-05 19:26:44.000000000 -0500 ++++ libraw1394-1.3.0/Makefile.am 2007-10-18 22:18:46.000000000 -0400 +@@ -1,6 +1,7 @@ + # process this file with automake to create a Makefile.in + +-SUBDIRS = src tools doc debian ++SUBDIRS = $(LIB_SUBDIR) tools doc debian ++DIST_SUBDIRS = src juju + + pkgconfigdir = @libdir@/pkgconfig + pkgconfig_DATA = libraw1394.pc +diff -Naurp libraw1394-1.3.0.orig/tools/Makefile.am libraw1394-1.3.0/tools/Makefile.am +--- libraw1394-1.3.0.orig/tools/Makefile.am 2004-11-05 19:26:44.000000000 -0500 ++++ libraw1394-1.3.0/tools/Makefile.am 2007-10-18 22:18:46.000000000 -0400 @@ -2,4 +2,4 @@ MAINTAINERCLEANFILES = Makefile.in # testlibraw bin_PROGRAMS = testlibraw sendiso dumpiso -LDADD = ../src/libraw1394.la +LDADD = ../$(LIB_SUBDIR)/libraw1394.la -diff --git a/tools/testlibraw.c b/tools/testlibraw.c -index 5f73bd9..2f02a6d 100644 ---- a/tools/testlibraw.c -+++ b/tools/testlibraw.c +diff -Naurp libraw1394-1.3.0.orig/tools/testlibraw.c libraw1394-1.3.0/tools/testlibraw.c +--- libraw1394-1.3.0.orig/tools/testlibraw.c 2004-01-31 15:26:03.000000000 -0500 ++++ libraw1394-1.3.0/tools/testlibraw.c 2007-10-18 22:18:46.000000000 -0400 @@ -1,4 +1,5 @@ -/* +/* -*- c-basic-offset: 8 -*- @@ -2225,7 +2214,7 @@ index 5f73bd9..2f02a6d 100644 const char not_compatible[] = "\ This libraw1394 does not work with your version of Linux. You need a different\n\ -@@ -45,12 +47,18 @@ int my_tag_handler(raw1394handle_t handle, unsigned long tag, +@@ -45,12 +47,18 @@ int my_tag_handler(raw1394handle_t handl return 0; } @@ -2244,7 +2233,7 @@ index 5f73bd9..2f02a6d 100644 while (length) { printf(" %02x", *data); data++; -@@ -62,6 +70,47 @@ int my_fcp_handler(raw1394handle_t handle, nodeid_t nodeid, int response, +@@ -62,6 +70,47 @@ int my_fcp_handler(raw1394handle_t handl return 0; } diff --git a/libraw1394-underquoted.patch b/libraw1394-underquoted.patch deleted file mode 100644 index a1e677d..0000000 --- a/libraw1394-underquoted.patch +++ /dev/null @@ -1,47 +0,0 @@ ---- libraw1394-0.10.1/libraw1394.m4.underquoted 2004-07-15 12:59:11.467143881 +0100 -+++ libraw1394-0.10.1/libraw1394.m4 2004-07-15 12:59:57.705291918 +0100 -@@ -3,7 +3,7 @@ - dnl This just unconditionally sets the options. It should offer an option for - dnl explicitly giving the path to libraw1394 on the configure command line. - dnl --AC_DEFUN(AC_LIB_RAW1394_FLAGS, [ -+AC_DEFUN([AC_LIB_RAW1394_FLAGS], [ - LIBRAW1394_CPPFLAGS="" - LIBRAW1394_CFLAGS="" - LIBRAW1394_LIBS="-lraw1394" -@@ -16,7 +16,7 @@ - dnl - dnl AC_LIB_RAW1394_HEADERS([ACTION_IF_FOUND[,ACTION_IF_NOT_FOUND]]) - dnl --AC_DEFUN(AC_LIB_RAW1394_HEADERS, [ -+AC_DEFUN([AC_LIB_RAW1394_HEADERS], [ - AC_REQUIRE([AC_LIB_RAW1394_FLAGS]) - - ac_libraw1394_save_cppflags=$CPPFLAGS -@@ -38,7 +38,7 @@ - dnl - dnl AC_LIB_RAW1394_LIBVERSION(MINIMUMVERSION[,ACTION_IF_FOUND[,ACTION_IF_NOT_FOUND]]) - dnl --AC_DEFUN(AC_LIB_RAW1394_LIBVERSION, [ -+AC_DEFUN([AC_LIB_RAW1394_LIBVERSION], [ - AC_REQUIRE([AC_PROG_CC]) - AC_REQUIRE([AC_LIB_RAW1394_FLAGS]) - -@@ -72,7 +72,7 @@ - dnl - dnl AC_LIB_RAW1394_RUNTEST(MINIMUMVERSION[,ACTION_IF_FOUND - dnl [,ACTION_IF_NOT_FOUND[,ACTION_IF_CROSS_COMPILING]]]) --AC_DEFUN(AC_LIB_RAW1394_RUNTEST, [ -+AC_DEFUN([AC_LIB_RAW1394_RUNTEST], [ - ac_libraw1394_save_cppflags=$CPPFLAGS - ac_libraw1394_save_cflags=$CFLAGS - ac_libraw1394_save_libs=$LIBS -@@ -135,7 +135,7 @@ - dnl Versions before 0.9 can't be checked, so this will always fail if the - dnl installed libraw1394 is older than 0.9 as if the library weren't found. - dnl --AC_DEFUN(AC_LIB_RAW1394, [ -+AC_DEFUN([AC_LIB_RAW1394], [ - - AC_LIB_RAW1394_FLAGS - AC_LIB_RAW1394_HEADERS(ac_libraw1394_found=yes, ac_libraw1394_found=no) diff --git a/libraw1394.spec b/libraw1394.spec index ed7b49a..c12b991 100644 --- a/libraw1394.spec +++ b/libraw1394.spec @@ -1,7 +1,7 @@ Summary: Library providing low-level IEEE-1394 access Name: libraw1394 -Version: 1.2.1 -Release: 10%{?dist} +Version: 1.3.0 +Release: 1%{?dist} License: LGPL Group: System Environment/Libraries Source: http://www.linux1394.org/dl/libraw1394-%{version}.tar.gz @@ -77,6 +77,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Oct 18 2007 Jarod Wilson - 1.3.0-1 +- libraw1394 v1.3.0 + * Wed Aug 29 2007 Fedora Release Engineering - 1.2.1-10 - Rebuild for selinux ppc32 issue. diff --git a/sources b/sources index 09a25fe..23e349f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -e6210ff05b7f4ec0401ad3d11f493e1a libraw1394-1.2.1.tar.gz +c5d9ab62bd25dba96af010b3471e816a libraw1394-1.3.0.tar.gz