Lines Matching refs:ecm
364 static void ecm_do_notify(struct f_ecm *ecm)
366 struct usb_request *req = ecm->notify_req;
368 struct usb_composite_dev *cdev = ecm->port.func.config->cdev;
373 if (atomic_read(&ecm->notify_count))
377 switch (ecm->notify_state) {
383 if (ecm->is_open)
391 ecm->is_open ? "true" : "false");
392 ecm->notify_state = ECM_NOTIFY_SPEED;
407 ecm->notify_state = ECM_NOTIFY_NONE;
411 event->wIndex = cpu_to_le16(ecm->ctrl_id);
413 atomic_inc(&ecm->notify_count);
414 status = usb_ep_queue(ecm->notify, req, GFP_ATOMIC);
416 atomic_dec(&ecm->notify_count);
421 static void ecm_notify(struct f_ecm *ecm)
428 ecm->notify_state = ECM_NOTIFY_CONNECT;
429 ecm_do_notify(ecm);
434 struct f_ecm *ecm = req->context;
435 struct usb_composite_dev *cdev = ecm->port.func.config->cdev;
441 atomic_dec(&ecm->notify_count);
445 atomic_set(&ecm->notify_count, 0);
446 ecm->notify_state = ECM_NOTIFY_NONE;
451 atomic_dec(&ecm->notify_count);
454 ecm_do_notify(ecm);
459 struct f_ecm *ecm = func_to_ecm(f);
476 if (w_length != 0 || w_index != ecm->ctrl_id)
483 ecm->port.cdc_filter = w_value;
505 DBG(cdev, "ecm req%02x.%02x v%04x i%04x l%d\n",
512 ERROR(cdev, "ecm req %02x.%02x response err %d\n",
524 struct f_ecm *ecm = func_to_ecm(f);
528 if (intf == ecm->ctrl_id) {
532 VDBG(cdev, "reset ecm control %d\n", intf);
533 usb_ep_disable(ecm->notify);
534 if (!(ecm->notify->desc)) {
535 VDBG(cdev, "init ecm ctrl %d\n", intf);
536 if (config_ep_by_speed(cdev->gadget, f, ecm->notify))
539 usb_ep_enable(ecm->notify);
542 } else if (intf == ecm->data_id) {
546 if (ecm->port.in_ep->enabled) {
547 DBG(cdev, "reset ecm\n");
548 gether_disconnect(&ecm->port);
551 if (!ecm->port.in_ep->desc ||
552 !ecm->port.out_ep->desc) {
553 DBG(cdev, "init ecm\n");
555 ecm->port.in_ep) ||
557 ecm->port.out_ep)) {
558 ecm->port.in_ep->desc = NULL;
559 ecm->port.out_ep->desc = NULL;
573 ecm->port.is_zlp_ok =
575 ecm->port.cdc_filter = DEFAULT_FILTER;
576 DBG(cdev, "activate ecm\n");
577 net = gether_connect(&ecm->port);
588 ecm_notify(ecm);
602 struct f_ecm *ecm = func_to_ecm(f);
604 if (intf == ecm->ctrl_id)
606 return ecm->port.in_ep->enabled ? 1 : 0;
611 struct f_ecm *ecm = func_to_ecm(f);
614 DBG(cdev, "ecm deactivated\n");
616 if (ecm->port.in_ep->enabled) {
617 gether_disconnect(&ecm->port);
619 ecm->port.in_ep->desc = NULL;
620 ecm->port.out_ep->desc = NULL;
623 usb_ep_disable(ecm->notify);
624 ecm->notify->desc = NULL;
649 struct f_ecm *ecm = func_to_ecm(&geth->func);
651 DBG(ecm->port.func.config->cdev, "%s\n", __func__);
653 ecm->is_open = true;
654 ecm_notify(ecm);
659 struct f_ecm *ecm = func_to_ecm(&geth->func);
661 DBG(ecm->port.func.config->cdev, "%s\n", __func__);
663 ecm->is_open = false;
664 ecm_notify(ecm);
675 struct f_ecm *ecm = func_to_ecm(f);
700 ecm_string_defs[1].s = ecm->ethaddr;
715 ecm->ctrl_id = status;
724 ecm->data_id = status;
736 ecm->port.in_ep = ep;
741 ecm->port.out_ep = ep;
750 ecm->notify = ep;
755 ecm->notify_req = usb_ep_alloc_request(ep, GFP_KERNEL);
756 if (!ecm->notify_req)
758 ecm->notify_req->buf = kmalloc(ECM_STATUS_BYTECOUNT, GFP_KERNEL);
759 if (!ecm->notify_req->buf)
761 ecm->notify_req->context = ecm;
762 ecm->notify_req->complete = ecm_notify_complete;
788 ecm->port.open = ecm_open;
789 ecm->port.close = ecm_close;
792 ecm->port.in_ep->name, ecm->port.out_ep->name,
793 ecm->notify->name);
797 if (ecm->notify_req) {
798 kfree(ecm->notify_req->buf);
799 usb_ep_free_request(ecm->notify, ecm->notify_req);
814 USB_ETHERNET_CONFIGFS_ITEM(ecm);
817 USB_ETHERNET_CONFIGFS_ITEM_ATTR_DEV_ADDR(ecm);
820 USB_ETHERNET_CONFIGFS_ITEM_ATTR_HOST_ADDR(ecm);
823 USB_ETHERNET_CONFIGFS_ITEM_ATTR_QMULT(ecm);
826 USB_ETHERNET_CONFIGFS_ITEM_ATTR_IFNAME(ecm);
877 struct f_ecm *ecm = func_to_ecm(f);
878 struct usb_composite_dev *cdev = ecm->port.func.config->cdev;
882 gether_suspend(&ecm->port);
887 struct f_ecm *ecm = func_to_ecm(f);
888 struct usb_composite_dev *cdev = ecm->port.func.config->cdev;
892 gether_resume(&ecm->port);
897 struct f_ecm *ecm;
900 ecm = func_to_ecm(f);
902 kfree(ecm);
910 struct f_ecm *ecm = func_to_ecm(f);
912 DBG(c->cdev, "ecm unbind\n");
916 if (atomic_read(&ecm->notify_count)) {
917 usb_ep_dequeue(ecm->notify, ecm->notify_req);
918 atomic_set(&ecm->notify_count, 0);
921 kfree(ecm->notify_req->buf);
922 usb_ep_free_request(ecm->notify, ecm->notify_req);
927 struct f_ecm *ecm;
932 ecm = kzalloc(sizeof(*ecm), GFP_KERNEL);
933 if (!ecm)
941 status = gether_get_host_addr_cdc(opts->net, ecm->ethaddr,
942 sizeof(ecm->ethaddr));
944 kfree(ecm);
949 ecm->port.ioport = netdev_priv(opts->net);
951 ecm->port.cdc_filter = DEFAULT_FILTER;
953 ecm->port.func.name = "cdc_ethernet";
955 ecm->port.func.bind = ecm_bind;
956 ecm->port.func.unbind = ecm_unbind;
957 ecm->port.func.set_alt = ecm_set_alt;
958 ecm->port.func.get_alt = ecm_get_alt;
959 ecm->port.func.setup = ecm_setup;
960 ecm->port.func.disable = ecm_disable;
961 ecm->port.func.free_func = ecm_free;
962 ecm->port.func.suspend = ecm_suspend;
963 ecm->port.func.resume = ecm_resume;
965 return &ecm->port.func;
968 DECLARE_USB_FUNCTION_INIT(ecm, ecm_alloc_inst, ecm_alloc);