1 /* 2 * Intel(R) Trace Hub pci driver 3 * 4 * Copyright (C) 2014-2015 Intel Corporation. 5 * 6 * This program is free software; you can redistribute it and/or modify it 7 * under the terms and conditions of the GNU General Public License, 8 * version 2, as published by the Free Software Foundation. 9 * 10 * This program is distributed in the hope it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 13 * more details. 14 */ 15 16 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt 17 18 #include <linux/types.h> 19 #include <linux/module.h> 20 #include <linux/device.h> 21 #include <linux/sysfs.h> 22 #include <linux/pci.h> 23 24 #include "intel_th.h" 25 26 #define DRIVER_NAME "intel_th_pci" 27 28 #define BAR_MASK (BIT(TH_MMIO_CONFIG) | BIT(TH_MMIO_SW)) 29 30 static int intel_th_pci_probe(struct pci_dev *pdev, 31 const struct pci_device_id *id) 32 { 33 struct intel_th *th; 34 int err; 35 36 err = pcim_enable_device(pdev); 37 if (err) 38 return err; 39 40 err = pcim_iomap_regions_request_all(pdev, BAR_MASK, DRIVER_NAME); 41 if (err) 42 return err; 43 44 th = intel_th_alloc(&pdev->dev, pdev->resource, 45 DEVICE_COUNT_RESOURCE, pdev->irq); 46 if (IS_ERR(th)) 47 return PTR_ERR(th); 48 49 pci_set_drvdata(pdev, th); 50 51 return 0; 52 } 53 54 static void intel_th_pci_remove(struct pci_dev *pdev) 55 { 56 struct intel_th *th = pci_get_drvdata(pdev); 57 58 intel_th_free(th); 59 } 60 61 static const struct pci_device_id intel_th_pci_id_table[] = { 62 { 63 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x9d26), 64 .driver_data = (kernel_ulong_t)0, 65 }, 66 { 67 PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa126), 68 .driver_data = (kernel_ulong_t)0, 69 }, 70 { 0 }, 71 }; 72 73 MODULE_DEVICE_TABLE(pci, intel_th_pci_id_table); 74 75 static struct pci_driver intel_th_pci_driver = { 76 .name = DRIVER_NAME, 77 .id_table = intel_th_pci_id_table, 78 .probe = intel_th_pci_probe, 79 .remove = intel_th_pci_remove, 80 }; 81 82 module_pci_driver(intel_th_pci_driver); 83 84 MODULE_LICENSE("GPL v2"); 85 MODULE_DESCRIPTION("Intel(R) Trace Hub PCI controller driver"); 86 MODULE_AUTHOR("Alexander Shishkin <alexander.shishkin@intel.com>"); 87