linux内核下,(rapidio)TSI721芯片的doorbell和message数据收发流程分析笔记

 

1 简介

本文是对TSI721芯片进行doorbell和message收发时,驱动的执行流程的分析,驱动代码来自Releases · RapidIO/kernel-rapidio · GitHub

 

2 doorbell

2.1 发送doorbell

2.1.1 大致流程

51fbe8ce338c418cbecc67a4a078e9b0.png

 

2.1.2 最终发送doorbell的函数:tsi721_dsend();

33220bc54c5e4b8cb45411fe162d3e99.png

2.2 接收doorbell

2d1ad31639674419ae0de47eb0ebf5f3.png

 

3 message

3.1 发送message

8907f687706b4ce38c43253823e7acbc.png

 

3.2 接收message

b5e433891b334ef5b73b80105bae5339.png

 

 

 

  • 9
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux系统中,CPU处理PCIe网卡设备的Doorbell中断的回调函数注册可以通过以下步骤完成: 1. 确定中断号 在Linux系统中,PCIe网卡设备的中断号通常是由内核自动分配的,可以通过/sys/bus/pci/devices/路径下的相应设备目录中的irq文件获取。例如,假设网卡设备的PCI总线号、设备号和函数号分别为0000:01:00.0,可以使用以下命令获取它的中断号: ``` cat /sys/bus/pci/devices/0000:01:00.0/irq ``` 2. 编写中断处理函数 编写处理网卡设备Doorbell中断的中断处理函数。在函数中,可以使用读取Doorbell寄存器的方式获取Doorbell中断的信息,并进行相应的处理。 3. 注册中断处理函数 可以使用request_irq函数来注册中断处理函数。该函数的原型如下: ```c int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev); ``` 其中,irq为中断号;handler为中断处理函数名;flags为中断处理的标志,例如IRQF_SHARED表示共享中断,IRQF_DISABLED表示禁用中断;name为中断处理函数的名称;dev指向设备结构体的指针,可以为NULL。 例如,假设中断号为10,中断处理函数为my_irq_handler,可以使用以下代码来注册中断处理函数: ```c if (request_irq(10, my_irq_handler, IRQF_SHARED, "my_irq", NULL)) { printk(KERN_ERR "Failed to request irq 10.\n"); return -1; } ``` 以上代码将中断处理函数my_irq_handler注册为中断号为10的中断处理函数,并将其命名为my_irq。如果注册失败,将返回-1。 完成以上步骤后,当PCIe网卡设备的Doorbell中断到来时,相应的中断处理函数my_irq_handler将被自动调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值