--- /dev/null
+What:          legacy isochronous ABI of raw1394 (1st generation iso ABI)
+Date:          June 2007 (scheduled), removed in kernel v2.6.23
+Contact:       linux1394-devel@lists.sourceforge.net
+Description:
+       The two request types RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN have
+       been deprecated for quite some time.  They are very inefficient as they
+       come with high interrupt load and several layers of callbacks for each
+       packet.  Because of these deficiencies, the video1394 and dv1394 drivers
+       and the 3rd-generation isochronous ABI in raw1394 (rawiso) were created.
+
+Users:
+       libraw1394 users via the long deprecated API raw1394_iso_write,
+       raw1394_start_iso_write, raw1394_start_iso_rcv, raw1394_stop_iso_rcv
+
+       libdc1394, which optionally uses these old libraw1394 calls
+       alternatively to the more efficient video1394 ABI
 
 
 ---------------------------
 
-What:  raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN
-When:  June 2007
-Why:   Deprecated in favour of the more efficient and robust rawiso interface.
-       Affected are applications which use the deprecated part of libraw1394
-       (raw1394_iso_write, raw1394_start_iso_write, raw1394_start_iso_rcv,
-       raw1394_stop_iso_rcv) or bypass libraw1394.
-Who:   Dan Dennedy <dan@dennedy.org>, Stefan Richter <stefanr@s5r6.in-berlin.de>
-
----------------------------
-
 What:  old NCR53C9x driver
 When:  October 2007
 Why:   Replaced by the much better esp_scsi driver.  Actual low-level
 
        return retval;
 }
 
-/**
- * hpsb_listen_channel - enable receving a certain isochronous channel
- *
- * Reception is handled through the @hl's iso_receive op.
- */
-int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
-                       unsigned int channel)
-{
-       if (channel > 63) {
-               HPSB_ERR("%s called with invalid channel", __FUNCTION__);
-               return -EINVAL;
-       }
-       if (host->iso_listen_count[channel]++ == 0)
-               return host->driver->devctl(host, ISO_LISTEN_CHANNEL, channel);
-       return 0;
-}
-
-/**
- * hpsb_unlisten_channel - disable receving a certain isochronous channel
- */
-void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
-                          unsigned int channel)
-{
-       if (channel > 63) {
-               HPSB_ERR("%s called with invalid channel", __FUNCTION__);
-               return;
-       }
-       if (--host->iso_listen_count[channel] == 0)
-               host->driver->devctl(host, ISO_UNLISTEN_CHANNEL, channel);
-}
-
 static void init_hpsb_highlevel(struct hpsb_host *host)
 {
        INIT_LIST_HEAD(&dummy_zero_addr.host_list);
        read_unlock_irqrestore(&hl_irqs_lock, flags);
 }
 
-void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length)
-{
-       unsigned long flags;
-       struct hpsb_highlevel *hl;
-       int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f;
-
-       read_lock_irqsave(&hl_irqs_lock, flags);
-       list_for_each_entry(hl, &hl_irqs, irq_list) {
-               if (hl->iso_receive)
-                       hl->iso_receive(host, channel, data, length);
-       }
-       read_unlock_irqrestore(&hl_irqs_lock, flags);
-}
-
 void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
                           void *data, size_t length)
 {
 
 struct hpsb_highlevel {
        const char *name;
 
-       /* Any of the following pointers can legally be NULL, except for
-        * iso_receive which can only be NULL when you don't request
-        * channels. */
+       /* Any of the following pointers can legally be NULL. */
 
        /* New host initialized.  Will also be called during
         * hpsb_register_highlevel for all hosts already installed. */
         * You can not expect to be able to do stock hpsb_reads. */
        void (*host_reset)(struct hpsb_host *host);
 
-       /* An isochronous packet was received.  Channel contains the channel
-        * number for your convenience, it is also contained in the included
-        * packet header (first quadlet, CRCs are missing).  You may get called
-        * for channel/host combinations you did not request. */
-       void (*iso_receive)(struct hpsb_host *host, int channel,
-                           quadlet_t *data, size_t length);
-
        /* A write request was received on either the FCP_COMMAND (direction =
         * 0) or the FCP_RESPONSE (direction = 1) register.  The cts arg
         * contains the cts field (first byte of data). */
 int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store,
                     u64 addr, octlet_t data, octlet_t arg, int ext_tcode,
                     u16 flags);
-void highlevel_iso_receive(struct hpsb_host *host, void *data, size_t length);
 void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction,
                           void *data, size_t length);
 
                            struct hpsb_address_ops *ops, u64 start, u64 end);
 int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
                              u64 start);
-int hpsb_listen_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
-                       unsigned int channel);
-void hpsb_unlisten_channel(struct hpsb_highlevel *hl, struct hpsb_host *host,
-                          unsigned int channel);
 
 void *hpsb_get_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host);
 void *hpsb_create_hostinfo(struct hpsb_highlevel *hl, struct hpsb_host *host,
 
        struct timer_list timeout;
        unsigned long timeout_interval;
 
-       unsigned char iso_listen_count[64];
-
        int node_count;      /* number of identified nodes on this bus */
        int selfid_count;    /* total number of SelfIDs received */
        int nodes_active;    /* number of nodes with active link layer */
        /* Cancel all outstanding async requests without resetting the bus.
         * Return void. */
        CANCEL_REQUESTS,
-
-       /* Start or stop receiving isochronous channel in arg.  Return void.
-        * This acts as an optimization hint, hosts are not required not to
-        * listen on unrequested channels. */
-       ISO_LISTEN_CHANNEL,
-       ISO_UNLISTEN_CHANNEL
 };
 
 enum isoctl_cmd {
 
                handle_incoming_packet(host, tcode, data, size, write_acked);
                break;
 
-
-       case TCODE_ISO_DATA:
-               highlevel_iso_receive(host, data, size);
-               break;
-
        case TCODE_CYCLE_START:
                /* simply ignore this packet if it is passed on */
                break;
 EXPORT_SYMBOL(hpsb_make_lockpacket);
 EXPORT_SYMBOL(hpsb_make_lock64packet);
 EXPORT_SYMBOL(hpsb_make_phypacket);
-EXPORT_SYMBOL(hpsb_make_isopacket);
 EXPORT_SYMBOL(hpsb_read);
 EXPORT_SYMBOL(hpsb_write);
 EXPORT_SYMBOL(hpsb_packet_success);
 EXPORT_SYMBOL(hpsb_register_addrspace);
 EXPORT_SYMBOL(hpsb_unregister_addrspace);
 EXPORT_SYMBOL(hpsb_allocate_and_register_addrspace);
-EXPORT_SYMBOL(hpsb_listen_channel);
-EXPORT_SYMBOL(hpsb_unlisten_channel);
 EXPORT_SYMBOL(hpsb_get_hostinfo);
 EXPORT_SYMBOL(hpsb_create_hostinfo);
 EXPORT_SYMBOL(hpsb_destroy_hostinfo);
 
 
        nodeid_t node_id;
 
-       /* Async and Iso types should be clear, raw means send-as-is, do not
-        * CRC!  Byte swapping shall still be done in this case. */
-       enum { hpsb_async, hpsb_iso, hpsb_raw } __attribute__((packed)) type;
+       /* hpsb_raw = send as-is, do not CRC (but still byte-swap it) */
+       enum { hpsb_async, hpsb_raw } __attribute__((packed)) type;
 
        /* Okay, this is core internal and a no care for hosts.
         * queued   = queued for sending
 
        packet->expect_response = 1;
 }
 
-static void fill_iso_packet(struct hpsb_packet *packet, int length, int channel,
-                           int tag, int sync)
-{
-       packet->header[0] = (length << 16) | (tag << 14) | (channel << 8)
-           | (TCODE_ISO_DATA << 4) | sync;
-
-       packet->header_size = 4;
-       packet->data_size = length;
-       packet->type = hpsb_iso;
-       packet->tcode = TCODE_ISO_DATA;
-}
-
 static void fill_phy_packet(struct hpsb_packet *packet, quadlet_t data)
 {
        packet->header[0] = data;
        return p;
 }
 
-struct hpsb_packet *hpsb_make_isopacket(struct hpsb_host *host,
-                                       int length, int channel,
-                                       int tag, int sync)
-{
-       struct hpsb_packet *p;
-
-       p = hpsb_alloc_packet(length);
-       if (!p)
-               return NULL;
-
-       p->host = host;
-       fill_iso_packet(p, length, channel, tag, sync);
-
-       p->generation = get_hpsb_generation(host);
-
-       return p;
-}
-
 /*
  * FIXME - these functions should probably read from / write to user space to
  * avoid in kernel buffers for user space callers
 
                                           nodeid_t node, u64 addr, int extcode,
                                           octlet_t *data, octlet_t arg);
 struct hpsb_packet *hpsb_make_phypacket(struct hpsb_host *host, quadlet_t data);
-struct hpsb_packet *hpsb_make_isopacket(struct hpsb_host *host, int length,
-                                       int channel, int tag, int sync);
 struct hpsb_packet *hpsb_make_writepacket(struct hpsb_host *host,
                                          nodeid_t node, u64 addr,
                                          quadlet_t *buffer, size_t length);
 
 static int alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d,
                             enum context_type type, int ctx, int num_desc,
                             int buf_size, int split_buf_size, int context_base);
-static void stop_dma_rcv_ctx(struct dma_rcv_ctx *d);
 static void free_dma_rcv_ctx(struct dma_rcv_ctx *d);
 
 static int alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d,
        initialize_dma_trm_ctx(&ohci->at_req_context);
        initialize_dma_trm_ctx(&ohci->at_resp_context);
        
-       /* Initialize IR Legacy DMA channel mask */
-       ohci->ir_legacy_channels = 0;
-
        /* Accept AR requests from all nodes */
        reg_write(ohci, OHCI1394_AsReqFilterHiSet, 0x80000000);
 
                return -EOVERFLOW;
        }
 
-       /* Decide whether we have an iso, a request, or a response packet */
        if (packet->type == hpsb_raw)
                d = &ohci->at_req_context;
-       else if ((packet->tcode == TCODE_ISO_DATA) && (packet->type == hpsb_iso)) {
-               /* The legacy IT DMA context is initialized on first
-                * use.  However, the alloc cannot be run from
-                * interrupt context, so we bail out if that is the
-                * case. I don't see anyone sending ISO packets from
-                * interrupt context anyway... */
-
-               if (ohci->it_legacy_context.ohci == NULL) {
-                       if (in_interrupt()) {
-                               PRINT(KERN_ERR,
-                                     "legacy IT context cannot be initialized during interrupt");
-                               return -EINVAL;
-                       }
-
-                       if (alloc_dma_trm_ctx(ohci, &ohci->it_legacy_context,
-                                             DMA_CTX_ISO, 0, IT_NUM_DESC,
-                                             OHCI1394_IsoXmitContextBase) < 0) {
-                               PRINT(KERN_ERR,
-                                     "error initializing legacy IT context");
-                               return -ENOMEM;
-                       }
-
-                       initialize_dma_trm_ctx(&ohci->it_legacy_context);
-               }
-
-               d = &ohci->it_legacy_context;
-       } else if ((packet->tcode & 0x02) && (packet->tcode != TCODE_ISO_DATA))
+       else if ((packet->tcode & 0x02) && (packet->tcode != TCODE_ISO_DATA))
                d = &ohci->at_resp_context;
        else
                d = &ohci->at_req_context;
 static int ohci_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
 {
        struct ti_ohci *ohci = host->hostdata;
-       int retval = 0;
-       unsigned long flags;
-       int phy_reg;
+       int retval = 0, phy_reg;
 
        switch (cmd) {
        case RESET_BUS:
                dma_trm_reset(&ohci->at_resp_context);
                break;
 
-       case ISO_LISTEN_CHANNEL:
-        {
-               u64 mask;
-               struct dma_rcv_ctx *d = &ohci->ir_legacy_context;
-               int ir_legacy_active;
-
-               if (arg<0 || arg>63) {
-                       PRINT(KERN_ERR,
-                             "%s: IS0 listen channel %d is out of range",
-                             __FUNCTION__, arg);
-                       return -EFAULT;
-               }
-
-               mask = (u64)0x1<<arg;
-
-                spin_lock_irqsave(&ohci->IR_channel_lock, flags);
-
-               if (ohci->ISO_channel_usage & mask) {
-                       PRINT(KERN_ERR,
-                             "%s: IS0 listen channel %d is already used",
-                             __FUNCTION__, arg);
-                       spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
-                       return -EFAULT;
-               }
-
-               ir_legacy_active = ohci->ir_legacy_channels;
-
-               ohci->ISO_channel_usage |= mask;
-               ohci->ir_legacy_channels |= mask;
-
-                spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
-
-               if (!ir_legacy_active) {
-                       if (ohci1394_register_iso_tasklet(ohci,
-                                         &ohci->ir_legacy_tasklet) < 0) {
-                               PRINT(KERN_ERR, "No IR DMA context available");
-                               return -EBUSY;
-                       }
-
-                       /* the IR context can be assigned to any DMA context
-                        * by ohci1394_register_iso_tasklet */
-                       d->ctx = ohci->ir_legacy_tasklet.context;
-                       d->ctrlSet = OHCI1394_IsoRcvContextControlSet +
-                               32*d->ctx;
-                       d->ctrlClear = OHCI1394_IsoRcvContextControlClear +
-                               32*d->ctx;
-                       d->cmdPtr = OHCI1394_IsoRcvCommandPtr + 32*d->ctx;
-                       d->ctxtMatch = OHCI1394_IsoRcvContextMatch + 32*d->ctx;
-
-                       initialize_dma_rcv_ctx(&ohci->ir_legacy_context, 1);
-
-                       if (printk_ratelimit())
-                               DBGMSG("IR legacy activated");
-               }
-
-                spin_lock_irqsave(&ohci->IR_channel_lock, flags);
-
-               if (arg>31)
-                       reg_write(ohci, OHCI1394_IRMultiChanMaskHiSet,
-                                 1<<(arg-32));
-               else
-                       reg_write(ohci, OHCI1394_IRMultiChanMaskLoSet,
-                                 1<<arg);
-
-                spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
-                DBGMSG("Listening enabled on channel %d", arg);
-                break;
-        }
-       case ISO_UNLISTEN_CHANNEL:
-        {
-               u64 mask;
-
-               if (arg<0 || arg>63) {
-                       PRINT(KERN_ERR,
-                             "%s: IS0 unlisten channel %d is out of range",
-                             __FUNCTION__, arg);
-                       return -EFAULT;
-               }
-
-               mask = (u64)0x1<<arg;
-
-                spin_lock_irqsave(&ohci->IR_channel_lock, flags);
-
-               if (!(ohci->ISO_channel_usage & mask)) {
-                       PRINT(KERN_ERR,
-                             "%s: IS0 unlisten channel %d is not used",
-                             __FUNCTION__, arg);
-                       spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
-                       return -EFAULT;
-               }
-
-               ohci->ISO_channel_usage &= ~mask;
-               ohci->ir_legacy_channels &= ~mask;
-
-               if (arg>31)
-                       reg_write(ohci, OHCI1394_IRMultiChanMaskHiClear,
-                                 1<<(arg-32));
-               else
-                       reg_write(ohci, OHCI1394_IRMultiChanMaskLoClear,
-                                 1<<arg);
-
-                spin_unlock_irqrestore(&ohci->IR_channel_lock, flags);
-                DBGMSG("Listening disabled on channel %d", arg);
-
-               if (ohci->ir_legacy_channels == 0) {
-                       stop_dma_rcv_ctx(&ohci->ir_legacy_context);
-                       DBGMSG("ISO legacy receive context stopped");
-               }
-
-                break;
-        }
        default:
                PRINT_G(KERN_ERR, "ohci_devctl cmd %d not implemented yet",
                        cmd);
        spin_unlock_irqrestore(&d->lock, flags);
 }
 
-static void stop_dma_rcv_ctx(struct dma_rcv_ctx *d)
-{
-       if (d->ctrlClear) {
-               ohci1394_stop_context(d->ohci, d->ctrlClear, NULL);
-
-               if (d->type == DMA_CTX_ISO) {
-                       /* disable interrupts */
-                       reg_write(d->ohci, OHCI1394_IsoRecvIntMaskClear, 1 << d->ctx);
-                       ohci1394_unregister_iso_tasklet(d->ohci, &d->ohci->ir_legacy_tasklet);
-               } else {
-                       tasklet_kill(&d->task);
-               }
-       }
-}
-
-
 static void free_dma_rcv_ctx(struct dma_rcv_ctx *d)
 {
        int i;
 
         spin_lock_init(&d->lock);
 
-       if (type == DMA_CTX_ISO) {
-               ohci1394_init_iso_tasklet(&ohci->ir_legacy_tasklet,
-                                         OHCI_ISO_MULTICHANNEL_RECEIVE,
-                                         dma_rcv_tasklet, (unsigned long) d);
-       } else {
-               d->ctrlSet = context_base + OHCI1394_ContextControlSet;
-               d->ctrlClear = context_base + OHCI1394_ContextControlClear;
-               d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
-
-               tasklet_init (&d->task, dma_rcv_tasklet, (unsigned long) d);
-       }
+       d->ctrlSet = context_base + OHCI1394_ContextControlSet;
+       d->ctrlClear = context_base + OHCI1394_ContextControlClear;
+       d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
 
+       tasklet_init(&d->task, dma_rcv_tasklet, (unsigned long) d);
        return 0;
 }
 
         spin_lock_init(&d->lock);
 
        /* initialize tasklet */
-       if (type == DMA_CTX_ISO) {
-               ohci1394_init_iso_tasklet(&ohci->it_legacy_tasklet, OHCI_ISO_TRANSMIT,
-                                         dma_trm_tasklet, (unsigned long) d);
-               if (ohci1394_register_iso_tasklet(ohci,
-                                                 &ohci->it_legacy_tasklet) < 0) {
-                       PRINT(KERN_ERR, "No IT DMA context available");
-                       free_dma_trm_ctx(d);
-                       return -EBUSY;
-               }
-
-               /* IT can be assigned to any context by register_iso_tasklet */
-               d->ctx = ohci->it_legacy_tasklet.context;
-               d->ctrlSet = OHCI1394_IsoXmitContextControlSet + 16 * d->ctx;
-               d->ctrlClear = OHCI1394_IsoXmitContextControlClear + 16 * d->ctx;
-               d->cmdPtr = OHCI1394_IsoXmitCommandPtr + 16 * d->ctx;
-       } else {
-               d->ctrlSet = context_base + OHCI1394_ContextControlSet;
-               d->ctrlClear = context_base + OHCI1394_ContextControlClear;
-               d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
-               tasklet_init (&d->task, dma_trm_tasklet, (unsigned long)d);
-       }
-
+       d->ctrlSet = context_base + OHCI1394_ContextControlSet;
+       d->ctrlClear = context_base + OHCI1394_ContextControlClear;
+       d->cmdPtr = context_base + OHCI1394_ContextCommandPtr;
+       tasklet_init(&d->task, dma_trm_tasklet, (unsigned long)d);
        return 0;
 }
 
        ohci->ISO_channel_usage = 0;
         spin_lock_init(&ohci->IR_channel_lock);
 
-       /* Allocate the IR DMA context right here so we don't have
-        * to do it in interrupt path - note that this doesn't
-        * waste much memory and avoids the jugglery required to
-        * allocate it in IRQ path. */
-       if (alloc_dma_rcv_ctx(ohci, &ohci->ir_legacy_context,
-                             DMA_CTX_ISO, 0, IR_NUM_DESC,
-                             IR_BUF_SIZE, IR_SPLIT_BUF_SIZE,
-                             OHCI1394_IsoRcvContextBase) < 0) {
-               FAIL(-ENOMEM, "Cannot allocate IR Legacy DMA context");
-       }
-
-       /* We hopefully don't have to pre-allocate IT DMA like we did
-        * for IR DMA above. Allocate it on-demand and mark inactive. */
-       ohci->it_legacy_context.ohci = NULL;
        spin_lock_init(&ohci->event_lock);
 
        /*
                free_dma_rcv_ctx(&ohci->ar_resp_context);
                free_dma_trm_ctx(&ohci->at_req_context);
                free_dma_trm_ctx(&ohci->at_resp_context);
-               free_dma_rcv_ctx(&ohci->ir_legacy_context);
-               free_dma_trm_ctx(&ohci->it_legacy_context);
 
        case OHCI_INIT_HAVE_SELFID_BUFFER:
                pci_free_consistent(ohci->dev, OHCI1394_SI_DMA_BUF_SIZE,
 
        unsigned long ir_multichannel_used; /* ditto */
         spinlock_t IR_channel_lock;
 
-       /* iso receive (legacy API) */
-       u64 ir_legacy_channels; /* note: this differs from ISO_channel_usage;
-                                  it only accounts for channels listened to
-                                  by the legacy API, so that we can know when
-                                  it is safe to free the legacy API context */
-
-       struct dma_rcv_ctx ir_legacy_context;
-       struct ohci1394_iso_tasklet ir_legacy_tasklet;
-
         /* iso transmit */
        int nb_iso_xmit_ctx;
        unsigned long it_ctx_usage; /* use test_and_set_bit() for atomicity */
 
-       /* iso transmit (legacy API) */
-       struct dma_trm_ctx it_legacy_context;
-       struct ohci1394_iso_tasklet it_legacy_tasklet;
-
         u64 ISO_channel_usage;
 
         /* IEEE-1394 part follows */
 
        /* Tasklets for iso receive and transmit, used by video1394
         * and dv1394 */
-
        struct list_head iso_tasklet_list;
        spinlock_t iso_tasklet_list_lock;
 
 
         struct lynx_send_data *d;
         struct hpsb_packet *packet;
 
+#if 0 /* has been removed from ieee1394 core */
         d = (what == hpsb_iso ? &lynx->iso_send : &lynx->async);
+#else
+       d = &lynx->async;
+#endif
         if (!list_empty(&d->pcl_queue)) {
                 PRINT(KERN_ERR, lynx->id, "trying to queue a new packet in nonempty fifo");
                 BUG();
         case hpsb_async:
                 pcl.buffer[0].control |= PCL_CMD_XMT;
                 break;
+#if 0 /* has been removed from ieee1394 core */
         case hpsb_iso:
                 pcl.buffer[0].control |= PCL_CMD_XMT | PCL_ISOMODE;
                 break;
+#endif
         case hpsb_raw:
                 pcl.buffer[0].control |= PCL_CMD_UNFXMT;
                 break;
         case hpsb_raw:
                 d = &lynx->async;
                 break;
+#if 0 /* has been removed from ieee1394 core */
         case hpsb_iso:
                 d = &lynx->iso_send;
                 break;
+#endif
         default:
                 PRINT(KERN_ERR, lynx->id, "invalid packet type %d",
                       packet->type);
                }
 
                 break;
-
+#if 0 /* has been removed from ieee1394 core */
         case ISO_LISTEN_CHANNEL:
                 spin_lock_irqsave(&lynx->iso_rcv.lock, flags);
 
 
                 spin_unlock_irqrestore(&lynx->iso_rcv.lock, flags);
                 break;
-
+#endif
         default:
                 PRINT(KERN_ERR, lynx->id, "unknown devctl command %d", cmd);
                 retval = -1;
                                 pci_unmap_single(lynx->dev, lynx->iso_send.data_dma,
                                                  packet->data_size, PCI_DMA_TODEVICE);
                         }
-
+#if 0 /* has been removed from ieee1394 core */
                         if (!list_empty(&lynx->iso_send.queue)) {
                                 send_next(lynx, hpsb_iso);
                         }
-
+#endif
                         spin_unlock(&lynx->iso_send.queue_lock);
 
                         if (pcl.pcl_status & DMA_CHAN_STAT_PKTCMPL) {
 
 
         u8 __user *fcp_buffer;
 
-       /* old ISO API */
-        u64 listen_channels;
-        quadlet_t __user *iso_buffer;
-        size_t iso_buffer_length;
-
         u8 notification; /* (busreset-notification) RAW1394_NOTIFY_OFF/ON */
 
        /* new rawiso API */
 
 
 static void queue_complete_cb(struct pending_request *req);
 
-#include <asm/current.h>
-static void print_old_iso_deprecation(void)
-{
-       static pid_t p;
-
-       if (p == current->pid)
-               return;
-       p = current->pid;
-       printk(KERN_WARNING "raw1394: WARNING - Program \"%s\" uses unsupported"
-              " isochronous request types which will be removed in a next"
-              " kernel release\n", current->comm);
-       printk(KERN_WARNING "raw1394: Update your software to use libraw1394's"
-              " newer interface\n");
-}
-
 static struct pending_request *__alloc_pending_request(gfp_t flags)
 {
        struct pending_request *req;
        spin_unlock_irqrestore(&host_info_lock, flags);
 }
 
-static void iso_receive(struct hpsb_host *host, int channel, quadlet_t * data,
-                       size_t length)
-{
-       unsigned long flags;
-       struct host_info *hi;
-       struct file_info *fi;
-       struct pending_request *req, *req_next;
-       struct iso_block_store *ibs = NULL;
-       LIST_HEAD(reqs);
-
-       if ((atomic_read(&iso_buffer_size) + length) > iso_buffer_max) {
-               HPSB_INFO("dropped iso packet");
-               return;
-       }
-
-       spin_lock_irqsave(&host_info_lock, flags);
-       hi = find_host_info(host);
-
-       if (hi != NULL) {
-               list_for_each_entry(fi, &hi->file_info_list, list) {
-                       if (!(fi->listen_channels & (1ULL << channel)))
-                               continue;
-
-                       req = __alloc_pending_request(GFP_ATOMIC);
-                       if (!req)
-                               break;
-
-                       if (!ibs) {
-                               ibs = kmalloc(sizeof(*ibs) + length,
-                                             GFP_ATOMIC);
-                               if (!ibs) {
-                                       kfree(req);
-                                       break;
-                               }
-
-                               atomic_add(length, &iso_buffer_size);
-                               atomic_set(&ibs->refcount, 0);
-                               ibs->data_size = length;
-                               memcpy(ibs->data, data, length);
-                       }
-
-                       atomic_inc(&ibs->refcount);
-
-                       req->file_info = fi;
-                       req->ibs = ibs;
-                       req->data = ibs->data;
-                       req->req.type = RAW1394_REQ_ISO_RECEIVE;
-                       req->req.generation = get_hpsb_generation(host);
-                       req->req.misc = 0;
-                       req->req.recvb = ptr2int(fi->iso_buffer);
-                       req->req.length = min(length, fi->iso_buffer_length);
-
-                       list_add_tail(&req->list, &reqs);
-               }
-       }
-       spin_unlock_irqrestore(&host_info_lock, flags);
-
-       list_for_each_entry_safe(req, req_next, &reqs, list)
-           queue_complete_req(req);
-}
-
 static void fcp_request(struct hpsb_host *host, int nodeid, int direction,
                        int cts, u8 * data, size_t length)
 {
        return 0;
 }
 
-static void handle_iso_listen(struct file_info *fi, struct pending_request *req)
-{
-       int channel = req->req.misc;
-
-       if ((channel > 63) || (channel < -64)) {
-               req->req.error = RAW1394_ERROR_INVALID_ARG;
-       } else if (channel >= 0) {
-               /* allocate channel req.misc */
-               if (fi->listen_channels & (1ULL << channel)) {
-                       req->req.error = RAW1394_ERROR_ALREADY;
-               } else {
-                       if (hpsb_listen_channel
-                           (&raw1394_highlevel, fi->host, channel)) {
-                               req->req.error = RAW1394_ERROR_ALREADY;
-                       } else {
-                               fi->listen_channels |= 1ULL << channel;
-                               fi->iso_buffer = int2ptr(req->req.recvb);
-                               fi->iso_buffer_length = req->req.length;
-                       }
-               }
-       } else {
-               /* deallocate channel (one's complement neg) req.misc */
-               channel = ~channel;
-
-               if (fi->listen_channels & (1ULL << channel)) {
-                       hpsb_unlisten_channel(&raw1394_highlevel, fi->host,
-                                             channel);
-                       fi->listen_channels &= ~(1ULL << channel);
-               } else {
-                       req->req.error = RAW1394_ERROR_INVALID_ARG;
-               }
-       }
-
-       req->req.length = 0;
-       queue_complete_req(req);
-}
-
 static void handle_fcp_listen(struct file_info *fi, struct pending_request *req)
 {
        if (req->req.misc) {
        return 0;
 }
 
-static int handle_iso_send(struct file_info *fi, struct pending_request *req,
-                          int channel)
-{
-       unsigned long flags;
-       struct hpsb_packet *packet;
-
-       packet = hpsb_make_isopacket(fi->host, req->req.length, channel & 0x3f,
-                                    (req->req.misc >> 16) & 0x3,
-                                    req->req.misc & 0xf);
-       if (!packet)
-               return -ENOMEM;
-
-       packet->speed_code = req->req.address & 0x3;
-
-       req->packet = packet;
-
-       if (copy_from_user(packet->data, int2ptr(req->req.sendb),
-                          req->req.length)) {
-               req->req.error = RAW1394_ERROR_MEMFAULT;
-               req->req.length = 0;
-               queue_complete_req(req);
-               return 0;
-       }
-
-       req->req.length = 0;
-       hpsb_set_packet_complete_task(packet,
-                                     (void (*)(void *))queue_complete_req,
-                                     req);
-
-       spin_lock_irqsave(&fi->reqlists_lock, flags);
-       list_add_tail(&req->list, &fi->req_pending);
-       spin_unlock_irqrestore(&fi->reqlists_lock, flags);
-
-       /* Update the generation of the packet just before sending. */
-       packet->generation = req->req.generation;
-
-       if (hpsb_send_packet(packet) < 0) {
-               req->req.error = RAW1394_ERROR_SEND_ERROR;
-               queue_complete_req(req);
-       }
-
-       return 0;
-}
-
 static int handle_async_send(struct file_info *fi, struct pending_request *req)
 {
        unsigned long flags;
                queue_complete_req(req);
                return 0;
 
-       case RAW1394_REQ_ISO_SEND:
-               print_old_iso_deprecation();
-               return handle_iso_send(fi, req, node);
-
        case RAW1394_REQ_ARM_REGISTER:
                return arm_register(fi, req);
 
        case RAW1394_REQ_RESET_NOTIFY:
                return reset_notification(fi, req);
 
+       case RAW1394_REQ_ISO_SEND:
        case RAW1394_REQ_ISO_LISTEN:
-               print_old_iso_deprecation();
-               handle_iso_listen(fi, req);
+               printk(KERN_DEBUG "raw1394: old iso ABI has been removed\n");
+               req->req.error = RAW1394_ERROR_COMPAT;
+               req->req.misc = RAW1394_KERNELAPI_VERSION;
+               queue_complete_req(req);
                return 0;
 
        case RAW1394_REQ_FCP_LISTEN:
        if (fi->iso_state != RAW1394_ISO_INACTIVE)
                raw1394_iso_shutdown(fi);
 
-       for (i = 0; i < 64; i++) {
-               if (fi->listen_channels & (1ULL << i)) {
-                       hpsb_unlisten_channel(&raw1394_highlevel, fi->host, i);
-               }
-       }
-
        spin_lock_irqsave(&host_info_lock, flags);
-       fi->listen_channels = 0;
 
        fail = 0;
        /* set address-entries invalid */
        .add_host = add_host,
        .remove_host = remove_host,
        .host_reset = host_reset,
-       .iso_receive = iso_receive,
        .fcp_request = fcp_request,
 };
 
 
 #define RAW1394_REQ_ASYNC_WRITE     101
 #define RAW1394_REQ_LOCK            102
 #define RAW1394_REQ_LOCK64          103
-#define RAW1394_REQ_ISO_SEND        104
+#define RAW1394_REQ_ISO_SEND        104 /* removed ABI, now a no-op */
 #define RAW1394_REQ_ASYNC_SEND      105
 #define RAW1394_REQ_ASYNC_STREAM    106
 
-#define RAW1394_REQ_ISO_LISTEN      200
+#define RAW1394_REQ_ISO_LISTEN      200 /* removed ABI, now a no-op */
 #define RAW1394_REQ_FCP_LISTEN      201
 #define RAW1394_REQ_RESET_BUS       202
 #define RAW1394_REQ_GET_ROM         203