Lines Matching full:instance

209 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
229 struct cxacru_data *instance = to_usbatm_driver_data(\
232 if (instance == NULL) \
235 return cxacru_sysfs_showattr_##_type(instance->card_info[_value], buf); \
322 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_show_mac_address() local
325 if (instance == NULL || instance->usbatm->atm_dev == NULL) in cxacru_sysfs_show_mac_address()
329 instance->usbatm->atm_dev->esi); in cxacru_sysfs_show_mac_address()
336 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_show_adsl_state() local
340 if (instance == NULL) in cxacru_sysfs_show_adsl_state()
343 value = instance->card_info[CXINF_LINE_STARTABLE]; in cxacru_sysfs_show_adsl_state()
352 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_store_adsl_state() local
367 if (instance == NULL) in cxacru_sysfs_store_adsl_state()
370 if (mutex_lock_interruptible(&instance->adsl_state_serialize)) in cxacru_sysfs_store_adsl_state()
374 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_STOP, NULL, 0, NULL, 0); in cxacru_sysfs_store_adsl_state()
376 atm_err(instance->usbatm, "change adsl state:" in cxacru_sysfs_store_adsl_state()
394 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in cxacru_sysfs_store_adsl_state()
396 atm_err(instance->usbatm, "change adsl state:" in cxacru_sysfs_store_adsl_state()
417 mutex_lock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
418 switch (instance->poll_state) { in cxacru_sysfs_store_adsl_state()
421 instance->poll_state = CXPOLL_POLLING; in cxacru_sysfs_store_adsl_state()
426 instance->poll_state = CXPOLL_POLLING; in cxacru_sysfs_store_adsl_state()
432 mutex_unlock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
434 mutex_lock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
436 if (instance->poll_state == CXPOLL_POLLING) in cxacru_sysfs_store_adsl_state()
437 instance->poll_state = CXPOLL_STOPPING; in cxacru_sysfs_store_adsl_state()
438 mutex_unlock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
441 mutex_unlock(&instance->adsl_state_serialize); in cxacru_sysfs_store_adsl_state()
444 cxacru_poll_status(&instance->poll_work.work); in cxacru_sysfs_store_adsl_state()
454 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_store_adsl_config() local
463 if (instance == NULL) in cxacru_sysfs_store_adsl_config()
495 ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET, in cxacru_sysfs_store_adsl_config()
498 atm_err(instance->usbatm, in cxacru_sysfs_store_adsl_config()
507 atm_info(instance->usbatm, "config%s\n", log); in cxacru_sysfs_store_adsl_config()
584 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm() argument
590 u8 *wbuf = instance->snd_buf; in cxacru_cm()
591 u8 *rbuf = instance->rcv_buf; in cxacru_cm()
597 usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n", in cxacru_cm()
603 mutex_lock(&instance->cm_serialize); in cxacru_cm()
606 init_completion(&instance->rcv_done); in cxacru_cm()
607 ret = usb_submit_urb(instance->rcv_urb, GFP_KERNEL); in cxacru_cm()
610 usb_err(instance->usbatm, "submit of read urb for cm %#x failed (%d)\n", in cxacru_cm()
623 instance->snd_urb->transfer_buffer_length = wbuflen; in cxacru_cm()
624 init_completion(&instance->snd_done); in cxacru_cm()
625 ret = usb_submit_urb(instance->snd_urb, GFP_KERNEL); in cxacru_cm()
628 usb_err(instance->usbatm, "submit of write urb for cm %#x failed (%d)\n", in cxacru_cm()
633 ret = cxacru_start_wait_urb(instance->snd_urb, &instance->snd_done, NULL); in cxacru_cm()
636 usb_err(instance->usbatm, "send of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
640 ret = cxacru_start_wait_urb(instance->rcv_urb, &instance->rcv_done, &actlen); in cxacru_cm()
643 usb_err(instance->usbatm, "receive of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
648 usb_err(instance->usbatm, "invalid response length to cm %#x: %d\n", in cxacru_cm()
658 usb_err(instance->usbatm, "wrong cm %#x in response to cm %#x\n", in cxacru_cm()
665 usb_err(instance->usbatm, "response to cm %#x failed: %#x\n", in cxacru_cm()
679 mutex_unlock(&instance->cm_serialize); in cxacru_cm()
684 static int cxacru_cm_get_array(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm_get_array() argument
697 ret = cxacru_cm(instance, cm, NULL, 0, (u8 *) buf, buflen); in cxacru_cm_get_array()
707 usb_err(instance->usbatm, "invalid data length from cm %#x: %d\n", in cxacru_cm_get_array()
716 usb_err(instance->usbatm, "wrong index %#x in response to cm %#x\n", in cxacru_cm_get_array()
732 static int cxacru_card_status(struct cxacru_data *instance) in cxacru_card_status() argument
734 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_card_status()
756 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_atm_start() local
764 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, in cxacru_atm_start()
779 mutex_lock(&instance->adsl_state_serialize); in cxacru_atm_start()
780 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in cxacru_atm_start()
785 mutex_lock(&instance->poll_state_serialize); in cxacru_atm_start()
786 switch (instance->poll_state) { in cxacru_atm_start()
789 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
794 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
800 mutex_unlock(&instance->poll_state_serialize); in cxacru_atm_start()
801 mutex_unlock(&instance->adsl_state_serialize); in cxacru_atm_start()
807 cxacru_poll_status(&instance->poll_work.work); in cxacru_atm_start()
818 struct cxacru_data *instance = in cxacru_poll_status() local
821 struct usbatm_data *usbatm = instance->usbatm; in cxacru_poll_status()
826 ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX); in cxacru_poll_status()
831 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
832 if (instance->poll_state != CXPOLL_SHUTDOWN) { in cxacru_poll_status()
833 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
839 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
843 memcpy(instance->card_info, buf, sizeof(instance->card_info)); in cxacru_poll_status()
845 if (instance->adsl_status != buf[CXINF_LINE_STARTABLE]) { in cxacru_poll_status()
846 instance->adsl_status = buf[CXINF_LINE_STARTABLE]; in cxacru_poll_status()
848 switch (instance->adsl_status) { in cxacru_poll_status()
858 atm_printk(KERN_INFO, usbatm, "Unknown adsl status %02x\n", instance->adsl_status); in cxacru_poll_status()
863 if (instance->line_status == buf[CXINF_LINE_STATUS]) in cxacru_poll_status()
866 instance->line_status = buf[CXINF_LINE_STATUS]; in cxacru_poll_status()
867 switch (instance->line_status) { in cxacru_poll_status()
913 atm_info(usbatm, "Unknown line state %02x\n", instance->line_status); in cxacru_poll_status()
918 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
919 if (instance->poll_state == CXPOLL_STOPPING && in cxacru_poll_status()
920 instance->adsl_status == 1 && /* stopped */ in cxacru_poll_status()
921 instance->line_status == 0) /* down */ in cxacru_poll_status()
922 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
924 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_poll_status()
926 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
929 schedule_delayed_work(&instance->poll_work, in cxacru_poll_status()
980 static void cxacru_upload_firmware(struct cxacru_data *instance, in cxacru_upload_firmware() argument
985 struct usbatm_data *usbatm = instance->usbatm; in cxacru_upload_firmware()
994 val = cpu_to_le32(instance->modem_type->pll_f_clk); in cxacru_upload_firmware()
1002 val = cpu_to_le32(instance->modem_type->pll_b_clk); in cxacru_upload_firmware()
1026 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1043 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1062 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_upload_firmware()
1069 static int cxacru_find_firmware(struct cxacru_data *instance, in cxacru_find_firmware() argument
1072 struct usbatm_data *usbatm = instance->usbatm; in cxacru_find_firmware()
1093 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_heavy_init() local
1095 int ret = cxacru_find_firmware(instance, "fw", &fw); in cxacru_heavy_init()
1101 if (instance->modem_type->boot_rom_patch) { in cxacru_heavy_init()
1102 ret = cxacru_find_firmware(instance, "bp", &bp); in cxacru_heavy_init()
1110 cxacru_upload_firmware(instance, fw, bp); in cxacru_heavy_init()
1112 if (instance->modem_type->boot_rom_patch) in cxacru_heavy_init()
1116 ret = cxacru_card_status(instance); in cxacru_heavy_init()
1128 struct cxacru_data *instance; in cxacru_bind() local
1133 /* instance init */ in cxacru_bind()
1134 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in cxacru_bind()
1135 if (!instance) { in cxacru_bind()
1136 dbg("cxacru_bind: no memory for instance data"); in cxacru_bind()
1140 instance->usbatm = usbatm_instance; in cxacru_bind()
1141 instance->modem_type = (struct cxacru_modem_type *) id->driver_info; in cxacru_bind()
1143 mutex_init(&instance->poll_state_serialize); in cxacru_bind()
1144 instance->poll_state = CXPOLL_STOPPED; in cxacru_bind()
1145 instance->line_status = -1; in cxacru_bind()
1146 instance->adsl_status = -1; in cxacru_bind()
1148 mutex_init(&instance->adsl_state_serialize); in cxacru_bind()
1150 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL); in cxacru_bind()
1151 if (!instance->rcv_buf) { in cxacru_bind()
1156 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL); in cxacru_bind()
1157 if (!instance->snd_buf) { in cxacru_bind()
1162 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL); in cxacru_bind()
1163 if (!instance->rcv_urb) { in cxacru_bind()
1168 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL); in cxacru_bind()
1169 if (!instance->snd_urb) { in cxacru_bind()
1183 usb_fill_int_urb(instance->rcv_urb, in cxacru_bind()
1185 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1186 cxacru_blocking_completion, &instance->rcv_done, 1); in cxacru_bind()
1188 usb_fill_int_urb(instance->snd_urb, in cxacru_bind()
1190 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1191 cxacru_blocking_completion, &instance->snd_done, 4); in cxacru_bind()
1193 usb_fill_bulk_urb(instance->rcv_urb, in cxacru_bind()
1195 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1196 cxacru_blocking_completion, &instance->rcv_done); in cxacru_bind()
1198 usb_fill_bulk_urb(instance->snd_urb, in cxacru_bind()
1200 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1201 cxacru_blocking_completion, &instance->snd_done); in cxacru_bind()
1204 mutex_init(&instance->cm_serialize); in cxacru_bind()
1206 INIT_DELAYED_WORK(&instance->poll_work, cxacru_poll_status); in cxacru_bind()
1208 usbatm_instance->driver_data = instance; in cxacru_bind()
1210 usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT); in cxacru_bind()
1215 free_page((unsigned long) instance->snd_buf); in cxacru_bind()
1216 free_page((unsigned long) instance->rcv_buf); in cxacru_bind()
1217 usb_free_urb(instance->snd_urb); in cxacru_bind()
1218 usb_free_urb(instance->rcv_urb); in cxacru_bind()
1219 kfree(instance); in cxacru_bind()
1227 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_unbind() local
1232 if (!instance) { in cxacru_unbind()
1233 dbg("cxacru_unbind: NULL instance!"); in cxacru_unbind()
1237 mutex_lock(&instance->poll_state_serialize); in cxacru_unbind()
1238 BUG_ON(instance->poll_state == CXPOLL_SHUTDOWN); in cxacru_unbind()
1242 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_unbind()
1246 instance->poll_state = CXPOLL_SHUTDOWN; in cxacru_unbind()
1247 mutex_unlock(&instance->poll_state_serialize); in cxacru_unbind()
1250 cancel_delayed_work_sync(&instance->poll_work); in cxacru_unbind()
1252 usb_kill_urb(instance->snd_urb); in cxacru_unbind()
1253 usb_kill_urb(instance->rcv_urb); in cxacru_unbind()
1254 usb_free_urb(instance->snd_urb); in cxacru_unbind()
1255 usb_free_urb(instance->rcv_urb); in cxacru_unbind()
1257 free_page((unsigned long) instance->snd_buf); in cxacru_unbind()
1258 free_page((unsigned long) instance->rcv_buf); in cxacru_unbind()
1260 kfree(instance); in cxacru_unbind()