aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz Fernando N. Capitulino <lcapitulino@mandriva.com.br>2006-09-27 14:58:53 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2006-09-27 14:58:53 -0400
commitb7cfaaaf86571732c7728e95a2231a860385463c (patch)
tree42faec6a06598baafc16639d4e367457edbc555a
parent3d5b2510f6e361e2203e163c03b93d0026de5629 (diff)
USB: New functions to check endpoints info.
These functions makes USB driver's code simpler when dealing with endpoints by avoiding them from accessing the endpoint's descriptor structure directly when they only need to know the endpoint's transfer type and/or direction. Please, read each functions' documentation in order to know how to use them. Signed-off-by: Luiz Fernando N. Capitulino <lcapitulino@mandriva.com.br> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/core/usb.c144
-rw-r--r--include/linux/usb.h14
2 files changed, 158 insertions, 0 deletions
diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
index 9ebfc0fe819d..82837d45b484 100644
--- a/drivers/usb/core/usb.c
+++ b/drivers/usb/core/usb.c
@@ -482,6 +482,138 @@ int usb_get_current_frame_number(struct usb_device *dev)
482 return dev->bus->op->get_frame_number (dev); 482 return dev->bus->op->get_frame_number (dev);
483} 483}
484 484
485/**
486 * usb_endpoint_dir_in - check if the endpoint has IN direction
487 * @epd: endpoint to be checked
488 *
489 * Returns true if the endpoint is of type IN, otherwise it returns false.
490 */
491int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
492{
493 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
494}
495
496/**
497 * usb_endpoint_dir_out - check if the endpoint has OUT direction
498 * @epd: endpoint to be checked
499 *
500 * Returns true if the endpoint is of type OUT, otherwise it returns false.
501 */
502int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd)
503{
504 return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
505}
506
507/**
508 * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
509 * @epd: endpoint to be checked
510 *
511 * Returns true if the endpoint is of type bulk, otherwise it returns false.
512 */
513int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd)
514{
515 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
516 USB_ENDPOINT_XFER_BULK);
517}
518
519/**
520 * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
521 * @epd: endpoint to be checked
522 *
523 * Returns true if the endpoint is of type interrupt, otherwise it returns
524 * false.
525 */
526int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
527{
528 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
529 USB_ENDPOINT_XFER_INT);
530}
531
532/**
533 * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
534 * @epd: endpoint to be checked
535 *
536 * Returns true if the endpoint is of type isochronous, otherwise it returns
537 * false.
538 */
539int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd)
540{
541 return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
542 USB_ENDPOINT_XFER_ISOC);
543}
544
545/**
546 * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
547 * @epd: endpoint to be checked
548 *
549 * Returns true if the endpoint has bulk transfer type and IN direction,
550 * otherwise it returns false.
551 */
552int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd)
553{
554 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd));
555}
556
557/**
558 * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
559 * @epd: endpoint to be checked
560 *
561 * Returns true if the endpoint has bulk transfer type and OUT direction,
562 * otherwise it returns false.
563 */
564int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd)
565{
566 return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd));
567}
568
569/**
570 * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
571 * @epd: endpoint to be checked
572 *
573 * Returns true if the endpoint has interrupt transfer type and IN direction,
574 * otherwise it returns false.
575 */
576int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
577{
578 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
579}
580
581/**
582 * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
583 * @epd: endpoint to be checked
584 *
585 * Returns true if the endpoint has interrupt transfer type and OUT direction,
586 * otherwise it returns false.
587 */
588int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *epd)
589{
590 return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd));
591}
592
593/**
594 * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
595 * @epd: endpoint to be checked
596 *
597 * Returns true if the endpoint has isochronous transfer type and IN direction,
598 * otherwise it returns false.
599 */
600int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *epd)
601{
602 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd));
603}
604
605/**
606 * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
607 * @epd: endpoint to be checked
608 *
609 * Returns true if the endpoint has isochronous transfer type and OUT direction,
610 * otherwise it returns false.
611 */
612int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor *epd)
613{
614 return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd));
615}
616
485/*-------------------------------------------------------------------*/ 617/*-------------------------------------------------------------------*/
486/* 618/*
487 * __usb_get_extra_descriptor() finds a descriptor of specific type in the 619 * __usb_get_extra_descriptor() finds a descriptor of specific type in the
@@ -909,6 +1041,18 @@ EXPORT_SYMBOL(__usb_get_extra_descriptor);
909EXPORT_SYMBOL(usb_find_device); 1041EXPORT_SYMBOL(usb_find_device);
910EXPORT_SYMBOL(usb_get_current_frame_number); 1042EXPORT_SYMBOL(usb_get_current_frame_number);
911 1043
1044EXPORT_SYMBOL_GPL(usb_endpoint_dir_in);
1045EXPORT_SYMBOL_GPL(usb_endpoint_dir_out);
1046EXPORT_SYMBOL_GPL(usb_endpoint_xfer_bulk);
1047EXPORT_SYMBOL_GPL(usb_endpoint_xfer_int);
1048EXPORT_SYMBOL_GPL(usb_endpoint_xfer_isoc);
1049EXPORT_SYMBOL_GPL(usb_endpoint_is_bulk_in);
1050EXPORT_SYMBOL_GPL(usb_endpoint_is_bulk_out);
1051EXPORT_SYMBOL_GPL(usb_endpoint_is_int_in);
1052EXPORT_SYMBOL_GPL(usb_endpoint_is_int_out);
1053EXPORT_SYMBOL_GPL(usb_endpoint_is_isoc_in);
1054EXPORT_SYMBOL_GPL(usb_endpoint_is_isoc_out);
1055
912EXPORT_SYMBOL (usb_buffer_alloc); 1056EXPORT_SYMBOL (usb_buffer_alloc);
913EXPORT_SYMBOL (usb_buffer_free); 1057EXPORT_SYMBOL (usb_buffer_free);
914 1058
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 3d5cfa731680..f807479ef65b 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -467,6 +467,20 @@ static inline int usb_make_path (struct usb_device *dev, char *buf,
467 467
468/*-------------------------------------------------------------------------*/ 468/*-------------------------------------------------------------------------*/
469 469
470extern int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd);
471extern int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd);
472extern int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd);
473extern int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd);
474extern int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd);
475extern int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd);
476extern int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd);
477extern int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd);
478extern int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *epd);
479extern int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *epd);
480extern int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor *epd);
481
482/*-------------------------------------------------------------------------*/
483
470#define USB_DEVICE_ID_MATCH_DEVICE \ 484#define USB_DEVICE_ID_MATCH_DEVICE \
471 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT) 485 (USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_PRODUCT)
472#define USB_DEVICE_ID_MATCH_DEV_RANGE \ 486#define USB_DEVICE_ID_MATCH_DEV_RANGE \