ieee1394: remove old isochronous ABI
authorStefan Richter <stefanr@s5r6.in-berlin.de>
Sun, 24 Jun 2007 13:31:54 +0000 (15:31 +0200)
committerStefan Richter <stefanr@s5r6.in-berlin.de>
Mon, 9 Jul 2007 22:07:41 +0000 (00:07 +0200)
Based on patch "the scheduled removal of RAW1394_REQ_ISO_{SEND,LISTEN}"
from Adrian Bunk, November 20 2006.

This patch also removes the underlying facilities in ohci1394 and
disables them in pcilynx.  That is, hpsb_host_driver.devctl() and
hpsb_host_driver.transmit_packet() are no longer used for iso reception
and transmission.

Since video1394 and dv1394 only work with ohci1394 and raw1394's rawiso
interface has never been implemented in pcilynx, pcilynx is now no
longer useful for isochronous applications.

raw1394 will still handle the request types but will complete the
requests with errors that indicate API version conflicts.

Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
15 files changed:
Documentation/ABI/removed/raw1394_legacy_isochronous [new file with mode: 0644]
Documentation/feature-removal-schedule.txt
drivers/ieee1394/highlevel.c
drivers/ieee1394/highlevel.h
drivers/ieee1394/hosts.h
drivers/ieee1394/ieee1394_core.c
drivers/ieee1394/ieee1394_core.h
drivers/ieee1394/ieee1394_transactions.c
drivers/ieee1394/ieee1394_transactions.h
drivers/ieee1394/ohci1394.c
drivers/ieee1394/ohci1394.h
drivers/ieee1394/pcilynx.c
drivers/ieee1394/raw1394-private.h
drivers/ieee1394/raw1394.c
drivers/ieee1394/raw1394.h

diff --git a/Documentation/ABI/removed/raw1394_legacy_isochronous b/Documentation/ABI/removed/raw1394_legacy_isochronous
new file mode 100644 (file)
index 0000000..1b62962
--- /dev/null
@@ -0,0 +1,16 @@
+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
index 7d3f205b0ba50fddc8da631ba9fad29063239256..51b369e7fc702939a8cb882bd7884355bb3518c1 100644 (file)
@@ -49,16 +49,6 @@ Who: Adrian Bunk <bunk@stusta.de>
 
 ---------------------------
 
-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
index 83a49331275188e265346f2ed70e753c2f52a010..b6425469b6ee455ef0690f1bb5dc7653a15e37d6 100644 (file)
@@ -483,37 +483,6 @@ int hpsb_unregister_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
        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);
@@ -570,20 +539,6 @@ void highlevel_host_reset(struct hpsb_host *host)
        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)
 {
index 63474f7ee69d5ac48bf1a6d8670e7450fcb53cc7..eb9fe321e09a37507c6527df82c7abd352db0b2a 100644 (file)
@@ -26,9 +26,7 @@ struct hpsb_address_serve {
 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. */
@@ -43,13 +41,6 @@ struct hpsb_highlevel {
         * 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). */
@@ -109,7 +100,6 @@ int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store,
 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);
 
@@ -125,10 +115,6 @@ int hpsb_register_addrspace(struct hpsb_highlevel *hl, struct hpsb_host *host,
                            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,
index 979fd190f60f9d0e46b6da27e403caa5e573f608..e4e8aeb4d7788d2caf2ef7d5821dbf77a038c27d 100644 (file)
@@ -28,8 +28,6 @@ struct hpsb_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 */
@@ -99,12 +97,6 @@ enum devctl_cmd {
        /* 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 {
index 8f71b6a06aa0b45cbb8dcef0aca25e4ecfb33ddd..0fc8c6e559e4a64d160bfbc0c7fcd4a04d8538e5 100644 (file)
@@ -1028,11 +1028,6 @@ void hpsb_packet_received(struct hpsb_host *host, quadlet_t *data, size_t size,
                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;
@@ -1316,7 +1311,6 @@ EXPORT_SYMBOL(hpsb_make_streampacket);
 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);
@@ -1327,8 +1321,6 @@ EXPORT_SYMBOL(hpsb_unregister_highlevel);
 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);
index 11fd324ee045c150a5a647e9f10024410bba9f1c..21d50f73a210cbadfc6c39e128da8e06d0fa9310 100644 (file)
@@ -24,9 +24,8 @@ struct hpsb_packet {
 
        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
index 40078ce930c86035ea2d5453ebc0f85851dd1fa1..c39c70a8aa9fce1e8eae54cdd0df6ab3a0c4a1e5 100644 (file)
@@ -89,18 +89,6 @@ static void fill_async_lock(struct hpsb_packet *packet, u64 addr, int extcode,
        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;
@@ -491,24 +479,6 @@ struct hpsb_packet *hpsb_make_phypacket(struct hpsb_host *host, quadlet_t 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
index 86b8ee692ea7711bc868c407e816871ce7b6c969..d2d5bc3546d74093b2fe0ce56ef913b63ef6648e 100644 (file)
@@ -19,8 +19,6 @@ struct hpsb_packet *hpsb_make_lock64packet(struct hpsb_host *host,
                                           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);
index a75b1446b6eda1f3845e7a33e5d36f0447a1ae2c..5667c8102efc0dcc56d14a786e602a7437ab4596 100644 (file)
@@ -157,7 +157,6 @@ static void dma_trm_reset(struct dma_trm_ctx *d);
 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,
@@ -520,9 +519,6 @@ static void ohci_initialize(struct ti_ohci *ohci)
        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);
 
@@ -869,36 +865,9 @@ static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
                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;
@@ -917,9 +886,7 @@ static int ohci_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
 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:
@@ -1012,117 +979,6 @@ static int ohci_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
                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);
@@ -2868,22 +2724,6 @@ static void dma_trm_tasklet (unsigned long data)
        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;
@@ -3005,18 +2845,11 @@ alloc_dma_rcv_ctx(struct ti_ohci *ohci, struct dma_rcv_ctx *d,
 
         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;
 }
 
@@ -3097,28 +2930,10 @@ alloc_dma_trm_ctx(struct ti_ohci *ohci, struct dma_trm_ctx *d,
         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;
 }
 
@@ -3344,20 +3159,6 @@ static int __devinit ohci1394_pci_probe(struct pci_dev *dev,
        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);
 
        /*
@@ -3450,8 +3251,6 @@ static void ohci1394_pci_remove(struct pci_dev *pdev)
                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,
index f1ad539e7c1b34d2567c18cd1df89926e92f299e..4320bf010495c3bb7eabc0c76bfd600ecd3588da 100644 (file)
@@ -190,23 +190,10 @@ struct ti_ohci {
        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 */
@@ -221,7 +208,6 @@ struct ti_ohci {
 
        /* Tasklets for iso receive and transmit, used by video1394
         * and dv1394 */
-
        struct list_head iso_tasklet_list;
        spinlock_t iso_tasklet_list_lock;
 
index 0742befe92270f0d9557072dc59a6b2771e5197c..d1a5bcdb5e0be9c5bab2facb893e996731cda317 100644 (file)
@@ -477,7 +477,11 @@ static void send_next(struct ti_lynx *lynx, int what)
         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();
@@ -511,9 +515,11 @@ static void send_next(struct ti_lynx *lynx, int what)
         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;
@@ -542,9 +548,11 @@ static int lynx_transmit(struct hpsb_host *host, struct hpsb_packet *packet)
         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);
@@ -797,7 +805,7 @@ static int lynx_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
                }
 
                 break;
-
+#if 0 /* has been removed from ieee1394 core */
         case ISO_LISTEN_CHANNEL:
                 spin_lock_irqsave(&lynx->iso_rcv.lock, flags);
 
@@ -819,7 +827,7 @@ static int lynx_devctl(struct hpsb_host *host, enum devctl_cmd cmd, int arg)
 
                 spin_unlock_irqrestore(&lynx->iso_rcv.lock, flags);
                 break;
-
+#endif
         default:
                 PRINT(KERN_ERR, lynx->id, "unknown devctl command %d", cmd);
                 retval = -1;
@@ -1009,11 +1017,11 @@ static irqreturn_t lynx_irq_handler(int irq, void *dev_id)
                                 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) {
index 50daabf6e5fa38317ce247246945a40191975db7..a06aaad5b448da6072a0c4469b60cfa64eafa1e3 100644 (file)
@@ -36,11 +36,6 @@ struct file_info {
 
         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 */
index 1dadd5a15ba13e7630619a3fa0b3a75bc145b817..336e5ff4cfcf6f111cf5c57d6a043c5767d1513d 100644 (file)
@@ -98,21 +98,6 @@ static struct hpsb_address_ops arm_ops = {
 
 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;
@@ -297,67 +282,6 @@ static void host_reset(struct hpsb_host *host)
        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)
 {
@@ -680,43 +604,6 @@ out_set_card:
        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) {
@@ -890,50 +777,6 @@ static int handle_async_request(struct file_info *fi,
        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;
@@ -2317,10 +2160,6 @@ static int state_connected(struct file_info *fi, struct pending_request *req)
                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);
 
@@ -2336,9 +2175,12 @@ static int state_connected(struct file_info *fi, struct pending_request *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:
@@ -2965,14 +2807,7 @@ static int raw1394_release(struct inode *inode, struct file *file)
        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 */
@@ -3134,7 +2969,6 @@ static struct hpsb_highlevel raw1394_highlevel = {
        .add_host = add_host,
        .remove_host = remove_host,
        .host_reset = host_reset,
-       .iso_receive = iso_receive,
        .fcp_request = fcp_request,
 };
 
index 7bd22ee1afbb1d56a2a71e9c86cd86b3ad5bfc43..963ac20373d20c860ac7d4f89e5db819b68cfbae 100644 (file)
 #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