.. | .. |
---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-or-later |
---|
1 | 2 | /* |
---|
2 | 3 | * SuperTrak EX Series Storage Controller driver for Linux |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (C) 2005-2015 Promise Technology Inc. |
---|
5 | 6 | * |
---|
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 | | - * |
---|
11 | 7 | * Written By: |
---|
12 | 8 | * Ed Lin <promise_linux@promise.com> |
---|
13 | | - * |
---|
14 | 9 | */ |
---|
15 | 10 | |
---|
16 | 11 | #include <linux/init.h> |
---|
.. | .. |
---|
114 | 109 | TASK_ATTRIBUTE_HEADOFQUEUE = 0x1, |
---|
115 | 110 | TASK_ATTRIBUTE_ORDERED = 0x2, |
---|
116 | 111 | TASK_ATTRIBUTE_ACA = 0x4, |
---|
| 112 | +}; |
---|
117 | 113 | |
---|
| 114 | +enum { |
---|
118 | 115 | SS_STS_NORMAL = 0x80000000, |
---|
119 | 116 | SS_STS_DONE = 0x40000000, |
---|
120 | 117 | SS_STS_HANDSHAKE = 0x20000000, |
---|
.. | .. |
---|
126 | 123 | SS_I2H_REQUEST_RESET = 0x2000, |
---|
127 | 124 | |
---|
128 | 125 | SS_MU_OPERATIONAL = 0x80000000, |
---|
| 126 | +}; |
---|
129 | 127 | |
---|
| 128 | +enum { |
---|
130 | 129 | STEX_CDB_LENGTH = 16, |
---|
131 | 130 | STATUS_VAR_LEN = 128, |
---|
132 | 131 | |
---|
.. | .. |
---|
241 | 240 | u8 data_dir; |
---|
242 | 241 | u8 payload_sz; /* payload size in 4-byte, not used */ |
---|
243 | 242 | u8 cdb[STEX_CDB_LENGTH]; |
---|
244 | | - u32 variable[0]; |
---|
| 243 | + u32 variable[]; |
---|
245 | 244 | }; |
---|
246 | 245 | |
---|
247 | 246 | struct status_msg { |
---|
.. | .. |
---|
673 | 672 | return 0; |
---|
674 | 673 | case PASSTHRU_CMD: |
---|
675 | 674 | 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 | + }; |
---|
677 | 684 | size_t cp_len = sizeof(ver); |
---|
678 | 685 | |
---|
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; |
---|
686 | 686 | cp_len = scsi_sg_copy_from_buffer(cmd, &ver, cp_len); |
---|
687 | 687 | cmd->result = sizeof(ver) == cp_len ? |
---|
688 | 688 | DID_OK << 16 | COMMAND_COMPLETE << 8 : |
---|
.. | .. |
---|
1489 | 1489 | .eh_abort_handler = stex_abort, |
---|
1490 | 1490 | .eh_host_reset_handler = stex_reset, |
---|
1491 | 1491 | .this_id = -1, |
---|
| 1492 | + .dma_boundary = PAGE_SIZE - 1, |
---|
1492 | 1493 | }; |
---|
1493 | 1494 | |
---|
1494 | 1495 | static struct pci_device_id stex_pci_tbl[] = { |
---|
.. | .. |
---|
1617 | 1618 | }, |
---|
1618 | 1619 | }; |
---|
1619 | 1620 | |
---|
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 | | - |
---|
1633 | 1621 | static int stex_request_irq(struct st_hba *hba) |
---|
1634 | 1622 | { |
---|
1635 | 1623 | struct pci_dev *pdev = hba->pdev; |
---|
.. | .. |
---|
1710 | 1698 | goto out_release_regions; |
---|
1711 | 1699 | } |
---|
1712 | 1700 | |
---|
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)); |
---|
1714 | 1704 | if (err) { |
---|
1715 | 1705 | printk(KERN_ERR DRV_NAME "(%s): set dma mask failed\n", |
---|
1716 | 1706 | pci_name(pdev)); |
---|