root/drivers/misc/ocxl/pci.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ocxl_probe
  2. ocxl_remove

   1 // SPDX-License-Identifier: GPL-2.0+
   2 // Copyright 2019 IBM Corp.
   3 #include <linux/module.h>
   4 #include "ocxl_internal.h"
   5 
   6 /*
   7  * Any opencapi device which wants to use this 'generic' driver should
   8  * use the 0x062B device ID. Vendors should define the subsystem
   9  * vendor/device ID to help differentiate devices.
  10  */
  11 static const struct pci_device_id ocxl_pci_tbl[] = {
  12         { PCI_DEVICE(PCI_VENDOR_ID_IBM, 0x062B), },
  13         { }
  14 };
  15 MODULE_DEVICE_TABLE(pci, ocxl_pci_tbl);
  16 
  17 static int ocxl_probe(struct pci_dev *dev, const struct pci_device_id *id)
  18 {
  19         int rc;
  20         struct ocxl_afu *afu, *tmp;
  21         struct ocxl_fn *fn;
  22         struct list_head *afu_list;
  23 
  24         fn = ocxl_function_open(dev);
  25         if (IS_ERR(fn))
  26                 return PTR_ERR(fn);
  27 
  28         pci_set_drvdata(dev, fn);
  29 
  30         afu_list = ocxl_function_afu_list(fn);
  31 
  32         list_for_each_entry_safe(afu, tmp, afu_list, list) {
  33                 // Cleanup handled within ocxl_file_register_afu()
  34                 rc = ocxl_file_register_afu(afu);
  35                 if (rc) {
  36                         dev_err(&dev->dev, "Failed to register AFU '%s' index %d",
  37                                         afu->config.name, afu->config.idx);
  38                 }
  39         }
  40 
  41         return 0;
  42 }
  43 
  44 static void ocxl_remove(struct pci_dev *dev)
  45 {
  46         struct ocxl_fn *fn;
  47         struct ocxl_afu *afu;
  48         struct list_head *afu_list;
  49 
  50         fn = pci_get_drvdata(dev);
  51         afu_list = ocxl_function_afu_list(fn);
  52 
  53         list_for_each_entry(afu, afu_list, list) {
  54                 ocxl_file_unregister_afu(afu);
  55         }
  56 
  57         ocxl_function_close(fn);
  58 }
  59 
  60 struct pci_driver ocxl_pci_driver = {
  61         .name = "ocxl",
  62         .id_table = ocxl_pci_tbl,
  63         .probe = ocxl_probe,
  64         .remove = ocxl_remove,
  65         .shutdown = ocxl_remove,
  66 };

/* [<][>][^][v][top][bottom][index][help] */