static int hfa384x_from_bap(struct net_device *dev, u16 bap, void *buf, int len) { u16 d_off; u16 *pos; d_off = (bap == 1) ? HFA384X_DATA1_OFF : HFA384X_DATA0_OFF; pos = (u16 *) buf; if (len / 2) HFA384X_INSW(d_off, buf, len / 2); pos += len / 2; if (len & 1) *((char *) pos) = HFA384X_INB(d_off); return 0; }
static void prism2_pci_cor_sreset(local_info_t *local) { struct net_device *dev = local->dev; u16 reg; reg = HFA384X_INB(HFA384X_PCICOR_OFF); printk(KERN_DEBUG "%s: Original COR value: 0x%0x\n", dev->name, reg); /* linux-wlan-ng uses extremely long hold and settle times for * COR sreset. A comment in the driver code mentions that the long * delays appear to be necessary. However, at least IBM 22P6901 seems * to work fine with shorter delays. * * Longer delays can be configured by uncommenting following line: */ /* #define PRISM2_PCI_USE_LONG_DELAYS */ #ifdef PRISM2_PCI_USE_LONG_DELAYS int i; HFA384X_OUTW(reg | 0x0080, HFA384X_PCICOR_OFF); mdelay(250); HFA384X_OUTW(reg & ~0x0080, HFA384X_PCICOR_OFF); mdelay(500); /* Wait for f/w to complete initialization (CMD:BUSY == 0) */ i = 2000000 / 10; while ((HFA384X_INW(HFA384X_CMD_OFF) & HFA384X_CMD_BUSY) && --i) udelay(10); #else /* PRISM2_PCI_USE_LONG_DELAYS */ HFA384X_OUTW(reg | 0x0080, HFA384X_PCICOR_OFF); mdelay(2); HFA384X_OUTW(reg & ~0x0080, HFA384X_PCICOR_OFF); mdelay(2); #endif /* PRISM2_PCI_USE_LONG_DELAYS */ if (HFA384X_INW(HFA384X_CMD_OFF) & HFA384X_CMD_BUSY) { printk(KERN_DEBUG "%s: COR sreset timeout\n", dev->name); } }
static void prism2_pci_cor_sreset(local_info_t *local) { struct net_device *dev = local->dev; u16 reg; reg = HFA384X_INB(HFA384X_PCICOR_OFF); printk(KERN_DEBUG "%s: Original COR value: 0x%0x\n", dev->name, reg); #ifdef PRISM2_PCI_USE_LONG_DELAYS int i; HFA384X_OUTW(reg | 0x0080, HFA384X_PCICOR_OFF); mdelay(250); HFA384X_OUTW(reg & ~0x0080, HFA384X_PCICOR_OFF); mdelay(500); i = 2000000 / 10; while ((HFA384X_INW(HFA384X_CMD_OFF) & HFA384X_CMD_BUSY) && --i) udelay(10); #else HFA384X_OUTW(reg | 0x0080, HFA384X_PCICOR_OFF); mdelay(2); HFA384X_OUTW(reg & ~0x0080, HFA384X_PCICOR_OFF); mdelay(2); #endif if (HFA384X_INW(HFA384X_CMD_OFF) & HFA384X_CMD_BUSY) { printk(KERN_DEBUG "%s: COR sreset timeout\n", dev->name); } }