[PATCH] ssb: Fix DMA-API compilation for non-PCI systems - Kernel

This is a discussion on [PATCH] ssb: Fix DMA-API compilation for non-PCI systems - Kernel ; This fixes compilation of the SSB DMA-API code on non-PCI platforms. Signed-off-by: Michael Buesch --- John, please queue this for whatever kernel. I forgot what version we're working on. :P Index: wireless-testing/include/linux/ssb/ssb.h ================================================== ================= --- wireless-testing.orig/include/linux/ssb/ssb.h 2008-08-01 17:26:05.000000000 +0200 +++ ...

+ Reply to Thread
Results 1 to 4 of 4

Thread: [PATCH] ssb: Fix DMA-API compilation for non-PCI systems

  1. [PATCH] ssb: Fix DMA-API compilation for non-PCI systems

    This fixes compilation of the SSB DMA-API code on non-PCI platforms.

    Signed-off-by: Michael Buesch

    ---

    John, please queue this for whatever kernel. I forgot what version
    we're working on. :P


    Index: wireless-testing/include/linux/ssb/ssb.h
    ================================================== =================
    --- wireless-testing.orig/include/linux/ssb/ssb.h 2008-08-01 17:26:05.000000000 +0200
    +++ wireless-testing/include/linux/ssb/ssb.h 2008-11-06 21:45:37.000000000 +0100
    @@ -427,12 +427,16 @@ static inline int ssb_dma_mapping_error(
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    return pci_dma_mapping_error(dev->bus->host_pci, addr);
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    return dma_mapping_error(dev->dev, addr);
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    return -ENOSYS;
    }

    @@ -441,12 +445,16 @@ static inline dma_addr_t ssb_dma_map_sin
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    return pci_map_single(dev->bus->host_pci, p, size, dir);
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    return dma_map_single(dev->dev, p, size, dir);
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    return 0;
    }

    @@ -455,14 +463,18 @@ static inline void ssb_dma_unmap_single(
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    pci_unmap_single(dev->bus->host_pci, dma_addr, size, dir);
    return;
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    dma_unmap_single(dev->dev, dma_addr, size, dir);
    return;
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    }

    static inline void ssb_dma_sync_single_for_cpu(struct ssb_device *dev,
    @@ -472,15 +484,19 @@ static inline void ssb_dma_sync_single_f
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr,
    size, dir);
    return;
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    dma_sync_single_for_cpu(dev->dev, dma_addr, size, dir);
    return;
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    }

    static inline void ssb_dma_sync_single_for_device(struct ssb_device *dev,
    @@ -490,15 +506,19 @@ static inline void ssb_dma_sync_single_f
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr,
    size, dir);
    return;
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    dma_sync_single_for_device(dev->dev, dma_addr, size, dir);
    return;
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    }

    static inline void ssb_dma_sync_single_range_for_cpu(struct ssb_device *dev,
    @@ -509,17 +529,21 @@ static inline void ssb_dma_sync_single_r
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    /* Just sync everything. That's all the PCI API can do. */
    pci_dma_sync_single_for_cpu(dev->bus->host_pci, dma_addr,
    offset + size, dir);
    return;
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    dma_sync_single_range_for_cpu(dev->dev, dma_addr, offset,
    size, dir);
    return;
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    }

    static inline void ssb_dma_sync_single_range_for_device(struct ssb_device *dev,
    @@ -530,17 +554,21 @@ static inline void ssb_dma_sync_single_r
    {
    switch (dev->bus->bustype) {
    case SSB_BUSTYPE_PCI:
    +#ifdef CONFIG_SSB_PCIHOST
    /* Just sync everything. That's all the PCI API can do. */
    pci_dma_sync_single_for_device(dev->bus->host_pci, dma_addr,
    offset + size, dir);
    return;
    +#endif
    + break;
    case SSB_BUSTYPE_SSB:
    dma_sync_single_range_for_device(dev->dev, dma_addr, offset,
    size, dir);
    return;
    default:
    - __ssb_dma_not_implemented(dev);
    + break;
    }
    + __ssb_dma_not_implemented(dev);
    }



    --
    Greetings Michael.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  2. Re: [PATCH] ssb: Fix DMA-API compilation for non-PCI systems

    On Thu, Nov 6, 2008 at 15:49, Michael Buesch wrote:
    > --- wireless-testing.orig/include/linux/ssb/ssb.h 2008-08-01 17:26:05.000000000 +0200
    > +++ wireless-testing/include/linux/ssb/ssb.h 2008-11-06 21:45:37.000000000 +0100
    > @@ -427,12 +427,16 @@ static inline int ssb_dma_mapping_error(
    > {
    > switch (dev->bus->bustype) {
    > case SSB_BUSTYPE_PCI:
    > +#ifdef CONFIG_SSB_PCIHOST
    > return pci_dma_mapping_error(dev->bus->host_pci, addr);
    > +#endif
    > + break;
    > case SSB_BUSTYPE_SSB:
    > return dma_mapping_error(dev->dev, addr);
    > default:
    > - __ssb_dma_not_implemented(dev);
    > + break;
    > }


    all these functions now read:
    default: break;
    seems kind of pointless ... why not just drop that case completely

    otherwise looks good, thanks
    -mike
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  3. Re: [PATCH] ssb: Fix DMA-API compilation for non-PCI systems

    On Thursday 06 November 2008 22:16:00 Mike Frysinger wrote:
    > On Thu, Nov 6, 2008 at 15:49, Michael Buesch wrote:
    > > --- wireless-testing.orig/include/linux/ssb/ssb.h 2008-08-01 17:26:05.000000000 +0200
    > > +++ wireless-testing/include/linux/ssb/ssb.h 2008-11-06 21:45:37.000000000 +0100
    > > @@ -427,12 +427,16 @@ static inline int ssb_dma_mapping_error(
    > > {
    > > switch (dev->bus->bustype) {
    > > case SSB_BUSTYPE_PCI:
    > > +#ifdef CONFIG_SSB_PCIHOST
    > > return pci_dma_mapping_error(dev->bus->host_pci, addr);
    > > +#endif
    > > + break;
    > > case SSB_BUSTYPE_SSB:
    > > return dma_mapping_error(dev->dev, addr);
    > > default:
    > > - __ssb_dma_not_implemented(dev);
    > > + break;
    > > }

    >
    > all these functions now read:
    > default: break;
    > seems kind of pointless ... why not just drop that case completely


    Because the compiler complains "not handled all cases...".
    And yes, we do want to trigger __ssb_dma_not_implemented() for
    these cases.

    --
    Greetings Michael.
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

  4. Re: [PATCH] ssb: Fix DMA-API compilation for non-PCI systems

    On Thu, 6 Nov 2008 22:23:09 +0100
    Michael Buesch wrote:

    > On Thursday 06 November 2008 22:16:00 Mike Frysinger wrote:
    > > On Thu, Nov 6, 2008 at 15:49, Michael Buesch wrote:
    > > > --- wireless-testing.orig/include/linux/ssb/ssb.h 2008-08-01 17:26:05.000000000 +0200
    > > > +++ wireless-testing/include/linux/ssb/ssb.h 2008-11-06 21:45:37.000000000 +0100
    > > > @@ -427,12 +427,16 @@ static inline int ssb_dma_mapping_error(
    > > > {
    > > > switch (dev->bus->bustype) {
    > > > case SSB_BUSTYPE_PCI:
    > > > +#ifdef CONFIG_SSB_PCIHOST
    > > > return pci_dma_mapping_error(dev->bus->host_pci, addr);
    > > > +#endif
    > > > + break;
    > > > case SSB_BUSTYPE_SSB:
    > > > return dma_mapping_error(dev->dev, addr);
    > > > default:
    > > > - __ssb_dma_not_implemented(dev);
    > > > + break;
    > > > }

    > >
    > > all these functions now read:
    > > default: break;
    > > seems kind of pointless ... why not just drop that case completely

    >
    > Because the compiler complains "not handled all cases...".
    > And yes, we do want to trigger __ssb_dma_not_implemented() for
    > these cases.


    Please always quote the compiler error messages when fixing build
    errors. It is unobvious what the problems are here. I could struggle
    away and create a CONFIG_PCI=n build, but what .c file do I need to
    compile? Dunno.


    All those ifdefs are nasty. Couldn't we do something like:

    #ifdef CONFIG_SSB_PCIHOST
    static inline int
    ssb_pci_dma_mapping_error(structy pci_dev *host_pci, dma_addr_t addr)
    {
    return pci_dma_mapping_error(host_pci, addr);
    }

    #else

    static inline int
    ssb_pci_dma_mapping_error(structy pci_dev *host_pci, dma_addr_t addr)
    {
    return -ENOSYS;
    }

    #endif

    (etc)

    and then leave the __ssb_dma_not_implemented() calls under the default:
    case in the switch statements?

    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

+ Reply to Thread