/alps/pcitool

To get this branch, use:
bzr branch http://suren.me/webbzr/alps/pcitool

« back to all changes in this revision

Viewing changes to dma/nwl_engine_buffers.h

  • Committer: Suren A. Chilingaryan
  • Date: 2011-10-23 00:43:20 UTC
  • Revision ID: csa@dside.dyndns.org-20111023004320-523yoab3y82nketc
Properly perform synchronization of DMA buffers

Show diffs side-by-side

added added

removed removed

Lines of Context:
95
95
    uint64_t buf_pa;
96
96
    pcilib_kmem_reuse_state_t reuse_ring, reuse_pages;
97
97
    pcilib_kmem_flags_t flags;
 
98
    pcilib_kmem_type_t type;
98
99
 
99
100
    char *base = info->base_addr;
100
101
    
101
102
    if (info->pages) return 0;
102
103
    
103
104
        // Or bidirectional specified by 0x0|addr, or read 0x0|addr and write 0x80|addr
 
105
    type = (info->desc.direction == PCILIB_DMA_TO_DEVICE)?PCILIB_KMEM_TYPE_DMA_S2C_PAGE:PCILIB_KMEM_TYPE_DMA_C2S_PAGE;
104
106
    sub_use = info->desc.addr|((info->desc.direction == PCILIB_DMA_TO_DEVICE)?0x80:0x00);
105
107
    flags = PCILIB_KMEM_FLAG_REUSE|PCILIB_KMEM_FLAG_EXCLUSIVE|PCILIB_KMEM_FLAG_HARDWARE|(info->preserve?PCILIB_KMEM_FLAG_PERSISTENT:0);
106
108
    
107
109
    pcilib_kmem_handle_t *ring = pcilib_alloc_kernel_memory(ctx->pcilib, PCILIB_KMEM_TYPE_CONSISTENT, 1, PCILIB_NWL_DMA_PAGES * PCILIB_NWL_DMA_DESCRIPTOR_SIZE, PCILIB_NWL_ALIGNMENT, PCILIB_KMEM_USE(PCILIB_KMEM_USE_DMA_RING, sub_use), flags);
108
 
    pcilib_kmem_handle_t *pages = pcilib_alloc_kernel_memory(ctx->pcilib, PCILIB_KMEM_TYPE_PAGE, PCILIB_NWL_DMA_PAGES, 0, 0, PCILIB_KMEM_USE(PCILIB_KMEM_USE_DMA_PAGES, sub_use), flags);
 
110
    pcilib_kmem_handle_t *pages = pcilib_alloc_kernel_memory(ctx->pcilib, type, PCILIB_NWL_DMA_PAGES, 0, 0, PCILIB_KMEM_USE(PCILIB_KMEM_USE_DMA_PAGES, sub_use), flags);
109
111
 
110
 
    if ((ring)&&(pages)) err = dma_nwl_sync_buffers(ctx, info, pages);
111
 
    else err = PCILIB_ERROR_FAILED;
 
112
//    if ((ring)&&(pages)) err = dma_nwl_sync_buffers(ctx, info, pages);
 
113
//    else err = PCILIB_ERROR_FAILED;
112
114
 
113
115
    if (err) {
114
116
        if (pages) pcilib_free_kernel_memory(ctx->pcilib, pages, 0);