SlideShare a Scribd company logo
1 of 16
© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Peripheral Component Interconnect (PCI) Drivers
2© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What to Expect?
PCI Subsystem
Coding Details of a PCI Device Driver
Browsing Sample Code
3© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
PCI Prologue
Developed by Intel as a replacement for ISA
More of a processor (specific) bus for x86 architectures
Replacing Features
Plug n Play
Platform independent
Fast
Hardware Addressing
Through South Bridge (PCI Controller)
Buses (upto 256) → Devices (upto 32) → Functions (upto 8)
4© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Kernel Aspect
Organized as
PCI Core (driver of the PCI Controller)
PCI Drivers (device drivers)
Kernel Windows for PCI
/proc/bus/pci/devices (Try cat)
/sys/bus/pci/devices (Try tree)
Command: lspci
5© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Dynamic Device Configuration
What Configuration?
Device Base Address(es)
Register Space(s)
Memory(s)
Interrupt Vectors
...
Done during Bootup by
BIOS, Or
PCI Core (Bootloader or Kernel)
Configured by the time, driver comes up
But, where is this configuration stored?
6© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
PCI Device Configuration Space
Vendor
ID
BIST
Header
Type
Lat
Timer
Cache
Line
Class Code
Rev
ID
Status
Register
Command
Register
Device
ID
0x0 0xF
Base Address 0
CardBus CIS pointerBase Address 5Base Address 4
Base Address 3Base Address 2Base Address 1
Subsystem
Vendor ID
Subsystem
Device ID
Expansion ROM
Base Address
IRQ
Line
IRQ
Pin
Min
Gnt
Max
Lat
0x00
0x30
0x20
0x10
Reserved
7© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
PCI Device Config Space Access
Header: <linux/pci.h>
APIs
int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val);
int pci_read_config_word(struct pci_dev *dev, int where, u16 *val);
int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val);
int pci_write_config_byte(struct pci_dev *dev, int where, u8 *val);
int pci_write_config_word(struct pci_dev *dev, int where, u16 *val);
int pci_write_config_dword(struct pci_dev *dev, int where, u32 *val);
NB struct pci_dev *dev would be available as parameter to
probe()
8© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Standard PCI Device Access API
Upto 6 Memory or I/O regions
Header: <linux/pci.h>
APIs
unsigned long pci_resource_start(dev, bar);
unsigned long pci_resource_len(dev, bar);
unsigned long pci_resource_flags(dev, bar);
Flags
IORESOURCE_IO
IORESOURCE_MEM
IORESOURCE_PREFETCH
9© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
PCI Driver Registration
int pci_register_driver(struct pci_driver *drv);
int pci_unregister_driver(struct pci_driver *drv);
struct pci_driver
const char *name
const struct pci_dev_id *id_table;
PCI_DEVICE(vendor, device);
PCI_DEVICE_CLASS(dev_class, dev_class_mask);
int (*probe)(pci_dev, id_table);
void (*remove)(pci_dev);
Header: <linux/pci.h>
10© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Typical 'probe' Function
int probe(struct pci_dev *dev, struct pci_dev_id *id)
{
/* Enable the PCI Device */
pci_enable_device(dev);
...
/* Acquire PCI Device's regions */
pci_request_regions(dev, “label”);
...
/* Possibly map I/Os */
...
pci_set_drvdata(dev, <pvt_data_ptr>); // Optional
...
/* Register the vertical */
...
return 0; /* Claimed. Negative for not Claimed */
}
11© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Typical 'remove' Function
void remove(struct pci_dev *dev)
{
/* Unregister the vertical */
...
pci_set_drvdata(dev, NULL); // Optional
...
/* Possibly unmap I/Os */
...
/* Release PCI Device's regions */
pci_release_regions(dev);
...
/* Disable the PCI Device */
pci_disable_device(dev);
}
12© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Old-style PCI Probing & Getting
struct pci_dev *pci_find_*(vendor, device, from);
struct pci_dev *pci_get_device(v, d, from);
struct pci_dev *pci_get_subsys(v, d, ssv, ssd, f);
struct pci_dev *pci_get_slot(bus, devfn);
pci_dev_put(pci_dev);
© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
DMA Mapping
APIs
dma_addr_t pci_map_single(struct pci_dev *, void *, size_t, int dir);
void pci_unmap_single(struct pci_dev *, dma_addr_t, size_t, int dir);
Directions
PCI_DMA_BIDIRECTIONAL
PCI_DMA_TODEVICE
PCI_DMA_FROMDEVICE
Header: <linux/pci.h>
To Device
PM VM
PA VA
From Device
© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
DMA Allocation
PM VM
APIs
void *pci_alloc_consistent(struct pci_dev *, size_t, dma_addr_t *);
void pci_free_consistent(struct pci_dev *, size_t, void *,
dma_addr_t);
int pci_set_dma_mask(struct pci_dev *, u64 mask);
Header: <linux/pci.h>
PA VA
15© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
What all have we learnt?
PCI Subsystem
Coding Details of a PCI Device Driver
Browsing Sample Code
DMA with PCI
16© 2010-17 SysPlay Workshops <workshop@sysplay.in>
All Rights Reserved.
Any Queries?

More Related Content

What's hot (20)

Network Drivers
Network DriversNetwork Drivers
Network Drivers
 
SPI Drivers
SPI DriversSPI Drivers
SPI Drivers
 
Linux Porting
Linux PortingLinux Porting
Linux Porting
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
I2c drivers
I2c driversI2c drivers
I2c drivers
 
Linux Porting to a Custom Board
Linux Porting to a Custom BoardLinux Porting to a Custom Board
Linux Porting to a Custom Board
 
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
03_03_Implementing_PCIe_ATS_in_ARM-based_SoCs_Final
 
I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24I2C Subsystem In Linux-2.6.24
I2C Subsystem In Linux-2.6.24
 
Introduction Linux Device Drivers
Introduction Linux Device DriversIntroduction Linux Device Drivers
Introduction Linux Device Drivers
 
Introduction to Linux Drivers
Introduction to Linux DriversIntroduction to Linux Drivers
Introduction to Linux Drivers
 
Hands-on ethernet driver
Hands-on ethernet driverHands-on ethernet driver
Hands-on ethernet driver
 
BusyBox for Embedded Linux
BusyBox for Embedded LinuxBusyBox for Embedded Linux
BusyBox for Embedded Linux
 
Audio Drivers
Audio DriversAudio Drivers
Audio Drivers
 
Character drivers
Character driversCharacter drivers
Character drivers
 
I2c drivers
I2c driversI2c drivers
I2c drivers
 
Character Drivers
Character DriversCharacter Drivers
Character Drivers
 
USB Drivers
USB DriversUSB Drivers
USB Drivers
 
U-Boot presentation 2013
U-Boot presentation  2013U-Boot presentation  2013
U-Boot presentation 2013
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
PCIe
PCIePCIe
PCIe
 

Viewers also liked (14)

File System Modules
File System ModulesFile System Modules
File System Modules
 
Serial Drivers
Serial DriversSerial Drivers
Serial Drivers
 
Interrupts
InterruptsInterrupts
Interrupts
 
Block Drivers
Block DriversBlock Drivers
Block Drivers
 
References
ReferencesReferences
References
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
Embedded C
Embedded CEmbedded C
Embedded C
 
gcc and friends
gcc and friendsgcc and friends
gcc and friends
 
Video Drivers
Video DriversVideo Drivers
Video Drivers
 
Kernel Programming
Kernel ProgrammingKernel Programming
Kernel Programming
 
Low-level Accesses
Low-level AccessesLow-level Accesses
Low-level Accesses
 
BeagleBoard-xM Bootloaders
BeagleBoard-xM BootloadersBeagleBoard-xM Bootloaders
BeagleBoard-xM Bootloaders
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
File Systems
File SystemsFile Systems
File Systems
 

Similar to PCI Drivers

Slideshare - PCIe
Slideshare - PCIeSlideshare - PCIe
Slideshare - PCIeJin Wu
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN
 
PCI_Express_Basics_Background.pdf
PCI_Express_Basics_Background.pdfPCI_Express_Basics_Background.pdf
PCI_Express_Basics_Background.pdfzahixdd
 
Revisit DCA, PCIe TPH and DDIO
Revisit DCA, PCIe TPH and DDIORevisit DCA, PCIe TPH and DDIO
Revisit DCA, PCIe TPH and DDIOHisaki Ohara
 
101 1.1 hardware settings v2
101 1.1 hardware settings v2101 1.1 hardware settings v2
101 1.1 hardware settings v2Acácio Oliveira
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -evechiportal
 
my Windows 7 info
my Windows 7 infomy Windows 7 info
my Windows 7 infoisky guard
 
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...Felipe Prado
 
Developing a Windows CE OAL.ppt
Developing a Windows CE OAL.pptDeveloping a Windows CE OAL.ppt
Developing a Windows CE OAL.pptKundanSingh887495
 

Similar to PCI Drivers (20)

SPI Drivers
SPI DriversSPI Drivers
SPI Drivers
 
BeagleBone Black Bootloaders
BeagleBone Black BootloadersBeagleBone Black Bootloaders
BeagleBone Black Bootloaders
 
Slideshare - PCIe
Slideshare - PCIeSlideshare - PCIe
Slideshare - PCIe
 
Project ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOSProject ACRN expose and pass through platform hidden PCIe devices to SOS
Project ACRN expose and pass through platform hidden PCIe devices to SOS
 
PCI_Express_Basics_Background.pdf
PCI_Express_Basics_Background.pdfPCI_Express_Basics_Background.pdf
PCI_Express_Basics_Background.pdf
 
101 1.1 hardware settings
101 1.1 hardware settings101 1.1 hardware settings
101 1.1 hardware settings
 
haifux-pcie.pdf
haifux-pcie.pdfhaifux-pcie.pdf
haifux-pcie.pdf
 
Linux Network Management
Linux Network ManagementLinux Network Management
Linux Network Management
 
Revisit DCA, PCIe TPH and DDIO
Revisit DCA, PCIe TPH and DDIORevisit DCA, PCIe TPH and DDIO
Revisit DCA, PCIe TPH and DDIO
 
Embedded I/O Management
Embedded I/O ManagementEmbedded I/O Management
Embedded I/O Management
 
Kernel Debugging & Profiling
Kernel Debugging & ProfilingKernel Debugging & Profiling
Kernel Debugging & Profiling
 
101 1.1 hardware settings v2
101 1.1 hardware settings v2101 1.1 hardware settings v2
101 1.1 hardware settings v2
 
Track c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eveTrack c-High speed transaction-based hw-sw coverification -eve
Track c-High speed transaction-based hw-sw coverification -eve
 
Slimline Open Firmware
Slimline Open FirmwareSlimline Open Firmware
Slimline Open Firmware
 
my Windows 7 info
my Windows 7 infomy Windows 7 info
my Windows 7 info
 
1.1 hardware settings v2
1.1 hardware settings v21.1 hardware settings v2
1.1 hardware settings v2
 
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...
DEF CON 27 - HUBER AND ROSKOSCH - im on your phone listening attacking voip c...
 
Developing a Windows CE OAL.ppt
Developing a Windows CE OAL.pptDeveloping a Windows CE OAL.ppt
Developing a Windows CE OAL.ppt
 
Bootloaders
BootloadersBootloaders
Bootloaders
 
Resume
ResumeResume
Resume
 

More from Anil Kumar Pugalia (20)

File System Modules
File System ModulesFile System Modules
File System Modules
 
Processes
ProcessesProcesses
Processes
 
System Calls
System CallsSystem Calls
System Calls
 
Introduction to Linux
Introduction to LinuxIntroduction to Linux
Introduction to Linux
 
Embedded Software Design
Embedded Software DesignEmbedded Software Design
Embedded Software Design
 
Playing with R L C Circuits
Playing with R L C CircuitsPlaying with R L C Circuits
Playing with R L C Circuits
 
Mobile Hacking using Linux Drivers
Mobile Hacking using Linux DriversMobile Hacking using Linux Drivers
Mobile Hacking using Linux Drivers
 
Shell Scripting
Shell ScriptingShell Scripting
Shell Scripting
 
Functional Programming with LISP
Functional Programming with LISPFunctional Programming with LISP
Functional Programming with LISP
 
Power of vi
Power of viPower of vi
Power of vi
 
"make" system
"make" system"make" system
"make" system
 
Hardware Design for Software Hackers
Hardware Design for Software HackersHardware Design for Software Hackers
Hardware Design for Software Hackers
 
RPM Building
RPM BuildingRPM Building
RPM Building
 
Linux User Space Debugging & Profiling
Linux User Space Debugging & ProfilingLinux User Space Debugging & Profiling
Linux User Space Debugging & Profiling
 
System Calls
System CallsSystem Calls
System Calls
 
Timers
TimersTimers
Timers
 
Threads
ThreadsThreads
Threads
 
Synchronization
SynchronizationSynchronization
Synchronization
 
Processes
ProcessesProcesses
Processes
 
Signals
SignalsSignals
Signals
 

Recently uploaded

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 

Recently uploaded (20)

"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 

PCI Drivers

  • 1. © 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Peripheral Component Interconnect (PCI) Drivers
  • 2. 2© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What to Expect? PCI Subsystem Coding Details of a PCI Device Driver Browsing Sample Code
  • 3. 3© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. PCI Prologue Developed by Intel as a replacement for ISA More of a processor (specific) bus for x86 architectures Replacing Features Plug n Play Platform independent Fast Hardware Addressing Through South Bridge (PCI Controller) Buses (upto 256) → Devices (upto 32) → Functions (upto 8)
  • 4. 4© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Kernel Aspect Organized as PCI Core (driver of the PCI Controller) PCI Drivers (device drivers) Kernel Windows for PCI /proc/bus/pci/devices (Try cat) /sys/bus/pci/devices (Try tree) Command: lspci
  • 5. 5© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Dynamic Device Configuration What Configuration? Device Base Address(es) Register Space(s) Memory(s) Interrupt Vectors ... Done during Bootup by BIOS, Or PCI Core (Bootloader or Kernel) Configured by the time, driver comes up But, where is this configuration stored?
  • 6. 6© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. PCI Device Configuration Space Vendor ID BIST Header Type Lat Timer Cache Line Class Code Rev ID Status Register Command Register Device ID 0x0 0xF Base Address 0 CardBus CIS pointerBase Address 5Base Address 4 Base Address 3Base Address 2Base Address 1 Subsystem Vendor ID Subsystem Device ID Expansion ROM Base Address IRQ Line IRQ Pin Min Gnt Max Lat 0x00 0x30 0x20 0x10 Reserved
  • 7. 7© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. PCI Device Config Space Access Header: <linux/pci.h> APIs int pci_read_config_byte(struct pci_dev *dev, int where, u8 *val); int pci_read_config_word(struct pci_dev *dev, int where, u16 *val); int pci_read_config_dword(struct pci_dev *dev, int where, u32 *val); int pci_write_config_byte(struct pci_dev *dev, int where, u8 *val); int pci_write_config_word(struct pci_dev *dev, int where, u16 *val); int pci_write_config_dword(struct pci_dev *dev, int where, u32 *val); NB struct pci_dev *dev would be available as parameter to probe()
  • 8. 8© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Standard PCI Device Access API Upto 6 Memory or I/O regions Header: <linux/pci.h> APIs unsigned long pci_resource_start(dev, bar); unsigned long pci_resource_len(dev, bar); unsigned long pci_resource_flags(dev, bar); Flags IORESOURCE_IO IORESOURCE_MEM IORESOURCE_PREFETCH
  • 9. 9© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. PCI Driver Registration int pci_register_driver(struct pci_driver *drv); int pci_unregister_driver(struct pci_driver *drv); struct pci_driver const char *name const struct pci_dev_id *id_table; PCI_DEVICE(vendor, device); PCI_DEVICE_CLASS(dev_class, dev_class_mask); int (*probe)(pci_dev, id_table); void (*remove)(pci_dev); Header: <linux/pci.h>
  • 10. 10© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Typical 'probe' Function int probe(struct pci_dev *dev, struct pci_dev_id *id) { /* Enable the PCI Device */ pci_enable_device(dev); ... /* Acquire PCI Device's regions */ pci_request_regions(dev, “label”); ... /* Possibly map I/Os */ ... pci_set_drvdata(dev, <pvt_data_ptr>); // Optional ... /* Register the vertical */ ... return 0; /* Claimed. Negative for not Claimed */ }
  • 11. 11© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Typical 'remove' Function void remove(struct pci_dev *dev) { /* Unregister the vertical */ ... pci_set_drvdata(dev, NULL); // Optional ... /* Possibly unmap I/Os */ ... /* Release PCI Device's regions */ pci_release_regions(dev); ... /* Disable the PCI Device */ pci_disable_device(dev); }
  • 12. 12© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Old-style PCI Probing & Getting struct pci_dev *pci_find_*(vendor, device, from); struct pci_dev *pci_get_device(v, d, from); struct pci_dev *pci_get_subsys(v, d, ssv, ssd, f); struct pci_dev *pci_get_slot(bus, devfn); pci_dev_put(pci_dev);
  • 13. © 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. DMA Mapping APIs dma_addr_t pci_map_single(struct pci_dev *, void *, size_t, int dir); void pci_unmap_single(struct pci_dev *, dma_addr_t, size_t, int dir); Directions PCI_DMA_BIDIRECTIONAL PCI_DMA_TODEVICE PCI_DMA_FROMDEVICE Header: <linux/pci.h> To Device PM VM PA VA From Device
  • 14. © 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. DMA Allocation PM VM APIs void *pci_alloc_consistent(struct pci_dev *, size_t, dma_addr_t *); void pci_free_consistent(struct pci_dev *, size_t, void *, dma_addr_t); int pci_set_dma_mask(struct pci_dev *, u64 mask); Header: <linux/pci.h> PA VA
  • 15. 15© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. What all have we learnt? PCI Subsystem Coding Details of a PCI Device Driver Browsing Sample Code DMA with PCI
  • 16. 16© 2010-17 SysPlay Workshops <workshop@sysplay.in> All Rights Reserved. Any Queries?