main.c (e6c463e3a3d067f5da2c79d5acdb2f626754cdb3) main.c (24ea602e183ca20a7577ebe253323d0e5d0f9847)
1/*
2 * Sonics Silicon Backplane
3 * Subsystem core
4 *
5 * Copyright 2005, Broadcom Corporation
6 * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.
9 */
10
11#include "ssb_private.h"
12
13#include <linux/delay.h>
14#include <linux/io.h>
15#include <linux/ssb/ssb.h>
16#include <linux/ssb/ssb_regs.h>
17#include <linux/ssb/ssb_driver_gige.h>
18#include <linux/dma-mapping.h>
19#include <linux/pci.h>
1/*
2 * Sonics Silicon Backplane
3 * Subsystem core
4 *
5 * Copyright 2005, Broadcom Corporation
6 * Copyright 2006, 2007, Michael Buesch <mb@bu3sch.de>
7 *
8 * Licensed under the GNU/GPL. See COPYING for details.
9 */
10
11#include "ssb_private.h"
12
13#include <linux/delay.h>
14#include <linux/io.h>
15#include <linux/ssb/ssb.h>
16#include <linux/ssb/ssb_regs.h>
17#include <linux/ssb/ssb_driver_gige.h>
18#include <linux/dma-mapping.h>
19#include <linux/pci.h>
20#include <linux/mmc/sdio_func.h>
20
21#include <pcmcia/cs_types.h>
22#include <pcmcia/cs.h>
23#include <pcmcia/cistpl.h>
24#include <pcmcia/ds.h>
25
26
27MODULE_DESCRIPTION("Sonics Silicon Backplane driver");

--- 55 unchanged lines hidden (view full) ---

83 bus = NULL;
84found:
85 ssb_buses_unlock();
86
87 return bus;
88}
89#endif /* CONFIG_SSB_PCMCIAHOST */
90
21
22#include <pcmcia/cs_types.h>
23#include <pcmcia/cs.h>
24#include <pcmcia/cistpl.h>
25#include <pcmcia/ds.h>
26
27
28MODULE_DESCRIPTION("Sonics Silicon Backplane driver");

--- 55 unchanged lines hidden (view full) ---

84 bus = NULL;
85found:
86 ssb_buses_unlock();
87
88 return bus;
89}
90#endif /* CONFIG_SSB_PCMCIAHOST */
91
92#ifdef CONFIG_SSB_SDIOHOST
93struct ssb_bus *ssb_sdio_func_to_bus(struct sdio_func *func)
94{
95 struct ssb_bus *bus;
96
97 ssb_buses_lock();
98 list_for_each_entry(bus, &buses, list) {
99 if (bus->bustype == SSB_BUSTYPE_SDIO &&
100 bus->host_sdio == func)
101 goto found;
102 }
103 bus = NULL;
104found:
105 ssb_buses_unlock();
106
107 return bus;
108}
109#endif /* CONFIG_SSB_SDIOHOST */
110
91int ssb_for_each_bus_call(unsigned long data,
92 int (*func)(struct ssb_bus *bus, unsigned long data))
93{
94 struct ssb_bus *bus;
95 int res;
96
97 ssb_buses_lock();
98 list_for_each_entry(bus, &buses, list) {

--- 365 unchanged lines hidden (view full) ---

464#endif
465 break;
466 case SSB_BUSTYPE_PCMCIA:
467#ifdef CONFIG_SSB_PCMCIAHOST
468 sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
469 dev->parent = &bus->host_pcmcia->dev;
470#endif
471 break;
111int ssb_for_each_bus_call(unsigned long data,
112 int (*func)(struct ssb_bus *bus, unsigned long data))
113{
114 struct ssb_bus *bus;
115 int res;
116
117 ssb_buses_lock();
118 list_for_each_entry(bus, &buses, list) {

--- 365 unchanged lines hidden (view full) ---

484#endif
485 break;
486 case SSB_BUSTYPE_PCMCIA:
487#ifdef CONFIG_SSB_PCMCIAHOST
488 sdev->irq = bus->host_pcmcia->irq.AssignedIRQ;
489 dev->parent = &bus->host_pcmcia->dev;
490#endif
491 break;
492 case SSB_BUSTYPE_SDIO:
493#ifdef CONFIG_SSB_SDIO
494 sdev->irq = bus->host_sdio->dev.irq;
495 dev->parent = &bus->host_sdio->dev;
496#endif
497 break;
472 case SSB_BUSTYPE_SSB:
473 dev->dma_mask = &dev->coherent_dma_mask;
474 break;
475 }
476
477 sdev->dev = dev;
478 err = device_register(dev);
479 if (err) {

--- 239 unchanged lines hidden (view full) ---

719#ifdef CONFIG_SSB_EMBEDDED
720 spin_lock_init(&bus->gpio_lock);
721#endif
722
723 /* Powerup the bus */
724 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
725 if (err)
726 goto out;
498 case SSB_BUSTYPE_SSB:
499 dev->dma_mask = &dev->coherent_dma_mask;
500 break;
501 }
502
503 sdev->dev = dev;
504 err = device_register(dev);
505 if (err) {

--- 239 unchanged lines hidden (view full) ---

745#ifdef CONFIG_SSB_EMBEDDED
746 spin_lock_init(&bus->gpio_lock);
747#endif
748
749 /* Powerup the bus */
750 err = ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 1);
751 if (err)
752 goto out;
753
754 /* Init SDIO-host device (if any), before the scan */
755 err = ssb_sdio_init(bus);
756 if (err)
757 goto err_disable_xtal;
758
727 ssb_buses_lock();
728 bus->busnumber = next_busnumber;
729 /* Scan for devices (cores) */
730 err = ssb_bus_scan(bus, baseaddr);
731 if (err)
759 ssb_buses_lock();
760 bus->busnumber = next_busnumber;
761 /* Scan for devices (cores) */
762 err = ssb_bus_scan(bus, baseaddr);
763 if (err)
732 goto err_disable_xtal;
764 goto err_sdio_exit;
733
734 /* Init PCI-host device (if any) */
735 err = ssb_pci_init(bus);
736 if (err)
737 goto err_unmap;
738 /* Init PCMCIA-host device (if any) */
739 err = ssb_pcmcia_init(bus);
740 if (err)

--- 30 unchanged lines hidden (view full) ---

771err_dequeue:
772 list_del(&bus->list);
773err_pcmcia_exit:
774 ssb_pcmcia_exit(bus);
775err_pci_exit:
776 ssb_pci_exit(bus);
777err_unmap:
778 ssb_iounmap(bus);
765
766 /* Init PCI-host device (if any) */
767 err = ssb_pci_init(bus);
768 if (err)
769 goto err_unmap;
770 /* Init PCMCIA-host device (if any) */
771 err = ssb_pcmcia_init(bus);
772 if (err)

--- 30 unchanged lines hidden (view full) ---

803err_dequeue:
804 list_del(&bus->list);
805err_pcmcia_exit:
806 ssb_pcmcia_exit(bus);
807err_pci_exit:
808 ssb_pci_exit(bus);
809err_unmap:
810 ssb_iounmap(bus);
811err_sdio_exit:
812 ssb_sdio_exit(bus);
779err_disable_xtal:
780 ssb_buses_unlock();
781 ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
782 return err;
783}
784
785#ifdef CONFIG_SSB_PCIHOST
786int ssb_bus_pcibus_register(struct ssb_bus *bus,

--- 33 unchanged lines hidden (view full) ---

820 "PCMCIA device %s\n", pcmcia_dev->devname);
821 }
822
823 return err;
824}
825EXPORT_SYMBOL(ssb_bus_pcmciabus_register);
826#endif /* CONFIG_SSB_PCMCIAHOST */
827
813err_disable_xtal:
814 ssb_buses_unlock();
815 ssb_pci_xtal(bus, SSB_GPIO_XTAL | SSB_GPIO_PLL, 0);
816 return err;
817}
818
819#ifdef CONFIG_SSB_PCIHOST
820int ssb_bus_pcibus_register(struct ssb_bus *bus,

--- 33 unchanged lines hidden (view full) ---

854 "PCMCIA device %s\n", pcmcia_dev->devname);
855 }
856
857 return err;
858}
859EXPORT_SYMBOL(ssb_bus_pcmciabus_register);
860#endif /* CONFIG_SSB_PCMCIAHOST */
861
862#ifdef CONFIG_SSB_SDIOHOST
863int ssb_bus_sdiobus_register(struct ssb_bus *bus, struct sdio_func *func,
864 unsigned int quirks)
865{
866 int err;
867
868 bus->bustype = SSB_BUSTYPE_SDIO;
869 bus->host_sdio = func;
870 bus->ops = &ssb_sdio_ops;
871 bus->quirks = quirks;
872
873 err = ssb_bus_register(bus, ssb_sdio_get_invariants, ~0);
874 if (!err) {
875 ssb_printk(KERN_INFO PFX "Sonics Silicon Backplane found on "
876 "SDIO device %s\n", sdio_func_id(func));
877 }
878
879 return err;
880}
881EXPORT_SYMBOL(ssb_bus_sdiobus_register);
882#endif /* CONFIG_SSB_PCMCIAHOST */
883
828int ssb_bus_ssbbus_register(struct ssb_bus *bus,
829 unsigned long baseaddr,
830 ssb_invariants_func_t get_invariants)
831{
832 int err;
833
834 bus->bustype = SSB_BUSTYPE_SSB;
835 bus->ops = &ssb_ssb_ops;

--- 559 unchanged lines hidden ---
884int ssb_bus_ssbbus_register(struct ssb_bus *bus,
885 unsigned long baseaddr,
886 ssb_invariants_func_t get_invariants)
887{
888 int err;
889
890 bus->bustype = SSB_BUSTYPE_SSB;
891 bus->ops = &ssb_ssb_ops;

--- 559 unchanged lines hidden ---