Esempio n. 1
0
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);
}
Esempio n. 2
0
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;
}