Lines Matching refs:dev

76 #define SDLA_WINDOW(dev,addr) outb((((addr) >> 13) & 0x1F), (dev)->base_addr + SDLA_REG_Z80_WINDOW)
78 static void __sdla_read(struct net_device *dev, int addr, void *buf, short len)
89 base = (const void *) (dev->mem_start + offset);
91 SDLA_WINDOW(dev, addr);
100 static void sdla_read(struct net_device *dev, int addr, void *buf, short len)
104 __sdla_read(dev, addr, buf, len);
108 static void __sdla_write(struct net_device *dev, int addr,
120 base = (void *) (dev->mem_start + offset);
122 SDLA_WINDOW(dev, addr);
131 static void sdla_write(struct net_device *dev, int addr,
137 __sdla_write(dev, addr, buf, len);
142 static void sdla_clear(struct net_device *dev)
151 base = (void *) dev->mem_start;
156 SDLA_WINDOW(dev, addr);
166 static char sdla_byte(struct net_device *dev, int addr)
171 temp = (void *) (dev->mem_start + (addr & SDLA_ADDR_MASK));
174 SDLA_WINDOW(dev, addr);
181 static void sdla_stop(struct net_device *dev)
185 flp = netdev_priv(dev);
189 outb(SDLA_S502A_HALT, dev->base_addr + SDLA_REG_CONTROL);
193 outb(SDLA_HALT, dev->base_addr + SDLA_REG_Z80_CONTROL);
194 outb(SDLA_S502E_ENABLE, dev->base_addr + SDLA_REG_CONTROL);
199 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
203 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
208 static void sdla_start(struct net_device *dev)
212 flp = netdev_priv(dev);
216 outb(SDLA_S502A_NMI, dev->base_addr + SDLA_REG_CONTROL);
217 outb(SDLA_S502A_START, dev->base_addr + SDLA_REG_CONTROL);
221 outb(SDLA_S502E_CPUEN, dev->base_addr + SDLA_REG_Z80_CONTROL);
222 outb(0x00, dev->base_addr + SDLA_REG_CONTROL);
227 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
231 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
246 static int sdla_z80_poll(struct net_device *dev, int z80_addr, int jiffs, char resp1, char resp2)
254 temp = (void *)dev->mem_start;
262 SDLA_WINDOW(dev, z80_addr);
276 static int sdla_cpuspeed(struct net_device *dev, struct ifreq *ifr)
281 sdla_start(dev);
282 if (sdla_z80_poll(dev, 0, 3*HZ, Z80_READY, 0) < 0)
286 sdla_write(dev, 0, &data, 1);
288 if ((jiffs = sdla_z80_poll(dev, 0, 8*HZ, Z80_SCC_OK, Z80_SCC_BAD)) < 0)
291 sdla_stop(dev);
292 sdla_read(dev, 0, &data, 1);
296 printk("%s: SCC bad\n", dev->name);
338 static void sdla_errors(struct net_device *dev, int cmd, int dlci, int ret, int len, void *data)
350 netdev_info(dev, "Modem DCD unexpectedly low!\n");
352 netdev_info(dev, "Modem CTS unexpectedly low!\n");
357 netdev_info(dev, "Channel became inoperative!\n");
362 netdev_info(dev, "Channel became operative!\n");
367 netdev_info(dev, "Status change reported by Access Node\n");
382 netdev_info(dev, "DLCI %i: %s\n",
389 netdev_info(dev, "Received unknown DLCIs:");
397 netdev_err(dev, "Command timed out!\n");
401 netdev_info(dev, "Bc/CIR overflow, acceptable size is %i\n",
406 netdev_info(dev, "Buffer size over specified max of %i\n",
419 netdev_dbg(dev, "Cmd 0x%02X generated return code 0x%02X\n",
426 static int sdla_cmd(struct net_device *dev, int cmd, short dlci, short flags,
437 flp = netdev_priv(dev);
439 cmd_buf = (struct sdla_cmd *)(dev->mem_start + (window & SDLA_ADDR_MASK));
445 SDLA_WINDOW(dev, window);
465 SDLA_WINDOW(dev, window);
475 SDLA_WINDOW(dev, window);
496 sdla_errors(dev, cmd, dlci, ret, len, &status);
507 static int sdla_reconfig(struct net_device *dev);
657 struct net_device *dev)
665 flp = netdev_priv(dev);
669 netif_stop_queue(dev);
678 switch (dev->type)
681 if (skb->dev->type != ARPHRD_DLCI)
683 netdev_warn(dev, "Non DLCI device, type %i, tried to send on FRAD module\n",
684 skb->dev->type);
689 netdev_warn(dev, "unknown firmware type 0x%04X\n",
690 dev->type);
701 ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, skb->data, skb->len, NULL, NULL);
705 ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, NULL, skb->len, &addr, &size);
710 SDLA_WINDOW(dev, addr);
711 pbuf = (void *)(dev->mem_start + (addr & SDLA_ADDR_MASK));
712 __sdla_write(dev, pbuf->buf_addr, skb->data, skb->len);
713 SDLA_WINDOW(dev, addr);
723 dev->stats.tx_packets++;
729 dev->stats.tx_dropped++;
733 dev->stats.tx_errors++;
737 netif_wake_queue(dev);
748 static void sdla_receive(struct net_device *dev)
763 flp = netdev_priv(dev);
779 cmd = (void *) (dev->mem_start + (SDLA_502_RCV_BUF & SDLA_ADDR_MASK));
780 SDLA_WINDOW(dev, SDLA_502_RCV_BUF);
790 pbufi = (void *) (dev->mem_start + (SDLA_508_RXBUF_INFO & SDLA_ADDR_MASK));
791 SDLA_WINDOW(dev, SDLA_508_RXBUF_INFO);
792 pbuf = (void *) (dev->mem_start + ((pbufi->rse_base + flp->buffer * sizeof(struct buf_entry)) & SDLA_ADDR_MASK));
814 netdev_notice(dev, "Received packet from invalid DLCI %i, ignoring\n",
816 dev->stats.rx_errors++;
827 netdev_notice(dev, "Memory squeeze, dropping packet\n");
828 dev->stats.rx_dropped++;
841 __sdla_read(dev, SDLA_502_RCV_BUF + SDLA_502_DATA_OFS, skb_put(skb,len), len);
843 SDLA_WINDOW(dev, SDLA_502_RCV_BUF);
854 __sdla_read(dev, addr, skb_put(skb, len2), len2);
856 __sdla_read(dev, buf_base, skb_put(skb, split), split);
860 SDLA_WINDOW(dev, SDLA_508_RXBUF_INFO);
868 dev->stats.rx_packets++;
878 struct net_device *dev;
882 dev = dev_id;
884 flp = netdev_priv(dev);
888 netdev_warn(dev, "irq %d for uninitialized device\n", dev->irq);
892 byte = sdla_byte(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE);
896 sdla_receive(dev);
902 sdla_cmd(dev, SDLA_READ_DLC_STATUS, 0, 0, NULL, 0, NULL, NULL);
908 netdev_warn(dev, "invalid irq flag 0x%02X\n", byte);
916 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
918 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
923 sdla_write(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE, &byte, sizeof(byte));
930 struct net_device *dev = flp->dev;
932 if (sdla_byte(dev, SDLA_502_RCV_BUF))
933 sdla_receive(dev);
939 static int sdla_close(struct net_device *dev)
946 flp = netdev_priv(dev);
958 sdla_cmd(dev, SDLA_DEACTIVATE_DLCI, 0, 0, dlcis, len, NULL, NULL);
959 sdla_cmd(dev, SDLA_DELETE_DLCI, 0, 0, &flp->dlci[i], sizeof(flp->dlci[i]), NULL, NULL);
971 sdla_cmd(dev, SDLA_SET_IRQ_TRIGGER, 0, 0, &intr, sizeof(char) + sizeof(short), NULL, NULL);
973 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
980 sdla_cmd(dev, SDLA_SET_IRQ_TRIGGER, 0, 0, &intr, sizeof(struct intr_info), NULL, NULL);
982 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
986 sdla_cmd(dev, SDLA_DISABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL);
988 netif_stop_queue(dev);
998 static int sdla_open(struct net_device *dev)
1007 flp = netdev_priv(dev);
1025 sdla_cmd(dev, SDLA_DISABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL);
1026 sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, 0, 0, &data, len, NULL, NULL);
1031 sdla_cmd(dev, SDLA_ENABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL);
1044 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
1046 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
1048 sdla_write(dev, SDLA_502_IRQ_INTERFACE, &byte, sizeof(byte));
1050 sdla_cmd(dev, SDLA_SET_IRQ_TRIGGER, 0, 0, &intr, sizeof(char) + sizeof(short), NULL, NULL);
1058 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL);
1060 sdla_write(dev, SDLA_508_IRQ_INTERFACE, &byte, sizeof(byte));
1062 intr.irq = dev->irq;
1063 sdla_cmd(dev, SDLA_SET_IRQ_TRIGGER, 0, 0, &intr, sizeof(struct intr_info), NULL, NULL);
1070 sdla_cmd(dev, SDLA_ISSUE_IN_CHANNEL_SIGNAL, 0, 0, &byte, sizeof(byte), NULL, NULL);
1074 sdla_cmd(dev, SDLA_ADD_DLCI, 0, 0, data.dlci, len - sizeof(struct frad_conf), NULL, NULL);
1077 sdla_cmd(dev, SDLA_ACTIVATE_DLCI, 0, 0, &flp->dlci[i], 2*sizeof(flp->dlci[i]), NULL, NULL);
1086 sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, &dlp->config, sizeof(struct dlci_conf), NULL, NULL);
1089 netif_start_queue(dev);
1094 static int sdla_config(struct net_device *dev, struct frad_conf __user *conf, int get)
1101 if (dev->type == 0xFFFF)
1104 flp = netdev_priv(dev);
1108 if (netif_running(dev))
1151 if (dev->mtu != flp->config.mtu)
1154 dev->mtu = flp->config.mtu;
1164 sdla_start(dev);
1171 if (netif_running(dev))
1174 if (sdla_cmd(dev, SDLA_READ_DLCI_CONFIGURATION, 0, 0, NULL, 0, &data, &size) != SDLA_RET_OK)
1192 static int sdla_xfer(struct net_device *dev, struct sdla_mem __user *info, int read)
1205 sdla_read(dev, mem.addr, temp, mem.len);
1218 sdla_write(dev, mem.addr, temp, mem.len);
1224 static int sdla_reconfig(struct net_device *dev)
1230 flp = netdev_priv(dev);
1241 sdla_cmd(dev, SDLA_DISABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL);
1242 sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, 0, 0, &data, len, NULL, NULL);
1243 sdla_cmd(dev, SDLA_ENABLE_COMMUNICATIONS, 0, 0, NULL, 0, NULL, NULL);
1248 static int sdla_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
1255 flp = netdev_priv(dev);
1264 return sdla_config(dev, ifr->ifr_data, cmd == FRAD_GET_CONF);
1271 return sdla_cpuspeed(dev, ifr);
1286 dev->type = ifr->ifr_flags;
1294 sdla_clear(dev);
1301 return sdla_xfer(dev, ifr->ifr_data, cmd == SDLA_READMEM);
1304 sdla_start(dev);
1308 sdla_stop(dev);
1317 static int sdla_change_mtu(struct net_device *dev, int new_mtu)
1319 if (netif_running(dev))
1326 static int sdla_set_config(struct net_device *dev, struct ifmap *map)
1334 flp = netdev_priv(dev);
1346 if (!request_region(map->base_addr, SDLA_IO_EXTENTS, dev->name)){
1347 pr_warn("io-port 0x%04lx in use\n", dev->base_addr);
1412 netdev_notice(dev, "Unknown card type\n");
1452 if (request_irq(dev->irq, sdla_isr, 0, dev->name, dev))
1456 switch(dev->irq) {
1572 dev->irq = map->irq;
1573 dev->base_addr = base;
1574 dev->mem_start = map->mem_start;
1575 dev->mem_end = dev->mem_start + 0x2000;
1580 free_irq(map->irq, dev);
1595 static void setup_sdla(struct net_device *dev)
1597 struct frad_local *flp = netdev_priv(dev);
1599 netdev_boot_setup_check(dev);
1601 dev->netdev_ops = &sdla_netdev_ops;
1602 dev->flags = 0;
1603 dev->type = 0xFFFF;
1604 dev->hard_header_len = 0;
1605 dev->addr_len = 0;
1606 dev->mtu = SDLA_MAX_MTU;
1613 flp->dev = dev;