OpenCores
URL https://opencores.org/ocsvn/pcie_ds_dma/pcie_ds_dma/trunk

Subversion Repositories pcie_ds_dma

[/] [pcie_ds_dma/] [trunk/] [soft/] [linux/] [driver/] [pexdrv/] [dmachan.c] - Diff between revs 2 and 6

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 2 Rev 6
Line 77... Line 77...
 
 
    // при первом обращении действительно выделяем память,
    // при первом обращении действительно выделяем память,
    // а при повторных только отображаем выделенную память на пользовательское пространство
    // а при повторных только отображаем выделенную память на пользовательское пространство
    if(!dma->m_UseCount)
    if(!dma->m_UseCount)
    {
    {
 
        dma_addr_t pa = (dma_addr_t)0;
 
 
        dma->m_MemType = bMemType;
        dma->m_MemType = bMemType;
        dma->m_BlockCount = *pCount;
        dma->m_BlockCount = *pCount;
        dma->m_BlockSize = size;
        dma->m_BlockSize = size;
 
 
        // выделяем память под описатели блоков (системный, и логический адрес для каждого блока)
        // выделяем память под описатели блоков (системный, и логический адрес для каждого блока)
        dma->m_pBufDscr.SystemAddress = (void*)dma_alloc_coherent( dma->m_dev,
        dma->m_pBufDscr.SystemAddress = (void*)dma_alloc_coherent( dma->m_dev,
                                                                   dma->m_BlockCount * sizeof(SHARED_MEMORY_DESCRIPTION),
                                                                   dma->m_BlockCount * sizeof(SHARED_MEMORY_DESCRIPTION),
                                                                   &dma->m_pBufDscr.LogicalAddress, GFP_KERNEL);
                                                                   &pa, GFP_KERNEL);
        if(!dma->m_pBufDscr.SystemAddress)
        if(!dma->m_pBufDscr.SystemAddress)
        {
        {
            printk("<0>%s(): Not memory for buffer descriptions\n", __FUNCTION__);
            printk("<0>%s(): Not memory for buffer descriptions\n", __FUNCTION__);
            return -ENOMEM;
            return -ENOMEM;
        }
        }
 
 
 
        dma->m_pBufDscr.LogicalAddress = (size_t)pa;
        dma->m_ScatterGatherTableEntryCnt = 0;
        dma->m_ScatterGatherTableEntryCnt = 0;
    }
    }
 
 
    Status = RequestStub(dma, pStub);
    Status = RequestStub(dma, pStub);
    if(Status == 0)
    if(Status == 0)

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.