Lines Matching refs:sc
296 #define IS_OPERATIONAL(sc) \ argument
297 ((UEA_CHIP_VERSION(sc) != EAGLE_IV) ? \
298 (GET_STATUS(sc->stats.phy.state) == 2) : \
299 (sc->stats.phy.state == 7))
590 #define uea_wait(sc, cond, timeo) \ argument
592 int _r = wait_event_interruptible_timeout(sc->sync_q, \
601 if (sc->usbatm->atm_dev) \
602 sc->usbatm->atm_dev->type = val; \
607 if (sc->usbatm->atm_dev) \
608 atm_dev_signal_change(sc->usbatm->atm_dev, val); \
864 static int uea_idma_write(struct uea_softc *sc, const void *data, u32 size) in uea_idma_write() argument
872 uea_err(INS_TO_USBDEV(sc), "can't allocate xfer_buff\n"); in uea_idma_write()
876 ret = usb_bulk_msg(sc->usb_dev, in uea_idma_write()
877 usb_sndbulkpipe(sc->usb_dev, UEA_IDMA_PIPE), in uea_idma_write()
884 uea_err(INS_TO_USBDEV(sc), "size != bytes_read %d %d\n", size, in uea_idma_write()
892 static int request_dsp(struct uea_softc *sc) in request_dsp() argument
897 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { in request_dsp()
898 if (IS_ISDN(sc)) in request_dsp()
902 } else if (UEA_CHIP_VERSION(sc) == ADI930) { in request_dsp()
903 if (IS_ISDN(sc)) in request_dsp()
908 if (IS_ISDN(sc)) in request_dsp()
914 ret = request_firmware(&sc->dsp_firm, dsp_name, &sc->usb_dev->dev); in request_dsp()
916 uea_err(INS_TO_USBDEV(sc), in request_dsp()
922 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) in request_dsp()
923 ret = check_dsp_e4(sc->dsp_firm->data, sc->dsp_firm->size); in request_dsp()
925 ret = check_dsp_e1(sc->dsp_firm->data, sc->dsp_firm->size); in request_dsp()
928 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n", in request_dsp()
930 release_firmware(sc->dsp_firm); in request_dsp()
931 sc->dsp_firm = NULL; in request_dsp()
943 struct uea_softc *sc = container_of(work, struct uea_softc, task); in uea_load_page_e1() local
944 u16 pageno = sc->pageno; in uea_load_page_e1()
945 u16 ovl = sc->ovl; in uea_load_page_e1()
956 release_firmware(sc->dsp_firm); in uea_load_page_e1()
957 sc->dsp_firm = NULL; in uea_load_page_e1()
960 if (sc->dsp_firm == NULL && request_dsp(sc) < 0) in uea_load_page_e1()
963 p = sc->dsp_firm->data; in uea_load_page_e1()
976 p = sc->dsp_firm->data + pageoffset; in uea_load_page_e1()
980 uea_dbg(INS_TO_USBDEV(sc), in uea_load_page_e1()
999 if (uea_idma_write(sc, &bi, E1_BLOCK_INFO_SIZE)) in uea_load_page_e1()
1003 if (uea_idma_write(sc, p, blocksize)) in uea_load_page_e1()
1012 uea_err(INS_TO_USBDEV(sc), "sending DSP block %u failed\n", i); in uea_load_page_e1()
1015 uea_err(INS_TO_USBDEV(sc), "invalid DSP page %u requested\n", pageno); in uea_load_page_e1()
1018 static void __uea_load_page_e4(struct uea_softc *sc, u8 pageno, int boot) in __uea_load_page_e4() argument
1022 struct l1_code *p = (struct l1_code *) sc->dsp_firm->data; in __uea_load_page_e4()
1036 blockoffset = sc->dsp_firm->data + le32_to_cpu( in __uea_load_page_e4()
1042 uea_dbg(INS_TO_USBDEV(sc), in __uea_load_page_e4()
1049 if (uea_idma_write(sc, &bi, E4_BLOCK_INFO_SIZE)) in __uea_load_page_e4()
1053 if (uea_idma_write(sc, blockoffset, blocksize)) in __uea_load_page_e4()
1062 uea_err(INS_TO_USBDEV(sc), "sending DSP block %u failed\n", blockno); in __uea_load_page_e4()
1068 struct uea_softc *sc = container_of(work, struct uea_softc, task); in uea_load_page_e4() local
1069 u8 pageno = sc->pageno; in uea_load_page_e4()
1074 uea_dbg(INS_TO_USBDEV(sc), "sending DSP page %u\n", pageno); in uea_load_page_e4()
1078 release_firmware(sc->dsp_firm); in uea_load_page_e4()
1079 sc->dsp_firm = NULL; in uea_load_page_e4()
1082 if (sc->dsp_firm == NULL && request_dsp(sc) < 0) in uea_load_page_e4()
1085 p = (struct l1_code *) sc->dsp_firm->data; in uea_load_page_e4()
1087 uea_err(INS_TO_USBDEV(sc), "invalid DSP " in uea_load_page_e4()
1093 __uea_load_page_e4(sc, pageno, 0); in uea_load_page_e4()
1097 uea_dbg(INS_TO_USBDEV(sc), in uea_load_page_e4()
1102 __uea_load_page_e4(sc, i, 1); in uea_load_page_e4()
1105 uea_dbg(INS_TO_USBDEV(sc) , "sending start bi\n"); in uea_load_page_e4()
1115 if (uea_idma_write(sc, &bi, E4_BLOCK_INFO_SIZE)) in uea_load_page_e4()
1116 uea_err(INS_TO_USBDEV(sc), "sending DSP start bi failed\n"); in uea_load_page_e4()
1119 static inline void wake_up_cmv_ack(struct uea_softc *sc) in wake_up_cmv_ack() argument
1121 BUG_ON(sc->cmv_ack); in wake_up_cmv_ack()
1122 sc->cmv_ack = 1; in wake_up_cmv_ack()
1123 wake_up(&sc->sync_q); in wake_up_cmv_ack()
1126 static inline int wait_cmv_ack(struct uea_softc *sc) in wait_cmv_ack() argument
1128 int ret = uea_wait(sc, sc->cmv_ack , ACK_TIMEOUT); in wait_cmv_ack()
1130 sc->cmv_ack = 0; in wait_cmv_ack()
1132 uea_dbg(INS_TO_USBDEV(sc), "wait_event_timeout : %d ms\n", in wait_cmv_ack()
1143 static int uea_request(struct uea_softc *sc, in uea_request() argument
1151 uea_err(INS_TO_USBDEV(sc), "can't allocate xfer_buff\n"); in uea_request()
1155 ret = usb_control_msg(sc->usb_dev, usb_sndctrlpipe(sc->usb_dev, 0), in uea_request()
1162 uea_err(INS_TO_USBDEV(sc), "usb_control_msg error %d\n", ret); in uea_request()
1167 uea_err(INS_TO_USBDEV(sc), in uea_request()
1176 static int uea_cmv_e1(struct uea_softc *sc, in uea_cmv_e1() argument
1182 uea_enters(INS_TO_USBDEV(sc)); in uea_cmv_e1()
1183 uea_vdbg(INS_TO_USBDEV(sc), "Function : %d-%d, Address : %c%c%c%c, " in uea_cmv_e1()
1192 sc->cmv_dsc.e1.function = function | 0x2; in uea_cmv_e1()
1193 sc->cmv_dsc.e1.idx++; in uea_cmv_e1()
1194 sc->cmv_dsc.e1.address = address; in uea_cmv_e1()
1195 sc->cmv_dsc.e1.offset = offset; in uea_cmv_e1()
1200 cmv.wIndex = cpu_to_le16(sc->cmv_dsc.e1.idx); in uea_cmv_e1()
1205 ret = uea_request(sc, UEA_E1_SET_BLOCK, UEA_MPTX_START, in uea_cmv_e1()
1209 ret = wait_cmv_ack(sc); in uea_cmv_e1()
1210 uea_leaves(INS_TO_USBDEV(sc)); in uea_cmv_e1()
1214 static int uea_cmv_e4(struct uea_softc *sc, in uea_cmv_e4() argument
1220 uea_enters(INS_TO_USBDEV(sc)); in uea_cmv_e4()
1223 uea_vdbg(INS_TO_USBDEV(sc), "Function : %d-%d, Group : 0x%04x, " in uea_cmv_e4()
1229 sc->cmv_dsc.e4.function = function | (0x1 << 4); in uea_cmv_e4()
1230 sc->cmv_dsc.e4.offset = offset; in uea_cmv_e4()
1231 sc->cmv_dsc.e4.address = address; in uea_cmv_e4()
1232 sc->cmv_dsc.e4.group = group; in uea_cmv_e4()
1240 ret = uea_request(sc, UEA_E4_SET_BLOCK, UEA_MPTX_START, in uea_cmv_e4()
1244 ret = wait_cmv_ack(sc); in uea_cmv_e4()
1245 uea_leaves(INS_TO_USBDEV(sc)); in uea_cmv_e4()
1249 static inline int uea_read_cmv_e1(struct uea_softc *sc, in uea_read_cmv_e1() argument
1252 int ret = uea_cmv_e1(sc, E1_MAKEFUNCTION(E1_MEMACCESS, E1_REQUESTREAD), in uea_read_cmv_e1()
1255 uea_err(INS_TO_USBDEV(sc), in uea_read_cmv_e1()
1258 *data = sc->data; in uea_read_cmv_e1()
1263 static inline int uea_read_cmv_e4(struct uea_softc *sc, in uea_read_cmv_e4() argument
1266 int ret = uea_cmv_e4(sc, E4_MAKEFUNCTION(E4_MEMACCESS, in uea_read_cmv_e4()
1270 uea_err(INS_TO_USBDEV(sc), in uea_read_cmv_e4()
1273 *data = sc->data; in uea_read_cmv_e4()
1276 *(data + 1) = sc->data1; in uea_read_cmv_e4()
1281 static inline int uea_write_cmv_e1(struct uea_softc *sc, in uea_write_cmv_e1() argument
1284 int ret = uea_cmv_e1(sc, E1_MAKEFUNCTION(E1_MEMACCESS, E1_REQUESTWRITE), in uea_write_cmv_e1()
1287 uea_err(INS_TO_USBDEV(sc), in uea_write_cmv_e1()
1293 static inline int uea_write_cmv_e4(struct uea_softc *sc, in uea_write_cmv_e4() argument
1296 int ret = uea_cmv_e4(sc, E4_MAKEFUNCTION(E4_MEMACCESS, in uea_write_cmv_e4()
1300 uea_err(INS_TO_USBDEV(sc), in uea_write_cmv_e4()
1306 static void uea_set_bulk_timeout(struct uea_softc *sc, u32 dsrate) in uea_set_bulk_timeout() argument
1317 if (UEA_CHIP_VERSION(sc) == ADI930 || in uea_set_bulk_timeout()
1318 altsetting[sc->modem_index] > 0 || in uea_set_bulk_timeout()
1319 sc->stats.phy.dsrate == dsrate) in uea_set_bulk_timeout()
1324 ret = uea_request(sc, UEA_SET_TIMEOUT, timeout, 0, NULL); in uea_set_bulk_timeout()
1325 uea_info(INS_TO_USBDEV(sc), "setting new timeout %d%s\n", in uea_set_bulk_timeout()
1335 static int uea_stat_e1(struct uea_softc *sc) in uea_stat_e1() argument
1340 uea_enters(INS_TO_USBDEV(sc)); in uea_stat_e1()
1341 data = sc->stats.phy.state; in uea_stat_e1()
1343 ret = uea_read_cmv_e1(sc, E1_SA_STAT, 0, &sc->stats.phy.state); in uea_stat_e1()
1347 switch (GET_STATUS(sc->stats.phy.state)) { in uea_stat_e1()
1349 uea_dbg(INS_TO_USBDEV(sc), in uea_stat_e1()
1354 uea_dbg(INS_TO_USBDEV(sc), "modem initializing\n"); in uea_stat_e1()
1358 uea_vdbg(INS_TO_USBDEV(sc), "modem operational\n"); in uea_stat_e1()
1362 uea_info(INS_TO_USBDEV(sc), "modem synchronization failed" in uea_stat_e1()
1367 uea_warn(INS_TO_USBDEV(sc), in uea_stat_e1()
1372 uea_info(INS_TO_USBDEV(sc), "modem in fast-retain mode\n"); in uea_stat_e1()
1375 uea_err(INS_TO_USBDEV(sc), "modem invalid SW mode %d\n", in uea_stat_e1()
1376 GET_STATUS(sc->stats.phy.state)); in uea_stat_e1()
1381 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_OFF, 0, NULL); in uea_stat_e1()
1382 uea_info(INS_TO_USBDEV(sc), "modem operational\n"); in uea_stat_e1()
1387 release_firmware(sc->dsp_firm); in uea_stat_e1()
1388 sc->dsp_firm = NULL; in uea_stat_e1()
1397 wake_up(&sc->sync_q); in uea_stat_e1()
1399 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 2, &sc->stats.phy.flags); in uea_stat_e1()
1402 sc->stats.phy.mflags |= sc->stats.phy.flags; in uea_stat_e1()
1407 if (sc->stats.phy.flags) { in uea_stat_e1()
1408 uea_dbg(INS_TO_USBDEV(sc), "Stat flag = 0x%x\n", in uea_stat_e1()
1409 sc->stats.phy.flags); in uea_stat_e1()
1413 ret = uea_read_cmv_e1(sc, E1_SA_RATE, 0, &data); in uea_stat_e1()
1417 uea_set_bulk_timeout(sc, (data >> 16) * 32); in uea_stat_e1()
1418 sc->stats.phy.dsrate = (data >> 16) * 32; in uea_stat_e1()
1419 sc->stats.phy.usrate = (data & 0xffff) * 32; in uea_stat_e1()
1420 UPDATE_ATM_STAT(link_rate, sc->stats.phy.dsrate * 1000 / 424); in uea_stat_e1()
1422 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 23, &data); in uea_stat_e1()
1425 sc->stats.phy.dsattenuation = (data & 0xff) / 2; in uea_stat_e1()
1427 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 47, &data); in uea_stat_e1()
1430 sc->stats.phy.usattenuation = (data & 0xff) / 2; in uea_stat_e1()
1432 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 25, &sc->stats.phy.dsmargin); in uea_stat_e1()
1436 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 49, &sc->stats.phy.usmargin); in uea_stat_e1()
1440 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 51, &sc->stats.phy.rxflow); in uea_stat_e1()
1444 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 52, &sc->stats.phy.txflow); in uea_stat_e1()
1448 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 54, &sc->stats.phy.dsunc); in uea_stat_e1()
1453 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 58, &sc->stats.phy.usunc); in uea_stat_e1()
1457 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 53, &sc->stats.phy.dscorr); in uea_stat_e1()
1462 ret = uea_read_cmv_e1(sc, E1_SA_DIAG, 57, &sc->stats.phy.uscorr); in uea_stat_e1()
1466 ret = uea_read_cmv_e1(sc, E1_SA_INFO, 8, &sc->stats.phy.vidco); in uea_stat_e1()
1470 ret = uea_read_cmv_e1(sc, E1_SA_INFO, 13, &sc->stats.phy.vidcpe); in uea_stat_e1()
1477 static int uea_stat_e4(struct uea_softc *sc) in uea_stat_e4() argument
1483 uea_enters(INS_TO_USBDEV(sc)); in uea_stat_e4()
1484 data = sc->stats.phy.state; in uea_stat_e4()
1487 ret = uea_read_cmv_e4(sc, 1, E4_SA_STAT, 0, 0, &sc->stats.phy.state); in uea_stat_e4()
1491 switch (sc->stats.phy.state) { in uea_stat_e4()
1496 uea_dbg(INS_TO_USBDEV(sc), "modem not yet " in uea_stat_e4()
1503 uea_dbg(INS_TO_USBDEV(sc), "modem initializing\n"); in uea_stat_e4()
1506 uea_info(INS_TO_USBDEV(sc), "modem synchronization " in uea_stat_e4()
1512 uea_warn(INS_TO_USBDEV(sc), "unknown state: %x\n", in uea_stat_e4()
1513 sc->stats.phy.state); in uea_stat_e4()
1518 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_OFF, 0, NULL); in uea_stat_e4()
1519 uea_info(INS_TO_USBDEV(sc), "modem operational\n"); in uea_stat_e4()
1524 release_firmware(sc->dsp_firm); in uea_stat_e4()
1525 sc->dsp_firm = NULL; in uea_stat_e4()
1534 wake_up(&sc->sync_q); in uea_stat_e4()
1541 ret = uea_read_cmv_e4(sc, 1, E4_SA_DIAG, 0, 0, &sc->stats.phy.flags); in uea_stat_e4()
1544 sc->stats.phy.mflags |= sc->stats.phy.flags; in uea_stat_e4()
1549 if (sc->stats.phy.flags) { in uea_stat_e4()
1550 uea_dbg(INS_TO_USBDEV(sc), "Stat flag = 0x%x\n", in uea_stat_e4()
1551 sc->stats.phy.flags); in uea_stat_e4()
1552 if (sc->stats.phy.flags & 1) /* delineation LOSS */ in uea_stat_e4()
1554 if (sc->stats.phy.flags & 0x4000) /* Reset Flag */ in uea_stat_e4()
1560 ret = uea_read_cmv_e4(sc, 4, E4_SA_RATE, 0, 0, tmp_arr); in uea_stat_e4()
1564 sc->stats.phy.usrate = data / 1000; in uea_stat_e4()
1566 ret = uea_read_cmv_e4(sc, 4, E4_SA_RATE, 1, 0, tmp_arr); in uea_stat_e4()
1570 uea_set_bulk_timeout(sc, data / 1000); in uea_stat_e4()
1571 sc->stats.phy.dsrate = data / 1000; in uea_stat_e4()
1572 UPDATE_ATM_STAT(link_rate, sc->stats.phy.dsrate * 1000 / 424); in uea_stat_e4()
1574 ret = uea_read_cmv_e4(sc, 1, E4_SA_INFO, 68, 1, &data); in uea_stat_e4()
1577 sc->stats.phy.dsattenuation = data / 10; in uea_stat_e4()
1579 ret = uea_read_cmv_e4(sc, 1, E4_SA_INFO, 69, 1, &data); in uea_stat_e4()
1582 sc->stats.phy.usattenuation = data / 10; in uea_stat_e4()
1584 ret = uea_read_cmv_e4(sc, 1, E4_SA_INFO, 68, 3, &data); in uea_stat_e4()
1587 sc->stats.phy.dsmargin = data / 2; in uea_stat_e4()
1589 ret = uea_read_cmv_e4(sc, 1, E4_SA_INFO, 69, 3, &data); in uea_stat_e4()
1592 sc->stats.phy.usmargin = data / 10; in uea_stat_e4()
1597 static void cmvs_file_name(struct uea_softc *sc, char *const cmv_name, int ver) in cmvs_file_name() argument
1604 if (cmv_file[sc->modem_index] == NULL) { in cmvs_file_name()
1605 if (UEA_CHIP_VERSION(sc) == ADI930) in cmvs_file_name()
1607 else if (UEA_CHIP_VERSION(sc) == EAGLE_IV) in cmvs_file_name()
1612 file_arr[4] = IS_ISDN(sc) ? 'i' : 'p'; in cmvs_file_name()
1615 file = cmv_file[sc->modem_index]; in cmvs_file_name()
1624 static int request_cmvs_old(struct uea_softc *sc, in request_cmvs_old() argument
1631 cmvs_file_name(sc, cmv_name, 1); in request_cmvs_old()
1632 ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev); in request_cmvs_old()
1634 uea_err(INS_TO_USBDEV(sc), in request_cmvs_old()
1652 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n", cmv_name); in request_cmvs_old()
1657 static int request_cmvs(struct uea_softc *sc, in request_cmvs() argument
1665 cmvs_file_name(sc, cmv_name, 2); in request_cmvs()
1666 ret = request_firmware(fw, cmv_name, &sc->usb_dev->dev); in request_cmvs()
1670 uea_warn(INS_TO_USBDEV(sc), "requesting " in request_cmvs()
1673 return request_cmvs_old(sc, cmvs, fw); in request_cmvs()
1675 uea_err(INS_TO_USBDEV(sc), in request_cmvs()
1685 uea_warn(INS_TO_USBDEV(sc), "firmware %s is corrupted," in request_cmvs()
1688 return request_cmvs_old(sc, cmvs, fw); in request_cmvs()
1713 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n", cmv_name); in request_cmvs()
1718 static int uea_send_cmvs_e1(struct uea_softc *sc) in uea_send_cmvs_e1() argument
1726 ret = uea_write_cmv_e1(sc, E1_SA_CNTL, 0, 1); in uea_send_cmvs_e1()
1731 ret = uea_read_cmv_e1(sc, E1_SA_INFO, 10, &sc->stats.phy.firmid); in uea_send_cmvs_e1()
1734 uea_info(INS_TO_USBDEV(sc), "ATU-R firmware version : %x\n", in uea_send_cmvs_e1()
1735 sc->stats.phy.firmid); in uea_send_cmvs_e1()
1738 ret = len = request_cmvs(sc, &cmvs_ptr, &cmvs_fw, &ver); in uea_send_cmvs_e1()
1746 uea_warn(INS_TO_USBDEV(sc), "use deprecated cmvs version, " in uea_send_cmvs_e1()
1750 ret = uea_write_cmv_e1(sc, in uea_send_cmvs_e1()
1761 ret = uea_write_cmv_e1(sc, in uea_send_cmvs_e1()
1770 uea_err(INS_TO_USBDEV(sc), "bad cmvs version %d\n", ver); in uea_send_cmvs_e1()
1775 ret = uea_write_cmv_e1(sc, E1_SA_CNTL, 0, 2); in uea_send_cmvs_e1()
1776 uea_vdbg(INS_TO_USBDEV(sc), "Entering in R-ACT-REQ state\n"); in uea_send_cmvs_e1()
1777 uea_info(INS_TO_USBDEV(sc), "modem started, waiting " in uea_send_cmvs_e1()
1784 static int uea_send_cmvs_e4(struct uea_softc *sc) in uea_send_cmvs_e4() argument
1792 ret = uea_write_cmv_e4(sc, 1, E4_SA_CNTL, 0, 0, 1); in uea_send_cmvs_e4()
1798 ret = uea_read_cmv_e4(sc, 2, E4_SA_INFO, 55, 0, &sc->stats.phy.firmid); in uea_send_cmvs_e4()
1801 uea_info(INS_TO_USBDEV(sc), "ATU-R firmware version : %x\n", in uea_send_cmvs_e4()
1802 sc->stats.phy.firmid); in uea_send_cmvs_e4()
1806 ret = len = request_cmvs(sc, &cmvs_ptr, &cmvs_fw, &ver); in uea_send_cmvs_e4()
1815 ret = uea_write_cmv_e4(sc, 1, in uea_send_cmvs_e4()
1825 uea_err(INS_TO_USBDEV(sc), "bad cmvs version %d\n", ver); in uea_send_cmvs_e4()
1830 ret = uea_write_cmv_e4(sc, 1, E4_SA_CNTL, 0, 0, 2); in uea_send_cmvs_e4()
1831 uea_vdbg(INS_TO_USBDEV(sc), "Entering in R-ACT-REQ state\n"); in uea_send_cmvs_e4()
1832 uea_info(INS_TO_USBDEV(sc), "modem started, waiting " in uea_send_cmvs_e4()
1845 static int uea_start_reset(struct uea_softc *sc) in uea_start_reset() argument
1850 uea_enters(INS_TO_USBDEV(sc)); in uea_start_reset()
1851 uea_info(INS_TO_USBDEV(sc), "(re)booting started\n"); in uea_start_reset()
1854 sc->booting = 1; in uea_start_reset()
1859 sc->cmv_ack = 0; in uea_start_reset()
1863 memset(&sc->stats, 0, sizeof(struct uea_stats)); in uea_start_reset()
1866 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_ON, 0, NULL); in uea_start_reset()
1867 uea_request(sc, UEA_SET_MODE, UEA_BOOT_IDMA, 0, NULL); in uea_start_reset()
1870 uea_request(sc, UEA_SET_MODE, UEA_START_RESET, 0, NULL); in uea_start_reset()
1873 ret = uea_wait(sc, 0, msecs_to_jiffies(100)); in uea_start_reset()
1878 uea_request(sc, UEA_SET_MODE, UEA_END_RESET, 0, NULL); in uea_start_reset()
1880 if (UEA_CHIP_VERSION(sc) != EAGLE_IV) { in uea_start_reset()
1882 uea_request(sc, UEA_SET_2183_DATA, UEA_MPTX_MAILBOX, 2, &zero); in uea_start_reset()
1883 uea_request(sc, UEA_SET_2183_DATA, UEA_MPRX_MAILBOX, 2, &zero); in uea_start_reset()
1884 uea_request(sc, UEA_SET_2183_DATA, UEA_SWAP_MAILBOX, 2, &zero); in uea_start_reset()
1887 ret = uea_wait(sc, 0, msecs_to_jiffies(1000)); in uea_start_reset()
1891 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) in uea_start_reset()
1892 sc->cmv_dsc.e4.function = E4_MAKEFUNCTION(E4_ADSLDIRECTIVE, in uea_start_reset()
1895 sc->cmv_dsc.e1.function = E1_MAKEFUNCTION(E1_ADSLDIRECTIVE, in uea_start_reset()
1899 sc->booting = 0; in uea_start_reset()
1902 sc->pageno = 0; in uea_start_reset()
1903 sc->ovl = 0; in uea_start_reset()
1904 schedule_work(&sc->task); in uea_start_reset()
1907 ret = wait_cmv_ack(sc); in uea_start_reset()
1911 uea_vdbg(INS_TO_USBDEV(sc), "Ready CMV received\n"); in uea_start_reset()
1913 ret = sc->send_cmvs(sc); in uea_start_reset()
1917 sc->reset = 0; in uea_start_reset()
1918 uea_leaves(INS_TO_USBDEV(sc)); in uea_start_reset()
1930 struct uea_softc *sc = data; in uea_kthread() local
1934 uea_enters(INS_TO_USBDEV(sc)); in uea_kthread()
1936 if (ret < 0 || sc->reset) in uea_kthread()
1937 ret = uea_start_reset(sc); in uea_kthread()
1939 ret = sc->stat(sc); in uea_kthread()
1941 uea_wait(sc, 0, msecs_to_jiffies(1000)); in uea_kthread()
1944 uea_leaves(INS_TO_USBDEV(sc)); in uea_kthread()
1949 static int load_XILINX_firmware(struct uea_softc *sc) in load_XILINX_firmware() argument
1957 uea_enters(INS_TO_USBDEV(sc)); in load_XILINX_firmware()
1959 ret = request_firmware(&fw_entry, fw_name, &sc->usb_dev->dev); in load_XILINX_firmware()
1961 uea_err(INS_TO_USBDEV(sc), "firmware %s is not available\n", in load_XILINX_firmware()
1969 uea_err(INS_TO_USBDEV(sc), "firmware %s is corrupted\n", in load_XILINX_firmware()
1976 ret = uea_request(sc, 0xe, 0, ln, pfw + u); in load_XILINX_firmware()
1978 uea_err(INS_TO_USBDEV(sc), in load_XILINX_firmware()
1985 ret = uea_request(sc, 0xe, 1, 0, NULL); in load_XILINX_firmware()
1987 uea_err(INS_TO_USBDEV(sc), in load_XILINX_firmware()
1994 ret = uea_send_modem_cmd(sc->usb_dev, 0xe, 1, &value); in load_XILINX_firmware()
1996 uea_err(sc->usb_dev, "elsa de-assert failed with error" in load_XILINX_firmware()
2002 uea_leaves(INS_TO_USBDEV(sc)); in load_XILINX_firmware()
2007 static void uea_dispatch_cmv_e1(struct uea_softc *sc, struct intr_pkt *intr) in uea_dispatch_cmv_e1() argument
2009 struct cmv_dsc_e1 *dsc = &sc->cmv_dsc.e1; in uea_dispatch_cmv_e1()
2012 uea_enters(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e1()
2023 if (UEA_CHIP_VERSION(sc) == ADI930 in uea_dispatch_cmv_e1()
2035 wake_up_cmv_ack(sc); in uea_dispatch_cmv_e1()
2036 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e1()
2046 sc->data = get_unaligned_le32(&cmv->dwData); in uea_dispatch_cmv_e1()
2047 sc->data = sc->data << 16 | sc->data >> 16; in uea_dispatch_cmv_e1()
2049 wake_up_cmv_ack(sc); in uea_dispatch_cmv_e1()
2050 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e1()
2054 uea_err(INS_TO_USBDEV(sc), "unexpected cmv received, " in uea_dispatch_cmv_e1()
2058 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e1()
2062 uea_err(INS_TO_USBDEV(sc), "invalid cmv received, " in uea_dispatch_cmv_e1()
2065 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e1()
2069 static void uea_dispatch_cmv_e4(struct uea_softc *sc, struct intr_pkt *intr) in uea_dispatch_cmv_e4() argument
2071 struct cmv_dsc_e4 *dsc = &sc->cmv_dsc.e4; in uea_dispatch_cmv_e4()
2074 uea_enters(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e4()
2075 uea_dbg(INS_TO_USBDEV(sc), "cmv %x %x %x %x %x %x\n", in uea_dispatch_cmv_e4()
2085 wake_up_cmv_ack(sc); in uea_dispatch_cmv_e4()
2086 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e4()
2096 sc->data = be32_to_cpu(cmv->dwData[0]); in uea_dispatch_cmv_e4()
2097 sc->data1 = be32_to_cpu(cmv->dwData[1]); in uea_dispatch_cmv_e4()
2098 wake_up_cmv_ack(sc); in uea_dispatch_cmv_e4()
2099 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e4()
2103 uea_err(INS_TO_USBDEV(sc), "unexpected cmv received, " in uea_dispatch_cmv_e4()
2107 uea_leaves(INS_TO_USBDEV(sc)); in uea_dispatch_cmv_e4()
2111 static void uea_schedule_load_page_e1(struct uea_softc *sc, in uea_schedule_load_page_e1() argument
2114 sc->pageno = intr->e1_bSwapPageNo; in uea_schedule_load_page_e1()
2115 sc->ovl = intr->e1_bOvl >> 4 | intr->e1_bOvl << 4; in uea_schedule_load_page_e1()
2116 schedule_work(&sc->task); in uea_schedule_load_page_e1()
2119 static void uea_schedule_load_page_e4(struct uea_softc *sc, in uea_schedule_load_page_e4() argument
2122 sc->pageno = intr->e4_bSwapPageNo; in uea_schedule_load_page_e4()
2123 schedule_work(&sc->task); in uea_schedule_load_page_e4()
2131 struct uea_softc *sc = urb->context; in uea_intr() local
2135 uea_enters(INS_TO_USBDEV(sc)); in uea_intr()
2138 uea_err(INS_TO_USBDEV(sc), "uea_intr() failed with %d\n", in uea_intr()
2144 if (intr->bType != 0x08 || sc->booting) { in uea_intr()
2145 uea_err(INS_TO_USBDEV(sc), "wrong interrupt\n"); in uea_intr()
2151 sc->schedule_load_page(sc, intr); in uea_intr()
2155 sc->dispatch_cmv(sc, intr); in uea_intr()
2159 uea_err(INS_TO_USBDEV(sc), "unknown interrupt %u\n", in uea_intr()
2164 usb_submit_urb(sc->urb_int, GFP_ATOMIC); in uea_intr()
2170 static int uea_boot(struct uea_softc *sc, struct usb_interface *intf) in uea_boot() argument
2176 uea_enters(INS_TO_USBDEV(sc)); in uea_boot()
2178 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { in uea_boot()
2180 sc->dispatch_cmv = uea_dispatch_cmv_e4; in uea_boot()
2181 sc->schedule_load_page = uea_schedule_load_page_e4; in uea_boot()
2182 sc->stat = uea_stat_e4; in uea_boot()
2183 sc->send_cmvs = uea_send_cmvs_e4; in uea_boot()
2184 INIT_WORK(&sc->task, uea_load_page_e4); in uea_boot()
2187 sc->dispatch_cmv = uea_dispatch_cmv_e1; in uea_boot()
2188 sc->schedule_load_page = uea_schedule_load_page_e1; in uea_boot()
2189 sc->stat = uea_stat_e1; in uea_boot()
2190 sc->send_cmvs = uea_send_cmvs_e1; in uea_boot()
2191 INIT_WORK(&sc->task, uea_load_page_e1); in uea_boot()
2194 init_waitqueue_head(&sc->sync_q); in uea_boot()
2196 if (UEA_CHIP_VERSION(sc) == ADI930) in uea_boot()
2197 load_XILINX_firmware(sc); in uea_boot()
2208 sc->urb_int = usb_alloc_urb(0, GFP_KERNEL); in uea_boot()
2209 if (!sc->urb_int) in uea_boot()
2212 usb_fill_int_urb(sc->urb_int, sc->usb_dev, in uea_boot()
2213 usb_rcvintpipe(sc->usb_dev, UEA_INTR_PIPE), in uea_boot()
2214 intr, size, uea_intr, sc, in uea_boot()
2217 ret = usb_submit_urb(sc->urb_int, GFP_KERNEL); in uea_boot()
2219 uea_err(INS_TO_USBDEV(sc), in uea_boot()
2227 sc->kthread = kthread_create(uea_kthread, sc, "ueagle-atm"); in uea_boot()
2228 if (IS_ERR(sc->kthread)) { in uea_boot()
2229 uea_err(INS_TO_USBDEV(sc), "failed to create thread\n"); in uea_boot()
2230 ret = PTR_ERR(sc->kthread); in uea_boot()
2234 uea_leaves(INS_TO_USBDEV(sc)); in uea_boot()
2238 usb_kill_urb(sc->urb_int); in uea_boot()
2240 usb_free_urb(sc->urb_int); in uea_boot()
2241 sc->urb_int = NULL; in uea_boot()
2244 uea_leaves(INS_TO_USBDEV(sc)); in uea_boot()
2251 static void uea_stop(struct uea_softc *sc) in uea_stop() argument
2254 uea_enters(INS_TO_USBDEV(sc)); in uea_stop()
2255 ret = kthread_stop(sc->kthread); in uea_stop()
2256 uea_dbg(INS_TO_USBDEV(sc), "kthread finish with status %d\n", ret); in uea_stop()
2258 uea_request(sc, UEA_SET_MODE, UEA_LOOPBACK_ON, 0, NULL); in uea_stop()
2260 usb_kill_urb(sc->urb_int); in uea_stop()
2261 kfree(sc->urb_int->transfer_buffer); in uea_stop()
2262 usb_free_urb(sc->urb_int); in uea_stop()
2265 flush_work(&sc->task); in uea_stop()
2267 release_firmware(sc->dsp_firm); in uea_stop()
2268 uea_leaves(INS_TO_USBDEV(sc)); in uea_stop()
2292 struct uea_softc *sc; in read_status() local
2295 sc = dev_to_uea(dev); in read_status()
2296 if (!sc) in read_status()
2298 ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.state); in read_status()
2308 struct uea_softc *sc; in reboot() local
2311 sc = dev_to_uea(dev); in reboot()
2312 if (!sc) in reboot()
2314 sc->reset = 1; in reboot()
2328 struct uea_softc *sc; in read_human_status() local
2331 sc = dev_to_uea(dev); in read_human_status()
2332 if (!sc) in read_human_status()
2335 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { in read_human_status()
2336 switch (sc->stats.phy.state) { in read_human_status()
2360 modem_state = GET_STATUS(sc->stats.phy.state); in read_human_status()
2390 struct uea_softc *sc; in read_delin() local
2394 sc = dev_to_uea(dev); in read_delin()
2395 if (!sc) in read_delin()
2398 if (UEA_CHIP_VERSION(sc) == EAGLE_IV) { in read_delin()
2399 if (sc->stats.phy.flags & 0x4000) in read_delin()
2401 else if (sc->stats.phy.flags & 0x0001) in read_delin()
2404 if (sc->stats.phy.flags & 0x0C00) in read_delin()
2406 else if (sc->stats.phy.flags & 0x0030) in read_delin()
2424 struct uea_softc *sc; \
2427 sc = dev_to_uea(dev); \
2428 if (!sc) \
2430 ret = snprintf(buf, 10, "%08x\n", sc->stats.phy.name); \
2432 sc->stats.phy.name = 0; \
2458 static int uea_getesi(struct uea_softc *sc, u_char *esi) in uea_getesi() argument
2463 (sc->usb_dev, sc->usb_dev->descriptor.iSerialNumber, mac_str, in uea_getesi()
2477 struct uea_softc *sc = usbatm->driver_data; in uea_atm_open() local
2479 return uea_getesi(sc, atm_dev->esi); in uea_atm_open()
2484 struct uea_softc *sc = usbatm->driver_data; in uea_heavy() local
2486 wait_event_interruptible(sc->sync_q, IS_OPERATIONAL(sc)); in uea_heavy()
2539 struct uea_softc *sc; in uea_bind() local
2564 sc = kzalloc(sizeof(struct uea_softc), GFP_KERNEL); in uea_bind()
2565 if (!sc) in uea_bind()
2568 sc->usb_dev = usb; in uea_bind()
2569 usbatm->driver_data = sc; in uea_bind()
2570 sc->usbatm = usbatm; in uea_bind()
2571 sc->modem_index = (modem_index < NB_MODEM) ? modem_index++ : 0; in uea_bind()
2572 sc->driver_info = id->driver_info; in uea_bind()
2575 if (annex[sc->modem_index] == 1) in uea_bind()
2576 sc->annex = ANNEXA; in uea_bind()
2577 else if (annex[sc->modem_index] == 2) in uea_bind()
2578 sc->annex = ANNEXB; in uea_bind()
2580 else if (sc->driver_info & AUTO_ANNEX_A) in uea_bind()
2581 sc->annex = ANNEXA; in uea_bind()
2582 else if (sc->driver_info & AUTO_ANNEX_B) in uea_bind()
2583 sc->annex = ANNEXB; in uea_bind()
2585 sc->annex = (le16_to_cpu in uea_bind()
2586 (sc->usb_dev->descriptor.bcdDevice) & 0x80) ? ANNEXB : ANNEXA; in uea_bind()
2588 alt = altsetting[sc->modem_index]; in uea_bind()
2606 ret = uea_boot(sc, intf); in uea_bind()
2615 kfree(sc); in uea_bind()
2621 struct uea_softc *sc = usbatm->driver_data; in uea_unbind() local
2624 uea_stop(sc); in uea_unbind()
2625 kfree(sc); in uea_unbind()
2659 struct uea_softc *sc = usbatm->driver_data; in uea_probe() local
2665 wake_up_process(sc->kthread); in uea_probe()