Linux USB 구동 개발 (2) - USB 구동 몇 가지 중요 한 데이터 구조

앞에서 우 리 는 USB 구동 의 설명 자 를 배 웠 고 다음은 USB 구동 의 몇 가지 중요 한 데이터 구 조 를 배 웠 다.
1. struct usbinterface  인터페이스 함수
struct usb_interface
{
         
         struct usb_host_interface *altsetting;

         struct usb_host_interface *cur_altsetting;      
         unsigned num_altsetting;        

         int minor;                      
         enum usb_interface_condition condition;         
         unsigned is_active:1;           
         unsigned needs_remote_wakeup:1; 

         struct device dev;              
         struct device *usb_dev;         
         int pm_usage_cnt;               
};

    struct usb_interface 의 struct usbhost_interface *cur_altsetting 구성원, 현재 사용 중인 설정 표시
1、struct usb_host_interface 
struct usb_host_interface 
{
         struct usb_interface_descriptor desc;//usb   ,     usb   ,     ,     ,           ,       usb              。
                                 //usb     usb   eeprom  
         /* array of desc.bNumEndpoint endpoints associated with this
          * interface setting. these will be in no particular order.
          */
         struct usb_host_endpoint *endpoint;//          

         char *string;           /* iInterface string, if present */
         unsigned char *extra;   /* Extra descriptors */       
         int extralen;
};

       구체 적 으로 인터페이스 설명자 에 이 르 면 인터페이스 자체 의 정 보 를 묘사 하 는 것 이다.하나의 인 터 페 이 스 는 여러 개의 설정 을 할 수 있 습 니 다. 서로 다른 설정 을 사용 하면 인 터 페 이 스 를 설명 하 는 정보 가 다 를 수 있 기 때문에 인터페이스 설명 자 는 struct usb 에 두 지 않 았 습 니 다.interface 구조 에 있 는 것 이 아니 라 인터페이스 설정 을 나타 내 는 struct usbhost_인터페이스 구조 에서.
2. struct usbhost_endpoint  점 함수
struct usb_host_endpoint 
{
         struct usb_endpoint_descriptor desc;
         struct list_head                urb_list;//      urb  .urb usb     ,               urb  .     usb  ,      urb,       ,
                                   //     usb core,       host controller,           
         void                            *hcpriv;//     HCD(host controller driver)  
         struct ep_device                *ep_dev;        /* For sysfs info */

         unsigned char *extra;   /* Extra descriptors */
         int extralen;
};

3. struct usb장치 장치 함수
struct usb_device {
	int devnum;         //devnum  usb     usb      .  usb_bus_type            128   
	char devpath [16];   /* Use in messages: /port/port/...*/  //  root hub.  dev->devpath[0]=’0’
	enum usb_device_state   state;  //     Attached,Powered,Default,Address,Configured,Suspended;
                               //Attached         usb    , hub           。       USB_STATE_NOTATTACHED         Attached。
                               //Address                   ,                   
                               //Configured               ,                0  SetConfiguration()  ,                 
                               //Suspended    ,    ,         ,3ms ,          ,        。  ,usb           、                    

	enum usb_device_speed   speed;  /* high/full/low (or error) */
	
	struct usb_tt   *tt;            //              TT,         /    ,   ,   /       ,     OHCI/UHCI     hub  。
	int             ttport;         //              TT,         /    ,   ,   /       ,     OHCI/UHCI     hub  。
	
	unsigned int toggle[2];         /* one bit for each endpoint     //          .IN    toggle[0].OUT    toggle[1].  ,           ep toggle 
	                                         * ([0] = IN, [1] = OUT) */                            DATA0  DATA1
	
	struct usb_device *parent;      /* our hub, unless we're the root */
                              //USB    Root Hub  ,         ,  Root Hub 4  ,      USB  ,        Hub,    Hub         ,          ,
                               //        。
	struct usb_bus *bus;            /* Bus we're part of */       
	struct usb_host_endpoint ep0;   //  0                  , struct usb_device             
	
	struct device dev;              /* Generic device interface */   struct usb_device    struct device  
	
	struct usb_device_descriptor descriptor;/* Descriptor */     ,     bMaxPacketSize0 filed     0 maximum packet size
	struct usb_host_config *config; //         
	
	struct usb_host_config *actconfig;//         
	struct usb_host_endpoint *ep_in[16];//ep_in[16],359 ,ep_out[16],    0,                   15 IN   15 OUT  ,  0    ,
	struct usb_host_endpoint *ep_out[16];//      Message  ,              ,     ep_in ep_out    16  
	
	char **rawdescriptors;          /* Raw descriptors for each config */
	
	unsigned short bus_mA;          /* Current available from the bus */     host controller         ,    ,    usb      500mA   
	u8 portnum;                     //   root hub     hub,  USB         hub       ,portnum       。
	u8 level;                       //  ,       ,  usb        。Root Hub level    0,       level 1,       level 2,    
	
	unsigned discon_suspended:1;    /* Disconnected while suspended */
	unsigned have_langid:1;         /* whether string_langid is valid */
	int string_langid;              /* language ID for strings */
	
	/* static strings from the device */
	char *product;                  /* iProduct string, if present */
	char *manufacturer;             /* iManufacturer string, if present */
	char *serial;                   /* iSerialNumber string, if present */
	                                //        、                 
	struct list_head filelist;
#ifdef CONFIG_USB_DEVICE_CLASS
	struct device *usb_classdev;
#endif
#ifdef CONFIG_USB_DEVICEFS
	struct dentry *usbfs_dentry;    /* usbfs dentry entry for the device */
#endif
	/*
	* Child devices - these can be either new devices
	* (if this is a hub device), or different instances
	* of this same device.
	*
	* Each instance needs its own set of data structures.
	*/
	
	int maxchild;                   /* Number of ports if hub */
	struct usb_device *children[USB_MAXCHILDREN];
	
	int pm_usage_cnt;               /* usage counter for autosuspend */
	u32 quirks;                     //quirk                  
	
#ifdef CONFIG_PM
	struct delayed_work autosuspend; /* for delayed autosuspends */
	struct mutex pm_mutex;          /* protects PM operations */
	
	unsigned long last_busy;        /* time of last use */
	int autosuspend_delay;          /* in jiffies */
	
	unsigned auto_pm:1;             /* autosuspend/resume in progress */
	unsigned do_remote_wakeup:1;    /* remote wakeup should be enabled */
	unsigned autosuspend_disabled:1; /* autosuspend and autoresume */
	unsigned autoresume_disabled:1;  /*  disabled by the user */
#endif
};

4. struct usbhost_config 설정 함수
struct usb_host_config {
	struct usb_config_descriptor    desc;
	
	char *string;           
	        
	struct usb_interface *interface[USB_MAXINTERFACES];            //        ,                     
	
	       
	struct usb_interface_cache *intf_cache[USB_MAXINTERFACES];        //usb     
	
	unsigned char *extra;   
	int extralen;
};

좋은 웹페이지 즐겨찾기