当前位置: 首页 > article >正文

mailbox机制实例介绍(一)

本文章基于开源代码介绍一种hns驱动中mailbox通信机制的实现。

1、mailbox机制简介

mailbox是一种基于内存的通信机制,因此他比其他形式的IPC如管道、消息队列等更加高效。

2、Mailbox的初始化

在hns驱动中mailbox基于基于硬件特定内存的访问,而该硬件内存的访问方式为命令队列,故在初始化命令队列时,会初始mbx队列的head, tail, lost指针为0。其背后的硬件初始化细节略过。

3、mailbox对外接口

在hns驱动中,对外呈现以下两个接口函数,其余API为内联函数;

  • handle_mbx_msg()
  • send_mbx_msg()

3.1、mailbox消息发送函数

mailbox发送函数send_mbx_msg()是hns驱动mailbox模块对外呈现的两个接口之一。
主要作用场景为:

  • 初始化队列时VF向PF发送复位队列消息
  • VF复位时,向PF发送复位消息
  • VF向PF定时发送keep_alive消息
  • VF获取连接状态时向PF发送获取连接状态的消息
  • VF设置MTU时,向PF发送设置MTU的消息

在这里插入图片描述
图1.cmd_desc和vf_to_pf_cmd域段

以VF获取lsc能力为例,分析send_mbx_msg()的处理过程。

  1. 填充cmd_desc->opcode和flag域段,告诉硬件该描述符为VF到PF的MBX消息,本次消息为传入类型,不触发中断,不需要回复
  2. 将GET_LINK掩码填充到vf_to_pf->msg[0]域段,即desc->data,告诉硬件此消息为获取link状态
  3. 填充vf_to_pf->msg[1]域段为0
  4. 将该描述符desc发送到硬件:将desc挂载到命令发送队列->cmq.csq.desc[next_to_use];并将next_to_use的值写入到硬件发送队列的尾指针,告诉硬件处理新的信息;
  5. 函数执行完成

3.2、mailbox消息处理函数

不同于消息发送函数的多种应用场景,消息处理函数的场景较少:

  • handle_mbx_msg作为中断处理函数
  • VF向PF发送获取lsc能力的MBX消息后,在其他进程有可能同时触发了中断,此时handle函数被屏蔽掉,需要手动调用handle_mbx_msg处理

以PF中处理MBX消息中断源为例,奸细handle_mbx_msg()函数:

  1. 中断处理函数中,解析到相应的中断源需要调用handle_mbx_msg()
  2. 当硬件生成了crq消息,还未被软件处理完成时,对硬件crq信息进行解析处理
  3. 解析上文pf_to_vf_cmd->msg[0]中存储的信息,若为lsc事件上报调用相应函数处理

由以上可知,handle_mbx_msg()函数只是对crq对列信息的分类接口,其实际信息处理需要调用个子处理函数并进行解析处理(获取信息、上报能力、设置等)

http://www.lryc.cn/news/2416952.html

相关文章:

  • 线性代数——余子式
  • HCIP------ 网络类型 PPP协议和HDCL协议
  • TrueCrypt原理与系统开发
  • 数据增强 - Cutout、Random Erasing、Mixup、Cutmix
  • 探索 `mpvue-vant`: 微信小程序开发的新利器
  • mint-ui使用
  • JqGrid 各个属性、方法使用说明
  • 快速上手 Rook,入门云原生存储编排
  • xxxxxxxxxxxxxxxxxxxxx已转行
  • ROV简易组装说明
  • 还在为没有项目做发愁?这几个神级开源网站,都是FPGA/IC项目
  • segment fault异常及常见定位手段
  • 分享几个源码网站奉献给大家(持续更新中……)
  • 【pmcaff】重磅干货,必读的扁平化设计技巧
  • GNS3 网络模拟器介绍
  • MySQL数据类型简介以及MySQL INT、TINYINT、SMALLINT、MEDIUMINT、BIGINT(整数类型)
  • WSUS补丁服务器搭建和使用(超详细+域策略设置)
  • Web前端最新jQuery UI widget源码解析,前端入门
  • Linux之常用压缩解压缩命令
  • 最近成果
  • AXIOM的介绍与使用
  • 天呐!你知道MSBuild都干了些什么
  • KingbaseES数据库审计
  • NDK基础
  • 两个必看协议-最全面-最直接-最暴力-一篇文章带你读懂-HTTP、HTTPS
  • 探索WebRTC Streamer:实时通信的新境界
  • Oracle:TNS数据传输协议-基础篇
  • C# DataTable 总结常用方法
  • Xamarin移动开发的优点和缺点
  • gcc 编辑器基本使用