static int intel_create_ring ( struct intel_nic *intel,
struct intel_ring *ring ) {
physaddr_t address;
+ uint32_t dctl;
/* Allocate descriptor ring. Align ring on its own size to
* prevent any possible page-crossing errors due to hardware
writel ( 0, ( intel->regs + ring->reg + INTEL_xDH ) );
writel ( 0, ( intel->regs + ring->reg + INTEL_xDT ) );
+ /* Enable ring */
+ dctl = readl ( intel->regs + ring->reg + INTEL_xDCTL );
+ dctl |= INTEL_xDCTL_ENABLE;
+ writel ( dctl, intel->regs + ring->reg + INTEL_xDCTL );
+
DBGC ( intel, "INTEL %p ring %05x is at [%08llx,%08llx)\n",
intel, ring->reg, ( ( unsigned long long ) address ),
( ( unsigned long long ) address + ring->len ) );
/** Receive/Transmit Descriptor Tail (offset) */
#define INTEL_xDT 0x18
+/** Receive/Transmit Descriptor Control (offset) */
+#define INTEL_xDCTL 0x28
+#define INTEL_xDCTL_ENABLE 0x02000000UL /**< Queue enable */
+
/** Receive Descriptor Head */
#define INTEL_RDH ( INTEL_RD + INTEL_xDH )