diff options
| -rw-r--r-- | dma/ipe.c | 13 | 
1 files changed, 7 insertions, 6 deletions
| @@ -566,7 +566,8 @@ int dma_ipe_stream_read(pcilib_dma_context_t *vctx, pcilib_dma_engine_t dma, uin      if (ctx->version < 3) {  	if (ctx->mode64) last_written_addr_ptr = desc_va + 3 * sizeof(uint32_t);  	else last_written_addr_ptr = desc_va + 4 * sizeof(uint32_t); -	empty_detected_ptr = last_written_addr_ptr - 2; +	empty_detected_ptr = NULL; // Not properly supported +//	empty_detected_ptr = last_written_addr_ptr - 2;      } else {  	last_written_addr_ptr = desc_va + 2 * sizeof(uint32_t);  	empty_detected_ptr = desc_va + sizeof(uint32_t); @@ -589,10 +590,10 @@ int dma_ipe_stream_read(pcilib_dma_context_t *vctx, pcilib_dma_engine_t dma, uin      do {  	switch (ret&PCILIB_STREAMING_TIMEOUT_MASK) { -	    case PCILIB_STREAMING_CONTINUE:  +	    case PCILIB_STREAMING_CONTINUE:  		    // Hardware indicates that there is no more data pending and we can safely stop if there is no data in the kernel buffers already  #ifdef IPEDMA_SUPPORT_EMPTY_DETECTED -		if (*empty_detected_ptr) +		if ((empty_detected_ptr)&&(*empty_detected_ptr))  		    wait = 0;  		else  #endif /* IPEDMA_SUPPORT_EMPTY_DETECTED */ @@ -618,7 +619,7 @@ int dma_ipe_stream_read(pcilib_dma_context_t *vctx, pcilib_dma_engine_t dma, uin  	    }  #ifdef IPEDMA_SUPPORT_EMPTY_DETECTED -	    if ((ret != PCILIB_STREAMING_REQ_PACKET)&&(*empty_detected_ptr)) break; +	    if ((ret != PCILIB_STREAMING_REQ_PACKET)&&(empty_detected_ptr)&&(*empty_detected_ptr)) break;  #endif /* IPEDMA_SUPPORT_EMPTY_DETECTED */  	    gettimeofday(&cur, NULL);  	} @@ -627,7 +628,7 @@ int dma_ipe_stream_read(pcilib_dma_context_t *vctx, pcilib_dma_engine_t dma, uin  	if ((ctx->last_read_addr == DEREF(last_written_addr_ptr))||(DEREF(last_written_addr_ptr) == 0)) {  #ifdef IPEDMA_SUPPORT_EMPTY_DETECTED  # ifdef PCILIB_DEBUG_DMA -	    if ((wait)&&(DEREF(last_written_addr_ptr))&&(!*empty_detected_ptr)) +	    if ((wait)&&(empty_detected_ptr)&&(DEREF(last_written_addr_ptr))&&(!*empty_detected_ptr))  		pcilib_debug(DMA, "The empty_detected flag is not set, but no data arrived within %lu us", wait);  # endif /* PCILIB_DEBUG_DMA */  #endif /* IPEDMA_SUPPORT_EMPTY_DETECTED */ @@ -644,7 +645,7 @@ int dma_ipe_stream_read(pcilib_dma_context_t *vctx, pcilib_dma_engine_t dma, uin  	);  #ifdef IPEDMA_DETECT_PACKETS -	if ((*empty_detected_ptr)&&(pcilib_kmem_get_block_ba(ctx->dmactx.pcilib, ctx->pages, cur_read) == DEREF(last_written_addr_ptr))) packet_flags = PCILIB_DMA_FLAG_EOP; +	if ((empty_detected_ptr)&&(*empty_detected_ptr)&&(pcilib_kmem_get_block_ba(ctx->dmactx.pcilib, ctx->pages, cur_read) == DEREF(last_written_addr_ptr))) packet_flags = PCILIB_DMA_FLAG_EOP;  	else packet_flags = 0;  #endif /* IPEDMA_DETECT_PACKETS */ | 
