static void ctrl_status_write (struct device_desc *dev, uint16 data) { struct net_device *net_dev = (struct net_device *) dev->dev; struct net_cs8900a_io *io = (struct net_cs8900a_io *) dev->data; io->ctrl_st[CtrlStNum (io->pp_address)] = data; if (io->pp_address==PP_SelfCTL) { if (data&RESET) net_cs8900a_reset(dev); } //printf("%s: addr %x, data %x\n", __FUNCTION__, io->pp_address, data); }
static int net_cs8900a_setup (struct device_desc *dev) { int i; int enough = 0; struct net_cs8900a_io *io; struct device_interrupt *intr = &dev->intr; dev->fini = net_cs8900a_fini; dev->reset = net_cs8900a_reset; dev->update = net_cs8900a_update; dev->read_halfword = net_cs8900a_read_halfword; dev->write_halfword = net_cs8900a_write_halfword; io = (struct net_cs8900a_io *) malloc (sizeof (struct net_cs8900a_io)); memset (io, 0, sizeof (struct net_cs8900a_io)); if (io == NULL) return 1; dev->data = (void *) io; net_cs8900a_reset (dev); /* see if we need to set default values. * */ set_device_default (dev, cs8900a_net_def); int id; create_thread_scheduler(10000,Periodic_sched,net_cs8900a_update, (void*)dev, &id); for (i = 0; i < MAX_DEVICE_NUM; i++) { if (cs8900a_devs[i] == NULL) { cs8900a_devs[i] = dev; io->index = i; enough = 1; break; } } if (enough == 0) return 1; return 0; }