UDI/ne2000 - Fixed some bugs due to misreading the specs
authorJohn Hodge <[email protected]>
Tue, 8 Oct 2013 08:13:25 +0000 (16:13 +0800)
committerJohn Hodge <[email protected]>
Tue, 8 Oct 2013 08:13:25 +0000 (16:13 +0800)
UDI/drivers/net_ne2000/ne2000_core.c
UDI/drivers/net_ne2000/ne2000_pio.h
UDI/drivers/net_ne2000/udiprops.txt

index 0161247..b0614e0 100644 (file)
@@ -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;
index 71a3d06..cc15146 100644 (file)
@@ -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),
index 9ff1532..4d20497 100644 (file)
@@ -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

UCC git Repository :: git.ucc.asn.au