CN113127391B - 一种多设备兼容的dma数据传输引擎设计方法 - Google Patents

一种多设备兼容的dma数据传输引擎设计方法 Download PDF

Info

Publication number
CN113127391B
CN113127391B CN202110524492.4A CN202110524492A CN113127391B CN 113127391 B CN113127391 B CN 113127391B CN 202110524492 A CN202110524492 A CN 202110524492A CN 113127391 B CN113127391 B CN 113127391B
Authority
CN
China
Prior art keywords
dma
data
desc
interrupt
physical address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110524492.4A
Other languages
English (en)
Other versions
CN113127391A (zh
Inventor
郑欣
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xian Microelectronics Technology Institute
Original Assignee
Xian Microelectronics Technology Institute
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xian Microelectronics Technology Institute filed Critical Xian Microelectronics Technology Institute
Priority to CN202110524492.4A priority Critical patent/CN113127391B/zh
Publication of CN113127391A publication Critical patent/CN113127391A/zh
Application granted granted Critical
Publication of CN113127391B publication Critical patent/CN113127391B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • G06F13/282Cycle stealing DMA
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Bus Control (AREA)
  • Communication Control (AREA)

Abstract

一种多设备兼容的DMA数据传输引擎设计方法,包括:SGDMA/BDMA兼容性设计:BDMA传输机制设计,SGDMA传输机制设计以及通过SGDMA中的DMA‑DESC设计用于和BDMA兼容;DMA通道注册的设计;中断设计:BDMA的中断设计以及SGDMA的中断设计;中断和轮询可配置的设计。本发明将DMA功能单独进行设计,DMA上层的设备共同使用兼容的DMA层进行数据传输,在DMA资源紧张的时候还可以进行DMA通道的共享。通过对SGDMA中的描述符的保留与扩展设计,兼容了BDMA的软件设计;通过中断和轮询可配置并且和结合配置的方式实现了高带宽传输需求的DMA传输性能。

Description

一种多设备兼容的DMA数据传输引擎设计方法
技术领域
本发明属于通信领域,具体涉及一种多设备兼容的DMA数据传输引擎设计方法。
背景技术
DMA引擎管理软件适用于DMA上层设备共享DMA平台资源的情况,具有多设备、多功能、数据传输功能复杂、数据传输带宽高等特征。目前国产化领域没有单独针对DMA层进行功能设计,都是结合特定的设备,特定的功能,将DMA和设备的设计融为一体。
目前国产的DMA硬件的设计都是和特定的设备设计结合在一起,在软件设计方面也是在特定的设备的功能上实现DMA的传输,在DMA硬件设计相同的平台上,上层不同设备共享DMA平台资源时,DMA层代码无法复用,软件的设计成本和周期较高。
目前网络控制器驱动的设计,在DMA数据传输方面使用流式DMA进行数据的传输。数据发送时,数据源为协议栈,驱动在将来自协议栈的数据发送完成后,需要负责对内存资源进行释放;数据接收时,数据源为驱动,驱动在将来自设备的数据进行DMA传输前,需要负责为待接收的数据进行内存资源的准备,并将接收到的数据内存上传协议栈。目前类似FC控制器驱动的设备,在DMA数据传输方面使用一致性DMA进行数据的传输。数据不论是在发送或者接收状态,DMA内存均由用户进行申请和释放,用户态和内核态需要共享页表映射资源。在DMA设计方面,上述两种DMA及内存资源的使用情景在设计上存在很大的差异,需要提供不同的接口分别设计。目前的软件设计方案中没有将网络内存资源和其他用户态内存资源的申请和释放的软件接口进行统一。而SGDMA能够实现多个BDMA链表的一次性传输,可极大利用DMA资源高效进行DMA传输,在软件设计上需要对每个BDMA设计对应的描述符(DESC)并形成链表的结构,以便硬件设备能够将分散的BDMA进行一次性聚集传输;对于BDMA模式则相对比较简单,在传输时只需获取高速硬件数据的来源、目的、长度等信息,硬件即可完成一次DMA传输。在软件设计上,设备根据硬件平台的特征,要么实现BDMA的传输,要么实现SGDMA的传输,目前没有将其进行整合的设计。
发明内容
本发明的目的在于针对上述现有技术中软件驱动架构设计复杂以及数据传输性能不佳的问题,提供一种多设备兼容的DMA数据传输引擎设计方法,能够简化上层软件的开发流程,简化软件架构的设计复杂性,极大程度复用DMA设计的代码,极大程度提高DMA数据传输的性能,在DMA资源紧缺的情况下,软件的设计最大程度的保持不变。
为了实现上述目的,本发明有如下的技术方案:
一种多设备兼容的DMA数据传输引擎设计方法,包括以下步骤:
-SGDMA/BDMA兼容性设计;
BDMA传输机制设计;
SGDMA传输机制设计;
通过SGDMA中的DMA-DESC设计用于和BDMA兼容;
-DMA通道注册的设计;
-中断设计;
BDMA的中断设计;
SGDMA的中断设计;
-中断和轮询可配置的设计。
作为本发明的一种优选方案,所述的BDMA传输机制设计分为发送过程和接收过程设计;发送过程:获取待发送数据的虚拟地址和长度,映射内存物理地址,填写BDMA-DESC源物理地址寄存器,填写BDMA-DESC数据长度寄存器,设备发送完成后产生DMA完成中断产生后,本次发送过程完成;接收过程:预先为待接收数据申请一块连续的内存区作为目的虚拟地址,映射该区域内存的物理地址作为目的物理地址,填写BDMA-DESC的目的物理地址寄存器,待DMA完成中断产生后,通过所述目的虚拟地址和DMA-DESC数据长度寄存器获取接收数据,本次接收过程完成。
作为本发明的一种优选方案,所述的SGDMA传输机制设计包括SGDMA-DESC初始化、发送过程以及接收过程;
具体的,SGDMA-DESC初始化:申请一块连续的内存作为存储SGDMA-DESC的描述符环,映射该部分内存作为物理地址;发送过程:获取待发送数据块链表的虚拟地址链表,将虚拟地址链表映射成物理地址链表,将物理地址及长度信息存储到SGDMA-DESC描述符环中,将环中已使用描述符序列的首描述符物理地址和尾描述符物理地址分别写入SG描述符头寄存器及SG描述符尾寄存器,设备发送完成后产生DMA完成中断,本次发送过程完成。接收过程:预先为待接收数据申请连续的内存形成内存块链表环性结构,映射内存得到物理地址,将该内存块链表环性结构的物理地址信息逐个填写到SGDMA-DESC描述符环中,待DMA完成中断产生后,通过SG描述符头寄存器以及SG描述符尾寄存器获取SGDMA-DESC描述符环上的接收数据描述符段,进而通过接收数据描述符段中的描述符信息获取到对应的内存块链表环性结构上本次接收数据块链的头和尾,本次接收过程完成。
作为本发明的一种优选方案,所述通过SGDMA中的DMA-DESC设计用于和BDMA兼容包括:在BDMA模式时,每次仅使用DESC环上的一个DESC;对于发送,将待发送数据的源物理地址、源虚拟地址以及数据长度预先存储到DESC环上的当前DESC上,再将当前DESC上的源物理地址以及数据长度分别写入到DMA源物理地址寄存器和DMA数据寄存器中,待本次数据发送完成,使当前DESC指针指向下一个新DESC;对于接收,将预先申请的内存地址存储到当前DESC环中,将目的物理地址写入DMA目的地址寄存器,待接收中断产生后,通过长度寄存器及当前DESC中存储的内存虚拟地址获取接收到的数据,使当前的DESC指针指向下一个新的DESC。
作为本发明的一种优选方案,所述DMA通道注册的设计分为多通道和单通道;多通道:针对DMA通道资源宽裕的情况,多个设备分别使用各自的DMA通道,各个设备的发送与接收也使用单独的DMA通道分别进行;单通道:针对于DMA通道资源紧张的情况,为每个通道设计锁保护机制,如果通道需要共享时,特定的路径上获取该通道锁,直到DMA传输完成后释放该锁。
作为本发明的一种优选方案,所述的中断设计包括发送阶段和接收阶段;具体的,发送阶段将待传输数据的源物理地址、目的物理地址、待传输数据的长度填入DMA控制寄存器,数据即可发送,传输完成后产生DMA完成中断;DMA底层设备接收到数据后,源地址是DMA设备,数据的源地址、目的物理地址以及数据长度已知,数据被传输到内存,传输完成后产生DMA完成中断。
作为本发明的一种优选方案,所述BDMA的中断设计具体包括:在发送过程中,调用DMA数据传输接口将共同部分填写源物理地址、目的物理地址、数据长度,等待DMA完成中断产生后,一次数据发送过程完成;
在接收过程中,准备接收数据的内存填写目的物理地址,等待DMA底层的设备接收到数据的时候产生设备中断,此时调用DMA数据传输接口将共同部分填写源物理地址、数据长度,等待DMA完成中断产生后,一次数据接收过程完成。
作为本发明的一种优选方案,所述SGDMA的中断设计具体包括:在发送过程中,通过调用DMA数据传输接口将公共部分填写DESC头、DESC尾,等待DMA完成中断产生后,一次数据发送过程完成;
在接收过程中,准备接收数据的内存填写目的物理地址,等待DMA底层的设备接收到数据的时候产生设备中断,此时通过调用DMA数据传输接口将公共部分填写DESC头、DESC尾,等待DMA完成中断产生后,一次数据接收过程完成。
作为本发明的一种优选方案,所述中断和轮询可配置的设计包括轮询方式、中断方式以及中断结合轮询的方式;轮询方式:如果设备数据接收FIFO中每次轮询为非空,则调用数据接收接口进行数据接收,直到设备数据接收FIFO的状态为空;中断方式:如果DMA底层设备产生接收设备中断则获取接收FIFO控制器寄存器中的数据长度以及源物理地址寄存器,并结合已准备好的目的物理地址填写DMA控制寄存器,等待DMA完成中断之后实现一次DMA数据接收过程;中断结合轮询的方式:在不确定数据传输带宽的情形下可使用轮询结合中断的方式,每次数据的接收通过中断触发,设备中断产生后则关闭设备中断,采用轮询的方式进行数据的接收,直到接收FIFO为空再打开设备中断,等待下一次中断产生;为了不影响操作***响应其他中断的实时性和处理的性能,设置轮询门限,在一次轮询中,轮询次数不能超过轮询门限,如果超过了轮询门限,则开启中断准备下一次数据的中断接收流程,同时调度其他中断处理例程进行处理。
作为本发明的一种优选方案,中断处理采用后半段处理模式,即将费时的操作放在中断的后半段进行调度执行。
相较于现有技术,本发明有如下的有益效果:
通过将DMA功能单独设计,DMA上层的设备共同使用兼容的DMA层进行数据传输,在DMA资源紧张的时候还可以进行DMA通道的共享。在设计层面最大程度重用代码,简化软件框架的设计。描述符(DESC)的设计是针对SGDMA的分散聚集特性实现的描述链表,对于BDMA无需DESC的设计,本发明在BDMA的设计中保留了DESC链表的设计,实现了BDMA和SGDMA的兼容。本发明多设备兼容的DMA数据传输引擎设计方法符合Linux内核接口规范,采用多种兼容性方案,实现了DMA软件层的抽象,包括SGDMA和BDMA的设计兼容、流式DMA资源管理和一致性DMA的资源管理的设计兼容等。DMA引擎层的设计能高效设计其上层的设备驱动的功能,并且对上层对DMA的需求统一调度管理,实现不同设备调用DMA的接口一致性统一。本发明能够实现完全自主可控,使用C语言进行编程,目前已在龙芯3A3000+7A1000计算平台上通过原型验证测试。
进一步的,DMA通道注册的设计分为多通道和单通道,在DMA通道紧缺的情况下,采用软件方式实现了对DMA通道的共享复用;通过中断和轮询可配置的设计并且结合配置方式实现高带宽传输需求的DMA传输性能;传统的方式使用NAPI的方式,本发明的方法与NAPI有所不同,优点在于设置的轮询门限防止了某单个设备对DMA通道的永久占用。
附图说明
图1本发明实施例的DMA引擎结构框图;
图2本发明实施例发送描述符环的管理流程图;
图3本发明实施例接收描述符环的管理流程图。
具体实施方式
下面结合附图及实施例对本发明做进一步的详细说明。
本发明提出一种多设备兼容的DMA数据传输引擎设计方法,实现多通道、多协议、高带宽的DMA数据传输,根据DMA控制器本身的技术特点和功能特点,其可在BDMA、SGDMA两种模式下运行,本发明将这两种基本模式在设计上进行了兼容。
高性能DMA引擎的具体功能包括:DMA通道注册功能、内存到设备方向的数据传输(发送)功能、设备到内存方向的数据传输(接收)、描述符的高效存储功能等。
在物理结构上,高性能DMA引擎主要由以下几个模块构成:1.DMA通道注册模块;2.中断管理模块;3.数据传输模块;4.描述符管理模块;5.PCIe总线接口管理模块等。
为了实现以上功能,需要将DMA引擎控制器设计成一个Linux PCIe总线设备,通过为上层应用该DMA通道的设备提供DMA通道注册接口,实现上层设备对DMA通道的使用。在Linux内核架构中需要设计符合PCIe总线设备接口的引擎模块,由于在DMA控制器的两种模式的需求下,本发明提出的方法将SGDMA和BDMA的设计合二为一。
具体包括以下步骤:
(1)SGDMA/BDMA兼容性设计;
通过保留并改进SGDMA-DESC的设计实现;
BDMA传输机制:
发送:获取待发送数据的虚拟地址和长度(该内存区为连续内存区),映射内存物理地址(源物理地址,长度),填写BDMA-DESC源物理地址寄存器,填写BDMA-DESC数据长度寄存器(数据发送),设备发送完成后产生DMA完成中断,本次发送过程完成。
接收:预先为待接收数据申请一块连续的内存区(目的虚拟地址),映射该内存物理地址(目的物理地址),填写BDMA-DESC的目的物理地址寄存器,待DMA完成中断产生后,通过目的虚拟地址和DMA-DESC数据长度寄存器获取接收数据,本次接收过程完成。
SGDMA传输机制:
SGDMA-DESC初始化:
申请存储SGDMA-DESC的描述符环(一块连续的内存),映射该部分内存(物理地址);
发送:获取待发送数据块链表的虚拟地址链表,将该虚拟地址链表映射成物理地址链表,将该一系列的连续内存块的物理地址及长度信息存储到SGDMA-DESC描述符环中,将存储环中数据的已使用描述符序列的首描述符物理地址和尾描述符物理地址分别写入SG描述符头寄存器及SG描述符尾寄存器,设备发送完成后产生DMA完成中断,本次发送过程完成。
接收:预先为待接收数据申请一系列连续的内存形成内存块链表环性结构,映射该系列块内存(物理地址),将该内存块链表环的物理地址信息逐个填写到SGDMA-DESC环中,待DMA完成中断产生后,通过SG描述符头寄存器及SG描述符尾寄存器获取SGDMA-DESC环上的接收数据描述符段,进而通过这些描述符信息获取到对应内存块链表环上的本次接收数据块链的头和尾,本次接收过程完成。
保留SGDMA中的DMA-DESC设计用于和BDMA软件设计兼容:
由于BDMA的传输本质上不需要DESC的参与,对于发送,只需要填写源物理地址寄存器及长度寄存器即可将待发送数据发出;对于接收,填写目的物理地址寄存器后,待接收中断产生后,通过数据长度寄存器和用于映射目的物理地址的虚拟内存地址即可获取接收到的数据。由于设计的需要,将SGDMA-DESC保留,并用于BDMA传输模式,用于兼容BDMA。在BDMA模式时,每次仅使用DESC环上的一个DESC。对于发送,将待发送数据的源物理地址、源虚拟地址、数据长度预先存储到DESC环上的当前DESC上,再将当前DESC上的源物理地址和数据长度分别写入到DMA源物理地址寄存器和DMA数据寄存器中,待本次数据发送完成,由软件维护当前DESC指针指向下一个新DESC。对于接收,将预先申请的内存的目的虚拟地址、内存的目的物理地址等信息存储到当前DESC环中,将目的物理地址写入到DMA目的地址寄存器,待接收完成中断产生后,通过长度寄存器及当前DESC中存储的内存虚拟地址获取接收到的数据,最后由软件维护当前的DESC指针指向下一个新的DESC。通过该兼容方式在SGDMA软件框架设计的基础上兼容对BDMA数据传输的管理。
(2)DMA通道注册的设计;
多通道:
如果硬件平台上的DMA通道资源比较宽裕,多个设备可以分别使用各自的DMA通道,各个设备的发送与接收也可以使用单独的DMA通道分别进行。
单通道:
如果硬件平台上的DMA通道资源紧张,一个通道既要做为发送通道,又要作为接收通道,并且有可能使用该通道的设备还需要和其他的设备共享。在这种情形下,DMA引擎的设计需要虚拟成多通道使用。具体的兼容性设计体现在:锁机制设计用于保护通道临界资源。为每个通道设计锁保护机制,如果通道需要共享(设备共享、收发共享)时,特定的路径上获取该通道锁,直到DMA传输完成后释放该锁,通过这种锁机制,可以将DMA通道的利用空间大大提升。
(3)中断设计(通过DMA完成中断实现传输流程(收/发流程)的统一);
方法:提取发送和接收的共同部分(DMA数据传输接口);
发送和接收的共同部分是硬件传输机制。对于发送:将待传输数据的源物理地址、目的物理地址(对于发送,由于目的地址是DMA设备,所以该参数在不区分多设备和多源的情况下可以不设置)、待传输数据的长度填入DMA控制寄存器,数据即可发送,传输完成后产生DMA完成中断。对于接收,当DMA底层设备接收到数据后,数据的源地址(对于接收,由于源地址是DMA设备,所以该参数在不区分多设备和多源的情况下可以不设置)、目的物理地址(在接收数据之前由申请并映射到的内存得到,并填入寄存器)、数据长度已知,此时数据即可被传输到内存,传输完成后会产生DMA完成中断。
BDMA的中断设计:
在发送过程中:调用共同部分(DMA数据传输接口)填写源物理地址、目的物理地址、数据长度,等待DMA完成中断产生后,一次数据发送过程完成。
在接收过程中:准备接收数据的内存(填写目的物理地址),等待DMA底层的设备接收到数据的时候产生设备中断,此时调用共同部分(DMA数据传输接口)填写源物理地址、数据长度,等待DMA完成中断产生后,一次数据接收过程完成。
SGDMA的中断设计:
在发送过程中:调用公共部分(DMA数据传输接口)填写DESC头、DESC尾,等待DMA完成中断产生后,一次数据发送过程完成。
在接收过程中:准备接收数据的内存(填写目的物理地址),等待DMA底层的设备接收到数据的时候产生设备中断,此时调用公共部分(DMA数据传输接口)填写DESC头,DESC尾,等待DMA完成中断产生后,一次数据接收过程完成。
(4)中断和轮询可配置的设计;兼容实现万兆通信高带宽需求和千兆通信降低***资源利用率需求。接收的模式可配置,在高带宽使用场景下使用轮询模式进行接收,在低带宽使用场景下使用中断方式进行接收。具体的,通过封装轮询和中断的共同部分进行实现(DMA数据接收接口,该接口实现DMA数据接收方向的数据物理传输功能);
轮询方式:如果设备数据接收FIFO中每次轮询为非空,则调用数据接收接口进行数据接收,直到设备数据接收FIFO的状态为空。
中断方式:如果DMA底层设备产生接收设备中断,则获取接收FIFO控制器寄存器中的数据长度,源物理地址寄存器,并结合已准备好的目的物理地址填写DMA控制寄存器,等待DMA完成中断实现一次DMA数据接收过程。
中断结合轮询的方式:在不确定数据传输带宽的情形下,可使用轮询结合中断的方式:每次数据的接收通过中断触发,一旦设备中断产生后则关闭设备中断,采用轮询的方式进行数据的接收,直到接收FIFO为空再打开设备中断,等待下一次中断产生。为了不影响操作***响应其他中断的实时性和处理的性能,也可以对该方式进行优化,即设置轮询门限,在一次轮询中,轮询次数不能超过轮询门限,如果超过轮询门限,需要开启中断准备下一次数据的中断接收流程,同时调度其他中断处理例程进行处理。
本发明提出的DMA数据传输引擎设计方法,中断处理采用后半段处理模式,将费时的数据封装,条件判断,协议数据提交等操作放在中断的后半段进行调度执行,不影响中断产生后的数据处理实时性,并且不影响其他设备共享中断处理的性能。
实施例
本发明提出的多设备兼容的DMA数据传输引擎设计方法实施例步骤如下:
(1)SGDMA引擎的设计,参见图2,图3:
实心方块表示DESC当前被HW所占有,空心方块表示DESC当前被SW所占有。
发送流程详见图2,发送初始化阶段:
驱动初始化HW_Next和SW_Next指针到DESC Ring的开始位置;
驱动重置HW_Completed指针;
驱动初始化并使能DMA引擎。
发送包传输阶段:
数据到达以太网数据包发送接口;
多个数据包被SG-DESC标记,准备发送;
驱动在DESC中标记SOP、EOP和IRQ_on_completion;
驱动添加用户控制信息(比如校验和等)到描述符;
驱动更新SW_Next指针。
发送后处理阶段:
驱动检查DESC的完成状态;
驱动释放数据包的缓冲区。
接收流程详见图3,接收初始化阶段:
驱动通过申请合适大小的以太网缓冲区(SKB)或块内存缓冲来初始化每个接收DESC;
初始化HW_Next指针到DESC Ring开始,初始化SW_Next指针到DESC Ring末尾;
驱动重置HW_Completed指针;
驱动初始化并使能DMA引擎;
接收后处理阶段:
驱动检查DESC的完成状态;
驱动检查SOP、EOP和用户信息状态;
驱动上传已完成的缓冲区数据到上层;
驱动为DESC补充新的内存缓冲区;
驱动更新SW_Next指针。
(2)BDMA的兼容性设计,参见图2,图3:
实心方块表示DESC当前被HW所占有,空心方块表示DESC当前被SW所占有;
发送流程详见图2,发送初始化阶段:
驱动初始化HW_Next和SW_Next指针到DESC Ring的开始位置;
驱动重置HW_Completed指针;
驱动初始化并使能DMA引擎。
发送包传输阶段:
数据到达以太网数据包发送接口;
仅一个数据包被SG-DESC标记,准备发送;
驱动在DESC中标记SOP、EOP和IRQ_on_completion;
驱动添加用户控制信息(比如校验和等)到描述符;
驱动更新SW_Next指针。
发送后处理阶段:
驱动检查DESC的完成状态;
驱动释放数据包的缓冲区。
接收流程详见图3,接收初始化阶段:
驱动通过申请合适大小的以太网缓冲区(SKB)或块内存缓冲来初始化每个接收DESC;
初始化HW_Next指针到DESC Ring开始,初始化SW_Next指针到DESC Ring末尾;
驱动重置HW_Completed指针;
驱动初始化并使能DMA引擎;
接收后处理阶段:
驱动检查DESC的完成状态;
驱动检查SOP、EOP和用户信息状态;
驱动上传已完成的缓冲区数据到上层;
驱动为DESC补充新的内存缓冲区;
驱动更新SW_Next指针。
BDMA/SGDMA模式下DMA控制寄存器中需要填写的信息如表1所示:
表1
Figure BDA0003065248660000131
DESC Ring指针说明如表2所示:
表2
指针标记 描述
HW_Completed 记录DMA引擎处理完成后的最后一个描述符
HW_Next 记录DMA引擎将要处理的下一个描述符
SW_Next 记录软件将要提交给DMA处理的下一个描述符
根据上述方案,采用C语言对控制器驱动进行编写,编译,并完成控制器驱动的调试。最终,测试结果表明本发明具有很好的可实施性,且性能满足预期。

Claims (7)

1.一种多设备兼容的DMA数据传输引擎设计方法,其特征在于,包括以下步骤:
-SGDMA/BDMA兼容性设计;
BDMA传输机制设计;
SGDMA传输机制设计;
通过SGDMA中的DMA-DESC设计用于和BDMA兼容;
所述的BDMA传输机制设计分为发送过程和接收过程设计;发送过程:获取待发送数据的虚拟地址和长度,映射内存物理地址,填写BDMA-DESC源物理地址寄存器,填写BDMA-DESC数据长度寄存器,设备发送完成后产生DMA完成中断产生后,本次发送过程完成;接收过程:预先为待接收数据申请一块连续的内存区作为目的虚拟地址,映射所申请内存区区域内存的物理地址作为目的物理地址,填写BDMA-DESC的目的物理地址寄存器,待DMA完成中断产生后,通过所述目的虚拟地址和DMA-DESC数据长度寄存器获取接收数据,本次接收过程完成;
所述的SGDMA传输机制设计包括SGDMA-DESC初始化、发送过程以及接收过程;
具体的,SGDMA-DESC初始化:申请一块连续的内存作为存储SGDMA-DESC的描述符环,映射所申请的内存作为物理地址;发送过程:获取待发送数据块链表的虚拟地址链表,将虚拟地址链表映射成物理地址链表,将物理地址及长度信息存储到SGDMA-DESC描述符环中,将环中已使用描述符序列的首描述符物理地址和尾描述符物理地址分别写入SG描述符头寄存器及SG描述符尾寄存器,设备发送完成后产生DMA完成中断,本次发送过程完成;接收过程:预先为待接收数据申请连续的内存形成内存块链表环性结构,映射内存得到物理地址,将内存块链表环性结构的物理地址信息逐个填写到SGDMA-DESC描述符环中,待DMA完成中断产生后,通过SG描述符头寄存器以及SG描述符尾寄存器获取SGDMA-DESC描述符环上的接收数据描述符段,进而通过接收数据描述符段中的描述符信息获取到对应的内存块链表环性结构上本次接收数据块链的头和尾,本次接收过程完成;
所述通过SGDMA中的DMA-DESC设计用于和BDMA兼容包括:在BDMA模式时,每次仅使用DESC环上的一个DESC;对于发送,将待发送数据的源物理地址、源虚拟地址以及数据长度预先存储到DESC环上的当前DESC上,再将当前DESC上的源物理地址以及数据长度分别写入到DMA源物理地址寄存器和DMA数据寄存器中,待本次数据发送完成,使当前DESC指针指向下一个新DESC;对于接收,将预先申请的内存地址存储到当前DESC环中,将目的物理地址写入DMA目的地址寄存器,待接收中断产生后,通过长度寄存器及当前DESC中存储的内存虚拟地址获取接收到的数据,使当前的DESC指针指向下一个新的DESC;
-DMA通道注册的设计;
-中断设计;
BDMA的中断设计;
SGDMA的中断设计;
-中断和轮询可配置的设计。
2.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,所述DMA通道注册的设计分为多通道和单通道;多通道:针对DMA通道资源宽裕的情况,多个设备分别使用各自的DMA通道,各个设备的发送与接收也使用单独的DMA通道分别进行;单通道:针对于DMA通道资源紧张的情况,为每个通道设计锁保护机制,如果通道需要共享时,特定的路径上获取通道的锁,直到DMA传输完成后释放通道的锁。
3.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,所述的中断设计包括发送阶段和接收阶段;具体的,发送阶段将待传输数据的源物理地址、目的物理地址、待传输数据的长度填入DMA控制寄存器,数据即可发送,传输完成后产生DMA完成中断;DMA底层设备接收到数据后,源地址是DMA设备,数据的源地址、目的物理地址以及数据长度已知,数据被传输到内存,传输完成后产生DMA完成中断。
4.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,所述BDMA的中断设计具体包括:在发送过程中,调用DMA数据传输接口将共同部分填写源物理地址、目的物理地址、数据长度,等待DMA完成中断产生后,一次数据发送过程完成;
在接收过程中,准备接收数据的内存填写目的物理地址,等待DMA底层的设备接收到数据的时候产生设备中断,此时调用DMA数据传输接口将共同部分填写源物理地址、数据长度,等待DMA完成中断产生后,一次数据接收过程完成。
5.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,所述SGDMA的中断设计具体包括:在发送过程中,通过调用DMA数据传输接口将公共部分填写DESC头、DESC尾,等待DMA完成中断产生后,一次数据发送过程完成;
在接收过程中,准备接收数据的内存填写目的物理地址,等待DMA底层的设备接收到数据的时候产生设备中断,此时通过调用DMA数据传输接口将公共部分填写DESC头、DESC尾,等待DMA完成中断产生后,一次数据接收过程完成。
6.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,所述中断和轮询可配置的设计包括轮询方式、中断方式以及中断结合轮询的方式;轮询方式:如果设备数据接收FIFO中每次轮询为非空,则调用数据接收接口进行数据接收,直到设备数据接收FIFO的状态为空;中断方式:如果DMA底层设备产生接收设备中断则获取接收FIFO控制器寄存器中的数据长度以及源物理地址寄存器,并结合已准备好的目的物理地址填写DMA控制寄存器,等待DMA完成中断之后实现一次DMA数据接收过程;中断结合轮询的方式:在不确定数据传输带宽的情形下可使用轮询结合中断的方式,每次数据的接收通过中断触发,设备中断产生后则关闭设备中断,采用轮询的方式进行数据的接收,直到接收FIFO为空再打开设备中断,等待下一次中断产生;为了不影响操作***响应其他中断的实时性和处理的性能,设置轮询门限,在一次轮询中,轮询次数不能超过轮询门限,如果超过了轮询门限,则开启中断准备下一次数据的中断接收流程,同时调度其他中断处理例程进行处理。
7.根据权利要求1所述多设备兼容的DMA数据传输引擎设计方法,其特征在于,中断处理采用后半段处理模式,即将费时的操作放在中断的后半段进行调度执行。
CN202110524492.4A 2021-05-13 2021-05-13 一种多设备兼容的dma数据传输引擎设计方法 Active CN113127391B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110524492.4A CN113127391B (zh) 2021-05-13 2021-05-13 一种多设备兼容的dma数据传输引擎设计方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110524492.4A CN113127391B (zh) 2021-05-13 2021-05-13 一种多设备兼容的dma数据传输引擎设计方法

Publications (2)

Publication Number Publication Date
CN113127391A CN113127391A (zh) 2021-07-16
CN113127391B true CN113127391B (zh) 2023-03-14

Family

ID=76781988

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110524492.4A Active CN113127391B (zh) 2021-05-13 2021-05-13 一种多设备兼容的dma数据传输引擎设计方法

Country Status (1)

Country Link
CN (1) CN113127391B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114416613A (zh) * 2021-12-29 2022-04-29 苏州雄立科技有限公司 一种dma数据传输***及方法
CN115174707B (zh) * 2022-09-09 2022-11-15 井芯微电子技术(天津)有限公司 一种支持多协议dma引擎的方法、***及电子设备
CN115617722B (zh) * 2022-12-05 2023-03-07 成都博宇利华科技有限公司 实现多pcie设备共享dma链表的***及方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0732659A1 (en) * 1995-03-17 1996-09-18 Symbios Logic Inc. Controlling (n+i) I/O channels with (n) data managers in a homogeneous software programming environment
JP2011070372A (ja) * 2009-09-25 2011-04-07 Toppan Printing Co Ltd Dma転送制御装置
CN106339338A (zh) * 2016-08-31 2017-01-18 天津国芯科技有限公司 一种可提高***性能的数据传输方法及装置
CN109471816A (zh) * 2018-11-06 2019-03-15 西安微电子技术研究所 一种基于描述符的pcie总线dma控制器及数据传输控制方法
CN109491937A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种Scatter-Gather DMA的数据传输方法及装置
CN111090221A (zh) * 2019-12-05 2020-05-01 合肥芯碁微电子装备股份有限公司 用于直写式光刻***中的PCIe DMA数据传输***及其传输方法
CN111736115A (zh) * 2020-05-13 2020-10-02 复旦大学 基于改进型sgdma+pcie的mimo毫米波雷达高速传输方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0732659A1 (en) * 1995-03-17 1996-09-18 Symbios Logic Inc. Controlling (n+i) I/O channels with (n) data managers in a homogeneous software programming environment
JP2011070372A (ja) * 2009-09-25 2011-04-07 Toppan Printing Co Ltd Dma転送制御装置
CN106339338A (zh) * 2016-08-31 2017-01-18 天津国芯科技有限公司 一种可提高***性能的数据传输方法及装置
CN109491937A (zh) * 2018-10-24 2019-03-19 山东超越数控电子股份有限公司 一种Scatter-Gather DMA的数据传输方法及装置
CN109471816A (zh) * 2018-11-06 2019-03-15 西安微电子技术研究所 一种基于描述符的pcie总线dma控制器及数据传输控制方法
CN111090221A (zh) * 2019-12-05 2020-05-01 合肥芯碁微电子装备股份有限公司 用于直写式光刻***中的PCIe DMA数据传输***及其传输方法
CN111736115A (zh) * 2020-05-13 2020-10-02 复旦大学 基于改进型sgdma+pcie的mimo毫米波雷达高速传输方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于PCIE的SG DMA高速数据传输***;孙晓晔;《计算机技术与发展》;20130509(第09期);全文 *

Also Published As

Publication number Publication date
CN113127391A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
CN113127391B (zh) 一种多设备兼容的dma数据传输引擎设计方法
Forencich et al. Corundum: An open-source 100-gbps nic
CN107623646B (zh) 数据流传输方法、发送设备及接收设备
US10210125B2 (en) Receive queue with stride-based data scattering
US9100349B2 (en) User selectable multiple protocol network interface device
JP6483383B2 (ja) 車両でのイーサネットとcan通信との間の信号変換を行うプロセッサ及び信号変換方法
US8441957B2 (en) Apparatus and method of remote PHY auto-negotiation
CN101882116A (zh) 音频传输的实现方法及移动终端
EP3461086B1 (en) Communication apparatus, communication method and computer-readable medium
WO2016041375A1 (zh) 一种cpu与芯片之间传输消息报文的方法及装置
CN103885840B (zh) 一种基于AXI4总线的FCoE协议加速引擎IP核
CN113364856B (zh) 一种基于共享内存及异构处理器的车载以太网***
CN111107586A (zh) 一种bbu前传数据的处理方法及***
CN110321319A (zh) 片上***
CN104378161A (zh) 一种基于AXI4总线架构的FCoE协议加速引擎IP核
TW200302649A (en) An interface and related methods for dynamic channelization in an Ethernet architecture
CN109710550B (zh) 一种基于双缓存的帧长度不固定rs422数据通信***
CN113127390B (zh) 一种多协议数据总线适配器引擎架构设计方法
CN115550104B (zh) Axi总线扩展方法、装置、电子设备及存储介质
CN108521416B (zh) 一种ecn板卡
CN109918172A (zh) 一种虚拟机热迁移方法及***
CN112702313B (zh) 高速udp数据发送***及方法
CN116954874A (zh) 资源分配方法、装置、设备及存储介质
CN105320625A (zh) 一种硬件封包的基于PCIe的DMA传输方法
CN107645450A (zh) 基于协议无感知转发技术的流表虚拟化装置及方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant