From 908b2db268216ad0ebd57886f02038ba0d38499e Mon Sep 17 00:00:00 2001 From: John Hodge Date: Fri, 11 Oct 2013 11:35:35 +0800 Subject: [PATCH] UDI/ne2000 - Incomplete TX implementation --- UDI/drivers/net_ne2000/ne2000_core.c | 4 +++ UDI/drivers/net_ne2000/ne2000_pio.h | 37 +++++++++++++++++++++++++++- UDI/drivers/net_ne2000/ne2000_tx.c | 3 +-- 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/UDI/drivers/net_ne2000/ne2000_core.c b/UDI/drivers/net_ne2000/ne2000_core.c index d6f0b97f..71c06679 100644 --- a/UDI/drivers/net_ne2000/ne2000_core.c +++ b/UDI/drivers/net_ne2000/ne2000_core.c @@ -266,6 +266,10 @@ void ne2k_bus_irq_intr_event_ind(udi_intr_event_cb_t *cb, udi_ubit8_t flags) { ne2k_intr__rx_ok( UDI_GCB(cb) ); } + if( cb->intr_result & 0x40 ) + { + // ne2k_intr__rdma( UDI_GCB(cb) ); + } // TODO: TX IRQs udi_intr_event_rdy(cb); } diff --git a/UDI/drivers/net_ne2000/ne2000_pio.h b/UDI/drivers/net_ne2000/ne2000_pio.h index cc15146e..b485348b 100644 --- a/UDI/drivers/net_ne2000/ne2000_pio.h +++ b/UDI/drivers/net_ne2000/ne2000_pio.h @@ -201,7 +201,42 @@ udi_pio_trans_t ne2k_pio_irqack[] = { // // udi_pio_trans_t ne2k_pio_tx[] = { - + // Switch to page 0 + // CMD = 0x40|0x21 [Page1, NoDMA, Stop] + PIO_MOV_RI1(R0, 0x40|0x21), + PIO_OUT_RI1(R0, NE2K_REG_CMD), + // Clear RDMA + PIO_MOV_RI1(R0, 0x40), + PIO_OUT_RI1(R0, NE2K_REG_ISR), + // Send size (TBCR, RBCR) + PIO_MOV_RI1(R1, 0x00), + {UDI_PIO_LOAD|UDI_PIO_MEM|UDI_PIO_R0, UDI_PIO_2BYTE, UDI_PIO_R1}, + PIO_OUT_RI1(R0, NE2K_REG_TBCR0), + PIO_OUT_RI1(R0, NE2K_REG_RBCR0), + {UDI_PIO_SHIFT_RIGHT|UDI_PIO_R0, UDI_PIO_2BYTE, 8}, + PIO_OUT_RI1(R0, NE2K_REG_TBCR1), + PIO_OUT_RI1(R0, NE2K_REG_RBCR1), + // Set up transfer + PIO_MOV_RI1(R0, 0x00), + PIO_OUT_RI1(R0, NE2K_REG_RSAR0), + PIO_MOV_RI1(R0, NE2K_TX_FIRST_PG), // single TX memory range + PIO_OUT_RI1(R0, NE2K_REG_RSAR1), + // Start + PIO_MOV_RI1(R0, 0x12), + PIO_OUT_RI1(R0, NE2K_REG_CMD), + // Send data + PIO_MOV_RI1(R0, 0), // - Buffer offset (increment by 2) + PIO_MOV_RI1(R1, NE2K_REG_MEM), // - Reg offset (no increment) + PIO_MOV_RI1(R2, 256/2), // - 128 iterations + {UDI_PIO_REP_OUT_IND, UDI_PIO_2BYTE, + UDI_PIO_REP_ARGS(UDI_PIO_BUF, UDI_PIO_R0, 2, UDI_PIO_R1, 0, UDI_PIO_R2)}, + // Wait for completion (TODO: IRQ quit and wait for IRQ) + // Request send + PIO_MOV_RI1(R0, NE2K_TX_FIRST_PG), + PIO_OUT_RI1(R0, NE2K_REG_TPSR), + PIO_MOV_RI1(R0, 0x10|0x04|0x02), + PIO_OUT_RI1(R0, NE2K_REG_CMD), + {UDI_PIO_END_IMM, UDI_PIO_2BYTE, 0}, }; struct { diff --git a/UDI/drivers/net_ne2000/ne2000_tx.c b/UDI/drivers/net_ne2000/ne2000_tx.c index 111531da..22fc7253 100644 --- a/UDI/drivers/net_ne2000/ne2000_tx.c +++ b/UDI/drivers/net_ne2000/ne2000_tx.c @@ -14,13 +14,12 @@ // === CODE === void ne2k_nd_tx_channel_event_ind(udi_channel_event_cb_t *cb) { - // TODO: Set up tx cb(s) } void ne2k_nd_tx_tx_req(udi_nic_tx_cb_t *cb) { // TODO: TX request - + udi_debug_printf("ne2k_nd_tx_tx_req: %p\n", cb); udi_nsr_tx_rdy(cb); } -- 2.20.1