Lines Matching +full:byte +full:- +full:len
1 // SPDX-License-Identifier: GPL-2.0-or-later
4 * multi-protocol PC interface card. Initial offering is with
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) in __sdla_read() argument
85 while(len) in __sdla_read()
88 bytes = offset + len > SDLA_WINDOW_SIZE ? SDLA_WINDOW_SIZE - offset : len; in __sdla_read()
89 base = (const void *) (dev->mem_start + offset); in __sdla_read()
96 len -= bytes; in __sdla_read()
100 static void sdla_read(struct net_device *dev, int addr, void *buf, short len) in sdla_read() argument
104 __sdla_read(dev, addr, buf, len); in sdla_read()
109 const void *buf, short len) in __sdla_write() argument
116 while(len) in __sdla_write()
119 bytes = offset + len > SDLA_WINDOW_SIZE ? SDLA_WINDOW_SIZE - offset : len; in __sdla_write()
120 base = (void *) (dev->mem_start + offset); in __sdla_write()
127 len -= bytes; in __sdla_write()
132 const void *buf, short len) in sdla_write() argument
137 __sdla_write(dev, addr, buf, len); in sdla_write()
146 int len, addr, bytes; in sdla_clear() local
148 len = 65536; in sdla_clear()
151 base = (void *) dev->mem_start; in sdla_clear()
154 while(len) in sdla_clear()
160 len -= bytes; in sdla_clear()
169 char byte, *temp; in sdla_byte() local
171 temp = (void *) (dev->mem_start + (addr & SDLA_ADDR_MASK)); in sdla_byte()
175 byte = *temp; in sdla_byte()
178 return byte; in sdla_byte()
186 switch(flp->type) in sdla_stop()
189 outb(SDLA_S502A_HALT, dev->base_addr + SDLA_REG_CONTROL); in sdla_stop()
190 flp->state = SDLA_HALT; in sdla_stop()
193 outb(SDLA_HALT, dev->base_addr + SDLA_REG_Z80_CONTROL); in sdla_stop()
194 outb(SDLA_S502E_ENABLE, dev->base_addr + SDLA_REG_CONTROL); in sdla_stop()
195 flp->state = SDLA_S502E_ENABLE; in sdla_stop()
198 flp->state &= ~SDLA_CPUEN; in sdla_stop()
199 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_stop()
202 flp->state &= ~SDLA_CPUEN; in sdla_stop()
203 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_stop()
213 switch(flp->type) in sdla_start()
216 outb(SDLA_S502A_NMI, dev->base_addr + SDLA_REG_CONTROL); in sdla_start()
217 outb(SDLA_S502A_START, dev->base_addr + SDLA_REG_CONTROL); in sdla_start()
218 flp->state = SDLA_S502A_START; in sdla_start()
221 outb(SDLA_S502E_CPUEN, dev->base_addr + SDLA_REG_Z80_CONTROL); in sdla_start()
222 outb(0x00, dev->base_addr + SDLA_REG_CONTROL); in sdla_start()
223 flp->state = 0; in sdla_start()
226 flp->state |= SDLA_CPUEN; in sdla_start()
227 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_start()
230 flp->state |= SDLA_CPUEN; in sdla_start()
231 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_start()
254 temp = (void *)dev->mem_start; in sdla_z80_poll()
267 return time_before(jiffies, done) ? jiffies - start : -1; in sdla_z80_poll()
283 return -EIO; in sdla_cpuspeed()
289 return -EIO; in sdla_cpuspeed()
296 printk("%s: SCC bad\n", dev->name); in sdla_cpuspeed()
297 return -EIO; in sdla_cpuspeed()
301 return -EINVAL; in sdla_cpuspeed()
304 ifr->ifr_mtu = SDLA_CPU_16M; in sdla_cpuspeed()
306 ifr->ifr_mtu = SDLA_CPU_10M; in sdla_cpuspeed()
308 ifr->ifr_mtu = SDLA_CPU_8M; in sdla_cpuspeed()
310 ifr->ifr_mtu = SDLA_CPU_7M; in sdla_cpuspeed()
312 ifr->ifr_mtu = SDLA_CPU_5M; in sdla_cpuspeed()
314 ifr->ifr_mtu = SDLA_CPU_3M; in sdla_cpuspeed()
338 static void sdla_errors(struct net_device *dev, int cmd, int dlci, int ret, int len, void *data) in sdla_errors() argument
368 len /= sizeof(struct _dlci_stat); in sdla_errors()
369 for(pstatus = data, i=0;i < len;i++,pstatus++) in sdla_errors()
371 if (pstatus->flags & SDLA_DLCI_NEW) in sdla_errors()
373 else if (pstatus->flags & SDLA_DLCI_DELETED) in sdla_errors()
375 else if (pstatus->flags & SDLA_DLCI_ACTIVE) in sdla_errors()
379 sprintf(line, "unknown status: %02X", pstatus->flags); in sdla_errors()
383 pstatus->dlci, state); in sdla_errors()
390 len /= sizeof(short); in sdla_errors()
391 for(pdlci = data,i=0;i < len;i++,pdlci++) in sdla_errors()
402 len); in sdla_errors()
407 len); in sdla_errors()
434 int ret, waiting, len; in sdla_cmd() local
438 window = flp->type == SDLA_S508 ? SDLA_508_CMD_BUF : SDLA_502_CMD_BUF; in sdla_cmd()
439 cmd_buf = (struct sdla_cmd *)(dev->mem_start + (window & SDLA_ADDR_MASK)); in sdla_cmd()
441 len = 0; in sdla_cmd()
446 cmd_buf->cmd = cmd; in sdla_cmd()
447 cmd_buf->dlci = dlci; in sdla_cmd()
448 cmd_buf->flags = flags; in sdla_cmd()
451 memcpy(cmd_buf->data, inbuf, inlen); in sdla_cmd()
453 cmd_buf->length = inlen; in sdla_cmd()
455 cmd_buf->opp_flag = 1; in sdla_cmd()
459 len = 0; in sdla_cmd()
466 waiting = ((volatile int)(cmd_buf->opp_flag)); in sdla_cmd()
476 ret = cmd_buf->retval; in sdla_cmd()
477 len = cmd_buf->length; in sdla_cmd()
480 *outlen = *outlen >= len ? len : *outlen; in sdla_cmd()
483 memcpy(outbuf, cmd_buf->data, *outlen); in sdla_cmd()
488 memcpy(&status, cmd_buf->data, len > sizeof(status) ? sizeof(status) : len); in sdla_cmd()
496 sdla_errors(dev, cmd, dlci, ret, len, &status); in sdla_cmd()
517 if (flp->master[i] == master) in sdla_activate()
521 return -ENODEV; in sdla_activate()
523 flp->dlci[i] = abs(flp->dlci[i]); in sdla_activate()
525 if (netif_running(slave) && (flp->config.station == FRAD_STATION_NODE)) in sdla_activate()
526 sdla_cmd(slave, SDLA_ACTIVATE_DLCI, 0, 0, &flp->dlci[i], sizeof(short), NULL, NULL); in sdla_activate()
539 if (flp->master[i] == master) in sdla_deactivate()
543 return -ENODEV; in sdla_deactivate()
545 flp->dlci[i] = -abs(flp->dlci[i]); in sdla_deactivate()
547 if (netif_running(slave) && (flp->config.station == FRAD_STATION_NODE)) in sdla_deactivate()
548 sdla_cmd(slave, SDLA_DEACTIVATE_DLCI, 0, 0, &flp->dlci[i], sizeof(short), NULL, NULL); in sdla_deactivate()
558 if (master->type != ARPHRD_DLCI) in sdla_assoc()
559 return -EINVAL; in sdla_assoc()
565 if (!flp->master[i]) in sdla_assoc()
567 if (abs(flp->dlci[i]) == *(short *)(master->dev_addr)) in sdla_assoc()
568 return -EADDRINUSE; in sdla_assoc()
572 return -EMLINK; /* #### Alan: Comments on this ?? */ in sdla_assoc()
575 flp->master[i] = master; in sdla_assoc()
576 flp->dlci[i] = -*(short *)(master->dev_addr); in sdla_assoc()
577 master->mtu = slave->mtu; in sdla_assoc()
580 if (flp->config.station == FRAD_STATION_CPE) in sdla_assoc()
583 sdla_cmd(slave, SDLA_ADD_DLCI, 0, 0, master->dev_addr, sizeof(short), NULL, NULL); in sdla_assoc()
597 if (flp->master[i] == master) in sdla_deassoc()
601 return -ENODEV; in sdla_deassoc()
603 flp->master[i] = NULL; in sdla_deassoc()
604 flp->dlci[i] = 0; in sdla_deassoc()
608 if (flp->config.station == FRAD_STATION_CPE) in sdla_deassoc()
611 sdla_cmd(slave, SDLA_DELETE_DLCI, 0, 0, master->dev_addr, sizeof(short), NULL, NULL); in sdla_deassoc()
622 short len, ret; in sdla_dlci_conf() local
627 if (flp->master[i] == master) in sdla_dlci_conf()
631 return -ENODEV; in sdla_dlci_conf()
636 len = sizeof(struct dlci_conf); in sdla_dlci_conf()
639 ret = sdla_cmd(slave, SDLA_READ_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, in sdla_dlci_conf()
640 NULL, 0, &dlp->config, &len); in sdla_dlci_conf()
642 ret = sdla_cmd(slave, SDLA_SET_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, in sdla_dlci_conf()
643 &dlp->config, sizeof(struct dlci_conf) - 4 * sizeof(short), NULL, NULL); in sdla_dlci_conf()
646 return ret == SDLA_RET_OK ? 0 : -EIO; in sdla_dlci_conf()
678 switch (dev->type) in sdla_transmit()
681 if (skb->dev->type != ARPHRD_DLCI) in sdla_transmit()
684 skb->dev->type); in sdla_transmit()
690 dev->type); in sdla_transmit()
697 switch (flp->type) in sdla_transmit()
701 …t = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, skb->data, skb->len, … in sdla_transmit()
705 …ret = sdla_cmd(dev, SDLA_INFORMATION_WRITE, *(short *)(skb->dev->dev_addr), 0, NULL, skb->len, &ad… in sdla_transmit()
711 pbuf = (void *)(dev->mem_start + (addr & SDLA_ADDR_MASK)); in sdla_transmit()
712 __sdla_write(dev, pbuf->buf_addr, skb->data, skb->len); in sdla_transmit()
714 pbuf->opp_flag = 1; in sdla_transmit()
723 dev->stats.tx_packets++; in sdla_transmit()
729 dev->stats.tx_dropped++; in sdla_transmit()
733 dev->stats.tx_errors++; in sdla_transmit()
740 if(flp->master[i]!=NULL) in sdla_transmit()
741 netif_wake_queue(flp->master[i]); in sdla_transmit()
761 short dlci, len, len2, split; in sdla_receive() local
766 len = dlci = 0; in sdla_receive()
775 switch (flp->type) in sdla_receive()
779 cmd = (void *) (dev->mem_start + (SDLA_502_RCV_BUF & SDLA_ADDR_MASK)); in sdla_receive()
781 success = cmd->opp_flag; in sdla_receive()
785 dlci = cmd->dlci; in sdla_receive()
786 len = cmd->length; in sdla_receive()
790 pbufi = (void *) (dev->mem_start + (SDLA_508_RXBUF_INFO & SDLA_ADDR_MASK)); in sdla_receive()
792 …pbuf = (void *) (dev->mem_start + ((pbufi->rse_base + flp->buffer * sizeof(struct buf_entry)) & SD… in sdla_receive()
793 success = pbuf->opp_flag; in sdla_receive()
797 buf_top = pbufi->buf_top; in sdla_receive()
798 buf_base = pbufi->buf_base; in sdla_receive()
799 dlci = pbuf->dlci; in sdla_receive()
800 len = pbuf->length; in sdla_receive()
801 addr = pbuf->buf_addr; in sdla_receive()
809 if (flp->dlci[i] == dlci) in sdla_receive()
816 dev->stats.rx_errors++; in sdla_receive()
823 master = flp->master[i]; in sdla_receive()
824 skb = dev_alloc_skb(len + sizeof(struct frhdr)); in sdla_receive()
828 dev->stats.rx_dropped++; in sdla_receive()
836 switch (flp->type) in sdla_receive()
841 __sdla_read(dev, SDLA_502_RCV_BUF + SDLA_502_DATA_OFS, skb_put(skb,len), len); in sdla_receive()
844 cmd->opp_flag = 0; in sdla_receive()
851 split = addr + len > buf_top + 1 ? len - (buf_top - addr + 1) : 0; in sdla_receive()
852 len2 = len - split; in sdla_receive()
861 flp->buffer = (flp->buffer + 1) % pbufi->rse_num; in sdla_receive()
862 pbuf->opp_flag = 0; in sdla_receive()
868 dev->stats.rx_packets++; in sdla_receive()
870 (*dlp->receive)(skb, master); in sdla_receive()
880 char byte; in sdla_isr() local
886 if (!flp->initialized) in sdla_isr()
888 netdev_warn(dev, "irq %d for uninitialized device\n", dev->irq); in sdla_isr()
892 byte = sdla_byte(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE); in sdla_isr()
893 switch (byte) in sdla_isr()
908 netdev_warn(dev, "invalid irq flag 0x%02X\n", byte); in sdla_isr()
913 if (flp->type == SDLA_S502E) in sdla_isr()
915 flp->state &= ~SDLA_S502E_INTACK; in sdla_isr()
916 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_isr()
917 flp->state |= SDLA_S502E_INTACK; in sdla_isr()
918 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_isr()
921 /* this clears the byte, informing the Z80 we're done */ in sdla_isr()
922 byte = 0; in sdla_isr()
923 …sdla_write(dev, flp->type == SDLA_S508 ? SDLA_508_IRQ_INTERFACE : SDLA_502_IRQ_INTERFACE, &byte, s… in sdla_isr()
930 struct net_device *dev = flp->dev; in sdla_poll()
935 flp->timer.expires = 1; in sdla_poll()
936 add_timer(&flp->timer); in sdla_poll()
943 int len, i; in sdla_close() local
948 len = 0; in sdla_close()
950 if (flp->dlci[i]) in sdla_close()
951 dlcis[len++] = abs(flp->dlci[i]); in sdla_close()
952 len *= 2; in sdla_close()
954 if (flp->config.station == FRAD_STATION_NODE) in sdla_close()
957 if (flp->dlci[i] > 0) in sdla_close()
958 sdla_cmd(dev, SDLA_DEACTIVATE_DLCI, 0, 0, dlcis, len, NULL, NULL); in sdla_close()
959 sdla_cmd(dev, SDLA_DELETE_DLCI, 0, 0, &flp->dlci[i], sizeof(flp->dlci[i]), NULL, NULL); in sdla_close()
964 switch(flp->type) in sdla_close()
967 del_timer(&flp->timer); in sdla_close()
972 flp->state &= ~SDLA_S502E_INTACK; in sdla_close()
973 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_close()
981 flp->state &= ~SDLA_S508_INTEN; in sdla_close()
982 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_close()
1004 int len, i; in sdla_open() local
1005 char byte; in sdla_open() local
1009 if (!flp->initialized) in sdla_open()
1010 return -EPERM; in sdla_open()
1012 if (!flp->configured) in sdla_open()
1013 return -EPERM; in sdla_open()
1016 len = 0; in sdla_open()
1018 if (flp->dlci[i]) in sdla_open()
1019 data.dlci[len++] = abs(flp->dlci[i]); in sdla_open()
1020 len *= 2; in sdla_open()
1022 memcpy(&data.config, &flp->config, sizeof(struct frad_conf)); in sdla_open()
1023 len += sizeof(struct frad_conf); in sdla_open()
1026 sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, 0, 0, &data, len, NULL, NULL); in sdla_open()
1028 if (flp->type == SDLA_S508) in sdla_open()
1029 flp->buffer = 0; in sdla_open()
1035 switch(flp->type) in sdla_open()
1038 flp->timer.expires = 1; in sdla_open()
1039 add_timer(&flp->timer); in sdla_open()
1043 flp->state |= SDLA_S502E_ENABLE; in sdla_open()
1044 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_open()
1045 flp->state |= SDLA_S502E_INTACK; in sdla_open()
1046 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_open()
1047 byte = 0; in sdla_open()
1048 sdla_write(dev, SDLA_502_IRQ_INTERFACE, &byte, sizeof(byte)); in sdla_open()
1057 flp->state |= SDLA_S508_INTEN; in sdla_open()
1058 outb(flp->state, dev->base_addr + SDLA_REG_CONTROL); in sdla_open()
1059 byte = 0; in sdla_open()
1060 sdla_write(dev, SDLA_508_IRQ_INTERFACE, &byte, sizeof(byte)); in sdla_open()
1062 intr.irq = dev->irq; in sdla_open()
1067 if (flp->config.station == FRAD_STATION_CPE) in sdla_open()
1069 byte = SDLA_ICS_STATUS_ENQ; in sdla_open()
1070 sdla_cmd(dev, SDLA_ISSUE_IN_CHANNEL_SIGNAL, 0, 0, &byte, sizeof(byte), NULL, NULL); in sdla_open()
1074 sdla_cmd(dev, SDLA_ADD_DLCI, 0, 0, data.dlci, len - sizeof(struct frad_conf), NULL, NULL); in sdla_open()
1076 if (flp->dlci[i] > 0) in sdla_open()
1077 sdla_cmd(dev, SDLA_ACTIVATE_DLCI, 0, 0, &flp->dlci[i], 2*sizeof(flp->dlci[i]), NULL, NULL); in sdla_open()
1082 if (flp->dlci[i]) in sdla_open()
1084 dlp = netdev_priv(flp->master[i]); in sdla_open()
1085 if (dlp->configured) in sdla_open()
1086 …sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, abs(flp->dlci[i]), 0, &dlp->config, sizeof(struct dlci_… in sdla_open()
1101 if (dev->type == 0xFFFF) in sdla_config()
1102 return -EUNATCH; in sdla_config()
1109 return -EBUSY; in sdla_config()
1112 return -EFAULT; in sdla_config()
1115 return -EINVAL; in sdla_config()
1118 return -EINVAL; in sdla_config()
1121 ((data.config.kbaud > 128) && (flp->type != SDLA_S508))) in sdla_config()
1122 return -EINVAL; in sdla_config()
1125 return -EINVAL; in sdla_config()
1128 return -EINVAL; in sdla_config()
1131 return -EINVAL; in sdla_config()
1134 return -EINVAL; in sdla_config()
1137 return -EINVAL; in sdla_config()
1140 return -EINVAL; in sdla_config()
1143 return -EINVAL; in sdla_config()
1145 memcpy(&flp->config, &data.config, sizeof(struct frad_conf)); in sdla_config()
1146 flp->config.flags |= SDLA_DIRECT_RECV; in sdla_config()
1148 if (flp->type == SDLA_S508) in sdla_config()
1149 flp->config.flags |= SDLA_TX70_RX30; in sdla_config()
1151 if (dev->mtu != flp->config.mtu) in sdla_config()
1154 dev->mtu = flp->config.mtu; in sdla_config()
1156 if (flp->master[i]) in sdla_config()
1157 flp->master[i]->mtu = flp->config.mtu; in sdla_config()
1160 flp->config.mtu += sizeof(struct frhdr); in sdla_config()
1163 if (!flp->configured) in sdla_config()
1166 flp->configured = 1; in sdla_config()
1175 return -EIO; in sdla_config()
1178 if (flp->configured) in sdla_config()
1179 memcpy(&data.config, &flp->config, sizeof(struct frad_conf)); in sdla_config()
1183 memcpy(&flp->config, &data.config, sizeof(struct frad_conf)); in sdla_config()
1185 …data.config.mtu -= data.config.mtu > sizeof(struct frhdr) ? sizeof(struct frhdr) : data.config.mtu; in sdla_config()
1186 return copy_to_user(conf, &data.config, sizeof(struct frad_conf))?-EFAULT:0; in sdla_config()
1198 return -EFAULT; in sdla_xfer()
1202 temp = kzalloc(mem.len, GFP_KERNEL); in sdla_xfer()
1204 return -ENOMEM; in sdla_xfer()
1205 sdla_read(dev, mem.addr, temp, mem.len); in sdla_xfer()
1206 if(copy_to_user(mem.data, temp, mem.len)) in sdla_xfer()
1209 return -EFAULT; in sdla_xfer()
1215 temp = memdup_user(mem.data, mem.len); in sdla_xfer()
1218 sdla_write(dev, mem.addr, temp, mem.len); in sdla_xfer()
1228 int i, len; in sdla_reconfig() local
1232 len = 0; in sdla_reconfig()
1234 if (flp->dlci[i]) in sdla_reconfig()
1235 data.dlci[len++] = flp->dlci[i]; in sdla_reconfig()
1236 len *= 2; in sdla_reconfig()
1238 memcpy(&data, &flp->config, sizeof(struct frad_conf)); in sdla_reconfig()
1239 len += sizeof(struct frad_conf); in sdla_reconfig()
1242 sdla_cmd(dev, SDLA_SET_DLCI_CONFIGURATION, 0, 0, &data, len, NULL, NULL); in sdla_reconfig()
1253 return -EPERM; in sdla_ioctl()
1257 if (!flp->initialized) in sdla_ioctl()
1258 return -EINVAL; in sdla_ioctl()
1264 return sdla_config(dev, ifr->ifr_data, cmd == FRAD_GET_CONF); in sdla_ioctl()
1267 ifr->ifr_flags = flp->type; in sdla_ioctl()
1280 if (flp->configured) in sdla_ioctl()
1281 return -EALREADY; in sdla_ioctl()
1283 switch (ifr->ifr_flags) in sdla_ioctl()
1286 dev->type = ifr->ifr_flags; in sdla_ioctl()
1289 return -ENOPROTOOPT; in sdla_ioctl()
1300 return -EPERM; in sdla_ioctl()
1301 return sdla_xfer(dev, ifr->ifr_data, cmd == SDLA_READMEM); in sdla_ioctl()
1312 return -EOPNOTSUPP; in sdla_ioctl()
1320 return -EBUSY; in sdla_change_mtu()
1323 return -EOPNOTSUPP; in sdla_change_mtu()
1330 char byte; in sdla_set_config() local
1332 int err = -EINVAL; in sdla_set_config()
1336 if (flp->initialized) in sdla_set_config()
1337 return -EINVAL; in sdla_set_config()
1340 if (valid_port[i] == map->base_addr) in sdla_set_config()
1344 return -EINVAL; in sdla_set_config()
1346 if (!request_region(map->base_addr, SDLA_IO_EXTENTS, dev->name)){ in sdla_set_config()
1347 pr_warn("io-port 0x%04lx in use\n", dev->base_addr); in sdla_set_config()
1348 return -EINVAL; in sdla_set_config()
1350 base = map->base_addr; in sdla_set_config()
1354 flp->type = SDLA_UNKNOWN; in sdla_set_config()
1355 flp->state = 0; in sdla_set_config()
1367 flp->type = SDLA_S502E; in sdla_set_config()
1373 for(byte=inb(base),i=0;i<SDLA_IO_EXTENTS;i++) in sdla_set_config()
1374 if (inb(base + i) != byte) in sdla_set_config()
1383 flp->type = SDLA_S507; in sdla_set_config()
1394 flp->type = SDLA_S508; in sdla_set_config()
1406 flp->type = SDLA_S502A; in sdla_set_config()
1413 err = -ENODEV; in sdla_set_config()
1422 if (flp->type != SDLA_S508 && flp->type != SDLA_S507) in sdla_set_config()
1426 switch (map->irq) { in sdla_set_config()
1428 if (flp->type != SDLA_S502E) in sdla_set_config()
1437 if (flp->type != SDLA_S508 && flp->type != SDLA_S507) in sdla_set_config()
1443 if (flp->type == SDLA_S502A) in sdla_set_config()
1451 err = -EAGAIN; in sdla_set_config()
1452 if (request_irq(dev->irq, sdla_isr, 0, dev->name, dev)) in sdla_set_config()
1455 if (flp->type == SDLA_S507) { in sdla_set_config()
1456 switch(dev->irq) { in sdla_set_config()
1458 flp->state = SDLA_S507_IRQ3; in sdla_set_config()
1461 flp->state = SDLA_S507_IRQ4; in sdla_set_config()
1464 flp->state = SDLA_S507_IRQ5; in sdla_set_config()
1467 flp->state = SDLA_S507_IRQ7; in sdla_set_config()
1470 flp->state = SDLA_S507_IRQ10; in sdla_set_config()
1473 flp->state = SDLA_S507_IRQ11; in sdla_set_config()
1476 flp->state = SDLA_S507_IRQ12; in sdla_set_config()
1479 flp->state = SDLA_S507_IRQ15; in sdla_set_config()
1485 if (valid_mem[i] == map->mem_start) in sdla_set_config()
1488 err = -EINVAL; in sdla_set_config()
1492 if (flp->type == SDLA_S502A && (map->mem_start & 0xF000) >> 12 == 0x0E) in sdla_set_config()
1495 if (flp->type != SDLA_S507 && map->mem_start >> 16 == 0x0B) in sdla_set_config()
1498 if (flp->type == SDLA_S507 && map->mem_start >> 16 == 0x0D) in sdla_set_config()
1501 byte = flp->type != SDLA_S508 ? SDLA_8K_WINDOW : 0; in sdla_set_config()
1502 byte |= (map->mem_start & 0xF000) >> (12 + (flp->type == SDLA_S508 ? 1 : 0)); in sdla_set_config()
1503 switch(flp->type) { in sdla_set_config()
1506 switch (map->mem_start >> 16) { in sdla_set_config()
1508 byte |= SDLA_S502_SEG_A; in sdla_set_config()
1511 byte |= SDLA_S502_SEG_C; in sdla_set_config()
1514 byte |= SDLA_S502_SEG_D; in sdla_set_config()
1517 byte |= SDLA_S502_SEG_E; in sdla_set_config()
1522 switch (map->mem_start >> 16) { in sdla_set_config()
1524 byte |= SDLA_S507_SEG_A; in sdla_set_config()
1527 byte |= SDLA_S507_SEG_B; in sdla_set_config()
1530 byte |= SDLA_S507_SEG_C; in sdla_set_config()
1533 byte |= SDLA_S507_SEG_E; in sdla_set_config()
1538 switch (map->mem_start >> 16) { in sdla_set_config()
1540 byte |= SDLA_S508_SEG_A; in sdla_set_config()
1543 byte |= SDLA_S508_SEG_C; in sdla_set_config()
1546 byte |= SDLA_S508_SEG_D; in sdla_set_config()
1549 byte |= SDLA_S508_SEG_E; in sdla_set_config()
1556 outb(byte, base + SDLA_REG_PC_WINDOW); in sdla_set_config()
1558 switch(flp->type) in sdla_set_config()
1561 flp->state = SDLA_S502E_ENABLE; in sdla_set_config()
1564 flp->state |= SDLA_MEMEN; in sdla_set_config()
1567 flp->state = SDLA_MEMEN; in sdla_set_config()
1570 outb(flp->state, base + SDLA_REG_CONTROL); in sdla_set_config()
1572 dev->irq = map->irq; in sdla_set_config()
1573 dev->base_addr = base; in sdla_set_config()
1574 dev->mem_start = map->mem_start; in sdla_set_config()
1575 dev->mem_end = dev->mem_start + 0x2000; in sdla_set_config()
1576 flp->initialized = 1; in sdla_set_config()
1580 free_irq(map->irq, dev); in sdla_set_config()
1601 dev->netdev_ops = &sdla_netdev_ops; in setup_sdla()
1602 dev->flags = 0; in setup_sdla()
1603 dev->type = 0xFFFF; in setup_sdla()
1604 dev->hard_header_len = 0; in setup_sdla()
1605 dev->addr_len = 0; in setup_sdla()
1606 dev->mtu = SDLA_MAX_MTU; in setup_sdla()
1608 flp->activate = sdla_activate; in setup_sdla()
1609 flp->deactivate = sdla_deactivate; in setup_sdla()
1610 flp->assoc = sdla_assoc; in setup_sdla()
1611 flp->deassoc = sdla_deassoc; in setup_sdla()
1612 flp->dlci_conf = sdla_dlci_conf; in setup_sdla()
1613 flp->dev = dev; in setup_sdla()
1615 timer_setup(&flp->timer, sdla_poll, 0); in setup_sdla()
1616 flp->timer.expires = 1; in setup_sdla()
1630 return -ENOMEM; in init_sdla()
1644 if (flp->initialized) { in exit_sdla()
1645 free_irq(sdla->irq, sdla); in exit_sdla()
1646 release_region(sdla->base_addr, SDLA_IO_EXTENTS); in exit_sdla()
1648 del_timer_sync(&flp->timer); in exit_sdla()