From d7eb1b21a248987b5dd011ab4a424dfcc66cb36a Mon Sep 17 00:00:00 2001 From: Alex Forencich Date: Tue, 10 Mar 2026 00:58:52 -0700 Subject: [PATCH] cndm: Use event queues in driver model Signed-off-by: Alex Forencich --- src/cndm/tb/cndm.py | 260 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 241 insertions(+), 19 deletions(-) diff --git a/src/cndm/tb/cndm.py b/src/cndm/tb/cndm.py index d516f55..ec88f1e 100644 --- a/src/cndm/tb/cndm.py +++ b/src/cndm/tb/cndm.py @@ -14,7 +14,9 @@ import logging import struct from collections import deque +import cocotb from cocotb.queue import Queue +from cocotb.triggers import RisingEdge # Command opcodes @@ -61,19 +63,18 @@ CNDM_CMD_PTP_FLG_OFFSET_FNS = 0x00000010 CNDM_CMD_PTP_FLG_SET_PERIOD = 0x00000080 -class Cq: +class Eq: def __init__(self, driver, port): self.driver = driver self.log = driver.log self.port = port - self.irqn = None self.log_size = 0 self.size = 0 self.size_mask = 0 self.stride = 0 - self.cqn = None + self.eqn = None self.enabled = False self.buf_size = 0 @@ -81,10 +82,9 @@ class Cq: self.buf_dma = 0 self.buf = None - self.eq = None + self.irqn = None - self.src_ring = None - self.handler = None + self.cq_table = {} self.cons_ptr = None @@ -92,11 +92,9 @@ class Cq: self.hw_regs = self.driver.hw_regs async def open(self, irqn, size): - if self.cqn is not None: + if self.eqn is not None: raise Exception("Already open") - self.irqn = irqn - self.log_size = size.bit_length() - 1 self.size = 2**self.log_size self.size_mask = self.size-1 @@ -111,13 +109,177 @@ class Cq: self.cons_ptr = 0 + self.irqn = irqn + + self.cq_table = {} + + rsp = await self.driver.exec_cmd(struct.pack("