usb_ctl.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (C)  Compaq Computer Corporation, 1998, 1999
  3.  * Copyright (C)  Extenex Corporation 2001
  4.  * Copyright (C)  MIZI Research Inc. 2002
  5.  *
  6.  *  usb_ctl.h
  7.  *
  8.  *  PRIVATE interface used to share info among components of the S3C2400 USB
  9.  *  core: usb_ctl, usb_ep0, usb_recv and usb_send. Clients of the USB core
  10.  *  should use s3c2400_usb.h.
  11.  *
  12.  *  bushi <bushi@mizi.com>
  13.  */
  14. #ifndef _USB_CTL_H
  15. #define _USB_CTL_H
  16. #include <asm/dma.h>  /* dmach_t */
  17. //#define TCNT 256
  18. /*
  19.  * These states correspond to those in the USB specification v1.0
  20.  * in chapter 8, Device Framework.
  21.  */
  22. enum { USB_STATE_NOTATTACHED=0, USB_STATE_ATTACHED=1,USB_STATE_POWERED=2,
  23.    USB_STATE_DEFAULT=3, USB_STATE_ADDRESS=4, USB_STATE_CONFIGURED=5,
  24.    USB_STATE_SUSPENDED=6};
  25. struct usb_stats_t {
  26.  unsigned long ep0_fifo_write_failures;
  27.  unsigned long ep0_bytes_written;
  28.  unsigned long ep0_fifo_read_failures;
  29.  unsigned long ep0_bytes_read;
  30. };
  31. struct usb_info_t
  32. {
  33.  char * client_name;
  34.  dmach_t dmach_tx, dmach_rx;
  35.  int state;
  36.  unsigned char address;
  37.  struct usb_stats_t stats;
  38. };
  39. /* in usb_ctl.c */
  40. extern struct usb_info_t usbd_info;
  41. /* in usb_ep0.c */
  42. extern unsigned int ep0_state;
  43. #define EP0_STATE_IDLE 0
  44. #define EP0_STATE_TRANSFER 1
  45. #define EP0_STATE_RECEIVER 2
  46. extern __u8 set_configuration;
  47. extern __u8 set_interface;
  48. extern __u8 device_status;
  49. extern __u8 ep0_status;
  50. extern __u8 ep_bulk_in_status;
  51. extern __u8 ep_bulk_out_status;
  52. /*
  53.  * Function Prototypes
  54.  */
  55. enum { kError=-1, kEvSuspend=0, kEvReset=1,
  56.    kEvResume=2, kEvAddress=3, kEvConfig=4, kEvDeConfig=5 };
  57. int usbctl_next_state_on_event( int event );
  58. /* endpoint zero */
  59. extern void ep0_reset(void);
  60. extern void ep0_int_hndlr(void);
  61. extern int  ep1_recv(void);
  62. extern int  ep1_init(int chn);
  63. extern void ep1_int_hndlr(int status);
  64. extern void ep1_reset(void);
  65. extern void ep1_stall(void);
  66. extern void ep2_reset(void);
  67. extern int  ep2_init(int chn);
  68. extern void ep2_int_hndlr(int status);
  69. extern void ep2_stall(void);
  70. #define Clear_pending(bit) { 
  71.     SRCPND = bit; 
  72.     INTPND = bit; 
  73.     INTPND; 
  74. }
  75. /* Wait until INTPND is changed for the case that the ISR is very short. */
  76. extern void ep2_dma_callback(void *buf_id, int size);
  77. extern void ep1_dma_callback(void *buf_id, int size);
  78. #endif /* _USB_CTL_H */