Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
pdev.base_addr = config_dword;
break;
}
idx += 4;
}
}
} else return 0;
Базовый адрес найден. Отобразим информацию об устройстве и прочитаем MAC-адрес адаптера RTL8139C:
display_pcidev_info(&pdev);
get_mac_addr(pdev.base_addr);
Функции display_pcidev_info() и get_mac_addr() выглядят следующим образом:
void display_pcidev_info(struct pci_dev_struct *pdev)
{
printk(KERN_INFO "VENDOR ID - 0x%X ", pdev->vendor_id);
printk(KERN_INFO "DEVICE ID - 0x%X ", pdev->device_id);
printk(KERN_INFO "CLASS CODE - 0x%X ", pdev->class_code);
printk(KERN_INFO "BASE ADDRESS - 0x%X ", pdev->base_addr);
return;
}
void get_mac_addr(u32 base_addr)
{
int i = 0;
u8 mac[6];
memset(mac, 0, 6);
/* Get and display MAC address */
for(; i < 6; i++)
mac[i] = inb(base_addr + i);
printk(KERN_INFO "MAC address: %02X:%02X:%02X:%02X:%02X:%02X ",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
return;
}
Теперь давайте выполним процедуру чтения MAC-адреса сетевого адаптера RTL8139C, используя Configuration Mechanism #1 для доступа к конфигурационному пространству устройства.