2006-04-07 04:10:57 -04:00
/* orinoco_pci.h
2009-01-25 23:08:43 +03:00
*
2006-04-07 04:10:57 -04:00
* Common code for all Orinoco drivers for PCI devices , including
* both native PCI and PCMCIA - to - PCI bridges .
*
* Copyright ( C ) 2005 , Pavel Roskin .
2009-02-04 23:05:48 +00:00
* See main . c for license .
2006-04-07 04:10:57 -04:00
*/
# ifndef _ORINOCO_PCI_H
# define _ORINOCO_PCI_H
# include <linux/netdevice.h>
/* Driver specific data */
struct orinoco_pci_card {
void __iomem * bridge_io ;
void __iomem * attr_io ;
} ;
2006-05-01 02:13:30 -04:00
# ifdef CONFIG_PM
2006-04-07 04:10:57 -04:00
static int orinoco_pci_suspend ( struct pci_dev * pdev , pm_message_t state )
{
2009-06-18 23:21:23 +01:00
struct orinoco_private * priv = pci_get_drvdata ( pdev ) ;
2006-04-07 04:10:57 -04:00
2009-06-18 23:21:30 +01:00
orinoco_down ( priv ) ;
2009-06-18 23:21:23 +01:00
free_irq ( pdev - > irq , priv ) ;
2006-04-07 04:10:57 -04:00
pci_save_state ( pdev ) ;
pci_disable_device ( pdev ) ;
pci_set_power_state ( pdev , PCI_D3hot ) ;
return 0 ;
}
static int orinoco_pci_resume ( struct pci_dev * pdev )
{
2009-06-18 23:21:23 +01:00
struct orinoco_private * priv = pci_get_drvdata ( pdev ) ;
struct net_device * dev = priv - > ndev ;
2006-04-07 04:10:57 -04:00
int err ;
2013-06-27 20:53:42 +08:00
pci_set_power_state ( pdev , PCI_D0 ) ;
2006-11-07 20:53:48 -05:00
err = pci_enable_device ( pdev ) ;
if ( err ) {
printk ( KERN_ERR " %s: pci_enable_device failed on resume \n " ,
dev - > name ) ;
return err ;
}
2006-04-07 04:10:57 -04:00
pci_restore_state ( pdev ) ;
2006-07-01 19:29:39 -07:00
err = request_irq ( pdev - > irq , orinoco_interrupt , IRQF_SHARED ,
2009-06-18 23:21:23 +01:00
dev - > name , priv ) ;
2006-04-07 04:10:57 -04:00
if ( err ) {
printk ( KERN_ERR " %s: cannot re-allocate IRQ on resume \n " ,
dev - > name ) ;
pci_disable_device ( pdev ) ;
return - EBUSY ;
}
2009-06-18 23:21:30 +01:00
err = orinoco_up ( priv ) ;
2006-04-07 04:10:57 -04:00
2009-06-18 23:21:30 +01:00
return err ;
2006-04-07 04:10:57 -04:00
}
2006-05-01 02:13:30 -04:00
# else
# define orinoco_pci_suspend NULL
# define orinoco_pci_resume NULL
# endif
2006-04-07 04:10:57 -04:00
# endif /* _ORINOCO_PCI_H */