hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/scsi/stex.c
....@@ -1,16 +1,11 @@
1
+// SPDX-License-Identifier: GPL-2.0-or-later
12 /*
23 * SuperTrak EX Series Storage Controller driver for Linux
34 *
45 * Copyright (C) 2005-2015 Promise Technology Inc.
56 *
6
- * This program is free software; you can redistribute it and/or
7
- * modify it under the terms of the GNU General Public License
8
- * as published by the Free Software Foundation; either version
9
- * 2 of the License, or (at your option) any later version.
10
- *
117 * Written By:
128 * Ed Lin <promise_linux@promise.com>
13
- *
149 */
1510
1611 #include <linux/init.h>
....@@ -114,7 +109,9 @@
114109 TASK_ATTRIBUTE_HEADOFQUEUE = 0x1,
115110 TASK_ATTRIBUTE_ORDERED = 0x2,
116111 TASK_ATTRIBUTE_ACA = 0x4,
112
+};
117113
114
+enum {
118115 SS_STS_NORMAL = 0x80000000,
119116 SS_STS_DONE = 0x40000000,
120117 SS_STS_HANDSHAKE = 0x20000000,
....@@ -126,7 +123,9 @@
126123 SS_I2H_REQUEST_RESET = 0x2000,
127124
128125 SS_MU_OPERATIONAL = 0x80000000,
126
+};
129127
128
+enum {
130129 STEX_CDB_LENGTH = 16,
131130 STATUS_VAR_LEN = 128,
132131
....@@ -241,7 +240,7 @@
241240 u8 data_dir;
242241 u8 payload_sz; /* payload size in 4-byte, not used */
243242 u8 cdb[STEX_CDB_LENGTH];
244
- u32 variable[0];
243
+ u32 variable[];
245244 };
246245
247246 struct status_msg {
....@@ -673,16 +672,17 @@
673672 return 0;
674673 case PASSTHRU_CMD:
675674 if (cmd->cmnd[1] == PASSTHRU_GET_DRVVER) {
676
- struct st_drvver ver;
675
+ const struct st_drvver ver = {
676
+ .major = ST_VER_MAJOR,
677
+ .minor = ST_VER_MINOR,
678
+ .oem = ST_OEM,
679
+ .build = ST_BUILD_VER,
680
+ .signature[0] = PASSTHRU_SIGNATURE,
681
+ .console_id = host->max_id - 1,
682
+ .host_no = hba->host->host_no,
683
+ };
677684 size_t cp_len = sizeof(ver);
678685
679
- ver.major = ST_VER_MAJOR;
680
- ver.minor = ST_VER_MINOR;
681
- ver.oem = ST_OEM;
682
- ver.build = ST_BUILD_VER;
683
- ver.signature[0] = PASSTHRU_SIGNATURE;
684
- ver.console_id = host->max_id - 1;
685
- ver.host_no = hba->host->host_no;
686686 cp_len = scsi_sg_copy_from_buffer(cmd, &ver, cp_len);
687687 cmd->result = sizeof(ver) == cp_len ?
688688 DID_OK << 16 | COMMAND_COMPLETE << 8 :
....@@ -1489,6 +1489,7 @@
14891489 .eh_abort_handler = stex_abort,
14901490 .eh_host_reset_handler = stex_reset,
14911491 .this_id = -1,
1492
+ .dma_boundary = PAGE_SIZE - 1,
14921493 };
14931494
14941495 static struct pci_device_id stex_pci_tbl[] = {
....@@ -1617,19 +1618,6 @@
16171618 },
16181619 };
16191620
1620
-static int stex_set_dma_mask(struct pci_dev * pdev)
1621
-{
1622
- int ret;
1623
-
1624
- if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))
1625
- && !pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64)))
1626
- return 0;
1627
- ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
1628
- if (!ret)
1629
- ret = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
1630
- return ret;
1631
-}
1632
-
16331621 static int stex_request_irq(struct st_hba *hba)
16341622 {
16351623 struct pci_dev *pdev = hba->pdev;
....@@ -1710,7 +1698,9 @@
17101698 goto out_release_regions;
17111699 }
17121700
1713
- err = stex_set_dma_mask(pdev);
1701
+ err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
1702
+ if (err)
1703
+ err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));
17141704 if (err) {
17151705 printk(KERN_ERR DRV_NAME "(%s): set dma mask failed\n",
17161706 pci_name(pdev));