/* usb2/device.h
 *
 * (c) 2002,2003 Simtec Electronics
 *
 * Ben Dooks
 *
 * definition for usb2 device controls
 *
 * $Id: device.h,v 1.7 2003/10/21 21:38:07 ben Exp $
 *
 * This Library file is part of the Simtec Electronics USB stack development
 *   suite.
 * Specific licence is granted to use this file by third parties for the
 *   development of USB device drivers.
*/

#ifndef __USB2_DEVICE_H
#define __USB2_DEVICE_H "$Id: device.h,v 1.7 2003/10/21 21:38:07 ben Exp $"

#ifndef __USB2_STRUCTS_H
#include "usb2/structs.h"
#endif

struct usb2_devreg_s {
  unsigned long            flags;           /* for the flags field */
  unsigned long            speed;           /* device speed */
  unsigned short           usb_version;     /* usb version, * 100 */
  usb_tt_t                *tt;
};

extern usb_device_t usb_device_register2(struct usb_hc_s *hc,
					 unsigned long *unique_number,
					 struct usb2_devreg_s *dev_reg,
					 int *result);

/* usb2 support functions */

#define usb_is_v2dev_hasmagic(_dev)(((usb2_dev_t *)(_dev))->magic == USB2_MAGIC)

#define usb_is_v2dev(_dev)(usb_is_v2dev_hasmagic(_dev) && (((struct usb_device_s *)(_dev))->flags & USB2_DEVFLG_ISUSB2) == USB2_DEVFLG_ISUSB2)

#define usb_dev_getver2(_dev) ((_dev)->version)
#define usb_dev_getver(_dev) (usb_is_v2dev(_dev) ? usb_dev_getver2((usb2_dev_t *)(_dev)) : 110)

#define usb_get_v2dev(_dev) (usb_is_r2dev(_dev) ? ((usb2_dev_t *)(_dev)) : NULL)

#endif /* __USB2_DEVICE_H */




