From: John Hodge Date: Tue, 8 Oct 2013 08:13:25 +0000 (+0800) Subject: UDI/ne2000 - Fixed some bugs due to misreading the specs X-Git-Tag: rel0.15~129 X-Git-Url: https://git.ucc.asn.au/?a=commitdiff_plain;h=72eca43ff4b3646a760177eef3339dd6c937dd57;p=tpg%2Facess2.git UDI/ne2000 - Fixed some bugs due to misreading the specs --- diff --git a/UDI/drivers/net_ne2000/ne2000_core.c b/UDI/drivers/net_ne2000/ne2000_core.c index 01612477..b0614e02 100644 --- a/UDI/drivers/net_ne2000/ne2000_core.c +++ b/UDI/drivers/net_ne2000/ne2000_core.c @@ -29,10 +29,6 @@ enum { #define NE2K_NUM_INTR_EVENT_CBS 4 // === GLOBALS === -#define PIO_op_RI(op, reg, sz, val) {UDI_PIO_##op+UDI_PIO_DIRECT+UDI_PIO_##reg, UDI_PIO_##sz##BYTE, val} -#define PIO_MOV_RI1(reg, val) PIO_op_RI(LOAD_IMM, reg, 1, val) -#define PIO_OUT_RI1(reg, ofs) PIO_op_RI(OUT, reg, 1, ofs) -#define PIO_IN_RI1(reg, ofs) PIO_op_RI(IN, reg, 1, ofs) // --- Programmed IO --- #include "ne2000_pio.h" @@ -77,11 +73,15 @@ void ne2k_final_cleanup_req(udi_mgmt_cb_t *cb) // --- Bus void ne2k_bus_dev_channel_event_ind(udi_channel_event_cb_t *cb) { + udi_cb_t *gcb = UDI_GCB(cb); + ne2k_rdata_t *rdata = gcb->context; + switch(cb->event) { case UDI_CHANNEL_CLOSED: break; case UDI_CHANNEL_BOUND: { + rdata->active_cb = gcb; udi_bus_bind_cb_t *bus_bind_cb = UDI_MCB(cb->params.parent_bound.bind_cb, udi_bus_bind_cb_t); udi_bus_bind_req( bus_bind_cb ); // continue at ne2k_bus_dev_bus_bind_ack @@ -93,7 +93,6 @@ void ne2k_bus_dev_bus_bind_ack(udi_bus_bind_cb_t *cb, { udi_cb_t *gcb = UDI_GCB(cb); ne2k_rdata_t *rdata = gcb->context; - rdata->active_cb = gcb; // Set up PIO handles rdata->init.pio_index = -1; diff --git a/UDI/drivers/net_ne2000/ne2000_pio.h b/UDI/drivers/net_ne2000/ne2000_pio.h index 71a3d060..cc15146e 100644 --- a/UDI/drivers/net_ne2000/ne2000_pio.h +++ b/UDI/drivers/net_ne2000/ne2000_pio.h @@ -1,3 +1,8 @@ +#define PIO_op_RI(op, reg, sz, val) {UDI_PIO_##op+UDI_PIO_DIRECT+UDI_PIO_##reg, UDI_PIO_##sz##BYTE, val} +#define PIO_MOV_RI1(reg, val) PIO_op_RI(LOAD_IMM, reg, 2, val) +#define PIO_OUT_RI1(reg, ofs) PIO_op_RI(OUT, reg, 1, ofs) +#define PIO_IN_RI1(reg, ofs) PIO_op_RI(IN, reg, 1, ofs) + // // Ne2000 reset operation (reads MAC address too) // @@ -132,7 +137,7 @@ udi_pio_trans_t ne2k_pio_rx[] = { {UDI_PIO_STORE|UDI_PIO_DIRECT|UDI_PIO_R0, UDI_PIO_1BYTE, UDI_PIO_R7}, {UDI_PIO_SUB|UDI_PIO_R0, UDI_PIO_1BYTE, NE2K_RX_LAST_PG+1}, {UDI_PIO_CSKIP|UDI_PIO_R0, UDI_PIO_1BYTE, UDI_PIO_NZ}, // if R7-RX_LAST == 0 - {UDI_PIO_LOAD_IMM|UDI_PIO_R7, UDI_PIO_1BYTE, NE2K_RX_FIRST_PG}, // R7 = RX_FIRST + {UDI_PIO_LOAD_IMM|UDI_PIO_R7, UDI_PIO_2BYTE, NE2K_RX_FIRST_PG}, // R7 = RX_FIRST // > Transaction start PIO_MOV_RI1(R0, 1), PIO_MOV_RI1(R1, 0), diff --git a/UDI/drivers/net_ne2000/udiprops.txt b/UDI/drivers/net_ne2000/udiprops.txt index 9ff15324..4d204976 100644 --- a/UDI/drivers/net_ne2000/udiprops.txt +++ b/UDI/drivers/net_ne2000/udiprops.txt @@ -14,7 +14,7 @@ meta 1 udi_bridge meta 2 udi_nic parent_bind_ops 1 0 1 1 # bridge, rgn 0, ops 1, cb 1 -child_bind_ops 2 0 1 # Ctrl (TX and RX are set up via this) +child_bind_ops 2 0 2 # Ctrl (TX and RX are set up via this) # Realtek 8029 device 101 1 bus_type string pci pci_vendor_id ubit32 0x10ec pci_device_id ubit32 0x8029