Dahdi驱动源代码分析之四DMA缓存区
一、环境
DAHDI驱动版本:dahdi-linux-complete-2.6.2+2.6.2
DAHDI卡:Digium Wildcard TE420 dual-span T1/E1/J1 card
二、细节
为这张卡创建DMA缓存区,缓存区大小为numbufs * 1KB(一个收,一个发)。writedma是与总线相关的物理地址,返回值为驱动程序使用的虚拟地址。这两个缓存区:第一个是写缓存区;第二个是读缓存区。32个通道,双缓存(读/写),4端口
分配的缓存区大小:
(端口数 * DAHDI_MAX_CHUNK_SIZE * 32 * 4)* 2
一个缓存区大小:4 ×8 ×32 ×4 = 4 KB
也就是8KB的缓存,缓存区是先是写缓存区,然后是读缓存区。
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.****.net/yuesichiu/article/details/77259150
http://blog.****.net/yuesichiu/article/details/77259150