Submit Search
Upload
USB Drivers
•
12 likes
•
43,546 views
Anil Kumar Pugalia
Follow
USB Host & Gadget Device Drivers in Linux
Read less
Read more
Technology
Report
Share
Report
Share
1 of 31
Recommended
Block Drivers
Block Drivers
Anil Kumar Pugalia
I2C Drivers
I2C Drivers
SysPlay eLearning Academy for You
Linux Porting
Linux Porting
Anil Kumar Pugalia
PCI Drivers
PCI Drivers
Anil Kumar Pugalia
Linux device drivers
Linux device drivers
Emertxe Information Technologies Pvt Ltd
Bootloaders (U-Boot)
Bootloaders (U-Boot)
Omkar Rane
U-Boot presentation 2013
U-Boot presentation 2013
Wave Digitech
Uboot startup sequence
Uboot startup sequence
Houcheng Lin
Recommended
Block Drivers
Block Drivers
Anil Kumar Pugalia
I2C Drivers
I2C Drivers
SysPlay eLearning Academy for You
Linux Porting
Linux Porting
Anil Kumar Pugalia
PCI Drivers
PCI Drivers
Anil Kumar Pugalia
Linux device drivers
Linux device drivers
Emertxe Information Technologies Pvt Ltd
Bootloaders (U-Boot)
Bootloaders (U-Boot)
Omkar Rane
U-Boot presentation 2013
U-Boot presentation 2013
Wave Digitech
Uboot startup sequence
Uboot startup sequence
Houcheng Lin
Introduction to Linux Drivers
Introduction to Linux Drivers
Anil Kumar Pugalia
Bootloaders
Bootloaders
Anil Kumar Pugalia
U-Boot - An universal bootloader
U-Boot - An universal bootloader
Emertxe Information Technologies Pvt Ltd
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
RuggedBoardGroup
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Emertxe Information Technologies Pvt Ltd
Network Drivers
Network Drivers
Anil Kumar Pugalia
SPI Drivers
SPI Drivers
SysPlay eLearning Academy for You
U Boot or Universal Bootloader
U Boot or Universal Bootloader
Satpal Parmar
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Anil Kumar Pugalia
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
linuxlab_conf
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
Arm device tree and linux device drivers
Arm device tree and linux device drivers
Houcheng Lin
linux device driver
linux device driver
Rahul Batra
Pcie drivers basics
Pcie drivers basics
Venkatesh Malla
Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)
Macpaul Lin
U boot porting guide for SoC
U boot porting guide for SoC
Macpaul Lin
Spi drivers
Spi drivers
pradeep_tewani
Architecture Of The Linux Kernel
Architecture Of The Linux Kernel
guest547d74
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
SysPlay eLearning Academy for You
Introduction Linux Device Drivers
Introduction Linux Device Drivers
NEEVEE Technologies
Serial Drivers
Serial Drivers
SysPlay eLearning Academy for You
Interrupts
Interrupts
Anil Kumar Pugalia
More Related Content
What's hot
Introduction to Linux Drivers
Introduction to Linux Drivers
Anil Kumar Pugalia
Bootloaders
Bootloaders
Anil Kumar Pugalia
U-Boot - An universal bootloader
U-Boot - An universal bootloader
Emertxe Information Technologies Pvt Ltd
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
RuggedBoardGroup
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Emertxe Information Technologies Pvt Ltd
Network Drivers
Network Drivers
Anil Kumar Pugalia
SPI Drivers
SPI Drivers
SysPlay eLearning Academy for You
U Boot or Universal Bootloader
U Boot or Universal Bootloader
Satpal Parmar
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Anil Kumar Pugalia
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
linuxlab_conf
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Emertxe Information Technologies Pvt Ltd
Arm device tree and linux device drivers
Arm device tree and linux device drivers
Houcheng Lin
linux device driver
linux device driver
Rahul Batra
Pcie drivers basics
Pcie drivers basics
Venkatesh Malla
Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)
Macpaul Lin
U boot porting guide for SoC
U boot porting guide for SoC
Macpaul Lin
Spi drivers
Spi drivers
pradeep_tewani
Architecture Of The Linux Kernel
Architecture Of The Linux Kernel
guest547d74
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
SysPlay eLearning Academy for You
Introduction Linux Device Drivers
Introduction Linux Device Drivers
NEEVEE Technologies
What's hot
(20)
Introduction to Linux Drivers
Introduction to Linux Drivers
Bootloaders
Bootloaders
U-Boot - An universal bootloader
U-Boot - An universal bootloader
U-Boot Porting on New Hardware
U-Boot Porting on New Hardware
Embedded Linux Kernel - Build your custom kernel
Embedded Linux Kernel - Build your custom kernel
Network Drivers
Network Drivers
SPI Drivers
SPI Drivers
U Boot or Universal Bootloader
U Boot or Universal Bootloader
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Jagan Teki - U-boot from scratch
Jagan Teki - U-boot from scratch
Embedded Android : System Development - Part II (Linux device drivers)
Embedded Android : System Development - Part II (Linux device drivers)
Arm device tree and linux device drivers
Arm device tree and linux device drivers
linux device driver
linux device driver
Pcie drivers basics
Pcie drivers basics
Bootstrap process of u boot (NDS32 RISC CPU)
Bootstrap process of u boot (NDS32 RISC CPU)
U boot porting guide for SoC
U boot porting guide for SoC
Spi drivers
Spi drivers
Architecture Of The Linux Kernel
Architecture Of The Linux Kernel
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
Introduction Linux Device Drivers
Introduction Linux Device Drivers
Viewers also liked
Serial Drivers
Serial Drivers
SysPlay eLearning Academy for You
Interrupts
Interrupts
Anil Kumar Pugalia
File System Modules
File System Modules
Anil Kumar Pugalia
Video Drivers
Video Drivers
Anil Kumar Pugalia
Low-level Accesses
Low-level Accesses
Anil Kumar Pugalia
Audio Drivers
Audio Drivers
Anil Kumar Pugalia
Kernel Programming
Kernel Programming
Anil Kumar Pugalia
gcc and friends
gcc and friends
Anil Kumar Pugalia
References
References
Anil Kumar Pugalia
Embedded C
Embedded C
Anil Kumar Pugalia
Platform Drivers
Platform Drivers
SysPlay eLearning Academy for You
Character Drivers
Character Drivers
Anil Kumar Pugalia
Viewers also liked
(12)
Serial Drivers
Serial Drivers
Interrupts
Interrupts
File System Modules
File System Modules
Video Drivers
Video Drivers
Low-level Accesses
Low-level Accesses
Audio Drivers
Audio Drivers
Kernel Programming
Kernel Programming
gcc and friends
gcc and friends
References
References
Embedded C
Embedded C
Platform Drivers
Platform Drivers
Character Drivers
Character Drivers
Similar to USB Drivers
Usb Drive Protector
Usb Drive Protector
Aashiq Ahamed N
Useful USB Gadgets on Linux
Useful USB Gadgets on Linux
Gary Bisson
BeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
SysPlay eLearning Academy for You
SR-IOV Introduce
SR-IOV Introduce
Lingfei Kong
Embedded I/O Management
Embedded I/O Management
Anil Kumar Pugalia
Study on Android Emulator
Study on Android Emulator
Samael Wang
Cold front - bridging the web and the physical world
Cold front - bridging the web and the physical world
Kenneth Rohde Christiansen
Linux Usb overview
Linux Usb overview
Satyam Sharma
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
SysPlay eLearning Academy for You
Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019
Daniel Maslowski
PICDriver
PICDriver
John Dunbar
Beagle board101 esc-boston-2009b
Beagle board101 esc-boston-2009b
Michael Hallak-Stamler
Introduction to Embedded Systems
Introduction to Embedded Systems
Anil Kumar Pugalia
Embedded Applications
Embedded Applications
Anil Kumar Pugalia
Notes for LX0-101 Linux
Notes for LX0-101 Linux
Chris Henson, CCNP
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
EmbeddedFest
Software and its types
Software and its types
Waheed Iqbal Boss
Slimline Open Firmware
Slimline Open Firmware
Heiko Joerg Schick
How to Hack Edison
How to Hack Edison
Shotaro Uchida
SESI 7 RouterTroubleshooting.pptx
SESI 7 RouterTroubleshooting.pptx
FirmanAFauzi1
Similar to USB Drivers
(20)
Usb Drive Protector
Usb Drive Protector
Useful USB Gadgets on Linux
Useful USB Gadgets on Linux
BeagleBoard-xM Booting Process
BeagleBoard-xM Booting Process
SR-IOV Introduce
SR-IOV Introduce
Embedded I/O Management
Embedded I/O Management
Study on Android Emulator
Study on Android Emulator
Cold front - bridging the web and the physical world
Cold front - bridging the web and the physical world
Linux Usb overview
Linux Usb overview
BeagleBone Black Bootloaders
BeagleBone Black Bootloaders
Open Source Firmware - FrOSCon 2019
Open Source Firmware - FrOSCon 2019
PICDriver
PICDriver
Beagle board101 esc-boston-2009b
Beagle board101 esc-boston-2009b
Introduction to Embedded Systems
Introduction to Embedded Systems
Embedded Applications
Embedded Applications
Notes for LX0-101 Linux
Notes for LX0-101 Linux
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Embedded Fest 2019. Игорь Опанюк. Das U-boot v2019: a look under the hood
Software and its types
Software and its types
Slimline Open Firmware
Slimline Open Firmware
How to Hack Edison
How to Hack Edison
SESI 7 RouterTroubleshooting.pptx
SESI 7 RouterTroubleshooting.pptx
More from Anil Kumar Pugalia
File System Modules
File System Modules
Anil Kumar Pugalia
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Anil Kumar Pugalia
Processes
Processes
Anil Kumar Pugalia
System Calls
System Calls
Anil Kumar Pugalia
Introduction to Linux
Introduction to Linux
Anil Kumar Pugalia
Embedded Software Design
Embedded Software Design
Anil Kumar Pugalia
Playing with R L C Circuits
Playing with R L C Circuits
Anil Kumar Pugalia
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
Anil Kumar Pugalia
Shell Scripting
Shell Scripting
Anil Kumar Pugalia
Functional Programming with LISP
Functional Programming with LISP
Anil Kumar Pugalia
Power of vi
Power of vi
Anil Kumar Pugalia
"make" system
"make" system
Anil Kumar Pugalia
Hardware Design for Software Hackers
Hardware Design for Software Hackers
Anil Kumar Pugalia
RPM Building
RPM Building
Anil Kumar Pugalia
Linux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
Anil Kumar Pugalia
Linux Network Management
Linux Network Management
Anil Kumar Pugalia
System Calls
System Calls
Anil Kumar Pugalia
Timers
Timers
Anil Kumar Pugalia
Threads
Threads
Anil Kumar Pugalia
Synchronization
Synchronization
Anil Kumar Pugalia
More from Anil Kumar Pugalia
(20)
File System Modules
File System Modules
Kernel Debugging & Profiling
Kernel Debugging & Profiling
Processes
Processes
System Calls
System Calls
Introduction to Linux
Introduction to Linux
Embedded Software Design
Embedded Software Design
Playing with R L C Circuits
Playing with R L C Circuits
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
Shell Scripting
Shell Scripting
Functional Programming with LISP
Functional Programming with LISP
Power of vi
Power of vi
"make" system
"make" system
Hardware Design for Software Hackers
Hardware Design for Software Hackers
RPM Building
RPM Building
Linux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
Linux Network Management
Linux Network Management
System Calls
System Calls
Timers
Timers
Threads
Threads
Synchronization
Synchronization
Recently uploaded
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Khushali Kathiriya
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Orbitshub
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Dropbox
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
sammart93
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Juan lago vázquez
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
Zilliz
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Orbitshub
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
danishmna97
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
rafiqahmad00786416
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
Overkill Security
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
sudhanshuwaghmare1
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Overkill Security
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Angeliki Cooney
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Product Anonymous
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
apidays
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
Sandro Moreira
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Martijn de Jong
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
apidays
Recently uploaded
(20)
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
Ransomware_Q4_2023. The report. [EN].pdf
Ransomware_Q4_2023. The report. [EN].pdf
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
USB Drivers
1.
© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Drivers
2.
2© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? USB Evolution USB Subsystem: Host & Gadget Understanding of USB Protocol Writing USB Host Drivers Writing USB Gadget Drivers
3.
3© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Prologue What was USB designed for? A Unified Bus for Slow Devices So, design based on Master-Slave concept USB (Host) Controller is the “Single Master” UHC polls the Slave Peripherals / Devices Later Additions High Speed Specifications Bandwidth Allocation Ability But even today, the polling continues
4.
4© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Device Driver Types 2 Types: Both written for the Device USB Host (Device) Driver Runs on Host (Master) Drives the USB Device (Slave) USB Gadget (Device) Driver Runs on the USB Gadget / Device (Slave) Responds to a Host (Master) Pre-requisite: Gadget is Linux based
5.
5© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Subsystem View FS Layer USB Host Device Drivers ... USB Core USB Host / OTG Controller Driver(s) ... TTY Layer Char Layer Net Layer Block Layer Kernel Space User Applications USB Devices ... Hardware Space User Space usbfs User Mode Drivers USB Host / OTG Controller
6.
6© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Subsystem UHC Driver (uhci, ohci, ehci, otg) Hardware-specific USB Host Controller driver Hides all the hardware details from the layers above Provides a uniform interface to USB Core USB Core Module (usbcore) Provides the generic USB Protocol APIs for the kernel, in general By interfacing with the underlying UHC driver USB File System Module (usbfs) Uses USB Core to provide Kernel Windows & USB Devices as entries under /sys Enables writing User Mode USB Drivers USB Host Device Driver USB Device specific Driver Interfaces with the corresponding USB Device through the USB Core Provides interface to the User Space through the relevant Vertical(s)
7.
7© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Subsystem View USB Gadget Device Drivers ... USB Composite USB Device / OTG Controller Driver Kernel Space USB Host Hardware Space USB Device / OTG Controller Horizontal Layers Vertical Layers Peripherals User Applications User Space
8.
8© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Subsystem UDC Driver (*udc) Hardware-specific USB Device Controller driver Hides all the hardware details from the layers above Provides a uniform interface to USB Composite USB Composite Module (libcomposite) Provides the generic USB Protocol APIs for the kernel, in general By interfacing with the underlying UDC driver USB Gadget Device Driver USB Device specific Driver Interfaces with the USB Host through the USB Composite Exposes peripherals &/or (virtual) functionalities to the Host May provide (virtual) functionalities to the User Space through the relevant Layer(s) / Driver(s)
9.
9© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host & sysfs Command: /sbin/lspci <dom>:<bus>:<dev>:<fn> for <usbhubid> Kernel Window /sys/devices/pci0000:00/<usbhubid>/usb<hub> usb_device fields roothub-hubport:config.interface usb_interface fields PCI USB HC functions -> USB buses /sys/kernel/debug/usb/devices
10.
10© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Device Overview (Protocol) Device Config Interface Endpoint ... Endpoint Endpoint ... Interface USB Driver USB Driver ...
11.
11© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Device Endpoints Also called Pipes Direction OUT (host->device) IN (device->host) Four Types Control Interrupt Bulk Isochronous
12.
12© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Device Driver
13.
13© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Driver Data Structures Header: <linux/usb.h> Data Structures struct usb_device struct usb_host_config struct usb_interface interface_to_usbdev struct usb_host_endpoint struct usb_endpoint_descriptor
14.
14© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Core Functionality USB Host Device Driver Registration USB Host Device Hot Plugability probe: Vertical Registration disconnect: Vertical Unregistration USB Transfers through URBs
15.
15© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Device Driver Registration Header: <linux/usb.h> Data Structure: struct usb_driver struct module *owner const char *name const struct usb_device_id *id_table int (*probe)(struct usb_interface *, struct usb_device_id *) int (*disconnect)(struct usb_interface *) APIs int usb_register(struct usb_driver *); int usb_deregister(struct usb_driver *);
16.
16© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Host Device Hot-plug-ability Callback probe int usb_register_dev(intf, class); Callback disconnect int usb_deregister_dev(intf, class); Other Useful APIs (Header: <linux/usb.h> void usb_set_intfdata(intf, void *data); void *usb_get_intfdata(intf);
17.
17© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Request Block Header: <linux/usb.h> Data Structure: struct urb struct usb_device *dev unsigned int pipe unsigned int transfer_flags void *transfer_buffer int transfer_buffer_length usb_complete_t complete int actual_length int status Pipe type specific fields
18.
18© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. URB Operations Header: <linux/usb.h> URB Storage usb_alloc_urb(int iso_pkts, gfp_t flags); usb_free_urb(struct urb *); Populating the URB usb_fill_control_urb(urb, dev, pipe, req, buf, len, fn, ctxt); usb_fill_int_urb(urb, dev, pipe, buf, len, fn, ctxt, interval); usb_fill_bulk_urb(urb, dev, pipe, buf, len, fn, ctxt); Using the URB usb_submit_urb(struct urb *, gfp_t flags); usb_unlink_urb(struct urb *) / usb_kill_urb(struct urb *);
19.
19© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. URB Operations' Wrappers Header: <linux/usb.h> APIs usb_control_msg(dev, pipe, req, req_type, value, index, data, size, timeout); usb_interrupt_msg(dev, pipe, data, len, &act_len, timeout); usb_bulk_msg(dev, pipe, data, len, &act_len, timeout);
20.
20© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Device Driver
21.
21© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Data Structures Header: <linux/usb/composite.h> Data Structures struct usb_device_descriptor struct usb_gadget_strings struct usb_string struct usb_configuration struct usb_descriptor_header struct usb_interface_descriptor struct usb_endpoint_descriptor
22.
22© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Composite Functionality USB Gadget Device Driver Registration USB Gadget Device Creation bind: Gadget Setup unbind: Gadget Cleanup USB Gadget Endpoint Interactions
23.
23© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Driver Registration Header: <linux/usb/composite.h> Data Structure: struct usb_composite_driver const char *name const struct usb_device_descriptor *dev struct usb_gadget_strings **strings enum usb_device_speed max_speed int (*bind)(struct usb_composite_dev *cdev) int (*unbind)(struct usb_composite_dev *cdev) APIs int usb_composite_probe(struct usb_composite_driver *driver); void usb_composite_unregister(struct usb_composite_driver *driver);
24.
24© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Device Creation Header: <linux/usb/composite.h> Callback bind int usb_string_ids_tab(struct usb_composite_dev *c, struct usb_string *str); int usb_add_config_only(comp_dev, usb_cfg) int usb_add_function(usb_cfg, usb_fn); Callback unbind int usb_put_function(usb_fn); // int usb_remove_function(usb_cfg, usb_fn);
25.
25© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Function Addition Header: <linux/usb/composite.h> Callbacks in struct usb_function: int (*bind)(struct usb_configuration *c, struct usb_function *f); void (*unbind)(struct usb_configuration *c, struct usb_function *f); void (*free_func)(struct usb_function *f); int (*set_alt)(struct usb_function *f, unsigned interface, unsigned alt); // Must int (*get_alt)(struct usb_function *f, unsigned interface); void (*disable)(struct usb_function *f); // Must int (*setup)(struct usb_function *f, const struct usb_ctrlrequest *ctrlreq); ...
26.
26© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Descriptors Addition Header: <linux/usb/gadget.h> Through <linux/usb/composite.h> Typical invocations through function's bind / unbind/free_func: int usb_interface_id(struct usb_configuration *c, struct usb_function *f); int usb_string_id(struct usb_composite_dev *c); struct usb_ep *usb_ep_autoconfig(struct usb_gadget *gadget, struct usb_endpoint_descriptor *usb_ep); void usb_ep_autoconfig_reset(struct usb_gadget *gadget); int usb_assign_descriptors(struct usb_function *f, struct usb_descriptor_header **fs, struct usb_descriptor_header **hs, struct usb_descriptor_header **ss); void usb_free_all_descriptors(struct usb_function *f);
27.
27© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Endpoint Interactions Header: <linux/usb/gadget.h> Through <linux/usb/composite.h> Typical (Endpoint Interaction) APIs for set_alt / disable: int usb_ep_enable(struct usb_ep *ep); int usb_ep_disable(struct usb_ep *ep); struct usb_request *usb_ep_alloc_request(struct usb_ep *ep, gfp_t gfp_flags); void usb_ep_free_request(struct usb_ep *ep, struct usb_request *req); int usb_ep_queue(struct usb_ep *ep, struct usb_request *req, gfp_t gfp_flags); int usb_ep_dequeue(struct usb_ep *ep, struct usb_request *req); ...
28.
28© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Endpoint Request Header: <linux/usb/gadget.h> Through <linux/usb/composite.h> Data Structure: struct usb_request void *buf unsigned length void (*complete)(struct usb_ep *ep, struct usb_request *req); int status unsigned actual ... APIs: As mentioned under “Endpoint Interactions”
29.
29© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. USB Gadget Function Driver Registration Header: <linux/usb/composite.h> Data Structure: struct usb_function_driver const char *name struct usb_function_instance *(*alloc_inst)(void); struct usb_function *(*alloc_func)(struct usb_function_instance *inst); DECLARE_USB_FUNCTION(fn_name, fn_alloc_instance, fn_alloc); APIs int usb_function_register(struct usb_function_driver *); int usb_function_unregister(struct usb_function_driver *); Useful APIs for the function user gadget driver struct usb_function_instance *usb_get_function_instance(char *fn); struct usb_function *usb_get_function(struct usb_function_instance *);
30.
30© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? Evolution of USB USB Subsystem Host: The Four Components Gadget: The Three Components Understanding of USB Protocol USB Device Overview Writing USB Host Device Drivers Registration Hot Plug-ability Transfers Writing USB Gadget Device Drivers Registration Gadget Device Creation Function & Descriptors Addition Endpoint Interactions Writing USB Gadget Function Drivers
31.
31© 2010-15 SysPlay
Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?