nark.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // SPDX-License-Identifier: GPL-2.0-or-later
  2. /*
  3. * Adaptec AAC series RAID controller driver
  4. *
  5. * based on the old aacraid driver that is..
  6. * Adaptec aacraid device driver for Linux.
  7. *
  8. * Copyright (c) 2000-2010 Adaptec, Inc.
  9. * 2010-2015 PMC-Sierra, Inc. ([email protected])
  10. * 2016-2017 Microsemi Corp. ([email protected])
  11. *
  12. * Module Name:
  13. * nark.c
  14. *
  15. * Abstract: Hardware Device Interface for NEMER/ARK
  16. */
  17. #include <linux/pci.h>
  18. #include <linux/blkdev.h>
  19. #include <scsi/scsi_host.h>
  20. #include "aacraid.h"
  21. /**
  22. * aac_nark_ioremap
  23. * @dev: device to ioremap
  24. * @size: mapping resize request
  25. *
  26. */
  27. static int aac_nark_ioremap(struct aac_dev * dev, u32 size)
  28. {
  29. if (!size) {
  30. iounmap(dev->regs.rx);
  31. dev->regs.rx = NULL;
  32. iounmap(dev->base);
  33. dev->base = NULL;
  34. return 0;
  35. }
  36. dev->base_start = pci_resource_start(dev->pdev, 2);
  37. dev->regs.rx = ioremap((u64)pci_resource_start(dev->pdev, 0) |
  38. ((u64)pci_resource_start(dev->pdev, 1) << 32),
  39. sizeof(struct rx_registers) - sizeof(struct rx_inbound));
  40. dev->base = NULL;
  41. if (dev->regs.rx == NULL)
  42. return -1;
  43. dev->base = ioremap(dev->base_start, size);
  44. if (dev->base == NULL) {
  45. iounmap(dev->regs.rx);
  46. dev->regs.rx = NULL;
  47. return -1;
  48. }
  49. dev->IndexRegs = &((struct rx_registers __iomem *)dev->base)->IndexRegs;
  50. return 0;
  51. }
  52. /**
  53. * aac_nark_init - initialize an NEMER/ARK Split Bar card
  54. * @dev: device to configure
  55. *
  56. */
  57. int aac_nark_init(struct aac_dev * dev)
  58. {
  59. /*
  60. * Fill in the function dispatch table.
  61. */
  62. dev->a_ops.adapter_ioremap = aac_nark_ioremap;
  63. dev->a_ops.adapter_comm = aac_rx_select_comm;
  64. return _aac_rx_init(dev);
  65. }