161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch/*
261e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch * Broadcom 43xx PCI-SSB bridge module
361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch *
4b8c268d10439bdd4ed469d58fbadf2c2f56801b0Joe Perches * This technically is a separate PCI driver module, but
561e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch * because of its small size we include it in the SSB core
661e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch * instead of creating a standalone module.
761e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch *
8eb032b9837a958e21ca000358a5bde5e17192ddbMichael Buesch * Copyright 2007  Michael Buesch <m@bues.ch>
961e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch *
1061e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch * Licensed under the GNU/GPL. See COPYING for details.
1161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch */
1261e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
1361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch#include <linux/pci.h>
1420a112d0ba37353c51e5a84f47f5c46a35c1a7e6Paul Gortmaker#include <linux/module.h>
1561e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch#include <linux/ssb/ssb.h>
1661e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
176b9bafec6608539d07f7ccdeefe121dabe06604fMichael Buesch#include "ssb_private.h"
186b9bafec6608539d07f7ccdeefe121dabe06604fMichael Buesch
1961e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
2061e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Bueschstatic const struct pci_device_id b43_pci_bridge_tbl[] = {
2161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4301) },
22dd970e43d86c253ff159d9668499aaf42d175722Michael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4306) },
2361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4307) },
2461e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4311) },
2561e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4312) },
266b1c7c67603efdf0b39f6056989b0f8194cdc1f3Michael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4315) },
2761e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4318) },
281d8638d4038eb8709edc80e37a0bbb77253d86e9Daniel Klaffenbach	{ PCI_DEVICE(PCI_VENDOR_ID_BCM_GVC,  0x4318) },
2961e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4319) },
3061e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4320) },
3161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4321) },
3261e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4324) },
3361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4325) },
34c272ef4403c271799a7f09a4ab7a236c86643843Larry Finger	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4328) },
35ca08a965a6c251f9c9002c1a7a0316e63d4c28ecMichael Buesch	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x4329) },
3692d6128e1766bb7a7b6dc58f012fdf772fdf1100Johannes Berg	{ PCI_DEVICE(PCI_VENDOR_ID_BROADCOM, 0x432b) },
3761e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	{ 0, },
3861e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch};
3961e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael BueschMODULE_DEVICE_TABLE(pci, b43_pci_bridge_tbl);
4061e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
4161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Bueschstatic struct pci_driver b43_pci_bridge_driver = {
4261e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	.name = "b43-pci-bridge",
4361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	.id_table = b43_pci_bridge_tbl,
4461e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch};
4561e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
4661e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
4761e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Bueschint __init b43_pci_ssb_bridge_init(void)
4861e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch{
4961e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	return ssb_pcihost_register(&b43_pci_bridge_driver);
5061e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch}
5161e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch
5261e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Bueschvoid __exit b43_pci_ssb_bridge_exit(void)
5361e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch{
5461e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch	ssb_pcihost_unregister(&b43_pci_bridge_driver);
5561e115a56d1aafd6e6a8a9fee8ac099a6128ac7bMichael Buesch}
56