Dahdi驱动源代码分析之四DMA缓存区
2017-08-16 17:45
197 查看
一、环境
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
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
相关文章推荐
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
- jQuery-1.9.1源码分析系列(四) 缓存系统
- 缓存java框架技术预研4:LazyUnsafeAllocator.java算法分析
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
- 一起谈.NET技术,ASP.NET缓存分析和实践浅析
- Redis缓存穿透、缓存雪崩、redis并发问题分析
- ASP.NET缓存分析和实践浅析
- 深入PHP与浏览器缓存的分析
- ASP.NET缓存:方法分析和实践示例
- ecshop源码分析——数据库类中的查询缓存(1)
- webview交互和缓存分析
- 从源代码分析Android-Universal-Image-Loader的缓存处理机制
- android缓存数据 分析
- 一步步学习 MyBatis:缓存的使用及源码分析
- WebView的缓存分析
- shiro源码分析篇4:自定义缓存
- Mybatis缓存特性的使用及源码分析,避坑指南~
- 分析eaccelerator的opcode缓存功能
- Caching-缓存架构与源码分析