static struct mnl_ring * mnl_socket_mmap(struct mnl_socket *nls, struct nl_mmap_req *req, int flags, int optname) { struct mnl_ring *nlr = alloc_ring(req); if (nlr == NULL) return NULL; if (mnl_socket_setsockopt(nls, optname, req, sizeof(*req)) == -1) goto fail; nlr->ring = mmap(NULL, ring_size(nlr), PROT_READ | PROT_WRITE, flags, mnl_socket_get_fd(nls), 0); if (nlr->ring == MAP_FAILED) goto fail; nlr->fd = mnl_socket_get_fd(nls); return nlr; fail: free(nlr); return NULL; }
static int netdev_open(struct net_device *dev) { struct netdev_private *np = (struct netdev_private *)dev->priv; long ioaddr = dev->base_addr; int i; writel(0x00000001, ioaddr + PCIBusCfg); /* Reset */ i = request_irq(dev->irq, &intr_handler, SA_SHIRQ, dev->name, dev); if (i) return i; if (debug > 1) printk(KERN_DEBUG "%s: w89c840_open() irq %d.\n", dev->name, dev->irq); if((i=alloc_ring(dev))) return i; init_registers(dev); netif_start_queue(dev); if (debug > 2) printk(KERN_DEBUG "%s: Done netdev_open().\n", dev->name); /* Set the timer to check for link beat. */ init_timer(&np->timer); np->timer.expires = jiffies + 3*HZ; np->timer.data = (unsigned long)dev; np->timer.function = &netdev_timer; /* timer handler */ add_timer(&np->timer); return 0; }