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( in mac_address_show() local
309 if (instance == NULL || instance->usbatm->atm_dev == NULL) in mac_address_show()
313 instance->usbatm->atm_dev->esi); in mac_address_show()
320 struct cxacru_data *instance = to_usbatm_driver_data( in adsl_state_show() local
324 if (instance == NULL) in adsl_state_show()
327 value = instance->card_info[CXINF_LINE_STARTABLE]; in adsl_state_show()
336 struct cxacru_data *instance = to_usbatm_driver_data( in adsl_state_store() local
351 if (instance == NULL) in adsl_state_store()
354 if (mutex_lock_interruptible(&instance->adsl_state_serialize)) in adsl_state_store()
358 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_STOP, NULL, 0, NULL, 0); in adsl_state_store()
360 atm_err(instance->usbatm, "change adsl state:" in adsl_state_store()
378 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in adsl_state_store()
380 atm_err(instance->usbatm, "change adsl state:" in adsl_state_store()
401 mutex_lock(&instance->poll_state_serialize); in adsl_state_store()
402 switch (instance->poll_state) { in adsl_state_store()
405 instance->poll_state = CXPOLL_POLLING; in adsl_state_store()
410 instance->poll_state = CXPOLL_POLLING; in adsl_state_store()
417 mutex_unlock(&instance->poll_state_serialize); in adsl_state_store()
419 mutex_lock(&instance->poll_state_serialize); in adsl_state_store()
421 if (instance->poll_state == CXPOLL_POLLING) in adsl_state_store()
422 instance->poll_state = CXPOLL_STOPPING; in adsl_state_store()
423 mutex_unlock(&instance->poll_state_serialize); in adsl_state_store()
426 mutex_unlock(&instance->adsl_state_serialize); in adsl_state_store()
429 cxacru_poll_status(&instance->poll_work.work); in adsl_state_store()
439 struct cxacru_data *instance = to_usbatm_driver_data( in adsl_config_store() local
448 if (instance == NULL) in adsl_config_store()
482 ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET, in adsl_config_store()
485 atm_err(instance->usbatm, in adsl_config_store()
494 atm_info(instance->usbatm, "config%s\n", log); in adsl_config_store()
609 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm() argument
615 u8 *wbuf = instance->snd_buf; in cxacru_cm()
616 u8 *rbuf = instance->rcv_buf; in cxacru_cm()
622 usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n", in cxacru_cm()
628 mutex_lock(&instance->cm_serialize); in cxacru_cm()
631 init_completion(&instance->rcv_done); in cxacru_cm()
632 ret = usb_submit_urb(instance->rcv_urb, GFP_KERNEL); in cxacru_cm()
635 usb_err(instance->usbatm, "submit of read urb for cm %#x failed (%d)\n", in cxacru_cm()
648 instance->snd_urb->transfer_buffer_length = wbuflen; in cxacru_cm()
649 init_completion(&instance->snd_done); in cxacru_cm()
650 ret = usb_submit_urb(instance->snd_urb, GFP_KERNEL); in cxacru_cm()
653 usb_err(instance->usbatm, "submit of write urb for cm %#x failed (%d)\n", in cxacru_cm()
658 ret = cxacru_start_wait_urb(instance->snd_urb, &instance->snd_done, NULL); in cxacru_cm()
661 usb_err(instance->usbatm, "send of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
665 ret = cxacru_start_wait_urb(instance->rcv_urb, &instance->rcv_done, &actlen); in cxacru_cm()
668 usb_err(instance->usbatm, "receive of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
673 usb_err(instance->usbatm, "invalid response length to cm %#x: %d\n", in cxacru_cm()
683 usb_err(instance->usbatm, "wrong cm %#x in response to cm %#x\n", in cxacru_cm()
690 usb_err(instance->usbatm, "response to cm %#x failed: %#x\n", in cxacru_cm()
702 usb_dbg(instance->usbatm, "cm %#x\n", cm); in cxacru_cm()
704 mutex_unlock(&instance->cm_serialize); in cxacru_cm()
709 static int cxacru_cm_get_array(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm_get_array() argument
723 ret = cxacru_cm(instance, cm, NULL, 0, (u8 *) buf, buflen); in cxacru_cm_get_array()
734 usb_err(instance->usbatm, "invalid data length from cm %#x: %d\n", in cxacru_cm_get_array()
743 usb_err(instance->usbatm, "wrong index %#x in response to cm %#x\n", in cxacru_cm_get_array()
759 static int cxacru_card_status(struct cxacru_data *instance) in cxacru_card_status() argument
761 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_card_status()
764 usb_dbg(instance->usbatm, "cxacru_adsl_start: CARD_GET_STATUS returned %d\n", ret); in cxacru_card_status()
773 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_atm_start() local
781 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, in cxacru_atm_start()
789 mutex_lock(&instance->adsl_state_serialize); in cxacru_atm_start()
790 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in cxacru_atm_start()
795 mutex_lock(&instance->poll_state_serialize); in cxacru_atm_start()
796 switch (instance->poll_state) { in cxacru_atm_start()
799 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
804 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
811 mutex_unlock(&instance->poll_state_serialize); in cxacru_atm_start()
812 mutex_unlock(&instance->adsl_state_serialize); in cxacru_atm_start()
818 cxacru_poll_status(&instance->poll_work.work); in cxacru_atm_start()
824 struct cxacru_data *instance = in cxacru_poll_status() local
827 struct usbatm_data *usbatm = instance->usbatm; in cxacru_poll_status()
832 ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX); in cxacru_poll_status()
837 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
838 if (instance->poll_state != CXPOLL_SHUTDOWN) { in cxacru_poll_status()
839 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
845 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
849 memcpy(instance->card_info, buf, sizeof(instance->card_info)); in cxacru_poll_status()
851 if (instance->adsl_status != buf[CXINF_LINE_STARTABLE]) { in cxacru_poll_status()
852 instance->adsl_status = buf[CXINF_LINE_STARTABLE]; in cxacru_poll_status()
854 switch (instance->adsl_status) { in cxacru_poll_status()
864 atm_printk(KERN_INFO, usbatm, "Unknown adsl status %02x\n", instance->adsl_status); in cxacru_poll_status()
869 if (instance->line_status == buf[CXINF_LINE_STATUS]) in cxacru_poll_status()
872 instance->line_status = buf[CXINF_LINE_STATUS]; in cxacru_poll_status()
873 switch (instance->line_status) { in cxacru_poll_status()
919 atm_info(usbatm, "Unknown line state %02x\n", instance->line_status); in cxacru_poll_status()
924 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
925 if (instance->poll_state == CXPOLL_STOPPING && in cxacru_poll_status()
926 instance->adsl_status == 1 && /* stopped */ in cxacru_poll_status()
927 instance->line_status == 0) /* down */ in cxacru_poll_status()
928 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
930 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_poll_status()
932 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
935 schedule_delayed_work(&instance->poll_work, in cxacru_poll_status()
987 static void cxacru_upload_firmware(struct cxacru_data *instance, in cxacru_upload_firmware() argument
992 struct usbatm_data *usbatm = instance->usbatm; in cxacru_upload_firmware()
1001 val = cpu_to_le32(instance->modem_type->pll_f_clk); in cxacru_upload_firmware()
1009 val = cpu_to_le32(instance->modem_type->pll_b_clk); in cxacru_upload_firmware()
1033 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1050 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1069 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_upload_firmware()
1076 static int cxacru_find_firmware(struct cxacru_data *instance, in cxacru_find_firmware() argument
1079 struct usbatm_data *usbatm = instance->usbatm; in cxacru_find_firmware()
1100 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_heavy_init() local
1101 int ret = cxacru_find_firmware(instance, "fw", &fw); in cxacru_heavy_init()
1108 if (instance->modem_type->boot_rom_patch) { in cxacru_heavy_init()
1109 ret = cxacru_find_firmware(instance, "bp", &bp); in cxacru_heavy_init()
1117 cxacru_upload_firmware(instance, fw, bp); in cxacru_heavy_init()
1119 if (instance->modem_type->boot_rom_patch) in cxacru_heavy_init()
1123 ret = cxacru_card_status(instance); in cxacru_heavy_init()
1135 struct cxacru_data *instance; in cxacru_bind() local
1141 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in cxacru_bind()
1142 if (!instance) in cxacru_bind()
1145 instance->usbatm = usbatm_instance; in cxacru_bind()
1146 instance->modem_type = (struct cxacru_modem_type *) id->driver_info; in cxacru_bind()
1148 mutex_init(&instance->poll_state_serialize); in cxacru_bind()
1149 instance->poll_state = CXPOLL_STOPPED; in cxacru_bind()
1150 instance->line_status = -1; in cxacru_bind()
1151 instance->adsl_status = -1; in cxacru_bind()
1153 mutex_init(&instance->adsl_state_serialize); in cxacru_bind()
1155 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL); in cxacru_bind()
1156 if (!instance->rcv_buf) { in cxacru_bind()
1161 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL); in cxacru_bind()
1162 if (!instance->snd_buf) { in cxacru_bind()
1167 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL); in cxacru_bind()
1168 if (!instance->rcv_urb) { in cxacru_bind()
1172 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL); in cxacru_bind()
1173 if (!instance->snd_urb) { in cxacru_bind()
1186 usb_fill_int_urb(instance->rcv_urb, in cxacru_bind()
1188 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1189 cxacru_blocking_completion, &instance->rcv_done, 1); in cxacru_bind()
1191 usb_fill_int_urb(instance->snd_urb, in cxacru_bind()
1193 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1194 cxacru_blocking_completion, &instance->snd_done, 4); in cxacru_bind()
1196 usb_fill_bulk_urb(instance->rcv_urb, in cxacru_bind()
1198 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1199 cxacru_blocking_completion, &instance->rcv_done); in cxacru_bind()
1201 usb_fill_bulk_urb(instance->snd_urb, in cxacru_bind()
1203 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1204 cxacru_blocking_completion, &instance->snd_done); in cxacru_bind()
1207 mutex_init(&instance->cm_serialize); in cxacru_bind()
1209 INIT_DELAYED_WORK(&instance->poll_work, cxacru_poll_status); in cxacru_bind()
1211 usbatm_instance->driver_data = instance; in cxacru_bind()
1213 usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT); in cxacru_bind()
1218 free_page((unsigned long) instance->snd_buf); in cxacru_bind()
1219 free_page((unsigned long) instance->rcv_buf); in cxacru_bind()
1220 usb_free_urb(instance->snd_urb); in cxacru_bind()
1221 usb_free_urb(instance->rcv_urb); in cxacru_bind()
1222 kfree(instance); in cxacru_bind()
1230 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_unbind() local
1235 if (!instance) { in cxacru_unbind()
1240 mutex_lock(&instance->poll_state_serialize); in cxacru_unbind()
1241 BUG_ON(instance->poll_state == CXPOLL_SHUTDOWN); in cxacru_unbind()
1245 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_unbind()
1249 instance->poll_state = CXPOLL_SHUTDOWN; in cxacru_unbind()
1250 mutex_unlock(&instance->poll_state_serialize); in cxacru_unbind()
1253 cancel_delayed_work_sync(&instance->poll_work); in cxacru_unbind()
1255 usb_kill_urb(instance->snd_urb); in cxacru_unbind()
1256 usb_kill_urb(instance->rcv_urb); in cxacru_unbind()
1257 usb_free_urb(instance->snd_urb); in cxacru_unbind()
1258 usb_free_urb(instance->rcv_urb); in cxacru_unbind()
1260 free_page((unsigned long) instance->snd_buf); in cxacru_unbind()
1261 free_page((unsigned long) instance->rcv_buf); in cxacru_unbind()
1263 kfree(instance); in cxacru_unbind()