Dahdi驱动源代码分析之四DMA缓存区

一、环境
DAHDI驱动版本:dahdi-linux-complete-2.6.2+2.6.2
DAHDI卡:Digium Wildcard TE420 dual-span T1/E1/J1 card

版权声明本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载
http://blog.csdn.net/yuesichiu/article/details/77259150


二、细节
      为这张卡创建DMA缓存区,缓存区大小为numbufs * 1KB(一个收,一个发)。writedma是与总线相关的物理地址,返回值为驱动程序使用的虚拟地址。这两个缓存区:第一个是写缓存区;第二个是读缓存区。32个通道,双缓存(读/写),4端口

     分配的缓存区大小:
      (端口数 * DAHDI_MAX_CHUNK_SIZE * 32 * 4)* 2
       一个缓存区大小:4 ×8 ×32 ×4 = 4 KB

       也就是8KB的缓存,缓存区是先是写缓存区,然后是读缓存区。

版权声明本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载
http://blog.csdn.net/yuesichiu/article/details/77259150




    wc->writechunk =alloc //虚拟地址
    wc->writedma = writedma //DMA的物理地址

    /* 存放读缓存区*/
   /* Read is after the whole write piece (in words) */
  卡是4E1卡因此, (T4_BASE_SIZE(wc) = 8 * 32 * 4 = 1KB
   wc->readchunk = wc->writechunk + (T4_BASE_SIZE(wc) * numbufs) / 4; //readchunk,writechunk是u32类型

   而dma_addr_t是u64(64位系统),u32(32位系统)
    /* 初始化读/写缓存区 */
    /* Initialize Write/Buffers to all blank data */
    memset(wc->writechunk, 0x00, T4_BASE_SIZE(wc) * numbufs);
    memset(wc->readchunk, 0xff, T4_BASE_SIZE(wc) * numbufs);




版权声明本文为博主(宽简厚重,Yuesichiu)原创文章,未经博主允许不得转载
http://blog.csdn.net/yuesichiu/article/details/77259150



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值