+#include "ne2000_hw.h"
+
+#define ARRAY_SIZEOF(arr) (sizeof(arr)/sizeof(arr[0]))
+
+enum {
+ NE2K_PIO_RESET,
+ NE2K_PIO_ENABLE,
+ NE2K_PIO_RX,
+ NE2K_PIO_IRQACK,
+ NE2K_PIO_TX,
+ N_NE2K_PIO
+};
+
+typedef struct
+{
+ udi_init_context_t init_context;
+
+ udi_cb_t *active_cb;
+
+ udi_intr_attach_cb_t *intr_attach_cb;
+
+ struct {
+ udi_index_t pio_index;
+ udi_index_t n_intr_event_cb;
+
+ udi_index_t rx_chan_index;
+ } init;
+
+ udi_pio_handle_t pio_handles[N_NE2K_PIO];
+ udi_channel_t interrupt_channel;
+ udi_channel_t rx_channel;
+ udi_channel_t tx_channel;
+
+ udi_nic_rx_cb_t *rx_next_cb;
+ udi_nic_rx_cb_t *rx_last_cb;
+ udi_ubit8_t rx_next_page;
+
+ udi_ubit8_t macaddr[6];
+} ne2k_rdata_t;
+