static int sandisk_enable_wireless(struct net_device *dev) { int res, ret = 0; struct hostap_interface *iface = netdev_priv(dev); local_info_t *local = iface->local; struct hostap_cs_priv *hw_priv = local->hw_priv; if (resource_size(hw_priv->link->resource[0]) < 0x42) { ret = -ENODEV; goto done; } if (hw_priv->link->manf_id != 0xd601 || hw_priv->link->card_id != 0x0101) { ret = -ENODEV; goto done; } if (hw_priv->link->socket->functions < 2) { ret = -ENODEV; goto done; } printk(KERN_DEBUG "%s: Multi-function SanDisk ConnectPlus detected" " - using vendor-specific initialization\n", dev->name); hw_priv->sandisk_connectplus = 1; res = pcmcia_write_config_byte(hw_priv->link, CISREG_COR, COR_SOFT_RESET); if (res != 0) { printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n", dev->name, res); goto done; } mdelay(5); res = pcmcia_write_config_byte(hw_priv->link, CISREG_COR, (COR_LEVEL_REQ | 0x8 | COR_ADDR_DECODE | COR_FUNC_ENA)); if (res != 0) { printk(KERN_DEBUG "%s: SanDisk - COR sreset failed (%d)\n", dev->name, res); goto done; } mdelay(5); sandisk_set_iobase(local); HFA384X_OUTB(0xc5, SANDISK_WLAN_ACTIVATION_OFF); udelay(10); HFA384X_OUTB(0x4b, SANDISK_WLAN_ACTIVATION_OFF); udelay(10); done: return ret; }
static void sandisk_write_hcr(local_info_t *local, int hcr) { struct net_device *dev = local->dev; int i; HFA384X_OUTB(0x80, SANDISK_WLAN_ACTIVATION_OFF); udelay(50); for (i = 0; i < 10; i++) { HFA384X_OUTB(hcr, SANDISK_HCR_OFF); } udelay(55); HFA384X_OUTB(0x45, SANDISK_WLAN_ACTIVATION_OFF); }
static int hfa384x_to_bap(struct net_device *dev, u16 bap, void *buf, int len) { u16 d_off; __le16 *pos; d_off = (bap == 1) ? HFA384X_DATA1_OFF : HFA384X_DATA0_OFF; pos = (__le16 *) buf; for ( ; len > 1; len -= 2) HFA384X_OUTW_DATA(*pos++, d_off); if (len & 1) HFA384X_OUTB(*((char *) pos), d_off); return 0; }
static int hfa384x_to_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_OUTSW(d_off, buf, len / 2); pos += len / 2; if (len & 1) HFA384X_OUTB(*((char *) pos), d_off); return 0; }