Sonics Silicon Backplane driver
cover Sonics Silicon Backplane driver
Hi,
This patch series adds a lowlevel driver for the Sonics Silicon Backplane (short ssb). The ssb is used in some broadcom devices such as bcm43xx and bcm44xx.
The ssb is a common backplane to host several operating "cores". It's responsible to manage these "cores".
John, please apply this patch series to wireless-dev.
Signature · 1 line
Greetings Michael.
PATCH 1/2 Add Sonics Silicon Backplane driver
In reply to a message not in the archiveThis patch adds a Sonics Silicon Backplane driver backend that can be used by ssb based device drivers auch as bcm43xx and b44.
drivers/misc/Kconfig +4 -0
@@ -28,5 +28,9 @@ If unsure, say N. +config SONICS_SILICON_BACKPLANE + tristate + depends on PCI + endmenu
drivers/misc/Makefile +3 -2
@@ -3,5 +3,6 @@ # obj- := misc.o # Dummy rule to force built-in.o to be made -obj-$(CONFIG_IBM_ASM) += ibmasm/ -obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/ +obj-$(CONFIG_IBM_ASM) += ibmasm/ +obj-$(CONFIG_HDPU_FEATURES) += hdpuftrs/ +obj-$(CONFIG_SONICS_SILICON_BACKPLANE) += ssb.o
drivers/misc/ssb.c new file +1015 -0
1,015 lines not on this page · raw message
include/linux/ssb.h new file +577 -0
577 lines not on this page · raw message
Signature · 1 line
Greetings Michael.
PATCH 2/2 bcm43xx: convert driver to use ssb
In reply to a message not in the archiveThis patch converts the bcm43xx driver to use the new ssb driver backend.
drivers/net/wireless/d80211/bcm43xx/bcm43xx.h +34 -230
@@ -11,6 +11,7 @@#include <asm/atomic.h> #include <asm/io.h> +#include <linux/ssb.h> #include <linux/wireless.h> #include <net/d80211.h> #include <net/d80211_mgmt.h>
@@ -22,18 +23,10 @@#define PFX KBUILD_MODNAME ": " -#define BCM43xx_SWITCH_CORE_MAX_RETRIES 50#define BCM43xx_IRQWAIT_MAX_RETRIES 50#define BCM43xx_IO_SIZE 8192 -/* Active Core PCI Configuration Register. */ -#define BCM43xx_PCICFG_ACTIVE_CORE 0x80 -/* SPROM control register. */ -#define BCM43xx_PCICFG_SPROMCTL 0x88 -/* Interrupt Control PCI Configuration Register. (Only on PCI cores with rev >= 6) */ -#define BCM43xx_PCICFG_ICR 0x94 -/* MMIO offsets */ #define BCM43xx_MMIO_DMA0_REASON 0x20#define BCM43xx_MMIO_DMA0_IRQ_MASK 0x24
@@ -104,29 +97,7 @@#define BCM43xx_MMIO_TSF_3 0x638/* core rev < 3 only */ #define BCM43xx_MMIO_POWERUP_DELAY 0x6A8 -/* SPROM offsets. */ -#define BCM43xx_SPROM_BASE 0x1000 -#define BCM43xx_SPROM_BOARDFLAGS2 0x1c -#define BCM43xx_SPROM_IL0MACADDR 0x24 -#define BCM43xx_SPROM_ET0MACADDR 0x27 -#define BCM43xx_SPROM_ET1MACADDR 0x2a -#define BCM43xx_SPROM_ETHPHY 0x2d -#define BCM43xx_SPROM_BOARDREV 0x2e -#define BCM43xx_SPROM_PA0B0 0x2f -#define BCM43xx_SPROM_PA0B1 0x30 -#define BCM43xx_SPROM_PA0B2 0x31 -#define BCM43xx_SPROM_WL0GPIO0 0x32 -#define BCM43xx_SPROM_WL0GPIO2 0x33 -#define BCM43xx_SPROM_MAXPWR 0x34 -#define BCM43xx_SPROM_PA1B0 0x35 -#define BCM43xx_SPROM_PA1B1 0x36 -#define BCM43xx_SPROM_PA1B2 0x37 -#define BCM43xx_SPROM_IDL_TSSI_TGT 0x38 -#define BCM43xx_SPROM_BOARDFLAGS 0x39 -#define BCM43xx_SPROM_ANTENNA_GAIN 0x3a -#define BCM43xx_SPROM_VERSION 0x3f - -/* BCM43xx_SPROM_BOARDFLAGS values */ +/* SPROM boardflags_lo values */ #define BCM43xx_BFL_BTCOEXIST 0x0001/* implements Bluetooth coexistance */ #define BCM43xx_BFL_PACTRL 0x0002/* GPIO 9 controlling the PA */ #define BCM43xx_BFL_AIRLINEMODE 0x0004/* implements GPIO 13 radio disable indication */
@@ -158,35 +129,6 @@#define BCM43xx_MACFILTER_SELF 0x0000#define BCM43xx_MACFILTER_ASSOC 0x0003 -/* Chipcommon registers. */ -#define BCM43xx_CHIPCOMMON_CAPABILITIES 0x04 -#define BCM43xx_CHIPCOMMON_PLLONDELAY 0xB0 -#define BCM43xx_CHIPCOMMON_FREFSELDELAY 0xB4 -#define BCM43xx_CHIPCOMMON_SLOWCLKCTL 0xB8 -#define BCM43xx_CHIPCOMMON_SYSCLKCTL 0xC0 - -/* PCI core specific registers. */ -#define BCM43xx_PCICORE_BCAST_ADDR 0x50 -#define BCM43xx_PCICORE_BCAST_DATA 0x54 -#define BCM43xx_PCICORE_SBTOPCI2 0x108 - -/* SBTOPCI2 values. */ -#define BCM43xx_SBTOPCI2_PREFETCH 0x4 -#define BCM43xx_SBTOPCI2_BURST 0x8 - -/* Chipcommon capabilities. */ -#define BCM43xx_CAPABILITIES_PCTL 0x00040000 -#define BCM43xx_CAPABILITIES_PLLMASK 0x00030000 -#define BCM43xx_CAPABILITIES_PLLSHIFT 16 -#define BCM43xx_CAPABILITIES_FLASHMASK 0x00000700 -#define BCM43xx_CAPABILITIES_FLASHSHIFT 8 -#define BCM43xx_CAPABILITIES_EXTBUSPRESENT 0x00000040 -#define BCM43xx_CAPABILITIES_UARTGPIO 0x00000020 -#define BCM43xx_CAPABILITIES_UARTCLOCKMASK 0x00000018 -#define BCM43xx_CAPABILITIES_UARTCLOCKSHIFT 3 -#define BCM43xx_CAPABILITIES_MIPSBIGENDIAN 0x00000004 -#define BCM43xx_CAPABILITIES_NRUARTSMASK 0x00000003 -/* PowerControl */ #define BCM43xx_PCTL_IN 0xB0#define BCM43xx_PCTL_OUT 0xB4
@@ -203,67 +145,6 @@#define BCM43xx_PCTL_FORCE_PLL 0x1000#define BCM43xx_PCTL_DYN_XTAL 0x2000 -/* COREIDs */ -#define BCM43xx_COREID_CHIPCOMMON 0x800 -#define BCM43xx_COREID_ILINE20 0x801 -#define BCM43xx_COREID_SDRAM 0x803 -#define BCM43xx_COREID_PCI 0x804 -#define BCM43xx_COREID_MIPS 0x805 -#define BCM43xx_COREID_ETHERNET 0x806 -#define BCM43xx_COREID_V90 0x807 -#define BCM43xx_COREID_USB11_HOSTDEV 0x80a -#define BCM43xx_COREID_IPSEC 0x80b -#define BCM43xx_COREID_PCMCIA 0x80d -#define BCM43xx_COREID_EXT_IF 0x80f -#define BCM43xx_COREID_80211 0x812 -#define BCM43xx_COREID_MIPS_3302 0x816 -#define BCM43xx_COREID_USB11_HOST 0x817 -#define BCM43xx_COREID_USB11_DEV 0x818 -#define BCM43xx_COREID_USB20_HOST 0x819 -#define BCM43xx_COREID_USB20_DEV 0x81a -#define BCM43xx_COREID_SDIO_HOST 0x81b - -/* Core Information Registers */ -#define BCM43xx_CIR_BASE 0xf00 -#define BCM43xx_CIR_SBTPSFLAG (BCM43xx_CIR_BASE + 0x18) -#define BCM43xx_CIR_SBIMSTATE (BCM43xx_CIR_BASE + 0x90) -#define BCM43xx_CIR_SBINTVEC (BCM43xx_CIR_BASE + 0x94) -#define BCM43xx_CIR_SBTMSTATELOW (BCM43xx_CIR_BASE + 0x98) -#define BCM43xx_CIR_SBTMSTATEHIGH (BCM43xx_CIR_BASE + 0x9c) -#define BCM43xx_CIR_SBIMCONFIGLOW (BCM43xx_CIR_BASE + 0xa8) -#define BCM43xx_CIR_SB_ID_HI (BCM43xx_CIR_BASE + 0xfc) - -/* Mask to get the Backplane Flag Number from SBTPSFLAG. */ -#define BCM43xx_BACKPLANE_FLAG_NR_MASK 0x3f - -/* SBIMCONFIGLOW values/masks. */ -#define BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_MASK 0x00000007 -#define BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_SHIFT 0 -#define BCM43xx_SBIMCONFIGLOW_REQUEST_TOUT_MASK 0x00000070 -#define BCM43xx_SBIMCONFIGLOW_REQUEST_TOUT_SHIFT 4 -#define BCM43xx_SBIMCONFIGLOW_CONNID_MASK 0x00ff0000 -#define BCM43xx_SBIMCONFIGLOW_CONNID_SHIFT 16 - -/* sbtmstatelow state flags */ -#define BCM43xx_SBTMSTATELOW_RESET 0x01 -#define BCM43xx_SBTMSTATELOW_REJECT 0x02 -#define BCM43xx_SBTMSTATELOW_CLOCK 0x10000 -#define BCM43xx_SBTMSTATELOW_FORCE_GATE_CLOCK 0x20000 - -/* sbtmstatehigh state flags */ -#define BCM43xx_SBTMSTATEHIGH_SERROR 0x00000001 -#define BCM43xx_SBTMSTATEHIGH_BUSY 0x00000004 -#define BCM43xx_SBTMSTATEHIGH_TIMEOUT 0x00000020 -#define BCM43xx_SBTMSTATEHIGH_COREFLAGS 0x1FFF0000 -#define BCM43xx_SBTMSTATEHIGH_DMA64BIT 0x10000000 -#define BCM43xx_SBTMSTATEHIGH_GATEDCLK 0x20000000 -#define BCM43xx_SBTMSTATEHIGH_BISTFAILED 0x40000000 -#define BCM43xx_SBTMSTATEHIGH_BISTCOMPLETE 0x80000000 - -/* sbimstate flags */ -#define BCM43xx_SBIMSTATE_IB_ERROR 0x20000 -#define BCM43xx_SBIMSTATE_TIMEOUT 0x40000 -/* PHYVersioning */ #define BCM43xx_PHYTYPE_A 0x00#define BCM43xx_PHYTYPE_B 0x01
@@ -429,54 +310,6 @@u32 value; } __attribute__((__packed__)); -/* Values for bcm430x_sprominfo.locale */ -enum { - BCM43xx_LOCALE_WORLD =0 , - BCM43xx_LOCALE_THAILAND, - BCM43xx_LOCALE_ISRAEL, - BCM43xx_LOCALE_JORDAN, - BCM43xx_LOCALE_CHINA, - BCM43xx_LOCALE_JAPAN, - BCM43xx_LOCALE_USA_CANADA_ANZ, - BCM43xx_LOCALE_EUROPE, - BCM43xx_LOCALE_USA_LOW, - BCM43xx_LOCALE_JAPAN_HIGH, - BCM43xx_LOCALE_ALL, - BCM43xx_LOCALE_NONE, -}; - -#define BCM43xx_SPROM_SIZE 64/* in 16-bit words. */ -struct bcm43xx_sprominfo { -u16 boardflags2; -u8 il0macaddr[6 ]; -u8 et0macaddr[6 ]; -u8 et1macaddr[6 ]; -u8 et0phyaddr:5 ; -u8 et1phyaddr:5 ; -u8 et0mdcport:1 ; -u8 et1mdcport:1 ; -u8 boardrev; -u8 locale:4 ; -u8 antennas_aphy:2 ; -u8 antennas_bgphy:2 ; -u16 pa0b0; -u16 pa0b1; -u16 pa0b2; -u8 wl0gpio0; -u8 wl0gpio1; -u8 wl0gpio2; -u8 wl0gpio3; -u8 maxpower_aphy; -u8 maxpower_bgphy; -u16 pa1b0; -u16 pa1b1; -u16 pa1b2; -u8 idle_tssi_tgt_aphy; -u8 idle_tssi_tgt_bgphy; -u16 boardflags; -u16 antennagain_aphy; -u16 antennagain_bgphy; -};/* Value pair to measure the LocalOscillator. */ struct bcm43xx_lopair {
@@ -604,29 +437,9 @@#define BCM43xx_MAX_80211_CORES 2 -#ifdef CONFIG_BCM947XX -#define core_offset (bcm) (bcm)->current_core_offset -#else -#define core_offset (bcm) 0 -#endif - -/* Generic information about a core. */ -struct bcm43xx_coreinfo { -u8 available:1 , - enabled:1 , - initialized:1 ; -/** core_rev revision number */ -u8 rev; -/** Index number for _switch_core() */ -u8 index; -/** core_id ID number */ -u16 id; -/** Core-specific data. */ -void *priv; -}; -/* Additional information for each 80211 core. */ -struct bcm43xx_coreinfo_80211 { +struct bcm43xx_corepriv_80211 { +u8 initialized:1 ;/* PHY device. */ struct bcm43xx_phyinfo phy;/* Radio device. */
@@ -641,7 +454,7 @@/* Context information for a noise calculation (Link Quality). */ struct bcm43xx_noise_calculation { -struct bcm43xx_coreinfo *core_at_start; +struct ssb_core *core_at_start;u8 channel_at_start;u8 calculation_running:1 ;u8 nr_samples;
@@ -711,15 +524,15 @@*/ struct bcm43xx_private { +/* The Sonics Silicon Backplane. */ +struct ssb ssb; +struct ieee80211_hw *ieee;struct ieee80211_low_level_stats ieee_stats;struct net_device *net_dev; -struct pci_dev *pci_dev;unsigned int irq; -void __iomem *mmio_addr; -spinlock_t irq_lock;struct mutex mutex;
@@ -752,36 +565,24 @@u16 board_type;u16 board_revision; -u16 chip_id; -u8 chip_rev; -u8 chip_package; - -struct bcm43xx_sprominfo sprom; +struct ssb_sprom sprom;#define BCM43xx_NR_LEDS 4struct bcm43xx_led leds[BCM43xx_NR_LEDS];spinlock_t leds_lock; -/* The currently active core. */ -struct bcm43xx_coreinfo *current_core; -#ifdef CONFIG_BCM947XX -/** current core memory offset */ -u32 current_core_offset; -#endif -struct bcm43xx_coreinfo *active_80211_core; -/* coreinfo structs for all possible cores follow. -* Note that a core might not exist. -* So check the coreinfo flags before using it. +/* Pointers to the available cores. +* If a core is not available, this is NULL. */ -struct bcm43xx_coreinfo core_chipcommon; -struct bcm43xx_coreinfo core_pci; -struct bcm43xx_coreinfo core_80211[ BCM43xx_MAX_80211_CORES ]; +struct ssb_core *core_80211[ BCM43xx_MAX_80211_CORES ]; +struct ssb_core *active_80211_core; +struct ssb_core *core_chipcommon; +struct ssb_core *core_pci; +/* Additional information, specific to the 80211 cores. */ -struct bcm43xx_coreinfo_80211 core_80211_ext[ BCM43xx_MAX_80211_CORES ]; +struct bcm43xx_corepriv_80211 corepriv_80211[ BCM43xx_MAX_80211_CORES ];/* Number of available 80211 cores. */ int nr_80211_available; -u32 chipcommon_capabilities; -/* Reason code of the last interrupt. */ u32 irq_reason;u32 dma_reason[6 ];
@@ -801,9 +602,6 @@struct work_struct restart_work; -/* Informational stuff. */ -char nick[IW_ESSID_MAX_SIZE +1 ]; -/* encryption/decryption */ u16 security_offset;struct bcm43xx_key key[54 ];
@@ -825,6 +623,12 @@return ieee80211_dev_hw_data (dev); } +static inline +struct bcm43xx_private *ssb_to_bcm43xx (struct ssb *ssb) +{ + return container_of(ssb, struct bcm43xx_private, ssb); +} +/* Helper function, which returns a boolean. * TRUE, if PIO is used; FALSE, if DMA is used. */
@@ -855,11 +659,11 @@* any of these functions. */ static inline -struct bcm43xx_coreinfo_80211 * +struct bcm43xx_corepriv_80211 *bcm43xx_current_80211_priv (struct bcm43xx_private *bcm) { -assert (bcm->current_core->id == BCM43xx_COREID_80211); -return bcm->current_core->priv; +assert (bcm->ssb.current_core->cc ==SSB_CC_80211 ); +return bcm->ssb.current_core->priv; }static inline struct bcm43xx_pio *bcm43xx_current_pio (struct bcm43xx_private *bcm)
@@ -920,49 +724,49 @@static inline u16 bcm43xx_read16 (struct bcm43xx_private *bcm,u16 offset) { -return ioread16 (bcm->mmio_addr +core_offset (bcm) + offset); +return ioread16 (bcm->ssb.mmio +ssb_core_offset (&bcm->ssb) + offset); }static inline void bcm43xx_write16 (struct bcm43xx_private *bcm,u16 offset,u16 value) { -iowrite16 (value, bcm->mmio_addr +core_offset (bcm) + offset); +iowrite16 (value, bcm->ssb.mmio +ssb_core_offset (&bcm->ssb) + offset); }static inline u32 bcm43xx_read32 (struct bcm43xx_private *bcm,u16 offset) { -return ioread32 (bcm->mmio_addr +core_offset (bcm) + offset); +return ioread32 (bcm->ssb.mmio +ssb_core_offset (&bcm->ssb) + offset); }static inline void bcm43xx_write32 (struct bcm43xx_private *bcm,u16 offset,u32 value) { -iowrite32 (value, bcm->mmio_addr +core_offset (bcm) + offset); +iowrite32 (value, bcm->ssb.mmio +ssb_core_offset (&bcm->ssb) + offset); }static inline int bcm43xx_pci_read_config16 (struct bcm43xx_private *bcm,int offset,u16 *value) { -return pci_read_config_word (bcm->pci_dev, offset, value); +return pci_read_config_word (bcm->ssb.pci_dev, offset, value); }static inline int bcm43xx_pci_read_config32 (struct bcm43xx_private *bcm,int offset,u32 *value) { -return pci_read_config_dword (bcm->pci_dev, offset, value); +return pci_read_config_dword (bcm->ssb.pci_dev, offset, value); }static inline int bcm43xx_pci_write_config16 (struct bcm43xx_private *bcm,int offset,u16 value) { -return pci_write_config_word (bcm->pci_dev, offset, value); +return pci_write_config_word (bcm->ssb.pci_dev, offset, value); }static inline int bcm43xx_pci_write_config32 (struct bcm43xx_private *bcm,int offset,u32 value) { -return pci_write_config_dword (bcm->pci_dev, offset, value); +return pci_write_config_dword (bcm->ssb.pci_dev, offset, value); }/** Limit a value between two limits */
drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.c +287 -832
1,687 lines not on this page · raw message
drivers/net/wireless/d80211/bcm43xx/bcm43xx_debugfs.c +10 -51
105 lines not on this page · raw message
drivers/net/wireless/d80211/bcm43xx/bcm43xx_dma.c +12 -12
@@ -327,11 +327,11 @@dma_addr_t dmaaddr;if (tx) { - dmaaddr =dma_map_single (&ring->bcm->pci_dev->dev, + dmaaddr =dma_map_single (&ring->bcm->ssb.pci_dev->dev, buf, len,DMA_TO_DEVICE ); }else { - dmaaddr =dma_map_single (&ring->bcm->pci_dev->dev, + dmaaddr =dma_map_single (&ring->bcm->ssb.pci_dev->dev, buf, len,DMA_FROM_DEVICE ); }
@@ -346,11 +346,11 @@ int tx) {if (tx) { -dma_unmap_single (&ring->bcm->pci_dev->dev, +dma_unmap_single (&ring->bcm->ssb.pci_dev->dev, addr, len,DMA_TO_DEVICE ); }else { -dma_unmap_single (&ring->bcm->pci_dev->dev, +dma_unmap_single (&ring->bcm->ssb.pci_dev->dev, addr, len,DMA_FROM_DEVICE ); }
@@ -363,7 +363,7 @@ {assert (!ring->tx); -dma_sync_single_for_cpu (&ring->bcm->pci_dev->dev, +dma_sync_single_for_cpu (&ring->bcm->ssb.pci_dev->dev, addr, len,DMA_FROM_DEVICE ); }
@@ -374,7 +374,7 @@ {assert (!ring->tx); -dma_sync_single_for_device (&ring->bcm->pci_dev->dev, +dma_sync_single_for_device (&ring->bcm->ssb.pci_dev->dev, addr, len,DMA_FROM_DEVICE ); }
@@ -393,7 +393,7 @@static int alloc_ringmemory (struct bcm43xx_dmaring *ring) { -struct device *dev = &(ring->bcm->pci_dev->dev); +struct device *dev = &(ring->bcm->ssb.pci_dev->dev); ring->descbase =dma_alloc_coherent (dev, BCM43xx_DMA_RINGMEMSIZE, &(ring->dmabase),GFP_KERNEL );
@@ -408,7 +408,7 @@static void free_ringmemory (struct bcm43xx_dmaring *ring) { -struct device *dev = &(ring->bcm->pci_dev->dev); +struct device *dev = &(ring->bcm->ssb.pci_dev->dev);dma_free_coherent (dev, BCM43xx_DMA_RINGMEMSIZE, ring->descbase, ring->dmabase);
@@ -727,7 +727,7 @@if (dma64) ring->routing = BCM43xx_DMA64_CLIENTTRANS;#ifdef CONFIG_BCM947XX -if (bcm->pci_dev->bus->number ==0 ) +if (bcm->ssb.pci_dev->bus->number ==0 ) ring->routing = dma64 ? BCM43xx_DMA64_NOTRANS : BCM43xx_DMA32_NOTRANS;#endif
@@ -832,8 +832,8 @@int dma64 =0 ;u32 sbtmstatehi; - sbtmstatehi =bcm43xx_read32 (bcm, BCM43xx_CIR_SBTMSTATEHIGH); -if (sbtmstatehi & BCM43xx_SBTMSTATEHIGH_DMA64BIT) + sbtmstatehi =bcm43xx_read32 (bcm,SSB_TMSHIGH ); +if (sbtmstatehi &SSB_TMSHIGH_DMA64 ) dma64 =1 ;/* setup TX DMA channels. */
@@ -873,7 +873,7 @@ goto err_destroy_tx5; dma->rx_ring0 = ring; -if (bcm->current_core->rev <5 ) { +if (bcm->ssb.current_core->rev <5 ) { ring =bcm43xx_setup_dmaring (bcm,3 ,0 , dma64);if (!ring) goto err_destroy_rx0;
drivers/net/wireless/d80211/bcm43xx/bcm43xx_main.h +0 -5
@@ -128,8 +128,6 @@void bcm43xx_dummy_transmission (struct bcm43xx_private *bcm); -int bcm43xx_switch_core (struct bcm43xx_private *bcm,struct bcm43xx_coreinfo *new_core); -int bcm43xx_select_wireless_core (struct bcm43xx_private *bcm,int phytype);
@@ -140,7 +138,4 @@void bcm43xx_controller_restart (struct bcm43xx_private *bcm,const char *reason); -int bcm43xx_sprom_read (struct bcm43xx_private *bcm,u16 *sprom); -int bcm43xx_sprom_write (struct bcm43xx_private *bcm,const u16 *sprom); -#endif /* BCM43xx_MAIN_H_ */
drivers/net/wireless/d80211/bcm43xx/bcm43xx_phy.c +33 -33
179 lines not on this page · raw message
drivers/net/wireless/d80211/bcm43xx/bcm43xx_pio.c +2 -2
@@ -315,7 +315,7 @@ queue->bcm = bcm; queue->mmio_base = pio_mmio_base; - queue->need_workarounds = (bcm->current_core->rev <3 ); + queue->need_workarounds = (bcm->ssb.current_core->rev <3 );INIT_LIST_HEAD (&queue->txfree);INIT_LIST_HEAD (&queue->txqueue);
@@ -419,7 +419,7 @@ goto err_destroy2; pio->queue3 = queue; -if (bcm->current_core->rev <3 ) +if (bcm->ssb.current_core->rev <3 ) bcm->irq_savedstate |= BCM43xx_IRQ_PIO_WORKAROUND; dprintk(KERN_INFO PFX "PIO initialized\n");
drivers/net/wireless/d80211/bcm43xx/bcm43xx_power.c +56 -48
244 lines not on this page · raw message
drivers/net/wireless/d80211/bcm43xx/bcm43xx_radio.c +5 -5
@@ -791,7 +791,7 @@case BCM43xx_PHYTYPE_B: {if (radio->version !=0x2050 )return ; -if (!(bcm->sprom.boardflags & BCM43xx_BFL_RSSI)) +if (!(bcm->sprom.r1.boardflags_lo & BCM43xx_BFL_RSSI))return ;if (radio->revision >=6 ) {
@@ -819,7 +819,7 @@ }case BCM43xx_PHYTYPE_G:if (!phy->connected || - !(bcm->sprom.boardflags & BCM43xx_BFL_RSSI)) { + !(bcm->sprom.r1.boardflags_lo & BCM43xx_BFL_RSSI)) { tmp16 =bcm43xx_nrssi_hw_read (bcm,0x20 );if (tmp16 >=0x20 ) tmp16 -=0x40 ;
@@ -1661,7 +1661,7 @@ channel2freq_bg(channel));if (channel ==14 ) { -if (bcm->sprom.locale == BCM43xx_LOCALE_JAPAN) { +if (bcm->sprom.r1.country_code ==SSB_SPROM1CCODE_JAPAN ) { bcm43xx_shm_write32(bcm, BCM43xx_SHM_SHARED, BCM43xx_UCODEFLAGS_OFFSET, bcm43xx_shm_read32(bcm, BCM43xx_SHM_SHARED,
@@ -1900,7 +1900,7 @@else if (bcm->board_vendor ==PCI_VENDOR_ID_BROADCOM && bcm->board_type ==0x416 ) att =5 ; -else if (bcm->chip_id ==0x4320 ) +else if (bcm->ssb.chip_id ==0x4320 ) att =4 ;else att =3 ;
@@ -1997,7 +1997,7 @@bcm43xx_phy_write (bcm,0x0010 ,bcm43xx_phy_read (bcm,0x0010 ) |0x0008 );bcm43xx_phy_write (bcm,0x0011 ,bcm43xx_phy_read (bcm,0x0011 ) |0x0008 ); } -if (phy->type == BCM43xx_PHYTYPE_G && bcm->current_core->rev >=5 ) { +if (phy->type == BCM43xx_PHYTYPE_G && bcm->ssb.current_core->rev >=5 ) {bcm43xx_phy_write (bcm,0x0811 ,bcm43xx_phy_read (bcm,0x0811 ) |0x008C );bcm43xx_phy_write (bcm,0x0812 ,bcm43xx_phy_read (bcm,0x0812 ) &0xFF73 ); }else
drivers/net/wireless/d80211/bcm43xx/Kconfig +1 -0
@@ -2,6 +2,7 @@ tristate "Broadcom BCM43xx wireless support (DeviceScape stack)" depends on PCI && D80211 && NET_RADIO && EXPERIMENTAL select FW_LOADER + select SONICS_SILICON_BACKPLANE ---help--- This is an experimental driver for the Broadcom 43xx wireless chip, found in the Apple Airport Extreme and various other devices.
drivers/net/wireless/d80211/bcm43xx/bcm43xx_debugfs.h +0 -1
@@ -17,7 +17,6 @@struct bcm43xx_dfsentry {struct dentry *subdir;struct dentry *dentry_devinfo; -struct dentry *dentry_spromdump;struct dentry *dentry_tsf;struct dentry *dentry_txstat;struct dentry *dentry_restart;
drivers/net/wireless/d80211/bcm43xx/bcm43xx_leds.c +4 -4
@@ -133,10 +133,10 @@u8 sprom[4 ];int i; - sprom[0 ] = bcm->sprom.wl0gpio0; - sprom[1 ] = bcm->sprom.wl0gpio1; - sprom[2 ] = bcm->sprom.wl0gpio2; - sprom[3 ] = bcm->sprom.wl0gpio3; + sprom[0 ] = bcm->sprom.r1.gpio0; + sprom[1 ] = bcm->sprom.r1.gpio1; + sprom[2 ] = bcm->sprom.r1.gpio2; + sprom[3 ] = bcm->sprom.r1.gpio3;for (i =0 ; i < BCM43xx_NR_LEDS; i++) { led = &(bcm->leds[i]);
drivers/net/wireless/d80211/bcm43xx/bcm43xx_sysfs.c +3 -109
142 lines not on this page · raw message
drivers/net/wireless/d80211/bcm43xx/bcm43xx_xmit.c +1 -1
@@ -390,7 +390,7 @@else tmp -=3 ; }else { -if (bcm->sprom.boardflags & BCM43xx_BFL_RSSI) { +if (bcm->sprom.r1.boardflags_lo & BCM43xx_BFL_RSSI) {if (in_rssi >63 ) in_rssi =63 ; tmp = radio->nrssi_lt[in_rssi];
drivers/net/wireless/d80211/bcm43xx/bcm43xx_ethtool.c +1 -1
@@ -42,7 +42,7 @@strncpy (info->driver,KBUILD_MODNAME ,sizeof (info->driver));strncpy (info->version,UTS_RELEASE ,sizeof (info->version)); -strncpy (info->bus_info,pci_name (bcm->pci_dev),ETHTOOL_BUSINFO_LEN ); +strncpy (info->bus_info,pci_name (bcm->ssb.pci_dev),ETHTOOL_BUSINFO_LEN ); }struct ethtool_ops bcm43xx_ethtool_ops = {
Signature · 1 line
Greetings Michael.
Re: [PATCH 1/2] Add Sonics Silicon Backplane driver
In reply to Michael BueschQuoted 7 lines · Michael Buesch
include/linux/ssb.h new file +7
-0+#define SSB_SPROM1_OEM 0x1076/* 8 bytes OEM string (rev 1 only) */ +/* SPROM Revision 2 (inherits from rev 1) */ +#define SSB_SPROM2_BFLHI 0x1038/* Boardflags (high 16 bits) */ +#define SSB_SPROM2_MAXP_A 0x103A/* A-PHY Max Power */ +#define SSB_SPROM2_MAXP_A_HI 0x00FF/* Max Power High */ +#define SSB_SPROM2_MAXP_A_LO 0x1100/* Max Power Low */ +#define SSB_SPROM2_MAXP_A_LO_SHIFT 8
include/linux/ssb.h line 184
Quoted 10 lines
include/linux/ssb.h new file +10
-0+#define SSB_SPROM2_PA1LOB0 0x103C/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1LOB1 0x103E/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1LOB2 0x1040/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1HIB0 0x1042/* A-PHY PowerAmplifier High Settings */ +#define SSB_SPROM2_PA1HIB1 0x1044/* A-PHY PowerAmplifier High Settings */ +#define SSB_SPROM2_PA1HIB2 0x1046/* A-PHY PowerAmplifier High Settings */ +#define SSB_SPROM2_OPO 0x1078/* OFDM Power Offset from CCK Level */ +#define SSB_SPROM2_OPO_VALUE 0x00FF +#define SSB_SPROM2_OPO_UNUSED 0xFF00 +#define SSB_SPROM2_CCODE 0x107C/* Two char Country Code */
This is badly formated. Can you repost, please.
Signature · 2 lines
Martin Michlmayr [email protected]
Re: [PATCH 1/2] Add Sonics Silicon Backplane driver
In reply to a message not in the archiveQuoted 12 lines · Martin Michlmayr
Quoted 11 lines · Michael Buesch
include/linux/ssb.h new file +11
-0+#define SSB_SPROM1_OEM 0x1076/* 8 bytes OEM string (rev 1 only) */ +/* SPROM Revision 2 (inherits from rev 1) */ +#define SSB_SPROM2_BFLHI 0x1038/* Boardflags (high 16 bits) */ +#define SSB_SPROM2_MAXP_A 0x103A/* A-PHY Max Power */ +#define SSB_SPROM2_MAXP_A_HI 0x00FF/* Max Power High */ +#define SSB_SPROM2_MAXP_A_LO 0x1100/* Max Power Low */ +#define SSB_SPROM2_MAXP_A_LO_SHIFT 8 +#define SSB_SPROM2_PA1LOB0 0x103C/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1LOB1 0x103E/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1LOB2 0x1040/* A-PHY PowerAmplifier Low Settings */ +#define SSB_SPROM2_PA1HIB0 0x1042/* A-PHY PowerAmplifier High Settings */
Quoted 8 lines
include/linux/ssb.h line 184
Quoted 6 lines
include/linux/ssb.h new file +6
-0+#define SSB_SPROM2_PA1HIB1 0x1044/* A-PHY PowerAmplifier High Settings */ +#define SSB_SPROM2_PA1HIB2 0x1046/* A-PHY PowerAmplifier High Settings */ +#define SSB_SPROM2_OPO 0x1078/* OFDM Power Offset from CCK Level */ +#define SSB_SPROM2_OPO_VALUE 0x00FF +#define SSB_SPROM2_OPO_UNUSED 0xFF00 +#define SSB_SPROM2_CCODE 0x107C/* Two char Country Code */ This is badly formated. Can you repost, please.
Uhm, no? I don't think the formating is broken. Please _apply_ that diff and look again at the resulting file.
(I the issue is the tabs that go crazy, if the additional diff plus char at the beginning is inserted)
Signature · 1 line
Greetings Michael.
Johannes Berg
maintainerRe: [PATCH 1/2] Add Sonics Silicon Backplane driver
In reply to Martin MichlmayrQuoted 6 lines · Martin Michlmayr
include/linux/ssb.h line 184
Quoted 4 lines
include/linux/ssb.h new file +4
-0+#define SSB_SPROM2_OPO 0x1078/* OFDM Power Offset from CCK Level */ +#define SSB_SPROM2_OPO_VALUE 0x00FF +#define SSB_SPROM2_OPO_UNUSED 0xFF00 +#define SSB_SPROM2_CCODE 0x107C/* Two char Country Code */ This is badly formated. Can you repost, please.
That's just because of the tabs, if the + in front is removed it's formatted fine. And the indentation is supposed to be like that I'd think.
johannes
Re: [PATCH 1/2] Add Sonics Silicon Backplane driver
Quoted 9 lines · Johannes Berg
Quoted 5 lines
include/linux/ssb.h line 184
Quoted 3 lines
include/linux/ssb.h new file +3
-0+#define SSB_SPROM2_OPO_VALUE 0x00FF +#define SSB_SPROM2_OPO_UNUSED 0xFF00 +#define SSB_SPROM2_CCODE 0x107C/* Two char Country Code */ This is badly formated. Can you repost, please.
That's just because of the tabs, if the + in front is removed it's formatted fine. And the indentation is supposed to be like that I'd think.
Yes, sorry, I didn't realize that registers and register values have different indentation.
Signature · 2 lines
Martin Michlmayr http://www.cyrius.com/