..
static int suspend_count = 0;
..
static int my_suspend(struct pci_dev *dev, pm_message_t state)
{
suspend_count++;
printk("my_suspend(%p, %d)\n", dev, suspend_count);
return 0;
}
static int my_resume(struct pci_dev *dev)
{
suspend_count++;
printk("my_resume(%p, %d)\n", dev, suspend_count);
return 0;
}
..
static struct pci_device_id pci_drv_tbl[] = {
{MY_VENDOR_ID, MY_DEVICE_ID, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0},
{0, }
};
static struct pci_driver pci_drv = {
name: "pci_drv",
id_table: pci_drv_tbl,
probe: pci_init_one,
remove: pci_remove_one,
suspend: my_suspend,
resume: my_resume,
};
static int __init pci_drv_init(void)
{
int ret;
if ((major = register_chrdev(0, "driver-name", &driver_fops)) != 0) {
if ((ret = pci_register_driver(&pci_drv)) < 0 ) {
printk(KERN_ERR "can't register PCI driver (%d)\n", ret);
unregister_chrdev(major, "driver-name");
return -EIO;
}
return 0;
}
return -EIO;
}
static void __exit pci_drv_exit(void)
{
pci_unregister_driver(&pci_drv);
unregister_chrdev(240, "driver-name");
printk("pci_drv_exit(%d)\n", suspend_count);
}
..