Hi.
Seems your patch is working. I tryed it today with the dscape branch
and was able to connect using wpa und ping out of the box.
cu
Edgar (gimli) Hucek
Matthew Garrett wrote:
> Here's a patch - I'm working on a slightly old tree (I need to work with
> 2.6.15), but with luck it'll more or less apply. It:
>
> * Adds defines for the PCIE and new chipcommon cores
>
> * Adds PCI device ID 0x4312 to the supported list
>
> * Assumes that a new chipcommon core behaves like an old one with a core
> revision of 4 or greater
>
> * Assumes that the PCIE core behaves like a PCI core of revision 6 or
> greater
>
> * Accepts G Phys of revision 8 and assumes that their MAC address is in
> et1macaddr
>
> * Disables the PCI mmio region check - it seems to be 16k on this card,
> rather than 8. I'm not sure what the right thing to do there is.
>
> With this patch, I can associate, DHCP and transmit and receive data.
>
> Signed-off-by: Matthew Garrett <[EMAIL PROTECTED]>
>
>
> ------------------------------------------------------------------------
>
> diff --git a/drivers/net/wireless/bcm43xx/bcm43xx.h
> b/drivers/net/wireless/bcm43xx/bcm43xx.h
> index a185224..a6a3ef6 100644
> --- a/drivers/net/wireless/bcm43xx/bcm43xx.h
> +++ b/drivers/net/wireless/bcm43xx/bcm43xx.h
> @@ -198,6 +198,8 @@
> #define BCM43xx_COREID_USB20_HOST 0x819
> #define BCM43xx_COREID_USB20_DEV 0x81a
> #define BCM43xx_COREID_SDIO_HOST 0x81b
> +#define BCM43xx_COREID_PCIE 0x820
> +#define BCM43xx_COREID_CHIPCOMMON_NEW 0x900
>
> /* Core Information Registers */
> #define BCM43xx_CIR_BASE 0xf00
> diff --git a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> index c168d37..680c8c4 100644
> --- a/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> +++ b/drivers/net/wireless/bcm43xx/bcm43xx_main.c
> @@ -128,6 +128,8 @@ MODULE_PARM_DESC(fwpostfix, "Postfix for
> { PCI_VENDOR_ID_BROADCOM, 0x4301, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> /* Broadcom 4307 802.11b */
> { PCI_VENDOR_ID_BROADCOM, 0x4307, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> + /* Broadcom 4312 80211a/b/g */
> + { PCI_VENDOR_ID_BROADCOM, 0x4312, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
> /* Broadcom 4318 802.11b/g */
> { PCI_VENDOR_ID_BROADCOM, 0x4318, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
> /* Broadcom 4306 802.11b/g */
> @@ -2546,7 +2548,8 @@ static int bcm43xx_probe_cores(struct bc
> core_vendor = (sb_id_hi & 0xFFFF0000) >> 16;
>
> /* if present, chipcommon is always core 0; read the chipid from it */
> - if (core_id == BCM43xx_COREID_CHIPCOMMON) {
> + if (core_id == BCM43xx_COREID_CHIPCOMMON ||
> + core_id == BCM43xx_COREID_CHIPCOMMON_NEW) {
> chip_id_32 = bcm43xx_read32(bcm, 0);
> chip_id_16 = chip_id_32 & 0xFFFF;
> bcm->core_chipcommon.flags |= BCM43xx_COREFLAG_AVAILABLE;
> @@ -2580,7 +2583,8 @@ static int bcm43xx_probe_cores(struct bc
>
> /* ChipCommon with Core Rev >=4 encodes number of cores,
> * otherwise consult hardcoded table */
> - if ((core_id == BCM43xx_COREID_CHIPCOMMON) && (core_rev >= 4)) {
> + if (((core_id == BCM43xx_COREID_CHIPCOMMON) && (core_rev >= 4)) ||
> + core_id == BCM43xx_COREID_CHIPCOMMON_NEW) {
> core_count = (chip_id_32 & 0x0F000000) >> 24;
> } else {
> switch (chip_id_16) {
> @@ -2650,6 +2654,7 @@ static int bcm43xx_probe_cores(struct bc
> core = NULL;
> switch (core_id) {
> case BCM43xx_COREID_PCI:
> + case BCM43xx_COREID_PCIE:
> core = &bcm->core_pci;
> if (core->flags & BCM43xx_COREFLAG_AVAILABLE) {
> printk(KERN_WARNING PFX "Multiple PCI cores
> found.\n");
> @@ -2708,6 +2713,7 @@ static int bcm43xx_probe_cores(struct bc
> case 6:
> case 7:
> case 9:
> + case 10:
> break;
> default:
> printk(KERN_ERR PFX "Error: Unsupported 80211
> core revision %u\n",
> @@ -3002,7 +3008,7 @@ static int bcm43xx_setup_backplane_pci_c
> if (err)
> goto out;
>
> - if (bcm->core_pci.rev < 6) {
> + if (bcm->core_pci.rev < 6 && bcm->core_pci.id != BCM43xx_COREID_PCIE) {
> value = bcm43xx_read32(bcm, BCM43xx_CIR_SBINTVEC);
> value |= (1 << backplane_flag_nr);
> bcm43xx_write32(bcm, BCM43xx_CIR_SBINTVEC, value);
> @@ -3024,7 +3030,7 @@ static int bcm43xx_setup_backplane_pci_c
> value |= BCM43xx_SBTOPCI2_PREFETCH | BCM43xx_SBTOPCI2_BURST;
> bcm43xx_write32(bcm, BCM43xx_PCICORE_SBTOPCI2, value);
>
> - if (bcm->core_pci.rev < 5) {
> + if (bcm->core_pci.rev < 5 && bcm->core_pci.id != BCM43xx_COREID_PCIE) {
> value = bcm43xx_read32(bcm, BCM43xx_CIR_SBIMCONFIGLOW);
> value |= (2 << BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_SHIFT)
> & BCM43xx_SBIMCONFIGLOW_SERVICE_TOUT_MASK;
> @@ -3350,7 +3356,7 @@ static int bcm43xx_read_phyinfo(struct b
> bcm->ieee->freq_band = IEEE80211_24GHZ_BAND;
> break;
> case BCM43xx_PHYTYPE_G:
> - if (phy_rev > 7)
> + if (phy_rev > 8)
> phy_rev_ok = 0;
> bcm->ieee->modulation = IEEE80211_OFDM_MODULATION |
> IEEE80211_CCK_MODULATION;
> @@ -3414,13 +3420,13 @@ static int bcm43xx_attach_board(struct b
> }
> //FIXME: Why is this check disabled for BCM947XX? What is the IO_SIZE there?
> #ifndef CONFIG_BCM947XX
> - if (mmio_len != BCM43xx_IO_SIZE) {
> +/* if (mmio_len != BCM43xx_IO_SIZE) {
> printk(KERN_ERR PFX
> "%s: invalid PCI mem region size(s), aborting\n",
> pci_name(pci_dev));
> err = -ENODEV;
> goto err_pci_disable;
> - }
> + } */
> #endif
>
> err = pci_request_regions(pci_dev, __stringify(KBUILD_MODNAME));
> @@ -3515,7 +3521,9 @@ static int bcm43xx_attach_board(struct b
> bcm43xx_pctl_set_crystal(bcm, 0);
>
> /* Set the MAC address in the networking subsystem */
> - if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A)
> + if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A ||
> + (bcm->current_core->phy->type == BCM43xx_PHYTYPE_G &&
> + bcm->current_core->phy->rev == 8))
> memcpy(bcm->net_dev->dev_addr, bcm->sprom.et1macaddr, 6);
> else
> memcpy(bcm->net_dev->dev_addr, bcm->sprom.il0macaddr, 6);
_______________________________________________
Bcm43xx-dev mailing list
[email protected]
http://lists.berlios.de/mailman/listinfo/bcm43xx-dev