Lines Matching refs:instance
208 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm,
228 struct cxacru_data *instance = to_usbatm_driver_data(\
231 if (instance == NULL) \
234 return cxacru_sysfs_showattr_##_type(instance->card_info[_value], buf); \
323 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_show_mac_address() local
326 if (instance == NULL || instance->usbatm->atm_dev == NULL) in cxacru_sysfs_show_mac_address()
330 instance->usbatm->atm_dev->esi); in cxacru_sysfs_show_mac_address()
337 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_show_adsl_state() local
341 if (instance == NULL) in cxacru_sysfs_show_adsl_state()
344 value = instance->card_info[CXINF_LINE_STARTABLE]; in cxacru_sysfs_show_adsl_state()
353 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_store_adsl_state() local
368 if (instance == NULL) in cxacru_sysfs_store_adsl_state()
371 if (mutex_lock_interruptible(&instance->adsl_state_serialize)) in cxacru_sysfs_store_adsl_state()
375 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_STOP, NULL, 0, NULL, 0); in cxacru_sysfs_store_adsl_state()
377 atm_err(instance->usbatm, "change adsl state:" in cxacru_sysfs_store_adsl_state()
395 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in cxacru_sysfs_store_adsl_state()
397 atm_err(instance->usbatm, "change adsl state:" in cxacru_sysfs_store_adsl_state()
418 mutex_lock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
419 switch (instance->poll_state) { in cxacru_sysfs_store_adsl_state()
422 instance->poll_state = CXPOLL_POLLING; in cxacru_sysfs_store_adsl_state()
427 instance->poll_state = CXPOLL_POLLING; in cxacru_sysfs_store_adsl_state()
433 mutex_unlock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
435 mutex_lock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
437 if (instance->poll_state == CXPOLL_POLLING) in cxacru_sysfs_store_adsl_state()
438 instance->poll_state = CXPOLL_STOPPING; in cxacru_sysfs_store_adsl_state()
439 mutex_unlock(&instance->poll_state_serialize); in cxacru_sysfs_store_adsl_state()
442 mutex_unlock(&instance->adsl_state_serialize); in cxacru_sysfs_store_adsl_state()
445 cxacru_poll_status(&instance->poll_work.work); in cxacru_sysfs_store_adsl_state()
455 struct cxacru_data *instance = to_usbatm_driver_data( in cxacru_sysfs_store_adsl_config() local
464 if (instance == NULL) in cxacru_sysfs_store_adsl_config()
496 ret = cxacru_cm(instance, CM_REQUEST_CARD_DATA_SET, in cxacru_sysfs_store_adsl_config()
499 atm_err(instance->usbatm, in cxacru_sysfs_store_adsl_config()
508 atm_info(instance->usbatm, "config%s\n", log); in cxacru_sysfs_store_adsl_config()
585 static int cxacru_cm(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm() argument
591 u8 *wbuf = instance->snd_buf; in cxacru_cm()
592 u8 *rbuf = instance->rcv_buf; in cxacru_cm()
598 usb_err(instance->usbatm, "requested transfer size too large (%d, %d)\n", in cxacru_cm()
604 mutex_lock(&instance->cm_serialize); in cxacru_cm()
607 init_completion(&instance->rcv_done); in cxacru_cm()
608 ret = usb_submit_urb(instance->rcv_urb, GFP_KERNEL); in cxacru_cm()
611 usb_err(instance->usbatm, "submit of read urb for cm %#x failed (%d)\n", in cxacru_cm()
624 instance->snd_urb->transfer_buffer_length = wbuflen; in cxacru_cm()
625 init_completion(&instance->snd_done); in cxacru_cm()
626 ret = usb_submit_urb(instance->snd_urb, GFP_KERNEL); in cxacru_cm()
629 usb_err(instance->usbatm, "submit of write urb for cm %#x failed (%d)\n", in cxacru_cm()
634 ret = cxacru_start_wait_urb(instance->snd_urb, &instance->snd_done, NULL); in cxacru_cm()
637 usb_err(instance->usbatm, "send of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
641 ret = cxacru_start_wait_urb(instance->rcv_urb, &instance->rcv_done, &actlen); in cxacru_cm()
644 usb_err(instance->usbatm, "receive of cm %#x failed (%d)\n", cm, ret); in cxacru_cm()
649 usb_err(instance->usbatm, "invalid response length to cm %#x: %d\n", in cxacru_cm()
659 usb_err(instance->usbatm, "wrong cm %#x in response to cm %#x\n", in cxacru_cm()
666 usb_err(instance->usbatm, "response to cm %#x failed: %#x\n", in cxacru_cm()
678 usb_dbg(instance->usbatm, "cm %#x\n", cm); in cxacru_cm()
680 mutex_unlock(&instance->cm_serialize); in cxacru_cm()
685 static int cxacru_cm_get_array(struct cxacru_data *instance, enum cxacru_cm_request cm, in cxacru_cm_get_array() argument
699 ret = cxacru_cm(instance, cm, NULL, 0, (u8 *) buf, buflen); in cxacru_cm_get_array()
710 usb_err(instance->usbatm, "invalid data length from cm %#x: %d\n", in cxacru_cm_get_array()
719 usb_err(instance->usbatm, "wrong index %#x in response to cm %#x\n", in cxacru_cm_get_array()
735 static int cxacru_card_status(struct cxacru_data *instance) in cxacru_card_status() argument
737 int ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_card_status()
740 usb_dbg(instance->usbatm, "cxacru_adsl_start: CARD_GET_STATUS returned %d\n", ret); in cxacru_card_status()
760 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_atm_start() local
768 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_MAC_ADDRESS, NULL, 0, in cxacru_atm_start()
783 mutex_lock(&instance->adsl_state_serialize); in cxacru_atm_start()
784 ret = cxacru_cm(instance, CM_REQUEST_CHIP_ADSL_LINE_START, NULL, 0, NULL, 0); in cxacru_atm_start()
789 mutex_lock(&instance->poll_state_serialize); in cxacru_atm_start()
790 switch (instance->poll_state) { in cxacru_atm_start()
793 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
798 instance->poll_state = CXPOLL_POLLING; in cxacru_atm_start()
804 mutex_unlock(&instance->poll_state_serialize); in cxacru_atm_start()
805 mutex_unlock(&instance->adsl_state_serialize); in cxacru_atm_start()
811 cxacru_poll_status(&instance->poll_work.work); in cxacru_atm_start()
822 struct cxacru_data *instance = in cxacru_poll_status() local
825 struct usbatm_data *usbatm = instance->usbatm; in cxacru_poll_status()
830 ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX); in cxacru_poll_status()
835 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
836 if (instance->poll_state != CXPOLL_SHUTDOWN) { in cxacru_poll_status()
837 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
843 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
847 memcpy(instance->card_info, buf, sizeof(instance->card_info)); in cxacru_poll_status()
849 if (instance->adsl_status != buf[CXINF_LINE_STARTABLE]) { in cxacru_poll_status()
850 instance->adsl_status = buf[CXINF_LINE_STARTABLE]; in cxacru_poll_status()
852 switch (instance->adsl_status) { in cxacru_poll_status()
862 atm_printk(KERN_INFO, usbatm, "Unknown adsl status %02x\n", instance->adsl_status); in cxacru_poll_status()
867 if (instance->line_status == buf[CXINF_LINE_STATUS]) in cxacru_poll_status()
870 instance->line_status = buf[CXINF_LINE_STATUS]; in cxacru_poll_status()
871 switch (instance->line_status) { in cxacru_poll_status()
917 atm_info(usbatm, "Unknown line state %02x\n", instance->line_status); in cxacru_poll_status()
922 mutex_lock(&instance->poll_state_serialize); in cxacru_poll_status()
923 if (instance->poll_state == CXPOLL_STOPPING && in cxacru_poll_status()
924 instance->adsl_status == 1 && /* stopped */ in cxacru_poll_status()
925 instance->line_status == 0) /* down */ in cxacru_poll_status()
926 instance->poll_state = CXPOLL_STOPPED; in cxacru_poll_status()
928 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_poll_status()
930 mutex_unlock(&instance->poll_state_serialize); in cxacru_poll_status()
933 schedule_delayed_work(&instance->poll_work, in cxacru_poll_status()
985 static void cxacru_upload_firmware(struct cxacru_data *instance, in cxacru_upload_firmware() argument
990 struct usbatm_data *usbatm = instance->usbatm; in cxacru_upload_firmware()
999 val = cpu_to_le32(instance->modem_type->pll_f_clk); in cxacru_upload_firmware()
1007 val = cpu_to_le32(instance->modem_type->pll_b_clk); in cxacru_upload_firmware()
1031 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1048 if (instance->modem_type->boot_rom_patch) { in cxacru_upload_firmware()
1067 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0); in cxacru_upload_firmware()
1074 static int cxacru_find_firmware(struct cxacru_data *instance, in cxacru_find_firmware() argument
1077 struct usbatm_data *usbatm = instance->usbatm; in cxacru_find_firmware()
1098 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_heavy_init() local
1099 int ret = cxacru_find_firmware(instance, "fw", &fw); in cxacru_heavy_init()
1106 if (instance->modem_type->boot_rom_patch) { in cxacru_heavy_init()
1107 ret = cxacru_find_firmware(instance, "bp", &bp); in cxacru_heavy_init()
1115 cxacru_upload_firmware(instance, fw, bp); in cxacru_heavy_init()
1117 if (instance->modem_type->boot_rom_patch) in cxacru_heavy_init()
1121 ret = cxacru_card_status(instance); in cxacru_heavy_init()
1133 struct cxacru_data *instance; in cxacru_bind() local
1139 instance = kzalloc(sizeof(*instance), GFP_KERNEL); in cxacru_bind()
1140 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()
1173 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL); in cxacru_bind()
1174 if (!instance->snd_urb) { in cxacru_bind()
1188 usb_fill_int_urb(instance->rcv_urb, in cxacru_bind()
1190 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1191 cxacru_blocking_completion, &instance->rcv_done, 1); in cxacru_bind()
1193 usb_fill_int_urb(instance->snd_urb, in cxacru_bind()
1195 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1196 cxacru_blocking_completion, &instance->snd_done, 4); in cxacru_bind()
1198 usb_fill_bulk_urb(instance->rcv_urb, in cxacru_bind()
1200 instance->rcv_buf, PAGE_SIZE, in cxacru_bind()
1201 cxacru_blocking_completion, &instance->rcv_done); in cxacru_bind()
1203 usb_fill_bulk_urb(instance->snd_urb, in cxacru_bind()
1205 instance->snd_buf, PAGE_SIZE, in cxacru_bind()
1206 cxacru_blocking_completion, &instance->snd_done); in cxacru_bind()
1209 mutex_init(&instance->cm_serialize); in cxacru_bind()
1211 INIT_DELAYED_WORK(&instance->poll_work, cxacru_poll_status); in cxacru_bind()
1213 usbatm_instance->driver_data = instance; in cxacru_bind()
1215 usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT); in cxacru_bind()
1220 free_page((unsigned long) instance->snd_buf); in cxacru_bind()
1221 free_page((unsigned long) instance->rcv_buf); in cxacru_bind()
1222 usb_free_urb(instance->snd_urb); in cxacru_bind()
1223 usb_free_urb(instance->rcv_urb); in cxacru_bind()
1224 kfree(instance); in cxacru_bind()
1232 struct cxacru_data *instance = usbatm_instance->driver_data; in cxacru_unbind() local
1237 if (!instance) { in cxacru_unbind()
1242 mutex_lock(&instance->poll_state_serialize); in cxacru_unbind()
1243 BUG_ON(instance->poll_state == CXPOLL_SHUTDOWN); in cxacru_unbind()
1247 if (instance->poll_state == CXPOLL_STOPPED) in cxacru_unbind()
1251 instance->poll_state = CXPOLL_SHUTDOWN; in cxacru_unbind()
1252 mutex_unlock(&instance->poll_state_serialize); in cxacru_unbind()
1255 cancel_delayed_work_sync(&instance->poll_work); in cxacru_unbind()
1257 usb_kill_urb(instance->snd_urb); in cxacru_unbind()
1258 usb_kill_urb(instance->rcv_urb); in cxacru_unbind()
1259 usb_free_urb(instance->snd_urb); in cxacru_unbind()
1260 usb_free_urb(instance->rcv_urb); in cxacru_unbind()
1262 free_page((unsigned long) instance->snd_buf); in cxacru_unbind()
1263 free_page((unsigned long) instance->rcv_buf); in cxacru_unbind()
1265 kfree(instance); in cxacru_unbind()