mirror of
https://github.com/Mathewnd/Astral.git
synced 2026-11-01 15:08:21 +00:00
rtl8169: only register netdev when init is fully complete
This commit is contained in:
@@ -319,9 +319,7 @@ static void init_controller(pcienum_t *pci_enum) {
|
|||||||
isr_t *isr = interrupt_allocate(rtl8169_isr, ARCH_EOI, IPL_NET);
|
isr_t *isr = interrupt_allocate(rtl8169_isr, ARCH_EOI, IPL_NET);
|
||||||
__assert(isr);
|
__assert(isr);
|
||||||
pci_msisetbase(pci_enum, INTERRUPT_IDTOVECTOR(isr->id), 1, 0);
|
pci_msisetbase(pci_enum, INTERRUPT_IDTOVECTOR(isr->id), 1, 0);
|
||||||
outw(pci_bar.address + REGISTER_IRQ_MASK, REGISTER_IRQ_MASK_RX_OK | REGISTER_IRQ_MASK_TX_OK | REGISTER_IRQ_MASK_TX_ERROR | REGISTER_IRQ_MASK_RX_ERROR);
|
|
||||||
|
|
||||||
// register in netdev infrastructure
|
|
||||||
rtl8169dev_t *netdev = alloc(sizeof(rtl8169dev_t));
|
rtl8169dev_t *netdev = alloc(sizeof(rtl8169dev_t));
|
||||||
__assert(netdev);
|
__assert(netdev);
|
||||||
netdev->netdev.mtu = 1500;
|
netdev->netdev.mtu = 1500;
|
||||||
@@ -342,10 +340,6 @@ static void init_controller(pcienum_t *pci_enum) {
|
|||||||
|
|
||||||
isr->priv = netdev;
|
isr->priv = netdev;
|
||||||
|
|
||||||
char name[10];
|
|
||||||
snprintf(name, 10, "rtl8169%d", id);
|
|
||||||
__assert(netdev_register((netdev_t *)netdev, name) == 0);
|
|
||||||
|
|
||||||
// reset PHY
|
// reset PHY
|
||||||
if (!phy_write(pci_bar, PHY_BMCR, PHY_BMCR_RESET)) {
|
if (!phy_write(pci_bar, PHY_BMCR, PHY_BMCR_RESET)) {
|
||||||
printf("rtl8169%d: timeout while reseting PHY\n", id);
|
printf("rtl8169%d: timeout while reseting PHY\n", id);
|
||||||
@@ -408,6 +402,11 @@ static void init_controller(pcienum_t *pci_enum) {
|
|||||||
|
|
||||||
// enable rx/tx
|
// enable rx/tx
|
||||||
outb(pci_bar.address + REGISTER_COMMAND, REGISTER_COMMAND_TX_ENABLE | REGISTER_COMMAND_RX_ENABLE);
|
outb(pci_bar.address + REGISTER_COMMAND, REGISTER_COMMAND_TX_ENABLE | REGISTER_COMMAND_RX_ENABLE);
|
||||||
|
outw(pci_bar.address + REGISTER_IRQ_MASK, REGISTER_IRQ_MASK_RX_OK | REGISTER_IRQ_MASK_TX_OK | REGISTER_IRQ_MASK_TX_ERROR | REGISTER_IRQ_MASK_RX_ERROR);
|
||||||
|
|
||||||
|
char name[10];
|
||||||
|
snprintf(name, 10, "rtl8169%d", id);
|
||||||
|
__assert(netdev_register((netdev_t *)netdev, name) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ids[] = {
|
static int ids[] = {
|
||||||
|
|||||||
Reference in New Issue
Block a user