Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  *  Adaptec AAC series RAID controller driver
0004  *
0005  * based on the old aacraid driver that is..
0006  * Adaptec aacraid device driver for Linux.
0007  *
0008  * Copyright (c) 2000-2010 Adaptec, Inc.
0009  *               2010-2015 PMC-Sierra, Inc. (aacraid@pmc-sierra.com)
0010  *       2016-2017 Microsemi Corp. (aacraid@microsemi.com)
0011  *
0012  * Module Name:
0013  *  nark.c
0014  *
0015  * Abstract: Hardware Device Interface for NEMER/ARK
0016  */
0017 
0018 #include <linux/pci.h>
0019 #include <linux/blkdev.h>
0020 
0021 #include <scsi/scsi_host.h>
0022 
0023 #include "aacraid.h"
0024 
0025 /**
0026  *  aac_nark_ioremap
0027  *  @dev: device to ioremap
0028  *  @size: mapping resize request
0029  *
0030  */
0031 static int aac_nark_ioremap(struct aac_dev * dev, u32 size)
0032 {
0033     if (!size) {
0034         iounmap(dev->regs.rx);
0035         dev->regs.rx = NULL;
0036         iounmap(dev->base);
0037         dev->base = NULL;
0038         return 0;
0039     }
0040     dev->base_start = pci_resource_start(dev->pdev, 2);
0041     dev->regs.rx = ioremap((u64)pci_resource_start(dev->pdev, 0) |
0042       ((u64)pci_resource_start(dev->pdev, 1) << 32),
0043       sizeof(struct rx_registers) - sizeof(struct rx_inbound));
0044     dev->base = NULL;
0045     if (dev->regs.rx == NULL)
0046         return -1;
0047     dev->base = ioremap(dev->base_start, size);
0048     if (dev->base == NULL) {
0049         iounmap(dev->regs.rx);
0050         dev->regs.rx = NULL;
0051         return -1;
0052     }
0053     dev->IndexRegs = &((struct rx_registers __iomem *)dev->base)->IndexRegs;
0054     return 0;
0055 }
0056 
0057 /**
0058  *  aac_nark_init   -   initialize an NEMER/ARK Split Bar card
0059  *  @dev: device to configure
0060  *
0061  */
0062 
0063 int aac_nark_init(struct aac_dev * dev)
0064 {
0065     /*
0066      *  Fill in the function dispatch table.
0067      */
0068     dev->a_ops.adapter_ioremap = aac_nark_ioremap;
0069     dev->a_ops.adapter_comm = aac_rx_select_comm;
0070 
0071     return _aac_rx_init(dev);
0072 }