2005-04-17 02:20:36 +04:00
# include <linux/kernel.h>
# include <linux/pci.h>
# include <linux/module.h>
# include "pci.h"
2005-11-16 11:00:00 +03:00
int pci_uevent ( struct device * dev , char * * envp , int num_envp ,
char * buffer , int buffer_size )
2005-04-17 02:20:36 +04:00
{
struct pci_dev * pdev ;
int i = 0 ;
int length = 0 ;
if ( ! dev )
return - ENODEV ;
pdev = to_pci_dev ( dev ) ;
if ( ! pdev )
return - ENODEV ;
2005-11-16 11:00:00 +03:00
if ( add_uevent_var ( envp , num_envp , & i ,
buffer , buffer_size , & length ,
" PCI_CLASS=%04X " , pdev - > class ) )
2005-04-17 02:20:36 +04:00
return - ENOMEM ;
2005-11-16 11:00:00 +03:00
if ( add_uevent_var ( envp , num_envp , & i ,
buffer , buffer_size , & length ,
" PCI_ID=%04X:%04X " , pdev - > vendor , pdev - > device ) )
2005-04-17 02:20:36 +04:00
return - ENOMEM ;
2005-11-16 11:00:00 +03:00
if ( add_uevent_var ( envp , num_envp , & i ,
buffer , buffer_size , & length ,
" PCI_SUBSYS_ID=%04X:%04X " , pdev - > subsystem_vendor ,
pdev - > subsystem_device ) )
2005-04-17 02:20:36 +04:00
return - ENOMEM ;
2005-11-16 11:00:00 +03:00
if ( add_uevent_var ( envp , num_envp , & i ,
buffer , buffer_size , & length ,
" PCI_SLOT_NAME=%s " , pci_name ( pdev ) ) )
2005-04-17 02:20:36 +04:00
return - ENOMEM ;
2005-11-16 11:00:00 +03:00
if ( add_uevent_var ( envp , num_envp , & i ,
buffer , buffer_size , & length ,
" MODALIAS=pci:v%08Xd%08Xsv%08Xsd%08Xbc%02Xsc%02Xi%02x " ,
pdev - > vendor , pdev - > device ,
pdev - > subsystem_vendor , pdev - > subsystem_device ,
( u8 ) ( pdev - > class > > 16 ) , ( u8 ) ( pdev - > class > > 8 ) ,
( u8 ) ( pdev - > class ) ) )
2005-05-05 22:57:25 +04:00
return - ENOMEM ;
2005-04-17 02:20:36 +04:00
envp [ i ] = NULL ;
return 0 ;
}