cndm: Rework driver model to support multiple queues

Signed-off-by: Alex Forencich <alex@alexforencich.com>
This commit is contained in:
Alex Forencich
2026-03-05 16:50:33 -08:00
parent 39c9dce0fa
commit 8f1c082174

View File

@@ -543,11 +543,11 @@ class Port:
self.index = index self.index = index
self.hw_regs = driver.hw_regs self.hw_regs = driver.hw_regs
self.rxq = None self.rxq_count = 1
self.rxcq = None self.rxq = []
self.txq = None self.txq_count = 1
self.txcq = None self.txq = []
self.rx_queue = Queue() self.rx_queue = Queue()
@@ -555,20 +555,26 @@ class Port:
await self.open() await self.open()
async def open(self): async def open(self):
self.rxcq = Cq(self.driver, self) for k in range(self.rxq_count):
await self.rxcq.open(self.index, 256) cq = Cq(self.driver, self)
await cq.open(self.index, 256)
self.rxq = Rq(self.driver, self) q = Rq(self.driver, self)
await self.rxq.open(self.rxcq, 256) await q.open(cq, 256)
self.txcq = Cq(self.driver, self) self.rxq.append(q)
await self.txcq.open(self.index, 256)
self.txq = Sq(self.driver, self) for k in range(self.txq_count):
await self.txq.open(self.txcq, 256) cq = Cq(self.driver, self)
await cq.open(self.index, 256)
async def start_xmit(self, data): q = Sq(self.driver, self)
await self.txq.start_xmit(data) await q.open(cq, 256)
self.txq.append(q)
async def start_xmit(self, data, tx_ring=0):
await self.txq[tx_ring].start_xmit(data)
async def recv(self): async def recv(self):
return await self.rx_queue.get() return await self.rx_queue.get()
@@ -578,8 +584,10 @@ class Port:
async def interrupt_handler(self): async def interrupt_handler(self):
self.log.info("Interrupt") self.log.info("Interrupt")
await self.rxcq.handler(self.rxcq) for q in self.rxq:
await self.txcq.handler(self.txcq) await q.cq.handler(q.cq)
for q in self.txq:
await q.cq.handler(q.cq)
class Driver: class Driver: