#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"
// --- 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
{
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;
+#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)
//
{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),
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