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);
814 cxacru_poll_status(&instance->poll_work.work);
820 struct cxacru_data *instance =
823 struct usbatm_data *usbatm = instance->usbatm;
828 ret = cxacru_cm_get_array(instance, CM_REQUEST_CARD_INFO_GET, buf, CXINF_MAX);
833 mutex_lock(&instance->poll_state_serialize);
834 if (instance->poll_state != CXPOLL_SHUTDOWN) {
835 instance->poll_state = CXPOLL_STOPPED;
841 mutex_unlock(&instance->poll_state_serialize);
845 memcpy(instance->card_info, buf, sizeof(instance->card_info));
847 if (instance->adsl_status != buf[CXINF_LINE_STARTABLE]) {
848 instance->adsl_status = buf[CXINF_LINE_STARTABLE];
850 switch (instance->adsl_status) {
860 atm_info(usbatm, "Unknown adsl status %02x\n", instance->adsl_status);
865 if (instance->line_status == buf[CXINF_LINE_STATUS])
868 instance->line_status = buf[CXINF_LINE_STATUS];
869 switch (instance->line_status) {
915 atm_info(usbatm, "Unknown line state %02x\n", instance->line_status);
920 mutex_lock(&instance->poll_state_serialize);
921 if (instance->poll_state == CXPOLL_STOPPING &&
922 instance->adsl_status == 1 && /* stopped */
923 instance->line_status == 0) /* down */
924 instance->poll_state = CXPOLL_STOPPED;
926 if (instance->poll_state == CXPOLL_STOPPED)
928 mutex_unlock(&instance->poll_state_serialize);
931 schedule_delayed_work(&instance->poll_work,
983 static void cxacru_upload_firmware(struct cxacru_data *instance,
988 struct usbatm_data *usbatm = instance->usbatm;
997 val = cpu_to_le32(instance->modem_type->pll_f_clk);
1005 val = cpu_to_le32(instance->modem_type->pll_b_clk);
1029 if (instance->modem_type->boot_rom_patch) {
1046 if (instance->modem_type->boot_rom_patch) {
1065 ret = cxacru_cm(instance, CM_REQUEST_CARD_GET_STATUS, NULL, 0, NULL, 0);
1072 static int cxacru_find_firmware(struct cxacru_data *instance,
1075 struct usbatm_data *usbatm = instance->usbatm;
1096 struct cxacru_data *instance = usbatm_instance->driver_data;
1097 int ret = cxacru_find_firmware(instance, "fw", &fw);
1104 if (instance->modem_type->boot_rom_patch) {
1105 ret = cxacru_find_firmware(instance, "bp", &bp);
1113 cxacru_upload_firmware(instance, fw, bp);
1115 if (instance->modem_type->boot_rom_patch)
1119 ret = cxacru_card_status(instance);
1131 struct cxacru_data *instance;
1136 /* instance init */
1137 instance = kzalloc(sizeof(*instance), GFP_KERNEL);
1138 if (!instance)
1141 instance->usbatm = usbatm_instance;
1142 instance->modem_type = (struct cxacru_modem_type *) id->driver_info;
1144 mutex_init(&instance->poll_state_serialize);
1145 instance->poll_state = CXPOLL_STOPPED;
1146 instance->line_status = -1;
1147 instance->adsl_status = -1;
1149 mutex_init(&instance->adsl_state_serialize);
1151 instance->rcv_buf = (u8 *) __get_free_page(GFP_KERNEL);
1152 if (!instance->rcv_buf) {
1157 instance->snd_buf = (u8 *) __get_free_page(GFP_KERNEL);
1158 if (!instance->snd_buf) {
1163 instance->rcv_urb = usb_alloc_urb(0, GFP_KERNEL);
1164 if (!instance->rcv_urb) {
1168 instance->snd_urb = usb_alloc_urb(0, GFP_KERNEL);
1169 if (!instance->snd_urb) {
1182 usb_fill_int_urb(instance->rcv_urb,
1184 instance->rcv_buf, PAGE_SIZE,
1185 cxacru_blocking_completion, &instance->rcv_done, 1);
1187 usb_fill_int_urb(instance->snd_urb,
1189 instance->snd_buf, PAGE_SIZE,
1190 cxacru_blocking_completion, &instance->snd_done, 4);
1192 usb_fill_bulk_urb(instance->rcv_urb,
1194 instance->rcv_buf, PAGE_SIZE,
1195 cxacru_blocking_completion, &instance->rcv_done);
1197 usb_fill_bulk_urb(instance->snd_urb,
1199 instance->snd_buf, PAGE_SIZE,
1200 cxacru_blocking_completion, &instance->snd_done);
1203 mutex_init(&instance->cm_serialize);
1205 INIT_DELAYED_WORK(&instance->poll_work, cxacru_poll_status);
1207 usbatm_instance->driver_data = instance;
1209 usbatm_instance->flags = (cxacru_card_status(instance) ? 0 : UDSL_SKIP_HEAVY_INIT);
1214 free_page((unsigned long) instance->snd_buf);
1215 free_page((unsigned long) instance->rcv_buf);
1216 usb_free_urb(instance->snd_urb);
1217 usb_free_urb(instance->rcv_urb);
1218 kfree(instance);
1226 struct cxacru_data *instance = usbatm_instance->driver_data;
1231 if (!instance) {
1232 usb_dbg(usbatm_instance, "cxacru_unbind: NULL instance!\n");
1236 mutex_lock(&instance->poll_state_serialize);
1237 BUG_ON(instance->poll_state == CXPOLL_SHUTDOWN);
1241 if (instance->poll_state == CXPOLL_STOPPED)
1245 instance->poll_state = CXPOLL_SHUTDOWN;
1246 mutex_unlock(&instance->poll_state_serialize);
1249 cancel_delayed_work_sync(&instance->poll_work);
1251 usb_kill_urb(instance->snd_urb);
1252 usb_kill_urb(instance->rcv_urb);
1253 usb_free_urb(instance->snd_urb);
1254 usb_free_urb(instance->rcv_urb);
1256 free_page((unsigned long) instance->snd_buf);
1257 free_page((unsigned long) instance->rcv_buf);
1259 kfree(instance);