• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/drivers/usb/atm/

Lines Matching refs:sc

231 #define IS_OPERATIONAL(sc) \
232 (GET_STATUS(sc->stats.phy.state) == 2)
390 if (sc->usbatm->atm_dev) \
391 sc->usbatm->atm_dev->type = val; \
594 static int uea_idma_write(struct uea_softc *sc, void *data, u32 size)
602 uea_err(INS_TO_USBDEV(sc), "can't allocate xfer_buff\n");
606 ret = usb_bulk_msg(sc->usb_dev,
607 usb_sndbulkpipe(sc->usb_dev, UEA_IDMA_PIPE),
614 uea_err(INS_TO_USBDEV(sc), "size != bytes_read %d %d\n", size,
622 static int request_dsp(struct uea_softc *sc)
627 if (UEA_CHIP_VERSION(sc) == ADI930) {
628 if (IS_ISDN(sc->usb_dev))
633 if (IS_ISDN(sc->usb_dev))
639 ret = request_firmware(&sc->dsp_firm, dsp_name, &sc->usb_dev->dev);
641 uea_err(INS_TO_USBDEV(sc),
647 if (check_dsp(sc->dsp_firm->data, sc->dsp_firm->size)) {
648 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n",
650 release_firmware(sc->dsp_firm);
651 sc->dsp_firm = NULL;
663 struct uea_softc *sc = container_of(work, struct uea_softc, task);
664 u16 pageno = sc->pageno;
665 u16 ovl = sc->ovl;
675 if (ovl == 0 && pageno == 0 && sc->dsp_firm) {
676 release_firmware(sc->dsp_firm);
677 sc->dsp_firm = NULL;
680 if (sc->dsp_firm == NULL && request_dsp(sc) < 0)
683 p = sc->dsp_firm->data;
696 p = sc->dsp_firm->data + pageoffset;
700 uea_dbg(INS_TO_USBDEV(sc),
719 if (uea_idma_write(sc, &bi, BLOCK_INFO_SIZE))
723 if (uea_idma_write(sc, p, blocksize))
732 uea_err(INS_TO_USBDEV(sc), "sending DSP block %u failed\n", i);
735 uea_err(INS_TO_USBDEV(sc), "invalid DSP page %u requested\n", pageno);
738 static inline void wake_up_cmv_ack(struct uea_softc *sc)
740 BUG_ON(sc->cmv_ack);
741 sc->cmv_ack = 1;
742 wake_up(&sc->cmv_ack_wait);
745 static inline int wait_cmv_ack(struct uea_softc *sc)
747 int ret = wait_event_interruptible_timeout(sc->cmv_ack_wait,
748 sc->cmv_ack, ACK_TIMEOUT);
749 sc->cmv_ack = 0;
751 uea_dbg(INS_TO_USBDEV(sc), "wait_event_timeout : %d ms\n",
762 static int uea_request(struct uea_softc *sc,
770 uea_err(INS_TO_USBDEV(sc), "can't allocate xfer_buff\n");
774 ret = usb_control_msg(sc->usb_dev, usb_sndctrlpipe(sc->usb_dev, 0),
781 uea_err(INS_TO_USBDEV(sc), "usb_control_msg error %d\n", ret);
786 uea_err(INS_TO_USBDEV(sc),
795 static int uea_cmv(struct uea_softc *sc,
801 uea_enters(INS_TO_USBDEV(sc));
802 uea_vdbg(INS_TO_USBDEV(sc), "Function : %d-%d, Address : %c%c%c%c, "
808 sc->cmv_function = function | 0x2;
809 sc->cmv_idx++;
810 sc->cmv_address = address;
811 sc->cmv_offset = offset;
816 cmv.wIndex = cpu_to_le16(sc->cmv_idx);
821 ret = uea_request(sc, UEA_SET_BLOCK, UEA_MPTX_START, CMV_SIZE, &cmv);
824 ret = wait_cmv_ack(sc);
825 uea_leaves(INS_TO_USBDEV(sc));
829 static inline int uea_read_cmv(struct uea_softc *sc,
832 int ret = uea_cmv(sc, MAKEFUNCTION(MEMACCESS, REQUESTREAD),
835 uea_err(INS_TO_USBDEV(sc),
838 *data = sc->data;
843 static inline int uea_write_cmv(struct uea_softc *sc,
846 int ret = uea_cmv(sc, MAKEFUNCTION(MEMACCESS, REQUESTWRITE),
849 uea_err(INS_TO_USBDEV(sc),
860 static int uea_stat(struct uea_softc *sc)
865 uea_enters(INS_TO_USBDEV(sc));
866 data = sc->stats.phy.state;
868 ret = uea_read_cmv(sc, SA_STAT, 0, &sc->stats.phy.state);
872 switch (GET_STATUS(sc->stats.phy.state)) {
874 uea_dbg(INS_TO_USBDEV(sc),
879 uea_dbg(INS_TO_USBDEV(sc), "modem initializing\n");
883 uea_vdbg(INS_TO_USBDEV(sc), "modem operational\n");
887 uea_info(INS_TO_USBDEV(sc), "modem synchronization failed"
892 uea_warn(INS_TO_USBDEV(sc),
897 uea_info(INS_TO_USBDEV(sc), "modem in fast-retain mode\n");
900 uea_err(INS_TO_USBDEV(sc), "modem invalid SW mode %d\n",
901 GET_STATUS(sc->stats.phy.state));
906 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_OFF, 0, NULL);
907 uea_info(INS_TO_USBDEV(sc), "modem operational\n");
912 if (sc->dsp_firm) {
913 release_firmware(sc->dsp_firm);
914 sc->dsp_firm = NULL;
924 wake_up(&sc->sync_q);
926 ret = uea_read_cmv(sc, SA_DIAG, 2, &sc->stats.phy.flags);
929 sc->stats.phy.mflags |= sc->stats.phy.flags;
934 if (sc->stats.phy.flags) {
935 uea_dbg(INS_TO_USBDEV(sc), "Stat flag = 0x%x\n",
936 sc->stats.phy.flags);
940 ret = uea_read_cmv(sc, SA_RATE, 0, &data);
949 if (UEA_CHIP_VERSION(sc) != ADI930
950 && !use_iso[sc->modem_index]
951 && sc->stats.phy.dsrate != (data >> 16) * 32) {
956 ret = uea_request(sc, UEA_SET_TIMEOUT, timeout, 0, NULL);
957 uea_info(INS_TO_USBDEV(sc),
961 sc->stats.phy.dsrate = (data >> 16) * 32;
962 sc->stats.phy.usrate = (data & 0xffff) * 32;
963 UPDATE_ATM_STAT(link_rate, sc->stats.phy.dsrate * 1000 / 424);
965 ret = uea_read_cmv(sc, SA_DIAG, 23, &data);
968 sc->stats.phy.dsattenuation = (data & 0xff) / 2;
970 ret = uea_read_cmv(sc, SA_DIAG, 47, &data);
973 sc->stats.phy.usattenuation = (data & 0xff) / 2;
975 ret = uea_read_cmv(sc, SA_DIAG, 25, &sc->stats.phy.dsmargin);
979 ret = uea_read_cmv(sc, SA_DIAG, 49, &sc->stats.phy.usmargin);
983 ret = uea_read_cmv(sc, SA_DIAG, 51, &sc->stats.phy.rxflow);
987 ret = uea_read_cmv(sc, SA_DIAG, 52, &sc->stats.phy.txflow);
991 ret = uea_read_cmv(sc, SA_DIAG, 54, &sc->stats.phy.dsunc);
996 ret = uea_read_cmv(sc, SA_DIAG, 58, &sc->stats.phy.usunc);
1000 ret = uea_read_cmv(sc, SA_DIAG, 53, &sc->stats.phy.dscorr);
1005 ret = uea_read_cmv(sc, SA_DIAG, 57, &sc->stats.phy.uscorr);
1009 ret = uea_read_cmv(sc, SA_INFO, 8, &sc->stats.phy.vidco);
1013 ret = uea_read_cmv(sc, SA_INFO, 13, &sc->stats.phy.vidcpe);
1020 static int request_cmvs(struct uea_softc *sc,
1028 if (cmv_file[sc->modem_index] == NULL) {
1029 if (UEA_CHIP_VERSION(sc) == ADI930)
1030 file = (IS_ISDN(sc->usb_dev)) ? "CMV9i.bin" : "CMV9p.bin";
1032 file = (IS_ISDN(sc->usb_dev)) ? "CMVei.bin" : "CMVep.bin";
1034 file = cmv_file[sc->modem_index];
1039 ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev);
1041 uea_err(INS_TO_USBDEV(sc),
1050 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n",
1066 static int uea_start_reset(struct uea_softc *sc)
1073 uea_enters(INS_TO_USBDEV(sc));
1074 uea_info(INS_TO_USBDEV(sc), "(re)booting started\n");
1077 sc->booting = 1;
1082 sc->cmv_ack = 0;
1086 memset(&sc->stats, 0, sizeof(struct uea_stats));
1089 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_ON, 0, NULL);
1090 uea_request(sc, UEA_SET_MODE, UEA_BOOT_IDMA, 0, NULL);
1093 uea_request(sc, UEA_SET_MODE, UEA_START_RESET, 0, NULL);
1099 uea_request(sc, UEA_SET_MODE, UEA_END_RESET, 0, NULL);
1102 uea_request(sc, UEA_SET_2183_DATA, UEA_MPTX_MAILBOX, 2, &zero);
1103 uea_request(sc, UEA_SET_2183_DATA, UEA_MPRX_MAILBOX, 2, &zero);
1104 uea_request(sc, UEA_SET_2183_DATA, UEA_SWAP_MAILBOX, 2, &zero);
1107 sc->cmv_function = MAKEFUNCTION(ADSLDIRECTIVE, MODEMREADY);
1109 sc->booting = 0;
1112 sc->pageno = 0;
1113 sc->ovl = 0;
1114 schedule_work(&sc->task);
1117 ret = wait_cmv_ack(sc);
1121 uea_vdbg(INS_TO_USBDEV(sc), "Ready CMV received\n");
1124 ret = uea_write_cmv(sc, SA_CNTL, 0, 1);
1129 ret = uea_read_cmv(sc, SA_INFO, 10, &sc->stats.phy.firmid);
1132 uea_info(INS_TO_USBDEV(sc), "ATU-R firmware version : %x\n",
1133 sc->stats.phy.firmid);
1136 ret = len = request_cmvs(sc, &cmvs, &cmvs_fw);
1142 ret = uea_write_cmv(sc, FW_GET_LONG(&cmvs[i].address),
1149 ret = uea_write_cmv(sc, SA_CNTL, 0, 2);
1150 uea_vdbg(INS_TO_USBDEV(sc), "Entering in R-ACT-REQ state\n");
1151 uea_info(INS_TO_USBDEV(sc), "Modem started, "
1155 sc->reset = 0;
1156 uea_leaves(INS_TO_USBDEV(sc));
1168 struct uea_softc *sc = data;
1171 uea_enters(INS_TO_USBDEV(sc));
1173 if (ret < 0 || sc->reset)
1174 ret = uea_start_reset(sc);
1176 ret = uea_stat(sc);
1180 uea_err(INS_TO_USBDEV(sc), "suspend/resume not supported, "
1183 uea_leaves(INS_TO_USBDEV(sc));
1188 static int load_XILINX_firmware(struct uea_softc *sc)
1195 uea_enters(INS_TO_USBDEV(sc));
1197 ret = request_firmware(&fw_entry, fw_name, &sc->usb_dev->dev);
1199 uea_err(INS_TO_USBDEV(sc), "firmware %s is not available\n",
1207 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n",
1214 ret = uea_request(sc, 0xe, 0, ln, pfw + u);
1216 uea_err(INS_TO_USBDEV(sc),
1223 ret = uea_request(sc, 0xe, 1, 0, NULL);
1225 uea_err(INS_TO_USBDEV(sc),
1232 ret = uea_send_modem_cmd(sc->usb_dev, 0xe, 1, &value);
1234 uea_err(sc->usb_dev, "elsa de-assert failed with error %d\n", ret);
1240 uea_leaves(INS_TO_USBDEV(sc));
1245 static void uea_dispatch_cmv(struct uea_softc *sc, struct cmv* cmv)
1247 uea_enters(INS_TO_USBDEV(sc));
1254 if (cmv->bFunction != sc->cmv_function) {
1255 if (UEA_CHIP_VERSION(sc) == ADI930
1257 cmv->wIndex = cpu_to_le16(sc->cmv_idx);
1258 put_unaligned(cpu_to_le32(sc->cmv_address), &cmv->dwSymbolicAddress);
1259 cmv->wOffsetAddress = cpu_to_le16(sc->cmv_offset);
1266 wake_up_cmv_ack(sc);
1267 uea_leaves(INS_TO_USBDEV(sc));
1272 if (le16_to_cpu(cmv->wIndex) != sc->cmv_idx ||
1274 sc->cmv_address
1275 || le16_to_cpu(cmv->wOffsetAddress) != sc->cmv_offset)
1278 sc->data = le32_to_cpu(get_unaligned(&cmv->dwData));
1279 sc->data = sc->data << 16 | sc->data >> 16;
1281 wake_up_cmv_ack(sc);
1282 uea_leaves(INS_TO_USBDEV(sc));
1286 uea_err(INS_TO_USBDEV(sc), "unexpected cmv received,"
1290 uea_leaves(INS_TO_USBDEV(sc));
1294 uea_err(INS_TO_USBDEV(sc), "invalid cmv received, "
1297 uea_leaves(INS_TO_USBDEV(sc));
1305 struct uea_softc *sc = urb->context;
1307 uea_enters(INS_TO_USBDEV(sc));
1310 uea_err(INS_TO_USBDEV(sc), "uea_intr() failed with %d\n",
1316 if (intr->bType != 0x08 || sc->booting) {
1317 uea_err(INS_TO_USBDEV(sc), "wrong interrupt\n");
1323 sc->pageno = intr->bSwapPageNo;
1324 sc->ovl = intr->bOvl >> 4 | intr->bOvl << 4;
1325 schedule_work(&sc->task);
1329 uea_dispatch_cmv(sc, &intr->u.s2.cmv);
1333 uea_err(INS_TO_USBDEV(sc), "unknown interrupt %u\n",
1338 usb_submit_urb(sc->urb_int, GFP_ATOMIC);
1344 static int uea_boot(struct uea_softc *sc)
1349 uea_enters(INS_TO_USBDEV(sc));
1351 INIT_WORK(&sc->task, uea_load_page);
1352 init_waitqueue_head(&sc->sync_q);
1353 init_waitqueue_head(&sc->cmv_ack_wait);
1355 if (UEA_CHIP_VERSION(sc) == ADI930)
1356 load_XILINX_firmware(sc);
1360 uea_err(INS_TO_USBDEV(sc),
1362 uea_leaves(INS_TO_USBDEV(sc));
1366 sc->urb_int = usb_alloc_urb(0, GFP_KERNEL);
1367 if (!sc->urb_int) {
1368 uea_err(INS_TO_USBDEV(sc), "cannot allocate interrupt URB\n");
1372 usb_fill_int_urb(sc->urb_int, sc->usb_dev,
1373 usb_rcvintpipe(sc->usb_dev, UEA_INTR_PIPE),
1374 intr, INTR_PKT_SIZE, uea_intr, sc,
1375 sc->usb_dev->actconfig->interface[0]->altsetting[0].
1378 ret = usb_submit_urb(sc->urb_int, GFP_KERNEL);
1380 uea_err(INS_TO_USBDEV(sc),
1385 sc->kthread = kthread_run(uea_kthread, sc, "ueagle-atm");
1386 if (sc->kthread == ERR_PTR(-ENOMEM)) {
1387 uea_err(INS_TO_USBDEV(sc), "failed to create thread\n");
1391 uea_leaves(INS_TO_USBDEV(sc));
1395 usb_kill_urb(sc->urb_int);
1397 usb_free_urb(sc->urb_int);
1398 sc->urb_int = NULL;
1400 uea_leaves(INS_TO_USBDEV(sc));
1407 static void uea_stop(struct uea_softc *sc)
1410 uea_enters(INS_TO_USBDEV(sc));
1411 ret = kthread_stop(sc->kthread);
1412 uea_dbg(INS_TO_USBDEV(sc), "kthread finish with status %d\n", ret);
1417 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_ON, 0, NULL);
1419 usb_kill_urb(sc->urb_int);
1420 kfree(sc->urb_int->transfer_buffer);
1421 usb_free_urb(sc->urb_int);
1423 if (sc->dsp_firm)
1424 release_firmware(sc->dsp_firm);
1425 uea_leaves(INS_TO_USBDEV(sc));
1449 struct uea_softc *sc;
1452 sc = dev_to_uea(dev);
1453 if (!sc)
1455 ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.state);
1465 struct uea_softc *sc;
1468 sc = dev_to_uea(dev);
1469 if (!sc)
1471 sc->reset = 1;
1484 struct uea_softc *sc;
1487 sc = dev_to_uea(dev);
1488 if (!sc)
1491 switch (GET_STATUS(sc->stats.phy.state)) {
1516 struct uea_softc *sc;
1519 sc = dev_to_uea(dev);
1520 if (!sc)
1523 if (sc->stats.phy.flags & 0x0C00)
1525 else if (sc->stats.phy.flags & 0x0030)
1542 struct uea_softc *sc; \
1545 sc = dev_to_uea(dev); \
1546 if (!sc) \
1548 ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.name); \
1550 sc->stats.phy.name = 0; \
1577 static int uea_getesi(struct uea_softc *sc, u_char * esi)
1582 (sc->usb_dev, sc->usb_dev->descriptor.iSerialNumber, mac_str,
1595 struct uea_softc *sc = usbatm->driver_data;
1597 return uea_getesi(sc, atm_dev->esi);
1602 struct uea_softc *sc = usbatm->driver_data;
1604 wait_event_interruptible(sc->sync_q, IS_OPERATIONAL(sc));
1657 struct uea_softc *sc;
1681 sc = kzalloc(sizeof(struct uea_softc), GFP_KERNEL);
1682 if (!sc) {
1687 sc->usb_dev = usb;
1688 usbatm->driver_data = sc;
1689 sc->usbatm = usbatm;
1690 sc->modem_index = (modem_index < NB_MODEM) ? modem_index++ : 0;
1691 sc->driver_info = id->driver_info;
1694 if (UEA_CHIP_VERSION(id) != ADI930 && use_iso[sc->modem_index]) {
1716 ret = uea_boot(sc);
1722 kfree(sc);
1728 struct uea_softc *sc = usbatm->driver_data;
1731 uea_stop(sc);
1732 kfree(sc);