/* support only 16-bit word read from srom */ int srom_read(uint bus, void *curmap, void *osh, uint byteoff, uint nbytes, uint16 *buf) { void *srom; uint i, off, nw; /* check input - 16-bit access only */ if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2)) return 1; if (bus == PCI_BUS) { if (!curmap) return 1; srom = (void *)((uint)curmap + PCI_BAR0_SPROM_OFFSET); if (sprom_read_pci(srom, byteoff, buf, nbytes, FALSE)) return 1; } else if (bus == PCMCIA_BUS) { off = byteoff / 2; nw = nbytes / 2; for (i = 0; i < nw; i++) { if (sprom_read_pcmcia(osh, (uint16)(off + i), (uint16*)(buf + i))) return 1; } } else { return 1; } return 0; }
/* support only 16-bit word read from srom */ int srom_read(uint bustype, void *curmap, void *osh, uint byteoff, uint nbytes, uint16 *buf) { void *srom; uint i, off, nw; ASSERT(bustype == BUSTYPE(bustype)); /* check input - 16-bit access only */ if (byteoff & 1 || nbytes & 1 || (byteoff + nbytes) > (SPROM_SIZE * 2)) return 1; off = byteoff / 2; nw = nbytes / 2; if (BUSTYPE(bustype) == PCI_BUS) { if (!curmap) return 1; srom = (uchar*)curmap + PCI_BAR0_SPROM_OFFSET; if (sprom_read_pci(srom, off, buf, nw, FALSE)) return 1; } else if (BUSTYPE(bustype) == PCMCIA_BUS) { for (i = 0; i < nw; i++) { if (sprom_read_pcmcia(osh, (uint16)(off + i), (uint16*)(buf + i))) return 1; } } else { return 1; } return 0; }