Lines Matching defs:u132
112 struct u132 *u132;
147 struct u132 *u132;
173 struct u132 *u132;
177 struct u132 {
212 #define u132_read_pcimem(u132, member, data) \
213 usb_ftdi_elan_read_pcimem(u132->platform_dev, offsetof(struct \
215 #define u132_write_pcimem(u132, member, data) \
216 usb_ftdi_elan_write_pcimem(u132->platform_dev, offsetof(struct \
218 static inline struct u132 *udev_to_u132(struct u132_udev *udev)
221 return container_of(udev, struct u132, udev[udev_number]);
224 static inline struct u132 *hcd_to_u132(struct usb_hcd *hcd)
226 return (struct u132 *)(hcd->hcd_priv);
229 static inline struct usb_hcd *u132_to_hcd(struct u132 *u132)
231 return container_of((void *)u132, struct usb_hcd, hcd_priv);
234 static inline void u132_disable(struct u132 *u132)
236 u132_to_hcd(u132)->state = HC_STATE_HALT;
240 #define kref_to_u132(d) container_of(d, struct u132, kref)
250 struct u132 *u132 = kref_to_u132(kref);
251 struct platform_device *pdev = u132->platform_dev;
252 struct usb_hcd *hcd = u132_to_hcd(u132);
253 u132->going += 1;
257 dev_warn(&u132->platform_dev->dev, "FREEING the hcd=%p and thus the u13"
258 "2=%p going=%d pdev=%p\n", hcd, u132, u132->going, pdev);
262 static inline void u132_u132_put_kref(struct u132 *u132)
264 kref_put(&u132->kref, u132_hcd_delete);
267 static inline void u132_u132_init_kref(struct u132 *u132)
269 kref_init(&u132->kref);
281 static inline void u132_udev_put_kref(struct u132 *u132, struct u132_udev *udev)
286 static inline void u132_udev_get_kref(struct u132 *u132, struct u132_udev *udev)
291 static inline void u132_udev_init_kref(struct u132 *u132,
297 static inline void u132_ring_put_kref(struct u132 *u132, struct u132_ring *ring)
299 kref_put(&u132->kref, u132_hcd_delete);
302 static void u132_ring_requeue_work(struct u132 *u132, struct u132_ring *ring,
310 kref_put(&u132->kref, u132_hcd_delete);
313 static void u132_ring_queue_work(struct u132 *u132, struct u132_ring *ring,
316 kref_get(&u132->kref);
317 u132_ring_requeue_work(u132, ring, delta);
320 static void u132_ring_cancel_work(struct u132 *u132, struct u132_ring *ring)
323 kref_put(&u132->kref, u132_hcd_delete);
329 struct u132 *u132 = endp->u132;
332 u8 address = u132->addr[usb_addr].address;
333 struct u132_udev *udev = &u132->udev[address];
353 u132_udev_put_kref(u132, udev);
357 u132_udev_put_kref(u132, udev);
359 u132->endp[endp_number - 1] = NULL;
362 u132_u132_put_kref(u132);
365 static inline void u132_endp_put_kref(struct u132 *u132, struct u132_endp *endp)
370 static inline void u132_endp_get_kref(struct u132 *u132, struct u132_endp *endp)
375 static inline void u132_endp_init_kref(struct u132 *u132,
379 kref_get(&u132->kref);
382 static void u132_endp_queue_work(struct u132 *u132, struct u132_endp *endp,
389 static void u132_endp_cancel_work(struct u132 *u132, struct u132_endp *endp)
395 static inline void u132_monitor_put_kref(struct u132 *u132)
397 kref_put(&u132->kref, u132_hcd_delete);
400 static void u132_monitor_queue_work(struct u132 *u132, unsigned int delta)
402 if (queue_delayed_work(workqueue, &u132->monitor, delta))
403 kref_get(&u132->kref);
406 static void u132_monitor_requeue_work(struct u132 *u132, unsigned int delta)
408 if (!queue_delayed_work(workqueue, &u132->monitor, delta))
409 kref_put(&u132->kref, u132_hcd_delete);
412 static void u132_monitor_cancel_work(struct u132 *u132)
414 if (cancel_delayed_work(&u132->monitor))
415 kref_put(&u132->kref, u132_hcd_delete);
418 static int read_roothub_info(struct u132 *u132)
422 retval = u132_read_pcimem(u132, revision, &revision);
424 dev_err(&u132->platform_dev->dev, "error %d accessing device co"
430 dev_err(&u132->platform_dev->dev, "device revision is not valid"
434 retval = u132_read_pcimem(u132, control, &u132->hc_control);
436 dev_err(&u132->platform_dev->dev, "error %d accessing device co"
440 retval = u132_read_pcimem(u132, roothub.status,
441 &u132->hc_roothub_status);
443 dev_err(&u132->platform_dev->dev, "error %d accessing device re"
447 retval = u132_read_pcimem(u132, roothub.a, &u132->hc_roothub_a);
449 dev_err(&u132->platform_dev->dev, "error %d accessing device re"
454 int I = u132->num_ports;
457 retval = u132_read_pcimem(u132, roothub.portstatus[i],
458 &u132->hc_roothub_portstatus[i]);
460 dev_err(&u132->platform_dev->dev, "error %d acc"
473 struct u132 *u132 = container_of(work, struct u132, monitor.work);
474 if (u132->going > 1) {
475 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
476 , u132->going);
477 u132_monitor_put_kref(u132);
479 } else if (u132->going > 0) {
480 dev_err(&u132->platform_dev->dev, "device is being removed\n");
481 u132_monitor_put_kref(u132);
485 mutex_lock(&u132->sw_lock);
486 retval = read_roothub_info(u132);
488 struct usb_hcd *hcd = u132_to_hcd(u132);
489 u132_disable(u132);
490 u132->going = 1;
491 mutex_unlock(&u132->sw_lock);
493 ftdi_elan_gone_away(u132->platform_dev);
494 u132_monitor_put_kref(u132);
497 u132_monitor_requeue_work(u132, 500);
498 mutex_unlock(&u132->sw_lock);
504 static void u132_hcd_giveback_urb(struct u132 *u132, struct u132_endp *endp,
509 struct usb_hcd *hcd = u132_to_hcd(u132);
528 mutex_lock(&u132->scheduler_lock);
531 u132_ring_cancel_work(u132, ring);
532 u132_ring_queue_work(u132, ring, 0);
533 mutex_unlock(&u132->scheduler_lock);
534 u132_endp_put_kref(u132, endp);
538 static void u132_hcd_forget_urb(struct u132 *u132, struct u132_endp *endp,
541 u132_endp_put_kref(u132, endp);
544 static void u132_hcd_abandon_urb(struct u132 *u132, struct u132_endp *endp,
548 struct usb_hcd *hcd = u132_to_hcd(u132);
570 static inline int edset_input(struct u132 *u132, struct u132_ring *ring,
576 return usb_ftdi_elan_edset_input(u132->platform_dev, ring->number, endp,
580 static inline int edset_setup(struct u132 *u132, struct u132_ring *ring,
586 return usb_ftdi_elan_edset_setup(u132->platform_dev, ring->number, endp,
590 static inline int edset_single(struct u132 *u132, struct u132_ring *ring,
596 return usb_ftdi_elan_edset_single(u132->platform_dev, ring->number,
600 static inline int edset_output(struct u132 *u132, struct u132_ring *ring,
606 return usb_ftdi_elan_edset_output(u132->platform_dev, ring->number,
620 struct u132 *u132 = endp->u132;
621 u8 address = u132->addr[endp->usb_addr].address;
622 struct u132_udev *udev = &u132->udev[address];
623 mutex_lock(&u132->scheduler_lock);
624 if (u132->going > 1) {
625 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
626 , u132->going);
627 mutex_unlock(&u132->scheduler_lock);
628 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
632 mutex_unlock(&u132->scheduler_lock);
633 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
635 } else if (u132->going > 0) {
636 dev_err(&u132->platform_dev->dev, "device is being removed "
638 mutex_unlock(&u132->scheduler_lock);
639 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
658 mutex_unlock(&u132->scheduler_lock);
659 retval = edset_single(u132, ring, endp, urb,
663 u132_hcd_giveback_urb(u132, endp, urb,
670 u132_ring_cancel_work(u132, ring);
671 u132_ring_queue_work(u132, ring, 0);
672 mutex_unlock(&u132->scheduler_lock);
673 u132_endp_put_kref(u132, endp);
681 mutex_unlock(&u132->scheduler_lock);
682 u132_hcd_giveback_urb(u132, endp, urb, 0);
697 dev_err(&u132->platform_dev->dev, "urb=%p givin"
701 mutex_unlock(&u132->scheduler_lock);
702 u132_hcd_giveback_urb(u132, endp, urb,
707 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
709 mutex_unlock(&u132->scheduler_lock);
710 u132_hcd_giveback_urb(u132, endp, urb, 0);
720 struct u132 *u132 = endp->u132;
721 u8 address = u132->addr[endp->usb_addr].address;
722 mutex_lock(&u132->scheduler_lock);
723 if (u132->going > 1) {
724 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
725 , u132->going);
726 mutex_unlock(&u132->scheduler_lock);
727 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
731 mutex_unlock(&u132->scheduler_lock);
732 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
734 } else if (u132->going > 0) {
735 dev_err(&u132->platform_dev->dev, "device is being removed "
737 mutex_unlock(&u132->scheduler_lock);
738 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
746 mutex_unlock(&u132->scheduler_lock);
747 retval = edset_output(u132, ring, endp, urb, address,
750 u132_hcd_giveback_urb(u132, endp, urb, retval);
753 mutex_unlock(&u132->scheduler_lock);
754 u132_hcd_giveback_urb(u132, endp, urb, 0);
758 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
760 mutex_unlock(&u132->scheduler_lock);
761 u132_hcd_giveback_urb(u132, endp, urb, 0);
771 struct u132 *u132 = endp->u132;
772 u8 address = u132->addr[endp->usb_addr].address;
773 struct u132_udev *udev = &u132->udev[address];
774 mutex_lock(&u132->scheduler_lock);
775 if (u132->going > 1) {
776 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
777 , u132->going);
778 mutex_unlock(&u132->scheduler_lock);
779 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
783 mutex_unlock(&u132->scheduler_lock);
784 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
786 } else if (u132->going > 0) {
787 dev_err(&u132->platform_dev->dev, "device is being removed "
789 mutex_unlock(&u132->scheduler_lock);
790 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
808 mutex_unlock(&u132->scheduler_lock);
809 retval = usb_ftdi_elan_edset_input(u132->platform_dev,
814 u132_hcd_giveback_urb(u132, endp, urb, retval);
820 mutex_unlock(&u132->scheduler_lock);
821 u132_hcd_giveback_urb(u132, endp, urb,
829 mutex_unlock(&u132->scheduler_lock);
830 u132_hcd_giveback_urb(u132, endp, urb, 0);
836 dev_warn(&u132->platform_dev->dev, "urb=%p(SHORT NOT OK"
839 mutex_unlock(&u132->scheduler_lock);
840 u132_hcd_giveback_urb(u132, endp, urb, 0);
845 mutex_unlock(&u132->scheduler_lock);
846 u132_hcd_giveback_urb(u132, endp, urb,
852 dev_err(&u132->platform_dev->dev, "urb=%p giving back B"
855 mutex_unlock(&u132->scheduler_lock);
856 u132_hcd_giveback_urb(u132, endp, urb,
861 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
863 mutex_unlock(&u132->scheduler_lock);
864 u132_hcd_giveback_urb(u132, endp, urb, 0);
874 struct u132 *u132 = endp->u132;
875 mutex_lock(&u132->scheduler_lock);
876 if (u132->going > 1) {
877 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
878 , u132->going);
879 mutex_unlock(&u132->scheduler_lock);
880 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
884 mutex_unlock(&u132->scheduler_lock);
885 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
887 } else if (u132->going > 0) {
888 dev_err(&u132->platform_dev->dev, "device is being removed "
890 mutex_unlock(&u132->scheduler_lock);
891 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
894 mutex_unlock(&u132->scheduler_lock);
895 u132_hcd_giveback_urb(u132, endp, urb, 0);
898 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
900 mutex_unlock(&u132->scheduler_lock);
901 u132_hcd_giveback_urb(u132, endp, urb, 0);
911 struct u132 *u132 = endp->u132;
912 u8 address = u132->addr[endp->usb_addr].address;
913 mutex_lock(&u132->scheduler_lock);
914 if (u132->going > 1) {
915 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
916 , u132->going);
917 mutex_unlock(&u132->scheduler_lock);
918 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
922 mutex_unlock(&u132->scheduler_lock);
923 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
925 } else if (u132->going > 0) {
926 dev_err(&u132->platform_dev->dev, "device is being removed "
928 mutex_unlock(&u132->scheduler_lock);
929 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
945 mutex_unlock(&u132->scheduler_lock);
946 retval = usb_ftdi_elan_edset_empty(u132->platform_dev,
951 u132_hcd_giveback_urb(u132, endp, urb, retval);
954 mutex_unlock(&u132->scheduler_lock);
955 dev_warn(&u132->platform_dev->dev, "giving back SETUP I"
957 u132_hcd_giveback_urb(u132, endp, urb,
961 mutex_unlock(&u132->scheduler_lock);
962 dev_err(&u132->platform_dev->dev, "giving back SETUP IN"
965 u132_hcd_giveback_urb(u132, endp, urb,
970 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
972 mutex_unlock(&u132->scheduler_lock);
973 u132_hcd_giveback_urb(u132, endp, urb, 0);
983 struct u132 *u132 = endp->u132;
984 mutex_lock(&u132->scheduler_lock);
985 if (u132->going > 1) {
986 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
987 , u132->going);
988 mutex_unlock(&u132->scheduler_lock);
989 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
993 mutex_unlock(&u132->scheduler_lock);
994 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
996 } else if (u132->going > 0) {
997 dev_err(&u132->platform_dev->dev, "device is being removed "
999 mutex_unlock(&u132->scheduler_lock);
1000 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1003 mutex_unlock(&u132->scheduler_lock);
1004 u132_hcd_giveback_urb(u132, endp, urb, 0);
1007 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1009 mutex_unlock(&u132->scheduler_lock);
1010 u132_hcd_giveback_urb(u132, endp, urb, 0);
1020 struct u132 *u132 = endp->u132;
1021 u8 address = u132->addr[endp->usb_addr].address;
1022 mutex_lock(&u132->scheduler_lock);
1023 if (u132->going > 1) {
1024 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1025 , u132->going);
1026 mutex_unlock(&u132->scheduler_lock);
1027 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1031 mutex_unlock(&u132->scheduler_lock);
1032 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1034 } else if (u132->going > 0) {
1035 dev_err(&u132->platform_dev->dev, "device is being removed "
1037 mutex_unlock(&u132->scheduler_lock);
1038 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1044 mutex_unlock(&u132->scheduler_lock);
1045 retval = usb_ftdi_elan_edset_input(u132->platform_dev,
1050 u132_hcd_giveback_urb(u132, endp, urb, retval);
1055 mutex_unlock(&u132->scheduler_lock);
1056 retval = usb_ftdi_elan_edset_input(u132->platform_dev,
1061 u132_hcd_giveback_urb(u132, endp, urb, retval);
1065 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1067 mutex_unlock(&u132->scheduler_lock);
1068 u132_hcd_giveback_urb(u132, endp, urb, 0);
1078 struct u132 *u132 = endp->u132;
1079 u8 address = u132->addr[endp->usb_addr].address;
1080 struct u132_udev *udev = &u132->udev[address];
1081 mutex_lock(&u132->scheduler_lock);
1082 if (u132->going > 1) {
1083 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1084 , u132->going);
1085 mutex_unlock(&u132->scheduler_lock);
1086 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1090 mutex_unlock(&u132->scheduler_lock);
1091 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1093 } else if (u132->going > 0) {
1094 dev_err(&u132->platform_dev->dev, "device is being removed "
1096 mutex_unlock(&u132->scheduler_lock);
1097 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1100 u132->addr[0].address = 0;
1102 mutex_unlock(&u132->scheduler_lock);
1103 u132_hcd_giveback_urb(u132, endp, urb, 0);
1106 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1108 mutex_unlock(&u132->scheduler_lock);
1109 u132_hcd_giveback_urb(u132, endp, urb, 0);
1119 struct u132 *u132 = endp->u132;
1120 mutex_lock(&u132->scheduler_lock);
1121 if (u132->going > 1) {
1122 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1123 , u132->going);
1124 mutex_unlock(&u132->scheduler_lock);
1125 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1129 mutex_unlock(&u132->scheduler_lock);
1130 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1132 } else if (u132->going > 0) {
1133 dev_err(&u132->platform_dev->dev, "device is being removed "
1135 mutex_unlock(&u132->scheduler_lock);
1136 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1141 mutex_unlock(&u132->scheduler_lock);
1142 retval = usb_ftdi_elan_edset_input(u132->platform_dev,
1146 u132_hcd_giveback_urb(u132, endp, urb, retval);
1149 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1151 mutex_unlock(&u132->scheduler_lock);
1152 u132_hcd_giveback_urb(u132, endp, urb, 0);
1162 struct u132 *u132 = endp->u132;
1163 mutex_lock(&u132->scheduler_lock);
1164 if (u132->going > 1) {
1165 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1166 , u132->going);
1167 mutex_unlock(&u132->scheduler_lock);
1168 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1172 mutex_unlock(&u132->scheduler_lock);
1173 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1175 } else if (u132->going > 0) {
1176 dev_err(&u132->platform_dev->dev, "device is being removed "
1178 mutex_unlock(&u132->scheduler_lock);
1179 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1182 mutex_unlock(&u132->scheduler_lock);
1183 u132_hcd_giveback_urb(u132, endp, urb, 0);
1186 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1188 mutex_unlock(&u132->scheduler_lock);
1189 u132_hcd_giveback_urb(u132, endp, urb, 0);
1199 struct u132 *u132 = endp->u132;
1200 u8 address = u132->addr[endp->usb_addr].address;
1201 mutex_lock(&u132->scheduler_lock);
1202 if (u132->going > 1) {
1203 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1204 , u132->going);
1205 mutex_unlock(&u132->scheduler_lock);
1206 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1210 mutex_unlock(&u132->scheduler_lock);
1211 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1213 } else if (u132->going > 0) {
1214 dev_err(&u132->platform_dev->dev, "device is being removed "
1216 mutex_unlock(&u132->scheduler_lock);
1217 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1230 mutex_unlock(&u132->scheduler_lock);
1231 retval = usb_ftdi_elan_edset_empty(u132->platform_dev,
1235 u132_hcd_giveback_urb(u132, endp, urb, retval);
1238 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1240 mutex_unlock(&u132->scheduler_lock);
1241 u132_hcd_giveback_urb(u132, endp, urb, 0);
1251 struct u132 *u132 = endp->u132;
1252 u8 address = u132->addr[endp->usb_addr].address;
1253 mutex_lock(&u132->scheduler_lock);
1254 if (u132->going > 1) {
1255 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1256 , u132->going);
1257 mutex_unlock(&u132->scheduler_lock);
1258 u132_hcd_forget_urb(u132, endp, urb, -ENODEV);
1262 mutex_unlock(&u132->scheduler_lock);
1263 u132_hcd_giveback_urb(u132, endp, urb, -EINTR);
1265 } else if (u132->going > 0) {
1266 dev_err(&u132->platform_dev->dev, "device is being removed "
1268 mutex_unlock(&u132->scheduler_lock);
1269 u132_hcd_giveback_urb(u132, endp, urb, -ENODEV);
1274 mutex_unlock(&u132->scheduler_lock);
1275 retval = usb_ftdi_elan_edset_input(u132->platform_dev,
1279 u132_hcd_giveback_urb(u132, endp, urb, retval);
1282 dev_err(&u132->platform_dev->dev, "CALLBACK called urb=%p "
1284 mutex_unlock(&u132->scheduler_lock);
1285 u132_hcd_giveback_urb(u132, endp, urb, 0);
1298 struct u132 *u132 = ring->u132;
1299 mutex_lock(&u132->scheduler_lock);
1301 mutex_unlock(&u132->scheduler_lock);
1302 u132_ring_put_kref(u132, ring);
1312 u132_endp_cancel_work(u132, last_endp);
1313 u132_endp_queue_work(u132, last_endp, 0);
1314 mutex_unlock(&u132->scheduler_lock);
1315 u132_ring_put_kref(u132, ring);
1326 u132_endp_cancel_work(u132, last_endp);
1327 u132_endp_queue_work(u132, last_endp, 0);
1328 mutex_unlock(&u132->scheduler_lock);
1329 u132_ring_put_kref(u132, ring);
1337 u132_ring_requeue_work(u132, ring, wakeup);
1338 mutex_unlock(&u132->scheduler_lock);
1341 mutex_unlock(&u132->scheduler_lock);
1342 u132_ring_put_kref(u132, ring);
1346 mutex_unlock(&u132->scheduler_lock);
1347 u132_ring_put_kref(u132, ring);
1357 struct u132 *u132 = endp->u132;
1358 mutex_lock(&u132->scheduler_lock);
1363 usb_ftdi_elan_edset_flush(u132->platform_dev,
1365 mutex_unlock(&u132->scheduler_lock);
1366 u132_endp_put_kref(u132, endp);
1369 mutex_unlock(&u132->scheduler_lock);
1370 u132_endp_put_kref(u132, endp);
1373 mutex_unlock(&u132->scheduler_lock);
1374 u132_endp_put_kref(u132, endp);
1377 mutex_unlock(&u132->scheduler_lock);
1378 u132_endp_put_kref(u132, endp);
1381 u8 address = u132->addr[endp->usb_addr].address;
1383 mutex_unlock(&u132->scheduler_lock);
1384 u132_endp_put_kref(u132, endp);
1393 mutex_unlock(&u132->scheduler_lock);
1394 retval = edset_single(u132, ring, endp, urb, address,
1397 u132_hcd_giveback_urb(u132, endp, urb, retval);
1401 u8 address = u132->addr[endp->usb_addr].address;
1403 mutex_unlock(&u132->scheduler_lock);
1404 u132_endp_put_kref(u132, endp);
1413 mutex_unlock(&u132->scheduler_lock);
1414 retval = edset_setup(u132, ring, endp, urb, address,
1417 u132_hcd_giveback_urb(u132, endp, urb, retval);
1426 mutex_unlock(&u132->scheduler_lock);
1427 retval = edset_setup(u132, ring, endp, urb, 0, 0x2,
1430 u132_hcd_giveback_urb(u132, endp, urb, retval);
1436 address = u132->addr[endp->usb_addr].address;
1440 mutex_unlock(&u132->scheduler_lock);
1441 retval = edset_setup(u132, ring, endp, urb, address,
1444 u132_hcd_giveback_urb(u132, endp, urb, retval);
1449 u8 address = u132->addr[endp->usb_addr].address;
1451 mutex_unlock(&u132->scheduler_lock);
1452 u132_endp_put_kref(u132, endp);
1461 mutex_unlock(&u132->scheduler_lock);
1462 retval = edset_input(u132, ring, endp, urb,
1467 u132_hcd_giveback_urb(u132, endp, urb,
1472 u8 address = u132->addr[endp->usb_addr].address;
1474 mutex_unlock(&u132->scheduler_lock);
1475 u132_endp_put_kref(u132, endp);
1484 mutex_unlock(&u132->scheduler_lock);
1485 retval = edset_output(u132, ring, endp, urb,
1490 u132_hcd_giveback_urb(u132, endp, urb,
1499 static void port_power(struct u132 *u132, int pn, int is_on)
1501 u132->port[pn].power = is_on;
1506 static void u132_power(struct u132 *u132, int is_on)
1508 struct usb_hcd *hcd = u132_to_hcd(u132)
1511 if (u132->power)
1513 u132->power = 1;
1515 u132->power = 0;
1520 static int u132_periodic_reinit(struct u132 *u132)
1523 u32 fi = u132->hc_fminterval & 0x03fff;
1526 retval = u132_read_pcimem(u132, fminterval, &fminterval);
1530 retval = u132_write_pcimem(u132, fminterval,
1531 (fit ^ FIT) | u132->hc_fminterval);
1534 return u132_write_pcimem(u132, periodicstart,
1553 static int u132_init(struct u132 *u132)
1557 u132_disable(u132);
1558 u132->next_statechange = jiffies;
1559 retval = u132_write_pcimem(u132, intrdisable, OHCI_INTR_MIE);
1562 retval = u132_read_pcimem(u132, control, &control);
1565 if (u132->num_ports == 0) {
1567 retval = u132_read_pcimem(u132, roothub.a, &rh_a);
1570 u132->num_ports = rh_a & RH_A_NDP;
1571 retval = read_roothub_info(u132);
1575 if (u132->num_ports > MAX_U132_PORTS)
1586 static int u132_run(struct u132 *u132)
1596 int first = u132->hc_fminterval == 0;
1599 u132_disable(u132);
1602 retval = u132_read_pcimem(u132, fminterval, &temp);
1605 u132->hc_fminterval = temp & 0x3fff;
1606 u132->hc_fminterval |= FSMP(u132->hc_fminterval) << 16;
1608 retval = u132_read_pcimem(u132, control, &u132->hc_control);
1611 dev_info(&u132->platform_dev->dev, "resetting from state '%s', control "
1612 "= %08X\n", hcfs2string(u132->hc_control & OHCI_CTRL_HCFS),
1613 u132->hc_control);
1614 switch (u132->hc_control & OHCI_CTRL_HCFS) {
1620 u132->hc_control &= OHCI_CTRL_RWC;
1621 u132->hc_control |= OHCI_USB_RESUME;
1625 u132->hc_control &= OHCI_CTRL_RWC;
1626 u132->hc_control |= OHCI_USB_RESET;
1630 retval = u132_write_pcimem(u132, control, u132->hc_control);
1633 retval = u132_read_pcimem(u132, control, &control);
1637 retval = u132_read_pcimem(u132, roothub.a, &roothub_a);
1642 for (temp = 0; temp < u132->num_ports; temp++) {
1643 retval = u132_write_pcimem(u132,
1649 retval = u132_read_pcimem(u132, control, &control);
1653 retval = u132_read_pcimem(u132, cmdstatus, &status);
1656 retval = u132_write_pcimem(u132, cmdstatus, OHCI_HCR);
1660 retval = u132_read_pcimem(u132, cmdstatus, &status);
1665 dev_err(&u132->platform_dev->dev, "USB HC reset"
1674 if (u132->flags & OHCI_QUIRK_INITRESET) {
1675 retval = u132_write_pcimem(u132, control, u132->hc_control);
1678 retval = u132_read_pcimem(u132, control, &control);
1682 retval = u132_write_pcimem(u132, ed_controlhead, 0x00000000);
1685 retval = u132_write_pcimem(u132, ed_bulkhead, 0x11000000);
1688 retval = u132_write_pcimem(u132, hcca, 0x00000000);
1691 retval = u132_periodic_reinit(u132);
1694 retval = u132_read_pcimem(u132, fminterval, &fminterval);
1697 retval = u132_read_pcimem(u132, periodicstart, &periodicstart);
1701 if (!(u132->flags & OHCI_QUIRK_INITRESET)) {
1702 u132->flags |= OHCI_QUIRK_INITRESET;
1705 dev_err(&u132->platform_dev->dev, "init err(%08x %04x)"
1708 u132->hc_control &= OHCI_CTRL_RWC;
1709 u132->hc_control |= OHCI_CONTROL_INIT | OHCI_CTRL_BLE | OHCI_USB_OPER;
1710 retval = u132_write_pcimem(u132, control, u132->hc_control);
1713 retval = u132_write_pcimem(u132, cmdstatus, OHCI_BLF);
1716 retval = u132_read_pcimem(u132, cmdstatus, &cmdstatus);
1719 retval = u132_read_pcimem(u132, control, &control);
1722 u132_to_hcd(u132)->state = HC_STATE_RUNNING;
1723 retval = u132_write_pcimem(u132, roothub.status, RH_HS_DRWE);
1726 retval = u132_write_pcimem(u132, intrstatus, mask);
1729 retval = u132_write_pcimem(u132, intrdisable,
1735 retval = u132_read_pcimem(u132, roothub.a, &roothub_a);
1739 if (u132->flags & OHCI_QUIRK_SUPERIO) {
1742 retval = u132_write_pcimem(u132, roothub.a, roothub_a);
1745 } else if ((u132->flags & OHCI_QUIRK_AMD756) || distrust_firmware) {
1747 retval = u132_write_pcimem(u132, roothub.a, roothub_a);
1751 retval = u132_write_pcimem(u132, roothub.status, RH_HS_LPSC);
1754 retval = u132_write_pcimem(u132, roothub.b,
1758 retval = u132_read_pcimem(u132, control, &control);
1762 u132_to_hcd(u132)->state = HC_STATE_RUNNING;
1768 struct u132 *u132 = hcd_to_u132(hcd);
1769 if (u132->going > 1) {
1770 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p) has b"
1771 "een removed %d\n", u132, hcd, u132->going);
1772 } else if (u132->going > 0) {
1773 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov"
1776 mutex_lock(&u132->sw_lock);
1778 u132_power(u132, 0);
1779 mutex_unlock(&u132->sw_lock);
1785 struct u132 *u132 = hcd_to_u132(hcd);
1786 if (u132->going > 1) {
1787 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1788 , u132->going);
1790 } else if (u132->going > 0) {
1791 dev_err(&u132->platform_dev->dev, "device is being removed\n");
1801 mutex_lock(&u132->sw_lock);
1804 u132->flags = OHCI_QUIRK_AMD756;
1806 dev_err(&u132->platform_dev->dev, "WARNING: OPTi workar"
1809 u132->flags |= OHCI_QUIRK_ZFMICRO;
1810 retval = u132_run(u132);
1812 u132_disable(u132);
1813 u132->going = 1;
1816 mutex_unlock(&u132->sw_lock);
1819 dev_err(&u132->platform_dev->dev, "platform_device missing\n");
1826 struct u132 *u132 = hcd_to_u132(hcd);
1827 if (u132->going > 1) {
1828 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
1829 , u132->going);
1831 } else if (u132->going > 0) {
1832 dev_err(&u132->platform_dev->dev, "device is being removed\n");
1836 mutex_lock(&u132->sw_lock);
1837 retval = u132_init(u132);
1839 u132_disable(u132);
1840 u132->going = 1;
1842 mutex_unlock(&u132->sw_lock);
1847 static int create_endpoint_and_queue_int(struct u132 *u132,
1863 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb);
1870 endp_number = ++u132->num_endpoints;
1871 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp;
1874 ring = endp->ring = &u132->ring[0];
1887 endp->u132 = u132;
1890 u132_endp_init_kref(u132, endp);
1897 u132_udev_get_kref(u132, udev);
1904 u132_udev_get_kref(u132, udev);
1906 urb->hcpriv = u132;
1917 u132_endp_queue_work(u132, endp, msecs_to_jiffies(urb->interval));
1921 static int queue_int_on_old_endpoint(struct u132 *u132,
1926 urb->hcpriv = u132;
1945 static int create_endpoint_and_queue_bulk(struct u132 *u132,
1962 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb);
1969 endp_number = ++u132->num_endpoints;
1970 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp;
1978 endp->u132 = u132;
1981 u132_endp_init_kref(u132, endp);
1989 u132_udev_get_kref(u132, udev);
1997 u132_udev_get_kref(u132, udev);
1999 ring = endp->ring = &u132->ring[ring_number - 1];
2007 urb->hcpriv = u132;
2016 u132_endp_queue_work(u132, endp, 0);
2020 static int queue_bulk_on_old_endpoint(struct u132 *u132, struct u132_udev *udev,
2025 urb->hcpriv = u132;
2042 static int create_endpoint_and_queue_control(struct u132 *u132,
2058 rc = usb_hcd_link_urb_to_ep(u132_to_hcd(u132), urb);
2065 endp_number = ++u132->num_endpoints;
2066 urb->ep->hcpriv = u132->endp[endp_number - 1] = endp;
2069 ring = endp->ring = &u132->ring[0];
2082 endp->u132 = u132;
2084 u132_endp_init_kref(u132, endp);
2085 u132_endp_get_kref(u132, endp);
2087 u8 address = u132->addr[usb_addr].address;
2088 struct u132_udev *udev = &u132->udev[address];
2095 u132_udev_init_kref(u132, udev);
2096 u132_udev_get_kref(u132, udev);
2099 urb->hcpriv = u132;
2105 u132_endp_queue_work(u132, endp, 0);
2108 u8 address = u132->addr[usb_addr].address;
2109 struct u132_udev *udev = &u132->udev[address];
2116 u132_udev_get_kref(u132, udev);
2120 urb->hcpriv = u132;
2126 u132_endp_queue_work(u132, endp, 0);
2131 static int queue_control_on_old_endpoint(struct u132 *u132,
2138 urb->hcpriv = u132;
2157 struct u132_addr *addr = &u132->addr[usb_dev->devnum];
2161 struct u132_udev *udev = &u132->udev[++i];
2166 u132->addr[0].address = i;
2170 u132_udev_init_kref(u132, udev);
2173 u132_udev_get_kref(u132, udev);
2179 u132_udev_get_kref(u132, udev);
2184 dev_err(&u132->platform_dev->dev, "run out of d"
2188 urb->hcpriv = u132;
2208 u8 address = u132->addr[usb_addr].address;
2209 struct u132_udev *udev = &u132->udev[address];
2210 urb->hcpriv = u132;
2234 struct u132 *u132 = hcd_to_u132(hcd);
2241 if (u132->going > 1) {
2242 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2243 , u132->going);
2245 } else if (u132->going > 0) {
2246 dev_err(&u132->platform_dev->dev, "device is being removed "
2254 u8 address = u132->addr[usb_addr].address;
2255 struct u132_udev *udev = &u132->udev[address];
2266 u132, udev, urb,
2279 u132_endp_queue_work(u132, endp,
2284 } else if (u132->num_endpoints == MAX_U132_ENDPS) {
2287 return create_endpoint_and_queue_int(u132, udev,
2292 dev_err(&u132->platform_dev->dev, "the hardware does no"
2296 u8 address = u132->addr[usb_addr].address;
2297 struct u132_udev *udev = &u132->udev[address];
2308 u132, udev, urb,
2321 u132_endp_queue_work(u132, endp, 0);
2324 } else if (u132->num_endpoints == MAX_U132_ENDPS) {
2327 return create_endpoint_and_queue_bulk(u132,
2357 u132, urb, usb_dev,
2369 u132_endp_queue_work(u132, endp, 0);
2372 } else if (u132->num_endpoints == MAX_U132_ENDPS) {
2375 return create_endpoint_and_queue_control(u132,
2382 static int dequeue_from_overflow_chain(struct u132 *u132,
2389 struct usb_hcd *hcd = u132_to_hcd(u132);
2398 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]=%p ring"
2407 static int u132_endp_urb_dequeue(struct u132 *u132, struct u132_endp *endp,
2414 rc = usb_hcd_check_unlink_urb(u132_to_hcd(u132), urb, status);
2420 dev_err(&u132->platform_dev->dev, "urb=%p not found in endp[%d]"
2432 u132_endp_queue_work(u132, endp, 0);
2437 u132_hcd_abandon_urb(u132, endp, urb, status);
2461 struct usb_hcd *hcd = u132_to_hcd(u132);
2482 dev_err(&u132->platform_dev->dev, "urb=%p not found in "
2495 usb_hcd_unlink_urb_from_ep(u132_to_hcd(u132), urb);
2496 retval = dequeue_from_overflow_chain(u132, endp,
2506 struct u132 *u132 = hcd_to_u132(hcd);
2507 if (u132->going > 2) {
2508 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2509 , u132->going);
2514 u8 address = u132->addr[usb_addr].address;
2515 struct u132_udev *udev = &u132->udev[address];
2518 struct u132_endp *endp = u132->endp[endp_number - 1];
2519 return u132_endp_urb_dequeue(u132, endp, urb, status);
2522 struct u132_endp *endp = u132->endp[endp_number - 1];
2523 return u132_endp_urb_dequeue(u132, endp, urb, status);
2531 struct u132 *u132 = hcd_to_u132(hcd);
2532 if (u132->going > 2) {
2533 dev_err(&u132->platform_dev->dev, "u132 device %p(hcd=%p hep=%p"
2534 ") has been removed %d\n", u132, hcd, hep,
2535 u132->going);
2539 u132_endp_put_kref(u132, endp);
2545 struct u132 *u132 = hcd_to_u132(hcd);
2546 if (u132->going > 1) {
2547 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2548 , u132->going);
2550 } else if (u132->going > 0) {
2551 dev_err(&u132->platform_dev->dev, "device is being removed\n");
2554 dev_err(&u132->platform_dev->dev, "TODO: u132_get_frame\n");
2560 static int u132_roothub_descriptor(struct u132 *u132,
2567 retval = u132_read_pcimem(u132, roothub.a, &rh_a);
2573 desc->bNbrPorts = u132->num_ports;
2574 temp = 1 + (u132->num_ports / 8);
2586 retval = u132_read_pcimem(u132, roothub.b, &rh_b);
2592 if (u132->num_ports > 7) {
2600 static int u132_roothub_status(struct u132 *u132, __le32 *desc)
2603 int ret_status = u132_read_pcimem(u132, roothub.status, &rh_status);
2608 static int u132_roothub_portstatus(struct u132 *u132, __le32 *desc, u16 wIndex)
2610 if (wIndex == 0 || wIndex > u132->num_ports) {
2615 int ret_portstatus = u132_read_pcimem(u132,
2619 dev_info(&u132->platform_dev->dev, "Port %d Status Chan"
2632 static int u132_roothub_portreset(struct u132 *u132, int port_index)
2638 retval = u132_read_pcimem(u132, fmnumber, &fmnumber);
2646 retval = u132_read_pcimem(u132,
2659 retval = u132_write_pcimem(u132,
2668 retval = u132_write_pcimem(u132, roothub.portstatus[port_index],
2673 retval = u132_read_pcimem(u132, fmnumber, &fmnumber);
2681 static int u132_roothub_setportfeature(struct u132 *u132, u16 wValue,
2684 if (wIndex == 0 || wIndex > u132->num_ports) {
2688 struct u132_port *port = &u132->port[port_index];
2692 return u132_write_pcimem(u132,
2695 return u132_write_pcimem(u132,
2698 return u132_roothub_portreset(u132, port_index);
2705 static int u132_roothub_clearportfeature(struct u132 *u132, u16 wValue,
2708 if (wIndex == 0 || wIndex > u132->num_ports) {
2713 struct u132_port *port = &u132->port[port_index];
2724 if ((u132->hc_control & OHCI_CTRL_HCFS)
2726 dev_err(&u132->platform_dev->dev, "TODO resume_"
2748 return u132_write_pcimem(u132, roothub.portstatus[port_index],
2757 struct u132 *u132 = hcd_to_u132(hcd);
2758 if (u132->going > 1) {
2759 dev_err(&u132->platform_dev->dev, "device hcd=%p has been remov"
2760 "ed %d\n", hcd, u132->going);
2762 } else if (u132->going > 0) {
2763 dev_err(&u132->platform_dev->dev, "device hcd=%p is being remov"
2768 if (u132->flags & OHCI_QUIRK_AMD756) {
2769 if ((u132->hc_roothub_a & RH_A_NDP) > MAX_ROOT_PORTS) {
2770 dev_err(&u132->platform_dev->dev, "bogus NDP, r"
2772 u132->hc_roothub_a & RH_A_NDP);
2776 if (u132->hc_roothub_status & (RH_HS_LPSC | RH_HS_OCIC))
2780 if (u132->num_ports > 7) {
2784 for (i = 0; i < u132->num_ports; i++) {
2785 if (u132->hc_roothub_portstatus[i] & (RH_PS_CSC |
2795 if (!(u132->hc_roothub_portstatus[i] & RH_PS_CCS))
2798 if ((u132->hc_roothub_portstatus[i] & RH_PS_PSS))
2809 struct u132 *u132 = hcd_to_u132(hcd);
2810 if (u132->going > 1) {
2811 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2812 , u132->going);
2814 } else if (u132->going > 0) {
2815 dev_err(&u132->platform_dev->dev, "device is being removed\n");
2819 mutex_lock(&u132->sw_lock);
2840 retval = u132_roothub_clearportfeature(u132,
2847 retval = u132_roothub_descriptor(u132,
2854 retval = u132_roothub_status(u132,
2861 retval = u132_roothub_portstatus(u132,
2868 retval = u132_roothub_setportfeature(u132,
2877 u132_disable(u132);
2878 u132->going = 1;
2884 mutex_unlock(&u132->sw_lock);
2891 struct u132 *u132 = hcd_to_u132(hcd);
2892 if (u132->going > 1) {
2893 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2894 , u132->going);
2896 } else if (u132->going > 0) {
2897 dev_err(&u132->platform_dev->dev, "device is being removed\n");
2907 struct u132 *u132 = hcd_to_u132(hcd);
2908 if (u132->going > 1) {
2909 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2910 , u132->going);
2912 } else if (u132->going > 0) {
2913 dev_err(&u132->platform_dev->dev, "device is being removed\n");
2921 struct u132 *u132 = hcd_to_u132(hcd);
2922 if (u132->going > 1) {
2923 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
2924 , u132->going);
2926 } else if (u132->going > 0) {
2927 dev_err(&u132->platform_dev->dev, "device is being removed\n");
2939 .hcd_priv_size = sizeof(struct u132),
2966 struct u132 *u132 = hcd_to_u132(hcd);
2967 if (u132->going++ > 1) {
2968 dev_err(&u132->platform_dev->dev, "already being remove"
2974 dev_err(&u132->platform_dev->dev, "removing device u132"
2975 ".%d\n", u132->sequence_num);
2977 mutex_lock(&u132->sw_lock);
2978 u132_monitor_cancel_work(u132);
2980 struct u132_ring *ring = &u132->ring[rings];
2981 u132_ring_cancel_work(u132, ring);
2984 struct u132_endp *endp = u132->endp[endps];
2986 u132_endp_cancel_work(u132, endp);
2988 u132->going += 1;
2989 printk(KERN_INFO "removing device u132.%d\n",
2990 u132->sequence_num);
2991 mutex_unlock(&u132->sw_lock);
2993 u132_u132_put_kref(u132);
3000 static void u132_initialise(struct u132 *u132, struct platform_device *pdev)
3007 u132->board = dev_get_platdata(&pdev->dev);
3008 u132->platform_dev = pdev;
3009 u132->power = 0;
3010 u132->reset = 0;
3011 mutex_init(&u132->sw_lock);
3012 mutex_init(&u132->scheduler_lock);
3014 struct u132_ring *ring = &u132->ring[rings];
3015 ring->u132 = u132;
3022 mutex_lock(&u132->sw_lock);
3023 INIT_DELAYED_WORK(&u132->monitor, u132_hcd_monitor_work);
3025 struct u132_port *port = &u132->port[ports];
3026 port->u132 = u132;
3033 struct u132_addr *addr = &u132->addr[addrs];
3037 struct u132_udev *udev = &u132->udev[udevs];
3052 u132->endp[endps] = NULL;
3054 mutex_unlock(&u132->sw_lock);
3085 struct u132 *u132 = hcd_to_u132(hcd);
3089 u132->sequence_num = ++u132_instances;
3091 u132_u132_init_kref(u132);
3092 u132_initialise(u132, pdev);
3096 dev_err(&u132->platform_dev->dev, "init error %d\n",
3098 u132_u132_put_kref(u132);
3102 u132_monitor_queue_work(u132, 100);
3117 struct u132 *u132 = hcd_to_u132(hcd);
3118 if (u132->going > 1) {
3119 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
3120 , u132->going);
3122 } else if (u132->going > 0) {
3123 dev_err(&u132->platform_dev->dev, "device is being removed\n");
3136 port_power(u132, ports, 0);
3147 struct u132 *u132 = hcd_to_u132(hcd);
3148 if (u132->going > 1) {
3149 dev_err(&u132->platform_dev->dev, "device has been removed %d\n"
3150 , u132->going);
3152 } else if (u132->going > 0) {
3153 dev_err(&u132->platform_dev->dev, "device is being removed\n");
3157 if (!u132->port[0].power) {
3160 port_power(u132, ports, 1);
3197 workqueue = create_singlethread_workqueue("u132");
3215 printk(KERN_INFO "u132-hcd driver deregistered\n");