staticvoid gnss_usb_rx_complete(struct urb *urb)
{ struct gnss_usb *gusb = urb->context; struct gnss_device *gdev = gusb->gdev; int status = urb->status; int len; int ret;
switch (status) { case 0: break; case -ENOENT: case -ECONNRESET: case -ESHUTDOWN:
dev_dbg(&gdev->dev, "urb stopped: %d\n", status); return; case -EPIPE:
dev_err(&gdev->dev, "urb stopped: %d\n", status); return; default:
dev_dbg(&gdev->dev, "nonzero urb status: %d\n", status); goto resubmit;
}
len = urb->actual_length; if (len == 0) goto resubmit;
ret = gnss_insert_raw(gdev, urb->transfer_buffer, len); if (ret < len)
dev_dbg(&gdev->dev, "dropped %d bytes\n", len - ret);
resubmit:
ret = usb_submit_urb(urb, GFP_ATOMIC); if (ret && ret != -EPERM && ret != -ENODEV)
dev_err(&gdev->dev, "failed to resubmit urb: %d\n", ret);
}
ret = usb_submit_urb(gusb->read_urb, GFP_KERNEL); if (ret) { if (ret != -EPERM && ret != -ENODEV)
dev_err(&gdev->dev, "failed to submit urb: %d\n", ret); return ret;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.