int r8169_init( void ) { r8169_device_t *dev = &r8169_state; struct ip_addr ip = {inet_addr(dev->ip_str)}; struct ip_addr nm = {inet_addr(dev->nm_str)}; struct ip_addr gw = {inet_addr(dev->gw_str)}; pci_dev_t *pci_dev; if ((pci_dev = pci_lookup_device(0x10ec, 0x8168)) == NULL) { printk("r8169 device not found\n"); return -1; } // Remember our PCI info dev->pci_dev = pci_dev; printk("R8169 IP address: %s\n", dev->ip_str); printk("R8169 Netmask: %s\n", dev->nm_str); printk("R8169 Gateway: %s\n", dev->gw_str); // Remember our PCI info netif_add(&r8169_netif, &ip, &nm, &gw, dev, r8169_hw_init, tcpip_input); return 0; }
/* Fillout pci_device structure. */ void populate_device_info(uint32_t cfg_address, struct pci_device *dev) { uint32_t vendor_id = pci_read_uint32(cfg_address + PCI_CFG_VENDOR_ID); uint32_t device_id = vendor_id >> 16; vendor_id &= 0xFFFF; dev->db = pci_lookup_device(vendor_id, device_id); dev->cfg_address = cfg_address; }