[PATCH 0/3] register network device
Now driver registers network device. One question: is it good idea to read/set MAC address like this? Dmitry Podgorny (3): split pcnet_dummy_reset to 2 functions: reset and switch_dword_mode set hardware MAC address to net_device register net_device src/pcnet.c | 23 ++++++++++++++++------- 1 files changed, 16 insertions(+), 7 deletions(-) -- 1.7.5.rc3
--- src/pcnet.c | 14 ++++++++++---- 1 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/pcnet.c b/src/pcnet.c index 2372ec3..5b3d889 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -182,13 +182,18 @@ static unsigned long pcnet_dummy_bcr_read32(void __iomem *ioaddr, return ioread32(ioaddr + PCNET_IO32_BDP) & 0xffff; } -/* resets the controller and switches to 32bit mode */ -static int pcnet_dummy_reset(void __iomem *ioaddr) +static void pcnet_dummy_reset(void __iomem *ioaddr) { - int err = 0; ioread16(ioaddr + PCNET_IO_RESET); if (pcnet_dummy_csr_read16(ioaddr, CSR0) != CSR0_STOP) ioread32(ioaddr + PCNET_IO32_RESET); +} + +static int pcnet_dummy_switch_dword_mode(void __iomem *ioaddr) +{ + int err = 0; + + pcnet_dummy_reset(ioaddr); iowrite32(0, ioaddr + PCNET_IO_RDP); if (!(pcnet_dummy_bcr_read32(ioaddr, BCR18) & BCR18_DWIO)) { printk(KERN_ERR DRV_NAME ": cannot switch controller to 32bit mode\n"); @@ -286,7 +291,7 @@ static int __devinit pcnet_dummy_init_one(struct pci_dev *pdev, goto out_res; pci_set_drvdata(pdev, ndev); - if (pcnet_dummy_reset(ioaddr)) + if (pcnet_dummy_switch_dword_mode(ioaddr)) goto out_res_unmap; if (pcnet_dummy_init_netdev(pdev, (unsigned long)ioaddr)) @@ -311,6 +316,7 @@ static void __devexit pcnet_dummy_remove_one(struct pci_dev *pdev) struct pcnet_dummy_private *pp; pp = netdev_priv(ndev); + pcnet_dummy_reset(pp->base); pci_iounmap(pdev, pp->base); free_netdev(ndev); pci_disable_device(pdev); -- 1.7.5.rc3
--- src/pcnet.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-) diff --git a/src/pcnet.c b/src/pcnet.c index 5b3d889..39a0d72 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -241,6 +241,10 @@ static int __devinit pcnet_dummy_init_netdev(struct pci_dev *pdev, pp->base = (void *)ioaddr; spin_lock_init(&pp->lock); + /* set hardware MAC address to net_device */ + *((unsigned long *)ndev->dev_addr) = ioread32((void *)ioaddr); + *((u16 *)&ndev->dev_addr[4]) = ioread32((void *)(ioaddr + 4)) & 0xffff; + /* init DMA rings */ /* init net_dev_ops */ /* FIXME: -- 1.7.5.rc3
Hm, what about endianness? On Mon, May 23, 2011 at 5:22 PM, Dmitry Podgorny <pasis.ua@gmail.com> wrote:
--- src/pcnet.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/src/pcnet.c b/src/pcnet.c index 5b3d889..39a0d72 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -241,6 +241,10 @@ static int __devinit pcnet_dummy_init_netdev(struct pci_dev *pdev, pp->base = (void *)ioaddr; spin_lock_init(&pp->lock);
+ /* set hardware MAC address to net_device */ + *((unsigned long *)ndev->dev_addr) = ioread32((void *)ioaddr); + *((u16 *)&ndev->dev_addr[4]) = ioread32((void *)(ioaddr + 4)) & 0xffff; + /* init DMA rings */ /* init net_dev_ops */ /* FIXME: -- 1.7.5.rc3
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
-- Regards, Denis
so, i've tested this patch on x86 and AMR (versatilepb). If i would have a big endian architecture i receive reverse order of bytes? Does ntoh() solve the problem? or what would you suggest? 2011/5/23 Denis Kirjanov <kirjanov@gmail.com>
Hm, what about endianness?
On Mon, May 23, 2011 at 5:22 PM, Dmitry Podgorny <pasis.ua@gmail.com> wrote:
--- src/pcnet.c | 4 ++++ 1 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/src/pcnet.c b/src/pcnet.c index 5b3d889..39a0d72 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -241,6 +241,10 @@ static int __devinit pcnet_dummy_init_netdev(struct pci_dev *pdev, pp->base = (void *)ioaddr; spin_lock_init(&pp->lock);
+ /* set hardware MAC address to net_device */ + *((unsigned long *)ndev->dev_addr) = ioread32((void *)ioaddr); + *((u16 *)&ndev->dev_addr[4]) = ioread32((void *)(ioaddr + 4)) & 0xffff; + /* init DMA rings */ /* init net_dev_ops */ /* FIXME: -- 1.7.5.rc3
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
-- Regards, Denis
Am Mon 23 May 2011 03:46:01 PM CEST schrieb Dmitry Podgorny <pasis.ua@gmail.com>:
so, i've tested this patch on x86 and AMR (versatilepb). If i would have a big endian architecture i receive reverse order of bytes? Does ntoh() solve the problem? or what would you suggest?
2011/5/23 Denis Kirjanov <kirjanov@gmail.com>
Hm, what about endianness?
Hey guys, maybe we will use Russian here? to Dmitry: thanks a lot for continue to hacking here! -- Alexander Naumov, KDE Developer SUSE LINUX Products GmbH GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 16746 (AG Nürnberg) Maxfeldstr. 5 / D-90409 Nürnberg / Phone: +49-911-740-251
ок, принято =) 2011/5/23 Alexander Naumov <anaumov@suse.de>
Hey guys, maybe we will use Russian here?
to Dmitry: thanks a lot for continue to hacking here!
-- Alexander Naumov, KDE Developer
SUSE LINUX Products GmbH GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 16746 (AG Nürnberg) Maxfeldstr. 5 / D-90409 Nürnberg / Phone: +49-911-740-251
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
В каком формате хранятся данные на карте? в каком формате храняться данные на хосте? сохраняя 0x01020304 на big endian получим: 0x01020304, на little endian: 0x03040201 самый безопасный способ читать по байту: например как drivers/net/smsc911.c:1800 или в tg3.c:14005 On Mon, May 23, 2011 at 7:06 PM, Dmitry Podgorny <pasis.ua@gmail.com> wrote:
ок, принято =)
2011/5/23 Alexander Naumov <anaumov@suse.de>
Hey guys, maybe we will use Russian here?
to Dmitry: thanks a lot for continue to hacking here!
-- Alexander Naumov, KDE Developer
SUSE LINUX Products GmbH GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB 16746 (AG Nürnberg) Maxfeldstr. 5 / D-90409 Nürnberg / Phone: +49-911-740-251
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
-- Regards, Denis
--- src/pcnet.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/pcnet.c b/src/pcnet.c index 39a0d72..5af0de7 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -259,9 +259,7 @@ static int __devinit pcnet_dummy_init_netdev(struct pci_dev *pdev, ndev->hard_start_xmit = pcnet_dummy_start_xmit; #endif /* HAVE_NET_DEVICE_OPS */ - /* registers net_device and returns err */ - - return 0; + return register_netdev(ndev); } static int __devinit pcnet_dummy_init_one(struct pci_dev *pdev, @@ -320,6 +318,7 @@ static void __devexit pcnet_dummy_remove_one(struct pci_dev *pdev) struct pcnet_dummy_private *pp; pp = netdev_priv(ndev); + unregister_netdev(ndev); pcnet_dummy_reset(pp->base); pci_iounmap(pdev, pp->base); free_netdev(ndev); -- 1.7.5.rc3
this patch looking nice On Mon, May 23, 2011 at 5:22 PM, Dmitry Podgorny <pasis.ua@gmail.com> wrote:
--- src/pcnet.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/pcnet.c b/src/pcnet.c index 39a0d72..5af0de7 100644 --- a/src/pcnet.c +++ b/src/pcnet.c @@ -259,9 +259,7 @@ static int __devinit pcnet_dummy_init_netdev(struct pci_dev *pdev, ndev->hard_start_xmit = pcnet_dummy_start_xmit; #endif /* HAVE_NET_DEVICE_OPS */
- /* registers net_device and returns err */ - - return 0; + return register_netdev(ndev); }
static int __devinit pcnet_dummy_init_one(struct pci_dev *pdev, @@ -320,6 +318,7 @@ static void __devexit pcnet_dummy_remove_one(struct pci_dev *pdev) struct pcnet_dummy_private *pp;
pp = netdev_priv(ndev); + unregister_netdev(ndev); pcnet_dummy_reset(pp->base); pci_iounmap(pdev, pp->base); free_netdev(ndev); -- 1.7.5.rc3
_______________________________________________ Kernel-russian mailing list Kernel-russian@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernel-russian
-- Regards, Denis
participants (3)
-
Alexander Naumov -
Denis Kirjanov -
Dmitry Podgorny