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

Reply via email to