189 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			189 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- a/driver/wl_linux.c
 | |
| +++ b/driver/wl_linux.c
 | |
| @@ -85,10 +85,9 @@ typedef void wlc_hw_info_t;
 | |
|  #include <bcmjtag.h>
 | |
|  #endif	/* BCMJTAG */
 | |
|  
 | |
| -
 | |
| -#ifdef CONFIG_SSB
 | |
| -#include <linux/ssb/ssb.h>
 | |
| -#endif
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +#include <wl_glue.h>
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  
 | |
|  /* Linux wireless extension support */
 | |
|  #ifdef CONFIG_WIRELESS_EXT
 | |
| @@ -997,62 +996,32 @@ static struct pci_driver wl_pci_driver =
 | |
|  #endif	/* CONFIG_PCI */
 | |
|  #endif  
 | |
|  
 | |
| +#ifdef BCMJTAG
 | |
| +static bcmjtag_driver_t wl_jtag_driver = {
 | |
| +		wl_jtag_probe,
 | |
| +		wl_jtag_detach,
 | |
| +		wl_jtag_poll,
 | |
| +		};
 | |
| +#endif	/* BCMJTAG */
 | |
|  
 | |
| -static int wl_ssb_probe(struct ssb_device *dev, const struct ssb_device_id *id)
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +static void * glue_attach_cb(u16 vendor, u16 device,
 | |
| +                                ulong mmio, void *dev, u32 irq)
 | |
|  {
 | |
| -	wl_info_t *wl;
 | |
| -	void *mmio;
 | |
| -
 | |
| -	if (dev->bus->bustype != SSB_BUSTYPE_SSB) {
 | |
| -		printk("Attaching to SSB behind PCI is not supported. Please remove the b43 ssb bridge\n");
 | |
| -		return -EINVAL;
 | |
| -	}
 | |
| -
 | |
| -	mmio = (void *) 0x18000000 + dev->core_index * 0x1000;
 | |
| -	wl = wl_attach(id->vendor, id->coreid, (ulong) mmio, SI_BUS, dev, dev->irq);
 | |
| -	if (!wl) {
 | |
| -		printk("wl_attach failed\n");
 | |
| -		return -ENODEV;
 | |
| -	}
 | |
| -
 | |
| -	ssb_set_drvdata(dev, wl);
 | |
| -
 | |
| -	return 0;
 | |
| +	return wl_attach(vendor, device, mmio, SI_BUS, dev, irq);
 | |
|  }
 | |
|  
 | |
| -static void wl_ssb_remove(struct ssb_device *dev)
 | |
| +static void glue_remove_cb(void *wldev)
 | |
|  {
 | |
| -	wl_info_t *wl = (wl_info_t *) ssb_get_drvdata(dev);
 | |
| +	wl_info_t *wl = (wl_info_t *)wldev;
 | |
|  
 | |
|  	WL_LOCK(wl);
 | |
|  	WL_APSTA_UPDN(("wl%d (%s): wl_remove() -> wl_down()\n", wl->pub->unit, wl->dev->name));
 | |
|  	wl_down(wl);
 | |
|  	WL_UNLOCK(wl);
 | |
|  	wl_free(wl);
 | |
| -	ssb_set_drvdata(dev, NULL);
 | |
|  }
 | |
| -
 | |
| -static const struct ssb_device_id wl_ssb_tbl[] = {
 | |
| -	SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_80211, SSB_ANY_REV),
 | |
| -	SSB_DEVTABLE_END
 | |
| -};
 | |
| -
 | |
| -#ifdef CONFIG_SSB
 | |
| -static struct ssb_driver wl_ssb_driver = {
 | |
| -	.name	= KBUILD_MODNAME,
 | |
| -	.id_table = wl_ssb_tbl,
 | |
| -	.probe = wl_ssb_probe,
 | |
| -	.remove = wl_ssb_remove,
 | |
| -};
 | |
| -#endif
 | |
| -
 | |
| -#ifdef BCMJTAG
 | |
| -static bcmjtag_driver_t wl_jtag_driver = {
 | |
| -		wl_jtag_probe,
 | |
| -		wl_jtag_detach,
 | |
| -		wl_jtag_poll,
 | |
| -		};
 | |
| -#endif	/* BCMJTAG */
 | |
| +#endif/* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  
 | |
|  
 | |
|  /** 
 | |
| @@ -1067,11 +1036,13 @@ wl_module_init(void)
 | |
|  {
 | |
|  	int error = -ENODEV;
 | |
|  
 | |
| -#ifdef CONFIG_SSB
 | |
| -	error = ssb_driver_register(&wl_ssb_driver);
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +	wl_glue_set_attach_callback(&glue_attach_cb);
 | |
| +	wl_glue_set_remove_callback(&glue_remove_cb);
 | |
| +	error = wl_glue_register();
 | |
|  	if (error)
 | |
|  		return error;
 | |
| -#endif	/* CONFIG_SSB */
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  
 | |
|  #ifdef CONFIG_PCI
 | |
|  	error = pci_register_driver(&wl_pci_driver);
 | |
| @@ -1082,7 +1053,11 @@ wl_module_init(void)
 | |
|  	return 0;
 | |
|  
 | |
|  error_pci:
 | |
| -	ssb_driver_unregister(&wl_ssb_driver);
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +	wl_glue_unregister();
 | |
| +	wl_glue_set_attach_callback(NULL);
 | |
| +	wl_glue_set_remove_callback(NULL);
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  	return error;
 | |
|  }
 | |
|  
 | |
| @@ -1099,9 +1074,11 @@ wl_module_exit(void)
 | |
|  #ifdef CONFIG_PCI
 | |
|  	pci_unregister_driver(&wl_pci_driver);
 | |
|  #endif	/* CONFIG_PCI */
 | |
| -#ifdef CONFIG_SSB
 | |
| -	ssb_driver_unregister(&wl_ssb_driver);
 | |
| -#endif	/* CONFIG_SSB */
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +	wl_glue_unregister();
 | |
| +	wl_glue_set_attach_callback(NULL);
 | |
| +	wl_glue_set_remove_callback(NULL);
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  }
 | |
|  
 | |
|  module_init(wl_module_init);
 | |
| --- a/driver/linux_osl.c
 | |
| +++ b/driver/linux_osl.c
 | |
| @@ -25,9 +25,9 @@
 | |
|  #include <asm/paccess.h>
 | |
|  #endif /* mips */
 | |
|  #include <pcicfg.h>
 | |
| -#ifdef CONFIG_SSB
 | |
| -#include <linux/ssb/ssb.h>
 | |
| -#endif
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
| +#include <wl_glue.h>
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  
 | |
|  #define PCI_CFG_RETRY 		10
 | |
|  
 | |
| @@ -370,15 +370,17 @@ osl_dma_consistent_align(void)
 | |
|  static struct device *
 | |
|  osl_get_dmadev(osl_t *osh)
 | |
|  {
 | |
| -#ifdef CONFIG_SSB
 | |
| +#if defined(CONFIG_SSB) || defined(CONFIG_BCMA)
 | |
|  	if (osh->bustype == SI_BUS) {
 | |
| -		/* This can be SiliconBackplane emulated as pci with Broadcom or
 | |
| -		 * ssb device. Less harmful is to check for pci_bus_type and if
 | |
| -		 * no match then assume we got ssb */
 | |
| +		/* This can be SiliconBackplane emulated as pci with Broadcom,
 | |
| +		 * ssb or bcma device. Less harmful is to check for pci_bus_type and if
 | |
| +		 * no match then assume we got either ssb or bcma */
 | |
|  		if (((struct pci_dev *)osh->pdev)->dev.bus != &pci_bus_type)
 | |
| -			return ((struct ssb_device *)osh->pdev)->dma_dev;
 | |
| +		{
 | |
| +			return wl_glue_get_dmadev(osh->pdev);
 | |
| +		}
 | |
|  	}
 | |
| -#endif
 | |
| +#endif /* defined(CONFIG_SSB) || defined(CONFIG_BCMA) */
 | |
|  	return &((struct pci_dev *)osh->pdev)->dev;
 | |
|  }
 | |
|  
 | |
| --- a/driver/Makefile
 | |
| +++ b/driver/Makefile
 | |
| @@ -1,7 +1,7 @@
 | |
|  BUILD_TYPE=wl_apsta
 | |
|  include $(src)/$(BUILD_TYPE)/buildflags.mk
 | |
|  
 | |
| -EXTRA_CFLAGS += -I$(src)/include -I$(src) -DBCMDRIVER $(WLFLAGS)
 | |
| +EXTRA_CFLAGS += -I$(src)/include -I$(src) -I$(realpath $(src)/../glue) -DBCMDRIVER $(WLFLAGS)
 | |
|  
 | |
|  wl-objs := $(BUILD_TYPE)/wl_prebuilt.o wl_iw.o wl_linux.o linux_osl.o siutils.o aiutils.o hndpmu.o bcmutils.o sbutils.o nicpci.o hnddma.o bcmsrom.o nvram_stub.o
 | |
|  
 |