# US 12,007,921 B2 · Programmable user-defined peripheral-bus device implementation using data-plane accelerator (DPA)

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 12,007,921 B2
- Document ID: US12007921B2
- Status: Granted
- Kind: B2
- Application number: 17/979,013
- Filed: 2022-11-02
- Published: 2024-05-02
- Granted: 2024-06-11
- Earliest claimed: 2022-11-02
- Assignees: Mellanox Technologies, Ltd.
- Applicants: Mellanox Technologies, Ltd.
- Inventors: Daniel Marcovitch; Eliav Bar-Ilan; Ran Avraham Koren; Liran Liss; Oren Duer; Shahaf Shuler
- Web page: https://patentgrep.com/patent/US12007921B2

## CPC

- G06F 13/28: using burst mode transfer, e.g. direct memory access {DMA}, cycle steal (G06F13/32 takes precedence)
- G06F 13/4221: {being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus}
- G06F 13/4282: {on a serial bus, e.g. I2C bus, SPI bus (on daisy chain buses G06F13/4247)}
- G06F 2213/0024: Peripheral component interconnect [PCI]
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)

## Abstract

A network adapter includes a network interface, a bus interface, a hardware-implemented data-path and a programmable Data-Plane Accelerator (DPA). The network interface is to communicate with a network. The bus interface is to communicate with an external device over a peripheral bus. The hardware-implemented data-path includes a plurality of packet-processing engines to process data units exchanged between the network and the external device. The DPA is to expose on the peripheral bus a User-Defined Peripheral-bus Device (UDPD), to run user-programmable logic that implements the UDPD, and to process transactions issued from the external device to the UDPD by reusing one or more of the packet-processing engines of the data-path.

## Claims

### Claim 1

A network adapter, comprising:
a network interface, to communicate with a network;
a bus interface, to communicate with an external device over a peripheral bus;
a hardware-implemented data-path, comprising a plurality of packet-processing engines, to process data units exchanged between the network and the external device; and
a programmable Data-Plane Accelerator (DPA), to expose on the peripheral bus a User-Defined Peripheral-bus Device (UDPD), to run user-programmable logic that implements the UDPD, and to process transactions issued from the external device to the UDPD by reusing at least a given packet-processing engine among the packet-processing engines of the data-path,
wherein (i) in processing the data units, the given packet-processing engine in the data-path is to be triggered by a preceding packet-processing engine in the data-path, and (ii) in processing the transactions issued to the UDPD, the given packet-processing engine is to be invoked by the DPA.

### Claim 2 (depends on 1)

The network adapter according to claim 1, wherein the UDPD is one of:
a network adapter;
a storage device;
a Graphics Processing Unit (GPU); and
a Field Programmable Gate Array (FPGA).

### Claim 3 (depends on 1)

The network adapter according to claim 1, wherein:
in processing the data units, the data-path is to communicate over the peripheral bus with a network-adapter driver running on the external device; and
in processing the transactions issued to the UDPD, the DPA is to communicate over the peripheral bus with a UDPD driver running on the external device.

### Claim 4 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises a hardware-implemented transport engine to perform transport-protocol checks and/or offloads on incoming communication data units and to select receive-queues for the incoming communication data units; and
the DPA is to re-use the transport engine to perform transport-protocol checks and/or offloads on incoming UDPD data units associated with the UDPD, and to select receive-queues for the incoming UDPD data units.

### Claim 5 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises a hardware-implemented address-translation engine to translate between virtual addresses in a first address space and addresses assigned to the communication data units in a second address space; and
the DPA is to re-use the address-translation engine to translate between virtual addresses in a third address space and addresses assigned to UDPD data units associated with the UDPD in a fourth address space.

### Claim 6 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises at least one hardware-implemented Direct Memory Access (DMA) engine to scatter data from at least some of the communication data units to memory, and to transfer completion notifications for the communication data units; and
the DPA is to re-use the DMA engine to scatter data from UDPD data units, associated with the UDPD, to the memory, and to transfer completion notifications for the UDPD data units.

### Claim 7 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises a hardware-implemented message-signaled-interrupt engine to trigger the external device with interrupts upon completions of processing of at least some of the data units; and
the DPA is to re-use the message-signaled-interrupt engine to trigger the external device with interrupts upon completions of processing of UDPD data units associated with the UDPD.

### Claim 8 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises an interrupt-moderation engine to throttle a rate of interrupts that indicate completions of at least some of the communication data units; and
the DPA is to re-use the interrupt-moderation engine to throttle a rate of the interrupts that indicate the completions of the UDPD data units.

### Claim 9 (depends on 1)

The network adapter according to claim 1, wherein:
the given packet-processing engine comprises a doorbell-aggregation engine to coalesce doorbells relating to the communication data units; and
the DPA is to re-use the doorbell-aggregation engine to coalesce doorbells relating to UDPD data units associated with the UDPD.

### Claim 10

A method in a network adapter, the method comprising:
communicating with a network;
communicating with an external device over a peripheral bus;
using a hardware-implemented data-path that includes a plurality of packet-processing engines, processing data units exchanged between the network and the external device; and
using a programmable Data-Plane Accelerator (DPA), exposing on the peripheral bus a User-Defined Peripheral-bus Device (UDPD), running user-programmable logic that implements the UDPD, and processing transactions issued from the external device to the UDPD by reusing at least a given packet-processing engine among the packet-processing engines of the data-path,
wherein (i) in processing the data units, the given packet-processing engine in the data-path is to be triggered by a preceding packet-processing engine in the data-path, and (ii) in processing the transactions issued to the UDPD, the given packet-processing engine is to be invoked by the DPA.

### Claim 11 (depends on 10)

The method according to claim 10, wherein the UDPD is one of:
a network adapter;
a storage device;
a Graphics Processing Unit (GPU); and
a Field Programmable Gate Array (FPGA).

### Claim 12 (depends on 10)

The method according to claim 10, wherein:
processing the data units comprises communicating over the peripheral bus with a network-adapter driver running on the external device; and
processing the transactions issued to the UDPD comprises communicating over the peripheral bus with a UDPD driver running on the external device.

### Claim 13 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a hardware-implemented transport engine;
processing the data units comprises, by the hardware-implemented transport engine, performing transport-protocol checks and/or offloads on incoming communication data units and selecting receive-queues for the incoming communication data units; and
re-using the transport engine by the DPA comprises performing transport-protocol checks and/or offloads on incoming UDPD data units associated with the UDPD, and selecting receive-queues for the incoming UDPD data units.

### Claim 14 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a hardware-implemented address-translation engine;
processing the data units comprises, by the hardware-implemented address-translation engine, translating between virtual addresses in a first address space and addresses assigned to the communication data units in a second address space; and
re-using the address-translation engine by the DPA comprises translating between virtual addresses in a third address space and addresses assigned to UDPD data units associated with the UDPD in a fourth address space.

### Claim 15 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a hardware-implemented Direct Memory Access (DMA) engine;
processing the data units comprises, by the hardware-implemented Direct Memory Access (DMA) engine, scattering data from at least some of the communication data units to memory, and transferring completion notifications for the communication data units; and
re-using the DMA engine by the DPA comprises scattering data from UDPD data units, associated with the UDPD, to the memory, and transferring completion notifications for the UDPD data units.

### Claim 16 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a hardware-implemented message-signaled-interrupt engine;
processing the data units comprises, by the hardware-implemented message-signaled-interrupt engine, triggering the external device with interrupts upon completions of processing of at least some of the data units; and
re-using the message-signaled-interrupt engine by the DPA comprises triggering the external device with interrupts upon completions of processing of UDPD data units associated with the UDPD.

### Claim 17 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a hardware-implemented interrupt-moderation engine;
processing the data units comprises, by the hardware-implemented interrupt-moderation engine, throttling a rate of interrupts that indicate completions of at least some of the communication data units; and
re-using the interrupt-moderation engine by the DPA comprises throttling a rate of the interrupts that indicate the completions of the UDPD data units.

### Claim 18 (depends on 10)

The method according to claim 10, wherein:
the given packet-processing engine comprises a doorbell-aggregation engine;
processing the data units comprises, by the doorbell-aggregation engine, coalescing doorbells relating to the communication data units; and
re-using the doorbell-aggregation engine by the DPA comprises coalescing doorbells relating to UDPD data units associated with the UDPD.

### Claim 19

A network adapter, comprising:
a network interface, to communicate with a network;
a bus interface, to communicate with an external device over a peripheral bus;
a hardware-implemented data-path, comprising a plurality of packet-processing engines, to process data units exchanged between the network and the external device; and
a programmable Data-Plane Accelerator (DPA), to run user-programmable logic that implements a User-Defined Peripheral-bus Device (UDPD), including reusing, in implementing the UDPD, at least a given packet-processing engine among the packet-processing engines of the data-path,
wherein (i) in processing the data units, the given packet-processing engine in the data-path is to be triggered by a preceding packet-processing engine in the data-path, and (ii) in processing transactions issued to the UDPD, the given packet-processing engine is to be invoked by the DPA.
