Lines Matching refs:instance

193 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
211 struct cxacru_data *instance = to_usbatm_driver_data(\
214 if (instance == NULL) \
217 return cxacru_sysfs_showattr_##_type(instance->card_info[_value], buf); \
306 struct cxacru_data *instance = to_usbatm_driver_data(
309 if (instance == NULL || instance->usbatm->atm_dev == NULL)
312 return sprintf(buf, "%pM\n", instance->usbatm->atm_dev->esi);
319 struct cxacru_data *instance = to_usbatm_driver_data(
323 if (instance == NULL)
326 value = instance->card_info[CXINF_LINE_STARTABLE];
335 struct cxacru_data *instance = to_usbatm_driver_data(
350 if (instance == NULL)
353 if (mutex_lock_interruptible(&instance->adsl_state_serialize))
357 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_STOP, NULL, 0, NULL, 0);
359 atm_err(instance->usbatm, "change adsl state:"
377 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0);
379 atm_err(instance->usbatm, "change adsl state:"
400 mutex_lock(&instance->poll_state_serialize);
401 switch (instance->poll_state) {
404 instance->poll_state = CXPOLL_POLLING;
409 instance->poll_state = CXPOLL_POLLING;
416 mutex_unlock(&instance->poll_state_serialize);
418 mutex_lock(&instance->poll_state_serialize);
420 if (instance->poll_state == CXPOLL_POLLING)
421 instance->poll_state = CXPOLL_STOPPING;
422 mutex_unlock(&instance->poll_state_serialize);
425 mutex_unlock(&instance->adsl_state_serialize);
428 cxacru_poll_status(&instance->poll_work.work);
438 struct cxacru_data *instance = to_usbatm_driver_data(
447 if (instance == NULL)
481 ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET,
484 atm_err(instance->usbatm,
493 atm_info(instance->usbatm, "config%s\n", log);
608 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
614 u8 *wbuf = instance->snd_buf;
615 u8 *rbuf = instance->rcv_buf;
621 usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n",
627 mutex_lock(&instance->cm_serialize);
630 init_completion(&instance->rcv_done);
631 ret = usb_submit_urb(instance->rcv_urb, GFP_KERNEL);
634 usb_err(instance->usbatm, "submit of read urb for cm %#x failed (%d)\n",
647 instance->snd_urb->transfer_buffer_length = wbuflen;
648 init_completion(&instance->snd_done);
649 ret = usb_submit_urb(instance->snd_urb, GFP_KERNEL);
652 usb_err(instance->usbatm, "submit of write urb for cm %#x failed (%d)\n",
657 ret = cxacru_start_wait_urb(instance->snd_urb, &instance->snd_done, NULL);
660 usb_err(instance->usbatm, "send of cm %#x failed (%d)\n", cm, ret);
664 ret = cxacru_start_wait_urb(instance->rcv_urb, &instance->rcv_done, &actlen);
667 usb_err(instance->usbatm, "receive of cm %#x failed (%d)\n", cm, ret);
672 usb_err(instance->usbatm, "invalid response length to cm %#x: %d\n",
682 usb_err(instance->usbatm, "wrong cm %#x in response to cm %#x\n",
689 usb_err(instance->usbatm, "response to cm %#x failed: %#x\n",
701 usb_dbg(instance->usbatm, "cm %#x\n", cm);
703 mutex_unlock(&instance->cm_serialize);
708 static int cxacru_cm_get_array(struct cxacru_data *instance, enum cxacru_cm_request cm,
722 ret = cxacru_cm(instance, cm, NULL, 0, (u8 *) buf, buflen);
733 usb_err(instance->usbatm, "invalid data length from cm %#x: %d\n",
742 usb_err(instance->usbatm, "wrong index %#x in response to cm %#x\n",
758 static int cxacru_card_status(struct cxacru_data *instance)
760 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0);
763 usb_dbg(instance->usbatm, "cxacru_adsl_start: CARD_GET_STATUS returned %d\n", ret);
772 struct cxacru_data *instance = usbatm_instance->driver_data;
780 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0,
788 mutex_lock(&instance->adsl_state_serialize);
789 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0);
794 mutex_lock(&instance->poll_state_serialize);
795 switch (instance->poll_state) {
798 instance->poll_state = CXPOLL_POLLING;
803 instance->poll_state = CXPOLL_POLLING;
810 mutex_unlock(&instance->poll_state_serialize);
811 mutex_unlock(&instance->adsl_state_serialize);
817 cxacru_poll_status(&instance->poll_work.work);
823 struct cxacru_data *instance =
826 struct usbatm_data *usbatm = instance->usbatm;
831 ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX);
836 mutex_lock(&instance->poll_state_serialize);
837 if (instance->poll_state != CXPOLL_SHUTDOWN) {
838 instance->poll_state = CXPOLL_STOPPED;
844 mutex_unlock(&instance->poll_state_serialize);
848 memcpy(instance->card_info, buf, sizeof(instance->card_info));
850 if (instance->adsl_status != buf[CXINF_LINE_STARTABLE]) {
851 instance->adsl_status = buf[CXINF_LINE_STARTABLE];
853 switch (instance->adsl_status) {
863 atm_printk(KERN_INFO, usbatm, "Unknown adsl status %02x\n", instance->adsl_status);
868 if (instance->line_status == buf[CXINF_LINE_STATUS])
871 instance->line_status = buf[CXINF_LINE_STATUS];
872 switch (instance->line_status) {
918 atm_info(usbatm, "Unknown line state %02x\n", instance->line_status);
923 mutex_lock(&instance->poll_state_serialize);
924 if (instance->poll_state == CXPOLL_STOPPING &&
925 instance->adsl_status == 1 && /* stopped */
926 instance->line_status == 0) /* down */
927 instance->poll_state = CXPOLL_STOPPED;
929 if (instance->poll_state == CXPOLL_STOPPED)
931 mutex_unlock(&instance->poll_state_serialize);
934 schedule_delayed_work(&instance->poll_work,
986 static void cxacru_upload_firmware(struct cxacru_data *instance,
991 struct usbatm_data *usbatm = instance->usbatm;
1000 val = cpu_to_le32(instance->modem_type->pll_f_clk);
1008 val = cpu_to_le32(instance->modem_type->pll_b_clk);
1032 if (instance->modem_type->boot_rom_patch) {
1049 if (instance->modem_type->boot_rom_patch) {
1068 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0);
1075 static int cxacru_find_firmware(struct cxacru_data *instance,
1078 struct usbatm_data *usbatm = instance->usbatm;
1099 struct cxacru_data *instance = usbatm_instance->driver_data;
1100 int ret = cxacru_find_firmware(instance, "fw", &fw);
1107 if (instance->modem_type->boot_rom_patch) {
1108 ret = cxacru_find_firmware(instance, "bp", &bp);
1116 cxacru_upload_firmware(instance, fw, bp);
1118 if (instance->modem_type->boot_rom_patch)
1122 ret = cxacru_card_status(instance);
1134 struct cxacru_data *instance;
1139 /* instance init */
1140 instance = kzalloc(sizeof(*instance), GFP_KERNEL);
1141 if (!instance)
1144 instance->usbatm = usbatm_instance;
1145 instance->modem_type = (struct cxacru_modem_type *) id->driver_info;
1147 mutex_init(&instance->poll_state_serialize);
1148 instance->poll_state = CXPOLL_STOPPED;
1149 instance->line_status = -1;
1150 instance->adsl_status = -1;
1152 mutex_init(&instance->adsl_state_serialize);
1154 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL);
1155 if (!instance->rcv_buf) {
1160 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL);
1161 if (!instance->snd_buf) {
1166 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL);
1167 if (!instance->rcv_urb) {
1171 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL);
1172 if (!instance->snd_urb) {
1185 usb_fill_int_urb(instance->rcv_urb,
1187 instance->rcv_buf, PAGE_SIZE,
1188 cxacru_blocking_completion, &instance->rcv_done, 1);
1190 usb_fill_int_urb(instance->snd_urb,
1192 instance->snd_buf, PAGE_SIZE,
1193 cxacru_blocking_completion, &instance->snd_done, 4);
1195 usb_fill_bulk_urb(instance->rcv_urb,
1197 instance->rcv_buf, PAGE_SIZE,
1198 cxacru_blocking_completion, &instance->rcv_done);
1200 usb_fill_bulk_urb(instance->snd_urb,
1202 instance->snd_buf, PAGE_SIZE,
1203 cxacru_blocking_completion, &instance->snd_done);
1206 mutex_init(&instance->cm_serialize);
1208 INIT_DELAYED_WORK(&instance->poll_work, cxacru_poll_status);
1210 usbatm_instance->driver_data = instance;
1212 usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT);
1217 free_page((unsigned long) instance->snd_buf);
1218 free_page((unsigned long) instance->rcv_buf);
1219 usb_free_urb(instance->snd_urb);
1220 usb_free_urb(instance->rcv_urb);
1221 kfree(instance);
1229 struct cxacru_data *instance = usbatm_instance->driver_data;
1234 if (!instance) {
1235 usb_dbg(usbatm_instance, "cxacru_unbind: NULL instance!\n");
1239 mutex_lock(&instance->poll_state_serialize);
1240 BUG_ON(instance->poll_state == CXPOLL_SHUTDOWN);
1244 if (instance->poll_state == CXPOLL_STOPPED)
1248 instance->poll_state = CXPOLL_SHUTDOWN;
1249 mutex_unlock(&instance->poll_state_serialize);
1252 cancel_delayed_work_sync(&instance->poll_work);
1254 usb_kill_urb(instance->snd_urb);
1255 usb_kill_urb(instance->rcv_urb);
1256 usb_free_urb(instance->snd_urb);
1257 usb_free_urb(instance->rcv_urb);
1259 free_page((unsigned long) instance->snd_buf);
1260 free_page((unsigned long) instance->rcv_buf);
1262 kfree(instance);