Merge HEAD from ../scsi-misc-2.6-old
[linux-2.6] / arch / ppc / platforms / chrp_pegasos_eth.c
1 /*
2  *  arch/ppc/platforms/chrp_pegasos_eth.c
3  *
4  *  Copyright (C) 2005 Sven Luther <sl@bplan-gmbh.de>
5  *  Thanks to :
6  *      Dale Farnsworth <dale@farnsworth.org>
7  *      Mark A. Greer <mgreer@mvista.com>
8  *      Nicolas DET <nd@bplan-gmbh.de>
9  *      Benjamin Herrenschmidt <benh@kernel.crashing.org>
10  *  And anyone else who helped me on this.
11  */
12
13 #include <linux/types.h>
14 #include <linux/init.h>
15 #include <linux/ioport.h>
16 #include <linux/device.h>
17 #include <linux/mv643xx.h>
18 #include <linux/pci.h>
19
20 /* Pegasos 2 specific Marvell MV 64361 gigabit ethernet port setup */
21 static struct resource mv643xx_eth_shared_resources[] = {
22         [0] = {
23                 .name   = "ethernet shared base",
24                 .start  = 0xf1000000 + MV643XX_ETH_SHARED_REGS,
25                 .end    = 0xf1000000 + MV643XX_ETH_SHARED_REGS +
26                                         MV643XX_ETH_SHARED_REGS_SIZE - 1,
27                 .flags  = IORESOURCE_MEM,
28         },
29 };
30
31 static struct platform_device mv643xx_eth_shared_device = {
32         .name           = MV643XX_ETH_SHARED_NAME,
33         .id             = 0,
34         .num_resources  = ARRAY_SIZE(mv643xx_eth_shared_resources),
35         .resource       = mv643xx_eth_shared_resources,
36 };
37
38 static struct resource mv643xx_eth0_resources[] = {
39         [0] = {
40                 .name   = "eth0 irq",
41                 .start  = 9,
42                 .end    = 9,
43                 .flags  = IORESOURCE_IRQ,
44         },
45 };
46
47 static struct mv643xx_eth_platform_data eth0_pd;
48
49 static struct platform_device eth0_device = {
50         .name           = MV643XX_ETH_NAME,
51         .id             = 0,
52         .num_resources  = ARRAY_SIZE(mv643xx_eth0_resources),
53         .resource       = mv643xx_eth0_resources,
54         .dev = {
55                 .platform_data = &eth0_pd,
56         },
57 };
58
59 static struct resource mv643xx_eth1_resources[] = {
60         [0] = {
61                 .name   = "eth1 irq",
62                 .start  = 9,
63                 .end    = 9,
64                 .flags  = IORESOURCE_IRQ,
65         },
66 };
67
68 static struct mv643xx_eth_platform_data eth1_pd;
69
70 static struct platform_device eth1_device = {
71         .name           = MV643XX_ETH_NAME,
72         .id             = 1,
73         .num_resources  = ARRAY_SIZE(mv643xx_eth1_resources),
74         .resource       = mv643xx_eth1_resources,
75         .dev = {
76                 .platform_data = &eth1_pd,
77         },
78 };
79
80 static struct platform_device *mv643xx_eth_pd_devs[] __initdata = {
81         &mv643xx_eth_shared_device,
82         &eth0_device,
83         &eth1_device,
84 };
85
86
87 int
88 mv643xx_eth_add_pds(void)
89 {
90         int ret = 0;
91         static struct pci_device_id pci_marvell_mv64360[] = {
92                 { PCI_DEVICE(PCI_VENDOR_ID_MARVELL, PCI_DEVICE_ID_MARVELL_MV64360) },
93                 { }
94         };
95
96         if (pci_dev_present(pci_marvell_mv64360)) {
97                 ret = platform_add_devices(mv643xx_eth_pd_devs, ARRAY_SIZE(mv643xx_eth_pd_devs));
98         }
99         return ret;
100 }
101 device_initcall(mv643xx_eth_add_pds);