Xilinx FPGA PCIE Linux驱动程序(4)

2018-12-01 15:22

goto exit; } exit:

return ret; }

ssize_t XPCIe_WriteMem(constchar *buf, size_t count) {

int ret = 0;

dma_addr_t dma_addr;

if ( (count % 4) != 0 ) {

printk(\,gDrvrName); ret = -1; return ret; //goto exit; }

// Now it is safe to copy the data from user space. if ( copy_from_user(gWriteBuffer, buf, count) ) {

ret = -1;

printk(\,gDrvrName); return ret; //goto exit; }

//set DMA semaphore if in loopback down(&gSem[SEM_DMA]);

// pci_map_single return the physical address corresponding to // the virtual address passed to it as the 2nd parameter

dma_addr = pci_map_single(gDev, gWriteBuffer, BUF_SIZE, PCI_DMA_FROMDEVICE); if ( 0 == dma_addr ) {

printk(\,gDrvrName); ret = -1;

up(&gSem[SEM_DMA]); return ret;

//goto exit; // return 之前要释放互斥量,不能直接return }

// Now pass the physical address to the device hardware. This is now // the source physical address for the DMA and hence the to be // put on Memory Transactions

// Do DMA transfer here....

// 直接调用read write 函数进行传输? // 宋宝华第页流程图

printk(\, gDrvrName, (unsignedint)gReadBuffer, (unsignedint)dma_addr);

// Unmap the DMA buffer so it is safe for normal access again.

pci_unmap_single(gDev, dma_addr, BUF_SIZE, PCI_DMA_FROMDEVICE);

up(&gSem[SEM_DMA]);

exit:

return (ret); }

u32 XPCIe_ReadCfgReg (u32 byte) {

u32 pciReg;

if (pci_read_config_dword(gDev, byte, &pciReg) < 0) {

printk(\,gDrvrName); return (-1); }

return (pciReg); }

u32 XPCIe_WriteCfgReg (u32 byte, u32 val) {

if (pci_write_config_dword(gDev, byte, val) < 0) {

printk(\,gDrvrName); return (-1); } return 1; }


Xilinx FPGA PCIE Linux驱动程序(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:大工15秋《软件工程》大作业题目及要求答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: