cosa 100 drivers/net/wan/cosa.c struct cosa_data *cosa; /* Pointer to the per-card structure */ cosa 247 drivers/net/wan/cosa.c #define is_8bit(cosa) (!(cosa->datareg & 0x08)) cosa 249 drivers/net/wan/cosa.c #define cosa_getstatus(cosa) (cosa_inb(cosa->statusreg)) cosa 250 drivers/net/wan/cosa.c #define cosa_putstatus(cosa, stat) (cosa_outb(stat, cosa->statusreg)) cosa 251 drivers/net/wan/cosa.c #define cosa_getdata16(cosa) (cosa_inw(cosa->datareg)) cosa 252 drivers/net/wan/cosa.c #define cosa_getdata8(cosa) (cosa_inb(cosa->datareg)) cosa 253 drivers/net/wan/cosa.c #define cosa_putdata16(cosa, dt) (cosa_outw(dt, cosa->datareg)) cosa 254 drivers/net/wan/cosa.c #define cosa_putdata8(cosa, dt) (cosa_outb(dt, cosa->datareg)) cosa 263 drivers/net/wan/cosa.c static void cosa_kick(struct cosa_data *cosa); cosa 310 drivers/net/wan/cosa.c static int cosa_start(struct cosa_data *cosa, int address); cosa 311 drivers/net/wan/cosa.c static int cosa_reset(struct cosa_data *cosa); cosa 312 drivers/net/wan/cosa.c static int cosa_download(struct cosa_data *cosa, void __user *a); cosa 313 drivers/net/wan/cosa.c static int cosa_readmem(struct cosa_data *cosa, void __user *a); cosa 316 drivers/net/wan/cosa.c static int download(struct cosa_data *cosa, const char __user *data, int addr, int len); cosa 317 drivers/net/wan/cosa.c static int startmicrocode(struct cosa_data *cosa, int address); cosa 318 drivers/net/wan/cosa.c static int readmem(struct cosa_data *cosa, char __user *data, int addr, int len); cosa 319 drivers/net/wan/cosa.c static int cosa_reset_and_read_id(struct cosa_data *cosa, char *id); cosa 322 drivers/net/wan/cosa.c static int get_wait_data(struct cosa_data *cosa); cosa 323 drivers/net/wan/cosa.c static int put_wait_data(struct cosa_data *cosa, int data); cosa 324 drivers/net/wan/cosa.c static int puthexnumber(struct cosa_data *cosa, int number); cosa 325 drivers/net/wan/cosa.c static void put_driver_status(struct cosa_data *cosa); cosa 326 drivers/net/wan/cosa.c static void put_driver_status_nolock(struct cosa_data *cosa); cosa 329 drivers/net/wan/cosa.c static irqreturn_t cosa_interrupt(int irq, void *cosa); cosa 333 drivers/net/wan/cosa.c static void debug_data_in(struct cosa_data *cosa, int data); cosa 334 drivers/net/wan/cosa.c static void debug_data_out(struct cosa_data *cosa, int data); cosa 335 drivers/net/wan/cosa.c static void debug_data_cmd(struct cosa_data *cosa, int data); cosa 336 drivers/net/wan/cosa.c static void debug_status_in(struct cosa_data *cosa, int status); cosa 337 drivers/net/wan/cosa.c static void debug_status_out(struct cosa_data *cosa, int status); cosa 394 drivers/net/wan/cosa.c struct cosa_data *cosa; cosa 401 drivers/net/wan/cosa.c for (cosa = cosa_cards; nr_cards--; cosa++) { cosa 403 drivers/net/wan/cosa.c for (i = 0; i < cosa->nchannels; i++) { cosa 405 drivers/net/wan/cosa.c unregister_hdlc_device(cosa->chan[i].netdev); cosa 406 drivers/net/wan/cosa.c free_netdev(cosa->chan[i].netdev); cosa 409 drivers/net/wan/cosa.c kfree(cosa->chan); cosa 410 drivers/net/wan/cosa.c kfree(cosa->bouncebuf); cosa 411 drivers/net/wan/cosa.c free_irq(cosa->irq, cosa); cosa 412 drivers/net/wan/cosa.c free_dma(cosa->dma); cosa 413 drivers/net/wan/cosa.c release_region(cosa->datareg, is_8bit(cosa) ? 2 : 4); cosa 429 drivers/net/wan/cosa.c struct cosa_data *cosa = cosa_cards+nr_cards; cosa 432 drivers/net/wan/cosa.c memset(cosa, 0, sizeof(struct cosa_data)); cosa 459 drivers/net/wan/cosa.c cosa->dma = dma; cosa 460 drivers/net/wan/cosa.c cosa->datareg = base; cosa 461 drivers/net/wan/cosa.c cosa->statusreg = is_8bit(cosa)?base+1:base+2; cosa 462 drivers/net/wan/cosa.c spin_lock_init(&cosa->lock); cosa 464 drivers/net/wan/cosa.c if (!request_region(base, is_8bit(cosa)?2:4,"cosa")) cosa 467 drivers/net/wan/cosa.c if (cosa_reset_and_read_id(cosa, cosa->id_string) < 0) { cosa 474 drivers/net/wan/cosa.c if (!strncmp(cosa->id_string, "SRP", 3)) cosa 475 drivers/net/wan/cosa.c cosa->type = "srp"; cosa 476 drivers/net/wan/cosa.c else if (!strncmp(cosa->id_string, "COSA", 4)) cosa 477 drivers/net/wan/cosa.c cosa->type = is_8bit(cosa)? "cosa8": "cosa16"; cosa 487 drivers/net/wan/cosa.c release_region(base, is_8bit(cosa)?2:4); cosa 488 drivers/net/wan/cosa.c if (!request_region(base, is_8bit(cosa)?2:4, cosa->type)) { cosa 505 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_TX_INT_ENA); cosa 509 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 511 drivers/net/wan/cosa.c cosa_getdata8(cosa); cosa 515 drivers/net/wan/cosa.c irq, cosa->datareg); cosa 521 drivers/net/wan/cosa.c cosa->datareg); cosa 526 drivers/net/wan/cosa.c cosa->irq = irq; cosa 527 drivers/net/wan/cosa.c cosa->num = nr_cards; cosa 528 drivers/net/wan/cosa.c cosa->usage = 0; cosa 529 drivers/net/wan/cosa.c cosa->nchannels = 2; /* FIXME: how to determine this? */ cosa 531 drivers/net/wan/cosa.c if (request_irq(cosa->irq, cosa_interrupt, 0, cosa->type, cosa)) { cosa 535 drivers/net/wan/cosa.c if (request_dma(cosa->dma, cosa->type)) { cosa 540 drivers/net/wan/cosa.c cosa->bouncebuf = kmalloc(COSA_MTU, GFP_KERNEL|GFP_DMA); cosa 541 drivers/net/wan/cosa.c if (!cosa->bouncebuf) { cosa 545 drivers/net/wan/cosa.c sprintf(cosa->name, "cosa%d", cosa->num); cosa 548 drivers/net/wan/cosa.c cosa->chan = kcalloc(cosa->nchannels, sizeof(struct channel_data), GFP_KERNEL); cosa 549 drivers/net/wan/cosa.c if (!cosa->chan) { cosa 554 drivers/net/wan/cosa.c for (i = 0; i < cosa->nchannels; i++) { cosa 555 drivers/net/wan/cosa.c struct channel_data *chan = &cosa->chan[i]; cosa 557 drivers/net/wan/cosa.c chan->cosa = cosa; cosa 559 drivers/net/wan/cosa.c sprintf(chan->name, "cosa%dc%d", chan->cosa->num, i); cosa 575 drivers/net/wan/cosa.c chan->netdev->base_addr = chan->cosa->datareg; cosa 576 drivers/net/wan/cosa.c chan->netdev->irq = chan->cosa->irq; cosa 577 drivers/net/wan/cosa.c chan->netdev->dma = chan->cosa->dma; cosa 588 drivers/net/wan/cosa.c cosa->num, cosa->id_string, cosa->type, cosa 589 drivers/net/wan/cosa.c cosa->datareg, cosa->irq, cosa->dma, cosa->nchannels); cosa 595 drivers/net/wan/cosa.c unregister_hdlc_device(cosa->chan[i].netdev); cosa 596 drivers/net/wan/cosa.c free_netdev(cosa->chan[i].netdev); cosa 598 drivers/net/wan/cosa.c kfree(cosa->chan); cosa 600 drivers/net/wan/cosa.c kfree(cosa->bouncebuf); cosa 602 drivers/net/wan/cosa.c free_dma(cosa->dma); cosa 604 drivers/net/wan/cosa.c free_irq(cosa->irq, cosa); cosa 606 drivers/net/wan/cosa.c release_region(cosa->datareg,is_8bit(cosa)?2:4); cosa 607 drivers/net/wan/cosa.c pr_notice("cosa%d: allocating resources failed\n", cosa->num); cosa 628 drivers/net/wan/cosa.c if (!(chan->cosa->firmware_status & COSA_FW_START)) { cosa 630 drivers/net/wan/cosa.c chan->cosa->name, chan->cosa->firmware_status); cosa 633 drivers/net/wan/cosa.c spin_lock_irqsave(&chan->cosa->lock, flags); cosa 637 drivers/net/wan/cosa.c spin_unlock_irqrestore(&chan->cosa->lock, flags); cosa 644 drivers/net/wan/cosa.c chan->cosa->usage++; cosa 645 drivers/net/wan/cosa.c spin_unlock_irqrestore(&chan->cosa->lock, flags); cosa 649 drivers/net/wan/cosa.c spin_lock_irqsave(&chan->cosa->lock, flags); cosa 651 drivers/net/wan/cosa.c chan->cosa->usage--; cosa 652 drivers/net/wan/cosa.c spin_unlock_irqrestore(&chan->cosa->lock, flags); cosa 677 drivers/net/wan/cosa.c if (test_bit(RXBIT, &chan->cosa->rxtx)) { cosa 684 drivers/net/wan/cosa.c cosa_kick(chan->cosa); cosa 700 drivers/net/wan/cosa.c spin_lock_irqsave(&chan->cosa->lock, flags); cosa 710 drivers/net/wan/cosa.c chan->cosa->usage--; cosa 711 drivers/net/wan/cosa.c spin_unlock_irqrestore(&chan->cosa->lock, flags); cosa 744 drivers/net/wan/cosa.c chan->netdev->stats.rx_bytes += chan->cosa->rxsize; cosa 775 drivers/net/wan/cosa.c struct cosa_data *cosa = chan->cosa; cosa 778 drivers/net/wan/cosa.c if (!(cosa->firmware_status & COSA_FW_START)) { cosa 780 drivers/net/wan/cosa.c cosa->name, cosa->firmware_status); cosa 794 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 798 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 800 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 805 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 814 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 849 drivers/net/wan/cosa.c struct cosa_data *cosa = chan->cosa; cosa 853 drivers/net/wan/cosa.c if (!(cosa->firmware_status & COSA_FW_START)) { cosa 855 drivers/net/wan/cosa.c cosa->name, cosa->firmware_status); cosa 878 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 882 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 884 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 890 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 898 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 922 drivers/net/wan/cosa.c struct cosa_data *cosa; cosa 934 drivers/net/wan/cosa.c cosa = cosa_cards+n; cosa 937 drivers/net/wan/cosa.c & ((1<<CARD_MINOR_BITS)-1)) >= cosa->nchannels) { cosa 941 drivers/net/wan/cosa.c chan = cosa->chan + n; cosa 945 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 948 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 952 drivers/net/wan/cosa.c cosa->usage++; cosa 958 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 967 drivers/net/wan/cosa.c struct cosa_data *cosa; cosa 970 drivers/net/wan/cosa.c cosa = channel->cosa; cosa 971 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 972 drivers/net/wan/cosa.c cosa->usage--; cosa 974 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 997 drivers/net/wan/cosa.c static inline int cosa_reset(struct cosa_data *cosa) cosa 1000 drivers/net/wan/cosa.c if (cosa->usage > 1) cosa 1002 drivers/net/wan/cosa.c cosa->num, cosa->usage); cosa 1003 drivers/net/wan/cosa.c cosa->firmware_status &= ~(COSA_FW_RESET|COSA_FW_START); cosa 1004 drivers/net/wan/cosa.c if (cosa_reset_and_read_id(cosa, idstring) < 0) { cosa 1005 drivers/net/wan/cosa.c pr_notice("cosa%d: reset failed\n", cosa->num); cosa 1008 drivers/net/wan/cosa.c pr_info("cosa%d: resetting device: %s\n", cosa->num, idstring); cosa 1009 drivers/net/wan/cosa.c cosa->firmware_status |= COSA_FW_RESET; cosa 1014 drivers/net/wan/cosa.c static inline int cosa_download(struct cosa_data *cosa, void __user *arg) cosa 1019 drivers/net/wan/cosa.c if (cosa->usage > 1) cosa 1021 drivers/net/wan/cosa.c cosa->name, cosa->usage); cosa 1022 drivers/net/wan/cosa.c if (!(cosa->firmware_status & COSA_FW_RESET)) { cosa 1024 drivers/net/wan/cosa.c cosa->name, cosa->firmware_status); cosa 1038 drivers/net/wan/cosa.c cosa->firmware_status &= ~(COSA_FW_RESET|COSA_FW_DOWNLOAD); cosa 1040 drivers/net/wan/cosa.c i = download(cosa, d.code, d.len, d.addr); cosa 1043 drivers/net/wan/cosa.c cosa->num, i); cosa 1047 drivers/net/wan/cosa.c cosa->num, d.len, d.addr); cosa 1048 drivers/net/wan/cosa.c cosa->firmware_status |= COSA_FW_RESET|COSA_FW_DOWNLOAD; cosa 1053 drivers/net/wan/cosa.c static inline int cosa_readmem(struct cosa_data *cosa, void __user *arg) cosa 1058 drivers/net/wan/cosa.c if (cosa->usage > 1) cosa 1060 drivers/net/wan/cosa.c cosa->num, cosa->usage); cosa 1061 drivers/net/wan/cosa.c if (!(cosa->firmware_status & COSA_FW_RESET)) { cosa 1063 drivers/net/wan/cosa.c cosa->name, cosa->firmware_status); cosa 1071 drivers/net/wan/cosa.c cosa->firmware_status &= ~COSA_FW_RESET; cosa 1073 drivers/net/wan/cosa.c i = readmem(cosa, d.code, d.len, d.addr); cosa 1075 drivers/net/wan/cosa.c pr_notice("cosa%d: reading memory failed: %d\n", cosa->num, i); cosa 1079 drivers/net/wan/cosa.c cosa->num, d.len, d.addr); cosa 1080 drivers/net/wan/cosa.c cosa->firmware_status |= COSA_FW_RESET; cosa 1085 drivers/net/wan/cosa.c static inline int cosa_start(struct cosa_data *cosa, int address) cosa 1089 drivers/net/wan/cosa.c if (cosa->usage > 1) cosa 1091 drivers/net/wan/cosa.c cosa->num, cosa->usage); cosa 1093 drivers/net/wan/cosa.c if ((cosa->firmware_status & (COSA_FW_RESET|COSA_FW_DOWNLOAD)) cosa 1096 drivers/net/wan/cosa.c cosa->name, cosa->firmware_status); cosa 1099 drivers/net/wan/cosa.c cosa->firmware_status &= ~COSA_FW_RESET; cosa 1100 drivers/net/wan/cosa.c if ((i=startmicrocode(cosa, address)) < 0) { cosa 1102 drivers/net/wan/cosa.c cosa->num, address, i); cosa 1105 drivers/net/wan/cosa.c pr_info("cosa%d: starting microcode at 0x%04x\n", cosa->num, address); cosa 1106 drivers/net/wan/cosa.c cosa->startaddr = address; cosa 1107 drivers/net/wan/cosa.c cosa->firmware_status |= COSA_FW_START; cosa 1112 drivers/net/wan/cosa.c static inline int cosa_getidstr(struct cosa_data *cosa, char __user *string) cosa 1114 drivers/net/wan/cosa.c int l = strlen(cosa->id_string)+1; cosa 1115 drivers/net/wan/cosa.c if (copy_to_user(string, cosa->id_string, l)) cosa 1121 drivers/net/wan/cosa.c static inline int cosa_gettype(struct cosa_data *cosa, char __user *string) cosa 1123 drivers/net/wan/cosa.c int l = strlen(cosa->type)+1; cosa 1124 drivers/net/wan/cosa.c if (copy_to_user(string, cosa->type, l)) cosa 1129 drivers/net/wan/cosa.c static int cosa_ioctl_common(struct cosa_data *cosa, cosa 1137 drivers/net/wan/cosa.c return cosa_reset(cosa); cosa 1141 drivers/net/wan/cosa.c return cosa_start(cosa, arg); cosa 1146 drivers/net/wan/cosa.c return cosa_download(cosa, argp); cosa 1150 drivers/net/wan/cosa.c return cosa_readmem(cosa, argp); cosa 1152 drivers/net/wan/cosa.c return cosa_gettype(cosa, argp); cosa 1154 drivers/net/wan/cosa.c return cosa_getidstr(cosa, argp); cosa 1158 drivers/net/wan/cosa.c return cosa->nchannels; cosa 1162 drivers/net/wan/cosa.c if (is_8bit(cosa)) cosa 1166 drivers/net/wan/cosa.c cosa->busmaster = arg; cosa 1169 drivers/net/wan/cosa.c return cosa->busmaster; cosa 1178 drivers/net/wan/cosa.c rv = cosa_ioctl_common(chan->cosa, chan, cmd, cosa 1189 drivers/net/wan/cosa.c struct cosa_data *cosa; cosa 1193 drivers/net/wan/cosa.c cosa = channel->cosa; cosa 1194 drivers/net/wan/cosa.c ret = cosa_ioctl_common(cosa, channel, cmd, arg); cosa 1208 drivers/net/wan/cosa.c struct cosa_data *cosa = chan->cosa; cosa 1210 drivers/net/wan/cosa.c if (!test_and_set_bit(chan->num, &cosa->rxbitmap)) cosa 1211 drivers/net/wan/cosa.c put_driver_status(cosa); cosa 1216 drivers/net/wan/cosa.c struct cosa_data *cosa = chan->cosa; cosa 1218 drivers/net/wan/cosa.c if (test_and_clear_bit(chan->num, &cosa->rxbitmap)) cosa 1219 drivers/net/wan/cosa.c put_driver_status(cosa); cosa 1230 drivers/net/wan/cosa.c struct cosa_data *cosa = chan->cosa; cosa 1236 drivers/net/wan/cosa.c chan->cosa->num, chan->num, len); cosa 1241 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1246 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1249 drivers/net/wan/cosa.c set_bit(chan->num, &cosa->txbitmap); cosa 1250 drivers/net/wan/cosa.c put_driver_status(cosa); cosa 1255 drivers/net/wan/cosa.c static void put_driver_status(struct cosa_data *cosa) cosa 1260 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1262 drivers/net/wan/cosa.c status = (cosa->rxbitmap ? DRIVER_RX_READY : 0) cosa 1263 drivers/net/wan/cosa.c | (cosa->txbitmap ? DRIVER_TX_READY : 0) cosa 1264 drivers/net/wan/cosa.c | (cosa->txbitmap? ~(cosa->txbitmap<<DRIVER_TXMAP_SHIFT) cosa 1266 drivers/net/wan/cosa.c if (!cosa->rxtx) { cosa 1267 drivers/net/wan/cosa.c if (cosa->rxbitmap|cosa->txbitmap) { cosa 1268 drivers/net/wan/cosa.c if (!cosa->enabled) { cosa 1269 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_RX_INT_ENA); cosa 1271 drivers/net/wan/cosa.c debug_status_out(cosa, SR_RX_INT_ENA); cosa 1273 drivers/net/wan/cosa.c cosa->enabled = 1; cosa 1275 drivers/net/wan/cosa.c } else if (cosa->enabled) { cosa 1276 drivers/net/wan/cosa.c cosa->enabled = 0; cosa 1277 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1279 drivers/net/wan/cosa.c debug_status_out(cosa, 0); cosa 1282 drivers/net/wan/cosa.c cosa_putdata8(cosa, status); cosa 1284 drivers/net/wan/cosa.c debug_data_cmd(cosa, status); cosa 1287 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1290 drivers/net/wan/cosa.c static void put_driver_status_nolock(struct cosa_data *cosa) cosa 1294 drivers/net/wan/cosa.c status = (cosa->rxbitmap ? DRIVER_RX_READY : 0) cosa 1295 drivers/net/wan/cosa.c | (cosa->txbitmap ? DRIVER_TX_READY : 0) cosa 1296 drivers/net/wan/cosa.c | (cosa->txbitmap? ~(cosa->txbitmap<<DRIVER_TXMAP_SHIFT) cosa 1299 drivers/net/wan/cosa.c if (cosa->rxbitmap|cosa->txbitmap) { cosa 1300 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_RX_INT_ENA); cosa 1302 drivers/net/wan/cosa.c debug_status_out(cosa, SR_RX_INT_ENA); cosa 1304 drivers/net/wan/cosa.c cosa->enabled = 1; cosa 1306 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1308 drivers/net/wan/cosa.c debug_status_out(cosa, 0); cosa 1310 drivers/net/wan/cosa.c cosa->enabled = 0; cosa 1312 drivers/net/wan/cosa.c cosa_putdata8(cosa, status); cosa 1314 drivers/net/wan/cosa.c debug_data_cmd(cosa, status); cosa 1323 drivers/net/wan/cosa.c static void cosa_kick(struct cosa_data *cosa) cosa 1328 drivers/net/wan/cosa.c if (test_bit(RXBIT, &cosa->rxtx)) cosa 1330 drivers/net/wan/cosa.c if (test_bit(TXBIT, &cosa->rxtx)) cosa 1333 drivers/net/wan/cosa.c pr_info("%s: %s timeout - restarting\n", cosa->name, s); cosa 1334 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1335 drivers/net/wan/cosa.c cosa->rxtx = 0; cosa 1338 drivers/net/wan/cosa.c disable_dma(cosa->dma); cosa 1339 drivers/net/wan/cosa.c clear_dma_ff(cosa->dma); cosa 1344 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1346 drivers/net/wan/cosa.c (void) cosa_getdata8(cosa); cosa 1348 drivers/net/wan/cosa.c cosa_putdata8(cosa, 0); cosa 1350 drivers/net/wan/cosa.c put_driver_status_nolock(cosa); cosa 1351 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1385 drivers/net/wan/cosa.c static int download(struct cosa_data *cosa, const char __user *microcode, int length, int address) cosa 1389 drivers/net/wan/cosa.c if (put_wait_data(cosa, 'w') == -1) return -1; cosa 1390 drivers/net/wan/cosa.c if ((i=get_wait_data(cosa)) != 'w') { printk("dnld: 0x%04x\n",i); return -2;} cosa 1391 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '=') return -3; cosa 1393 drivers/net/wan/cosa.c if (puthexnumber(cosa, address) < 0) return -4; cosa 1394 drivers/net/wan/cosa.c if (put_wait_data(cosa, ' ') == -1) return -10; cosa 1395 drivers/net/wan/cosa.c if (get_wait_data(cosa) != ' ') return -11; cosa 1396 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '=') return -12; cosa 1398 drivers/net/wan/cosa.c if (puthexnumber(cosa, address+length-1) < 0) return -13; cosa 1399 drivers/net/wan/cosa.c if (put_wait_data(cosa, ' ') == -1) return -18; cosa 1400 drivers/net/wan/cosa.c if (get_wait_data(cosa) != ' ') return -19; cosa 1410 drivers/net/wan/cosa.c if (put_wait_data(cosa, c) == -1) cosa 1415 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\r') return -21; cosa 1416 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\n') return -22; cosa 1417 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '.') return -23; cosa 1419 drivers/net/wan/cosa.c printk(KERN_DEBUG "cosa%d: download completed.\n", cosa->num); cosa 1430 drivers/net/wan/cosa.c static int startmicrocode(struct cosa_data *cosa, int address) cosa 1432 drivers/net/wan/cosa.c if (put_wait_data(cosa, 'g') == -1) return -1; cosa 1433 drivers/net/wan/cosa.c if (get_wait_data(cosa) != 'g') return -2; cosa 1434 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '=') return -3; cosa 1436 drivers/net/wan/cosa.c if (puthexnumber(cosa, address) < 0) return -4; cosa 1437 drivers/net/wan/cosa.c if (put_wait_data(cosa, '\r') == -1) return -5; cosa 1439 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\r') return -6; cosa 1440 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\r') return -7; cosa 1441 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\n') return -8; cosa 1442 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\r') return -9; cosa 1443 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\n') return -10; cosa 1445 drivers/net/wan/cosa.c printk(KERN_DEBUG "cosa%d: microcode started\n", cosa->num); cosa 1459 drivers/net/wan/cosa.c static int readmem(struct cosa_data *cosa, char __user *microcode, int length, int address) cosa 1461 drivers/net/wan/cosa.c if (put_wait_data(cosa, 'r') == -1) return -1; cosa 1462 drivers/net/wan/cosa.c if ((get_wait_data(cosa)) != 'r') return -2; cosa 1463 drivers/net/wan/cosa.c if ((get_wait_data(cosa)) != '=') return -3; cosa 1465 drivers/net/wan/cosa.c if (puthexnumber(cosa, address) < 0) return -4; cosa 1466 drivers/net/wan/cosa.c if (put_wait_data(cosa, ' ') == -1) return -5; cosa 1467 drivers/net/wan/cosa.c if (get_wait_data(cosa) != ' ') return -6; cosa 1468 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '=') return -7; cosa 1470 drivers/net/wan/cosa.c if (puthexnumber(cosa, address+length-1) < 0) return -8; cosa 1471 drivers/net/wan/cosa.c if (put_wait_data(cosa, ' ') == -1) return -9; cosa 1472 drivers/net/wan/cosa.c if (get_wait_data(cosa) != ' ') return -10; cosa 1477 drivers/net/wan/cosa.c if ((i=get_wait_data(cosa)) == -1) { cosa 1491 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\r') return -21; cosa 1492 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '\n') return -22; cosa 1493 drivers/net/wan/cosa.c if (get_wait_data(cosa) != '.') return -23; cosa 1495 drivers/net/wan/cosa.c printk(KERN_DEBUG "cosa%d: readmem completed.\n", cosa->num); cosa 1504 drivers/net/wan/cosa.c static int cosa_reset_and_read_id(struct cosa_data *cosa, char *idstring) cosa 1509 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1510 drivers/net/wan/cosa.c cosa_getdata8(cosa); cosa 1511 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_RST); cosa 1514 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1525 drivers/net/wan/cosa.c if ((curr = get_wait_data(cosa)) == -1) { cosa 1547 drivers/net/wan/cosa.c static int get_wait_data(struct cosa_data *cosa) cosa 1553 drivers/net/wan/cosa.c if (cosa_getstatus(cosa) & SR_RX_RDY) { cosa 1555 drivers/net/wan/cosa.c r = cosa_getdata8(cosa); cosa 1566 drivers/net/wan/cosa.c cosa_getstatus(cosa)); cosa 1575 drivers/net/wan/cosa.c static int put_wait_data(struct cosa_data *cosa, int data) cosa 1580 drivers/net/wan/cosa.c if (cosa_getstatus(cosa) & SR_TX_RDY) { cosa 1581 drivers/net/wan/cosa.c cosa_putdata8(cosa, data); cosa 1593 drivers/net/wan/cosa.c cosa->num, cosa_getstatus(cosa)); cosa 1603 drivers/net/wan/cosa.c static int puthexnumber(struct cosa_data *cosa, int number) cosa 1611 drivers/net/wan/cosa.c if (put_wait_data(cosa, temp[i]) == -1) { cosa 1613 drivers/net/wan/cosa.c cosa->num, i); cosa 1616 drivers/net/wan/cosa.c if (get_wait_data(cosa) != temp[i]) { cosa 1618 drivers/net/wan/cosa.c cosa->num, i); cosa 1659 drivers/net/wan/cosa.c static inline void tx_interrupt(struct cosa_data *cosa, int status) cosa 1663 drivers/net/wan/cosa.c pr_info("cosa%d: SR_DOWN_REQUEST status=0x%04x\n", cosa->num, status); cosa 1665 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1666 drivers/net/wan/cosa.c set_bit(TXBIT, &cosa->rxtx); cosa 1667 drivers/net/wan/cosa.c if (!test_bit(IRQBIT, &cosa->rxtx)) { cosa 1670 drivers/net/wan/cosa.c if (!cosa->txbitmap) { cosa 1672 drivers/net/wan/cosa.c cosa->name); cosa 1673 drivers/net/wan/cosa.c put_driver_status_nolock(cosa); cosa 1674 drivers/net/wan/cosa.c clear_bit(TXBIT, &cosa->rxtx); cosa 1675 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1679 drivers/net/wan/cosa.c cosa->txchan++; cosa 1681 drivers/net/wan/cosa.c if (cosa->txchan >= cosa->nchannels) cosa 1682 drivers/net/wan/cosa.c cosa->txchan = 0; cosa 1683 drivers/net/wan/cosa.c if (!(cosa->txbitmap & (1<<cosa->txchan))) cosa 1685 drivers/net/wan/cosa.c if (~status & (1 << (cosa->txchan+DRIVER_TXMAP_SHIFT))) cosa 1688 drivers/net/wan/cosa.c if (i > cosa->nchannels) { cosa 1693 drivers/net/wan/cosa.c cosa->name, cosa->txchan); cosa 1699 drivers/net/wan/cosa.c cosa->txsize = cosa->chan[cosa->txchan].txsize; cosa 1700 drivers/net/wan/cosa.c if (cosa_dma_able(cosa->chan+cosa->txchan, cosa 1701 drivers/net/wan/cosa.c cosa->chan[cosa->txchan].txbuf, cosa->txsize)) { cosa 1702 drivers/net/wan/cosa.c cosa->txbuf = cosa->chan[cosa->txchan].txbuf; cosa 1704 drivers/net/wan/cosa.c memcpy(cosa->bouncebuf, cosa->chan[cosa->txchan].txbuf, cosa 1705 drivers/net/wan/cosa.c cosa->txsize); cosa 1706 drivers/net/wan/cosa.c cosa->txbuf = cosa->bouncebuf; cosa 1710 drivers/net/wan/cosa.c if (is_8bit(cosa)) { cosa 1711 drivers/net/wan/cosa.c if (!test_bit(IRQBIT, &cosa->rxtx)) { cosa 1712 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_TX_INT_ENA); cosa 1713 drivers/net/wan/cosa.c cosa_putdata8(cosa, ((cosa->txchan << 5) & 0xe0)| cosa 1714 drivers/net/wan/cosa.c ((cosa->txsize >> 8) & 0x1f)); cosa 1716 drivers/net/wan/cosa.c debug_status_out(cosa, SR_TX_INT_ENA); cosa 1717 drivers/net/wan/cosa.c debug_data_out(cosa, ((cosa->txchan << 5) & 0xe0)| cosa 1718 drivers/net/wan/cosa.c ((cosa->txsize >> 8) & 0x1f)); cosa 1719 drivers/net/wan/cosa.c debug_data_in(cosa, cosa_getdata8(cosa)); cosa 1721 drivers/net/wan/cosa.c cosa_getdata8(cosa); cosa 1723 drivers/net/wan/cosa.c set_bit(IRQBIT, &cosa->rxtx); cosa 1724 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1727 drivers/net/wan/cosa.c clear_bit(IRQBIT, &cosa->rxtx); cosa 1728 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1729 drivers/net/wan/cosa.c cosa_putdata8(cosa, cosa->txsize&0xff); cosa 1731 drivers/net/wan/cosa.c debug_status_out(cosa, 0); cosa 1732 drivers/net/wan/cosa.c debug_data_out(cosa, cosa->txsize&0xff); cosa 1736 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_TX_INT_ENA); cosa 1737 drivers/net/wan/cosa.c cosa_putdata16(cosa, ((cosa->txchan<<13) & 0xe000) cosa 1738 drivers/net/wan/cosa.c | (cosa->txsize & 0x1fff)); cosa 1740 drivers/net/wan/cosa.c debug_status_out(cosa, SR_TX_INT_ENA); cosa 1741 drivers/net/wan/cosa.c debug_data_out(cosa, ((cosa->txchan<<13) & 0xe000) cosa 1742 drivers/net/wan/cosa.c | (cosa->txsize & 0x1fff)); cosa 1743 drivers/net/wan/cosa.c debug_data_in(cosa, cosa_getdata8(cosa)); cosa 1744 drivers/net/wan/cosa.c debug_status_out(cosa, 0); cosa 1746 drivers/net/wan/cosa.c cosa_getdata8(cosa); cosa 1748 drivers/net/wan/cosa.c cosa_putstatus(cosa, 0); cosa 1751 drivers/net/wan/cosa.c if (cosa->busmaster) { cosa 1752 drivers/net/wan/cosa.c unsigned long addr = virt_to_bus(cosa->txbuf); cosa 1755 drivers/net/wan/cosa.c while (!(cosa_getstatus(cosa)&SR_TX_RDY)) { cosa 1760 drivers/net/wan/cosa.c pr_info("status %x\n", cosa_getstatus(cosa)); cosa 1762 drivers/net/wan/cosa.c cosa_putdata16(cosa, (addr >> 16)&0xffff); cosa 1765 drivers/net/wan/cosa.c while (!(cosa_getstatus(cosa)&SR_TX_RDY)) { cosa 1771 drivers/net/wan/cosa.c cosa_putdata16(cosa, addr &0xffff); cosa 1773 drivers/net/wan/cosa.c set_dma_mode(cosa->dma, DMA_MODE_CASCADE); cosa 1774 drivers/net/wan/cosa.c enable_dma(cosa->dma); cosa 1779 drivers/net/wan/cosa.c disable_dma(cosa->dma); cosa 1780 drivers/net/wan/cosa.c clear_dma_ff(cosa->dma); cosa 1781 drivers/net/wan/cosa.c set_dma_mode(cosa->dma, DMA_MODE_WRITE); cosa 1782 drivers/net/wan/cosa.c set_dma_addr(cosa->dma, virt_to_bus(cosa->txbuf)); cosa 1783 drivers/net/wan/cosa.c set_dma_count(cosa->dma, cosa->txsize); cosa 1784 drivers/net/wan/cosa.c enable_dma(cosa->dma); cosa 1787 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_TX_DMA_ENA|SR_USR_INT_ENA); cosa 1789 drivers/net/wan/cosa.c debug_status_out(cosa, SR_TX_DMA_ENA|SR_USR_INT_ENA); cosa 1791 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1794 drivers/net/wan/cosa.c static inline void rx_interrupt(struct cosa_data *cosa, int status) cosa 1798 drivers/net/wan/cosa.c pr_info("cosa%d: SR_UP_REQUEST\n", cosa->num); cosa 1801 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1802 drivers/net/wan/cosa.c set_bit(RXBIT, &cosa->rxtx); cosa 1804 drivers/net/wan/cosa.c if (is_8bit(cosa)) { cosa 1805 drivers/net/wan/cosa.c if (!test_bit(IRQBIT, &cosa->rxtx)) { cosa 1806 drivers/net/wan/cosa.c set_bit(IRQBIT, &cosa->rxtx); cosa 1807 drivers/net/wan/cosa.c put_driver_status_nolock(cosa); cosa 1808 drivers/net/wan/cosa.c cosa->rxsize = cosa_getdata8(cosa) <<8; cosa 1810 drivers/net/wan/cosa.c debug_data_in(cosa, cosa->rxsize >> 8); cosa 1812 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1815 drivers/net/wan/cosa.c clear_bit(IRQBIT, &cosa->rxtx); cosa 1816 drivers/net/wan/cosa.c cosa->rxsize |= cosa_getdata8(cosa) & 0xff; cosa 1818 drivers/net/wan/cosa.c debug_data_in(cosa, cosa->rxsize & 0xff); cosa 1822 drivers/net/wan/cosa.c cosa->num, cosa->rxsize); cosa 1826 drivers/net/wan/cosa.c cosa->rxsize = cosa_getdata16(cosa); cosa 1828 drivers/net/wan/cosa.c debug_data_in(cosa, cosa->rxsize); cosa 1832 drivers/net/wan/cosa.c cosa->num, cosa->rxsize); cosa 1835 drivers/net/wan/cosa.c if (((cosa->rxsize & 0xe000) >> 13) >= cosa->nchannels) { cosa 1837 drivers/net/wan/cosa.c cosa->name, cosa->rxsize); cosa 1838 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1841 drivers/net/wan/cosa.c cosa->rxchan = cosa->chan + ((cosa->rxsize & 0xe000) >> 13); cosa 1842 drivers/net/wan/cosa.c cosa->rxsize &= 0x1fff; cosa 1843 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1845 drivers/net/wan/cosa.c cosa->rxbuf = NULL; cosa 1846 drivers/net/wan/cosa.c if (cosa->rxchan->setup_rx) cosa 1847 drivers/net/wan/cosa.c cosa->rxbuf = cosa->rxchan->setup_rx(cosa->rxchan, cosa->rxsize); cosa 1849 drivers/net/wan/cosa.c if (!cosa->rxbuf) { cosa 1852 drivers/net/wan/cosa.c cosa->num, cosa->rxchan->num); cosa 1853 drivers/net/wan/cosa.c cosa->rxbuf = cosa->bouncebuf; cosa 1858 drivers/net/wan/cosa.c disable_dma(cosa->dma); cosa 1859 drivers/net/wan/cosa.c clear_dma_ff(cosa->dma); cosa 1860 drivers/net/wan/cosa.c set_dma_mode(cosa->dma, DMA_MODE_READ); cosa 1861 drivers/net/wan/cosa.c if (cosa_dma_able(cosa->rxchan, cosa->rxbuf, cosa->rxsize & 0x1fff)) { cosa 1862 drivers/net/wan/cosa.c set_dma_addr(cosa->dma, virt_to_bus(cosa->rxbuf)); cosa 1864 drivers/net/wan/cosa.c set_dma_addr(cosa->dma, virt_to_bus(cosa->bouncebuf)); cosa 1866 drivers/net/wan/cosa.c set_dma_count(cosa->dma, (cosa->rxsize&0x1fff)); cosa 1867 drivers/net/wan/cosa.c enable_dma(cosa->dma); cosa 1869 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1870 drivers/net/wan/cosa.c cosa_putstatus(cosa, SR_RX_DMA_ENA|SR_USR_INT_ENA); cosa 1871 drivers/net/wan/cosa.c if (!is_8bit(cosa) && (status & SR_TX_RDY)) cosa 1872 drivers/net/wan/cosa.c cosa_putdata8(cosa, DRIVER_RX_READY); cosa 1874 drivers/net/wan/cosa.c debug_status_out(cosa, SR_RX_DMA_ENA|SR_USR_INT_ENA); cosa 1875 drivers/net/wan/cosa.c if (!is_8bit(cosa) && (status & SR_TX_RDY)) cosa 1876 drivers/net/wan/cosa.c debug_data_cmd(cosa, DRIVER_RX_READY); cosa 1878 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1881 drivers/net/wan/cosa.c static inline void eot_interrupt(struct cosa_data *cosa, int status) cosa 1884 drivers/net/wan/cosa.c spin_lock_irqsave(&cosa->lock, flags); cosa 1886 drivers/net/wan/cosa.c disable_dma(cosa->dma); cosa 1887 drivers/net/wan/cosa.c clear_dma_ff(cosa->dma); cosa 1889 drivers/net/wan/cosa.c if (test_bit(TXBIT, &cosa->rxtx)) { cosa 1890 drivers/net/wan/cosa.c struct channel_data *chan = cosa->chan+cosa->txchan; cosa 1892 drivers/net/wan/cosa.c if (chan->tx_done(chan, cosa->txsize)) cosa 1893 drivers/net/wan/cosa.c clear_bit(chan->num, &cosa->txbitmap); cosa 1894 drivers/net/wan/cosa.c } else if (test_bit(RXBIT, &cosa->rxtx)) { cosa 1899 drivers/net/wan/cosa.c cosa->num, cosa->rxchan->num, cosa->rxsize); cosa 1900 drivers/net/wan/cosa.c for (i=0; i<cosa->rxsize; i++) cosa 1901 drivers/net/wan/cosa.c pr_cont(" %02x", cosa->rxbuf[i]&0xff); cosa 1906 drivers/net/wan/cosa.c if (cosa->rxbuf == cosa->bouncebuf) cosa 1908 drivers/net/wan/cosa.c if (!cosa_dma_able(cosa->rxchan, cosa->rxbuf, cosa->rxsize)) cosa 1909 drivers/net/wan/cosa.c memcpy(cosa->rxbuf, cosa->bouncebuf, cosa->rxsize); cosa 1910 drivers/net/wan/cosa.c if (cosa->rxchan->rx_done) cosa 1911 drivers/net/wan/cosa.c if (cosa->rxchan->rx_done(cosa->rxchan)) cosa 1912 drivers/net/wan/cosa.c clear_bit(cosa->rxchan->num, &cosa->rxbitmap); cosa 1914 drivers/net/wan/cosa.c pr_notice("cosa%d: unexpected EOT interrupt\n", cosa->num); cosa 1923 drivers/net/wan/cosa.c cosa->rxtx = 0; cosa 1924 drivers/net/wan/cosa.c put_driver_status_nolock(cosa); cosa 1925 drivers/net/wan/cosa.c spin_unlock_irqrestore(&cosa->lock, flags); cosa 1932 drivers/net/wan/cosa.c struct cosa_data *cosa = cosa_; cosa 1934 drivers/net/wan/cosa.c status = cosa_getstatus(cosa); cosa 1936 drivers/net/wan/cosa.c pr_info("cosa%d: got IRQ, status 0x%02x\n", cosa->num, status & 0xff); cosa 1939 drivers/net/wan/cosa.c debug_status_in(cosa, status); cosa 1943 drivers/net/wan/cosa.c tx_interrupt(cosa, status); cosa 1946 drivers/net/wan/cosa.c rx_interrupt(cosa, status); cosa 1949 drivers/net/wan/cosa.c eot_interrupt(cosa, status); cosa 1958 drivers/net/wan/cosa.c cosa->num, status & 0xff, count); cosa 1963 drivers/net/wan/cosa.c cosa->name, count); cosa 1965 drivers/net/wan/cosa.c pr_info("%s: returning from IRQ\n", cosa->name); cosa 1979 drivers/net/wan/cosa.c static void debug_status_in(struct cosa_data *cosa, int status) cosa 1997 drivers/net/wan/cosa.c cosa->name, cosa 2005 drivers/net/wan/cosa.c static void debug_status_out(struct cosa_data *cosa, int status) cosa 2008 drivers/net/wan/cosa.c cosa->name, cosa 2018 drivers/net/wan/cosa.c static void debug_data_in(struct cosa_data *cosa, int data) cosa 2020 drivers/net/wan/cosa.c pr_info("%s: IO: data -> 0x%04x\n", cosa->name, data); cosa 2023 drivers/net/wan/cosa.c static void debug_data_out(struct cosa_data *cosa, int data) cosa 2025 drivers/net/wan/cosa.c pr_info("%s: IO: data <- 0x%04x\n", cosa->name, data); cosa 2028 drivers/net/wan/cosa.c static void debug_data_cmd(struct cosa_data *cosa, int data) cosa 2031 drivers/net/wan/cosa.c cosa->name, data,