Messages in this thread | | | Date | Tue, 15 Aug 2023 09:04:06 -0700 | Subject | Re: [PATCH] dmaengine: Simplify dma_async_device_register() | From | Dave Jiang <> |
| |
On 8/15/23 00:23, Yajun Deng wrote: > There are a lot of duplicate codes for checking if the dma has some > capability. > > Define a temporary macro that is used to check if the dma claims some > capability and if the corresponding function is implemented. > > Signed-off-by: Yajun Deng <yajun.deng@linux.dev>
Reviewed-by: Dave Jiang <dave.jiang@intel.com> > --- > drivers/dma/dmaengine.c | 82 ++++++++++------------------------------- > 1 file changed, 20 insertions(+), 62 deletions(-) > > diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c > index 826b98284fa1..b7388ae62d7f 100644 > --- a/drivers/dma/dmaengine.c > +++ b/drivers/dma/dmaengine.c > @@ -1147,69 +1147,27 @@ int dma_async_device_register(struct dma_device *device) > > device->owner = device->dev->driver->owner; > > - if (dma_has_cap(DMA_MEMCPY, device->cap_mask) && !device->device_prep_dma_memcpy) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_MEMCPY"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_XOR, device->cap_mask) && !device->device_prep_dma_xor) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_XOR"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_XOR_VAL, device->cap_mask) && !device->device_prep_dma_xor_val) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_XOR_VAL"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_PQ, device->cap_mask) && !device->device_prep_dma_pq) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_PQ"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_PQ_VAL, device->cap_mask) && !device->device_prep_dma_pq_val) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_PQ_VAL"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_MEMSET, device->cap_mask) && !device->device_prep_dma_memset) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_MEMSET"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_INTERRUPT, device->cap_mask) && !device->device_prep_dma_interrupt) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_INTERRUPT"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_CYCLIC, device->cap_mask) && !device->device_prep_dma_cyclic) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_CYCLIC"); > - return -EIO; > - } > - > - if (dma_has_cap(DMA_INTERLEAVE, device->cap_mask) && !device->device_prep_interleaved_dma) { > - dev_err(device->dev, > - "Device claims capability %s, but op is not defined\n", > - "DMA_INTERLEAVE"); > - return -EIO; > - } > +#define CHECK_CAP(_name, _type) \ > +{ \ > + if (dma_has_cap(_type, device->cap_mask) && !device->device_prep_##_name) { \ > + dev_err(device->dev, \ > + "Device claims capability %s, but op is not defined\n", \ > + __stringify(_type)); \ > + return -EIO; \ > + } \ > +} > > + CHECK_CAP(dma_memcpy, DMA_MEMCPY); > + CHECK_CAP(dma_xor, DMA_XOR); > + CHECK_CAP(dma_xor_val, DMA_XOR_VAL); > + CHECK_CAP(dma_pq, DMA_PQ); > + CHECK_CAP(dma_pq_val, DMA_PQ_VAL); > + CHECK_CAP(dma_memset, DMA_MEMSET); > + CHECK_CAP(dma_interrupt, DMA_INTERRUPT); > + CHECK_CAP(dma_cyclic, DMA_CYCLIC); > + CHECK_CAP(interleaved_dma, DMA_INTERLEAVE); > + > +#undef CHECK_CAP > > if (!device->device_tx_status) { > dev_err(device->dev, "Device tx_status is not defined\n");
| |