client_reg.EventMask = CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL | CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET | CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME; client_reg.event_handler = &orinoco_cs_event; 
orinoco_cs_attach(void){	struct net_device *dev;	struct orinoco_private *priv;	struct orinoco_pccard *card;	dev_link_t *link;	client_reg_t client_reg;	int ret;	dev = alloc_orinocodev(sizeof(*card), orinoco_cs_hard_reset);	if (! dev)		return NULL;	priv = netdev_priv(dev);	card = priv->card;	/* Link both structures together */	link = &card->link;	link->priv = dev;	/* Interrupt setup */	link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;	link->irq.IRQInfo1 = IRQ_LEVEL_ID;	link->irq.Handler = orinoco_interrupt;	link->irq.Instance = dev; 	/* General socket configuration defaults can go here.  In this	 * client, we assume very little, and rely on the CIS for	 * almost everything.  In most clients, many details (i.e.,	 * number, sizes, and attributes of IO windows) are fixed by	 * the nature of the device, and can be hard-wired here. */	link->conf.Attributes = 0;	link->conf.IntType = INT_MEMORY_AND_IO;	/* Register with Card Services */	/* FIXME: need a lock? */	link->next = dev_list;	dev_list = link;	client_reg.dev_info = &dev_info;	client_reg.EventMask =		CS_EVENT_CARD_INSERTION | CS_EVENT_CARD_REMOVAL |		CS_EVENT_RESET_PHYSICAL | CS_EVENT_CARD_RESET |		CS_EVENT_PM_SUSPEND | CS_EVENT_PM_RESUME;	client_reg.event_handler = &orinoco_cs_event;	client_reg.Version = 0x0210; /* FIXME: what does this mean? */	client_reg.event_callback_args.client_data = link;	ret = pcmcia_register_client(&link->handle, &client_reg);	if (ret != CS_SUCCESS) {		cs_error(link->handle, RegisterClient, ret);		orinoco_cs_detach(link);		return NULL;	}	return link;}				/* orinoco_cs_attach */
10457	/local/tlutelli/issta_data/temp/c/2005_temp/2005/10457/1e212f3645a6b355de8c43a23376bc0e2ac49a63/orinoco_cs.c/buggy/drivers/net/wireless/orinoco_cs.c