diff options
Diffstat (limited to 'dma.c')
| -rw-r--r-- | dma.c | 46 | 
1 files changed, 42 insertions, 4 deletions
| @@ -55,9 +55,47 @@ int pcilib_set_dma_engine_description(pcilib_t *ctx, pcilib_dma_engine_t engine,  }  int pcilib_start_dma(pcilib_t *ctx, pcilib_dma_engine_t dma, pcilib_dma_flags_t flags) { +    int err;  + +    const pcilib_dma_info_t *info =  pcilib_get_dma_info(ctx); +    if (!info) { +	pcilib_error("DMA is not supported by the device"); +	return PCILIB_ERROR_NOTSUPPORTED; +    } + +    if (!ctx->model_info.dma_api) { +	pcilib_error("DMA Engine is not configured in the current model"); +	return PCILIB_ERROR_NOTAVAILABLE; +    } +     +    if (!ctx->model_info.dma_api->start_dma) { +	//pcilib_error("The IRQs are not supported by configured DMA engine"); +	return 0; +    } +     +    return ctx->model_info.dma_api->start_dma(ctx->dma_ctx, dma, flags);  }  int pcilib_stop_dma(pcilib_t *ctx, pcilib_dma_engine_t dma, pcilib_dma_flags_t flags) { +    int err;  + +    const pcilib_dma_info_t *info =  pcilib_get_dma_info(ctx); +    if (!info) { +	pcilib_error("DMA is not supported by the device"); +	return PCILIB_ERROR_NOTSUPPORTED; +    } + +    if (!ctx->model_info.dma_api) { +	pcilib_error("DMA Engine is not configured in the current model"); +	return PCILIB_ERROR_NOTAVAILABLE; +    } +     +    if (!ctx->model_info.dma_api->stop_dma) { +	//pcilib_error("The IRQs are not supported by configured DMA engine"); +	return 0; +    } +     +    return ctx->model_info.dma_api->stop_dma(ctx->dma_ctx, dma, flags);  }  int pcilib_enable_irq(pcilib_t *ctx, pcilib_irq_type_t irq_type, pcilib_dma_flags_t flags) { @@ -75,8 +113,8 @@ int pcilib_enable_irq(pcilib_t *ctx, pcilib_irq_type_t irq_type, pcilib_dma_flag      }      if (!ctx->model_info.dma_api->enable_irq) { -	pcilib_error("The IRQs are not supported by configured DMA engine"); -	return PCILIB_ERROR_NOTSUPPORTED; +	//pcilib_error("The IRQs are not supported by configured DMA engine"); +	return 0;      }      return ctx->model_info.dma_api->enable_irq(ctx->dma_ctx, irq_type, flags); @@ -97,8 +135,8 @@ int pcilib_disable_irq(pcilib_t *ctx, pcilib_dma_flags_t flags) {      }      if (!ctx->model_info.dma_api->disable_irq) { -	pcilib_error("The IRQs are not supported by configured DMA engine"); -	return PCILIB_ERROR_NOTSUPPORTED; +	//pcilib_error("The IRQs are not supported by configured DMA engine"); +	return 0;      }      return ctx->model_info.dma_api->disable_irq(ctx->dma_ctx, flags); | 
