/* A generic routine that writes GEP control, data and reset information to the GEP register (21140) or csr15 GEP portion (2114).  */
static void srom_exec(struct net_device *dev, u_char *p)
/* A generic routine that writes GEP control, data and reset information to the GEP register (21140) or csr15 GEP portion (2114).  */
static void srom_exec(struct net_device *dev, u_char *p)
{
    struct de4x5_private *lp = netdev_priv(dev);
    u_long iobase = dev->base_addr;
    u_char count = (p ? *p++ : 0);
    u_short *w = (u_short *)p;
    if (((lp->ibn != 1) && (lp->ibn != 3) && (lp->ibn != 5)) || !count) return;
    if (lp->chipset != DC21140) RESET_SIA;
    while (count--) {
	gep_wr(((lp->chipset==DC21140) && (lp->ibn!=5) ?
		                                   *p++ : get_unaligned_le16(w++)), dev);
	mdelay(2);
    }
    if (lp->chipset != DC21140) {
	outl(lp->cache.csr14, DE4X5_STRR);
	outl(lp->cache.csr13, DE4X5_SICR);
    }
    return;
}