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

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * Copyright (C)  Compaq Computer Corporation, 1998, 1999
  3.  * Copyright (C)  Extenex Corporation 2001
  4.  *
  5.  *  usb_ctl.h
  6.  *
  7.  *  PRIVATE interface used to share info among components of the SA-1100 USB
  8.  *  core: usb_ctl, usb_ep0, usb_recv and usb_send. Clients of the USB core
  9.  *  should use sa1100_usb.h.
  10.  *
  11.  */
  12. #ifndef _USB_CTL_H
  13. #define _USB_CTL_H
  14. #include <asm/dma.h>  /* dmach_t */
  15. /*
  16.  * These states correspond to those in the USB specification v1.0
  17.  * in chapter 8, Device Framework.
  18.  */
  19. enum { USB_STATE_NOTATTACHED=0, USB_STATE_ATTACHED=1,USB_STATE_POWERED=2,
  20.    USB_STATE_DEFAULT=3, USB_STATE_ADDRESS=4, USB_STATE_CONFIGURED=5,
  21.    USB_STATE_SUSPENDED=6};
  22. struct usb_stats_t {
  23.  unsigned long ep0_fifo_write_failures;
  24.  unsigned long ep0_bytes_written;
  25.  unsigned long ep0_fifo_read_failures;
  26.  unsigned long ep0_bytes_read;
  27. };
  28. struct usb_info_t
  29. {
  30.  char * client_name;
  31.  dmach_t dmach_tx, dmach_rx;
  32.  int state;
  33.  unsigned char address;
  34.  struct usb_stats_t stats;
  35. };
  36. /* in usb_ctl.c */
  37. extern struct usb_info_t usbd_info;
  38. /*
  39.  * Function Prototypes
  40.  */
  41. enum { kError=-1, kEvSuspend=0, kEvReset=1,
  42.    kEvResume=2, kEvAddress=3, kEvConfig=4, kEvDeConfig=5 };
  43. int usbctl_next_state_on_event( int event );
  44. /* endpoint zero */
  45. void ep0_reset(void);
  46. void ep0_int_hndlr(void);
  47. /* receiver */
  48. void ep1_state_change_notify( int new_state );
  49. int  ep1_recv(void);
  50. int  ep1_init(int chn);
  51. void ep1_int_hndlr(int status);
  52. void ep1_reset(void);
  53. void ep1_stall(void);
  54. /* xmitter */
  55. void ep2_state_change_notify( int new_state );
  56. void ep2_reset(void);
  57. int  ep2_init(int chn);
  58. void ep2_int_hndlr(int status);
  59. void ep2_stall(void);
  60. #define UDC_write(reg, val) { 
  61. int i = 10000; 
  62. do { 
  63.    (reg) = (val); 
  64. if (i-- <= 0) { 
  65. printk( "%s [%d]: write %#x to %p (%#x) failedn", 
  66. __FUNCTION__, __LINE__, (val), &(reg), (reg)); 
  67. break; 
  68. } while((reg) != (val)); 
  69. }
  70. #define UDC_set(reg, val) { 
  71. int i = 10000; 
  72. do { 
  73. (reg) |= (val); 
  74. if (i-- <= 0) { 
  75. printk( "%s [%d]: set %#x of %p (%#x) failedn", 
  76. __FUNCTION__, __LINE__, (val), &(reg), (reg)); 
  77. break; 
  78. } while(!((reg) & (val))); 
  79. }
  80. #define UDC_clear(reg, val) { 
  81. int i = 10000; 
  82. do { 
  83. (reg) &= ~(val); 
  84. if (i-- <= 0) { 
  85. printk( "%s [%d]: clear %#x of %p (%#x) failedn", 
  86. __FUNCTION__, __LINE__, (val), &(reg), (reg)); 
  87. break; 
  88. } while((reg) & (val)); 
  89. }
  90. #define UDC_flip(reg, val) { 
  91. int i = 10000; 
  92. (reg) = (val); 
  93. do { 
  94. (reg) = (val); 
  95. if (i-- <= 0) { 
  96. printk( "%s [%d]: flip %#x of %p (%#x) failedn", 
  97. __FUNCTION__, __LINE__, (val), &(reg), (reg)); 
  98. break; 
  99. } while(((reg) & (val))); 
  100. }
  101. #define CHECK_ADDRESS { if ( Ser0UDCAR == 1 ) { printk("%s:%d I lost my address!!!n",__FUNCTION__, __LINE__);}}
  102. #endif /* _USB_CTL_H */