pci.c (d8a382d2662822248a97ce9d670b90e68aefbd3a) pci.c (9d1ac34ec3a67713308ae0883c3359c557f14d17)
1/*
2 * Sonics Silicon Backplane PCI-Hostbus related functions.
3 *
4 * Copyright (C) 2005-2006 Michael Buesch <mb@bu3sch.de>
5 * Copyright (C) 2005 Martin Langer <martin-langer@gmx.de>
6 * Copyright (C) 2005 Stefano Brivio <st3@riseup.net>
7 * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org>
8 * Copyright (C) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>

--- 611 unchanged lines hidden (view full) ---

620 const struct ssb_sprom *fallback;
621 int err = -ENOMEM;
622 u16 *buf;
623
624 if (!ssb_is_sprom_available(bus)) {
625 ssb_printk(KERN_ERR PFX "No SPROM available!\n");
626 return -ENODEV;
627 }
1/*
2 * Sonics Silicon Backplane PCI-Hostbus related functions.
3 *
4 * Copyright (C) 2005-2006 Michael Buesch <mb@bu3sch.de>
5 * Copyright (C) 2005 Martin Langer <martin-langer@gmx.de>
6 * Copyright (C) 2005 Stefano Brivio <st3@riseup.net>
7 * Copyright (C) 2005 Danny van Dyk <kugelfang@gentoo.org>
8 * Copyright (C) 2005 Andreas Jaggi <andreas.jaggi@waterwave.ch>

--- 611 unchanged lines hidden (view full) ---

620 const struct ssb_sprom *fallback;
621 int err = -ENOMEM;
622 u16 *buf;
623
624 if (!ssb_is_sprom_available(bus)) {
625 ssb_printk(KERN_ERR PFX "No SPROM available!\n");
626 return -ENODEV;
627 }
628 if (bus->chipco.dev) { /* can be unavailible! */
629 /*
630 * get SPROM offset: SSB_SPROM_BASE1 except for
631 * chipcommon rev >= 31 or chip ID is 0x4312 and
632 * chipcommon status & 3 == 2
633 */
634 if (bus->chipco.dev->id.revision >= 31)
635 bus->sprom_offset = SSB_SPROM_BASE31;
636 else if (bus->chip_id == 0x4312 &&
637 (bus->chipco.status & 0x03) == 2)
638 bus->sprom_offset = SSB_SPROM_BASE31;
639 else
640 bus->sprom_offset = SSB_SPROM_BASE1;
641 } else {
642 bus->sprom_offset = SSB_SPROM_BASE1;
643 }
644 ssb_dprintk(KERN_INFO PFX "SPROM offset is 0x%x\n", bus->sprom_offset);
628
645
629 bus->sprom_offset = (bus->chipco.dev->id.revision < 31) ?
630 SSB_SPROM_BASE1 : SSB_SPROM_BASE31;
631
632 buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
633 if (!buf)
634 goto out;
635 bus->sprom_size = SSB_SPROMSIZE_WORDS_R123;
636 sprom_do_read(bus, buf);
637 err = sprom_check_crc(buf, bus->sprom_size);
638 if (err) {
639 /* try for a 440 byte SPROM - revision 4 and higher */

--- 296 unchanged lines hidden ---
646 buf = kcalloc(SSB_SPROMSIZE_WORDS_R123, sizeof(u16), GFP_KERNEL);
647 if (!buf)
648 goto out;
649 bus->sprom_size = SSB_SPROMSIZE_WORDS_R123;
650 sprom_do_read(bus, buf);
651 err = sprom_check_crc(buf, bus->sprom_size);
652 if (err) {
653 /* try for a 440 byte SPROM - revision 4 and higher */

--- 296 unchanged lines hidden ---