.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0-or-later */ |
---|
1 | 2 | /* |
---|
2 | 3 | * Linux MegaRAID driver for SAS based RAID controllers |
---|
3 | 4 | * |
---|
4 | 5 | * Copyright (c) 2009-2013 LSI Corporation |
---|
5 | | - * Copyright (c) 2013-2014 Avago Technologies |
---|
6 | | - * |
---|
7 | | - * This program is free software; you can redistribute it and/or |
---|
8 | | - * modify it under the terms of the GNU General Public License |
---|
9 | | - * as published by the Free Software Foundation; either version 2 |
---|
10 | | - * of the License, or (at your option) any later version. |
---|
11 | | - * |
---|
12 | | - * This program is distributed in the hope that it will be useful, |
---|
13 | | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
14 | | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
15 | | - * GNU General Public License for more details. |
---|
16 | | - * |
---|
17 | | - * You should have received a copy of the GNU General Public License |
---|
18 | | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
---|
| 6 | + * Copyright (c) 2013-2016 Avago Technologies |
---|
| 7 | + * Copyright (c) 2016-2018 Broadcom Inc. |
---|
19 | 8 | * |
---|
20 | 9 | * FILE: megaraid_sas_fusion.h |
---|
21 | 10 | * |
---|
22 | | - * Authors: Avago Technologies |
---|
| 11 | + * Authors: Broadcom Inc. |
---|
23 | 12 | * Manoj Jose |
---|
24 | 13 | * Sumant Patro |
---|
25 | | - * Kashyap Desai <kashyap.desai@avagotech.com> |
---|
26 | | - * Sumit Saxena <sumit.saxena@avagotech.com> |
---|
| 14 | + * Kashyap Desai <kashyap.desai@broadcom.com> |
---|
| 15 | + * Sumit Saxena <sumit.saxena@broadcom.com> |
---|
27 | 16 | * |
---|
28 | | - * Send feedback to: megaraidlinux.pdl@avagotech.com |
---|
29 | | - * |
---|
30 | | - * Mail to: Avago Technologies, 350 West Trimble Road, Building 90, |
---|
31 | | - * San Jose, California 95131 |
---|
| 17 | + * Send feedback to: megaraidlinux.pdl@broadcom.com |
---|
32 | 18 | */ |
---|
33 | 19 | |
---|
34 | 20 | #ifndef _MEGARAID_SAS_FUSION_H_ |
---|
.. | .. |
---|
89 | 75 | MR_RAID_FLAGS_IO_SUB_TYPE_RMW_P = 3, |
---|
90 | 76 | MR_RAID_FLAGS_IO_SUB_TYPE_RMW_Q = 4, |
---|
91 | 77 | MR_RAID_FLAGS_IO_SUB_TYPE_CACHE_BYPASS = 6, |
---|
92 | | - MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7 |
---|
| 78 | + MR_RAID_FLAGS_IO_SUB_TYPE_LDIO_BW_LIMIT = 7, |
---|
| 79 | + MR_RAID_FLAGS_IO_SUB_TYPE_R56_DIV_OFFLOAD = 8 |
---|
93 | 80 | }; |
---|
94 | 81 | |
---|
95 | 82 | /* |
---|
.. | .. |
---|
103 | 90 | #define MEGASAS_FP_CMD_LEN 16 |
---|
104 | 91 | #define MEGASAS_FUSION_IN_RESET 0 |
---|
105 | 92 | #define MEGASAS_FUSION_OCR_NOT_POSSIBLE 1 |
---|
106 | | -#define THRESHOLD_REPLY_COUNT 50 |
---|
107 | 93 | #define RAID_1_PEER_CMDS 2 |
---|
108 | 94 | #define JBOD_MAPS_COUNT 2 |
---|
109 | 95 | #define MEGASAS_REDUCE_QD_COUNT 64 |
---|
.. | .. |
---|
155 | 141 | u16 timeout_value; /* 0x02 -0x03 */ |
---|
156 | 142 | u16 routing_flags; // 0x04 -0x05 routing flags |
---|
157 | 143 | u16 virtual_disk_tgt_id; /* 0x06 -0x07 */ |
---|
158 | | - u64 reg_lock_row_lba; /* 0x08 - 0x0F */ |
---|
| 144 | + __le64 reg_lock_row_lba; /* 0x08 - 0x0F */ |
---|
159 | 145 | u32 reg_lock_length; /* 0x10 - 0x13 */ |
---|
160 | | - union { |
---|
161 | | - u16 next_lmid; /* 0x14 - 0x15 */ |
---|
162 | | - u16 peer_smid; /* used for the raid 1/10 fp writes */ |
---|
163 | | - } smid; |
---|
| 146 | + union { // flow specific |
---|
| 147 | + u16 rmw_op_index; /* 0x14 - 0x15, R5/6 RMW: rmw operation index*/ |
---|
| 148 | + u16 peer_smid; /* 0x14 - 0x15, R1 Write: peer smid*/ |
---|
| 149 | + u16 r56_arm_map; /* 0x14 - 0x15, Unused [15], LogArm[14:10], P-Arm[9:5], Q-Arm[4:0] */ |
---|
| 150 | + |
---|
| 151 | + } flow_specific; |
---|
| 152 | + |
---|
164 | 153 | u8 ex_status; /* 0x16 : OUT */ |
---|
165 | 154 | u8 status; /* 0x17 status */ |
---|
166 | 155 | u8 raid_flags; /* 0x18 resvd[7:6], ioSubType[5:4], |
---|
.. | .. |
---|
250 | 239 | |
---|
251 | 240 | #define RAID_CTX_SPANARM_SPAN_SHIFT (5) |
---|
252 | 241 | #define RAID_CTX_SPANARM_SPAN_MASK (0xE0) |
---|
| 242 | + |
---|
| 243 | +/* LogArm[14:10], P-Arm[9:5], Q-Arm[4:0] */ |
---|
| 244 | +#define RAID_CTX_R56_Q_ARM_MASK (0x1F) |
---|
| 245 | +#define RAID_CTX_R56_P_ARM_SHIFT (5) |
---|
| 246 | +#define RAID_CTX_R56_P_ARM_MASK (0x3E0) |
---|
| 247 | +#define RAID_CTX_R56_LOG_ARM_SHIFT (10) |
---|
| 248 | +#define RAID_CTX_R56_LOG_ARM_MASK (0x7C00) |
---|
253 | 249 | |
---|
254 | 250 | /* number of bits per index in U32 TrackStream */ |
---|
255 | 251 | #define BITS_PER_INDEX_STREAM 4 |
---|
.. | .. |
---|
726 | 722 | #define MR_DCMD_CTRL_SHARED_HOST_MEM_ALLOC 0x010e8485 /* SR-IOV HB alloc*/ |
---|
727 | 723 | #define MR_DCMD_LD_VF_MAP_GET_ALL_LDS_111 0x03200200 |
---|
728 | 724 | #define MR_DCMD_LD_VF_MAP_GET_ALL_LDS 0x03150200 |
---|
| 725 | +#define MR_DCMD_CTRL_SNAPDUMP_GET_PROPERTIES 0x01200100 |
---|
| 726 | +#define MR_DCMD_CTRL_DEVICE_LIST_GET 0x01190600 |
---|
729 | 727 | |
---|
730 | 728 | struct MR_DEV_HANDLE_INFO { |
---|
731 | 729 | __le16 curDevHdl; |
---|
.. | .. |
---|
776 | 774 | struct MR_CPU_AFFINITY_MASK { |
---|
777 | 775 | union { |
---|
778 | 776 | struct { |
---|
779 | | -#ifndef MFI_BIG_ENDIAN |
---|
| 777 | +#ifndef __BIG_ENDIAN_BITFIELD |
---|
780 | 778 | u8 hw_path:1; |
---|
781 | 779 | u8 cpu0:1; |
---|
782 | 780 | u8 cpu1:1; |
---|
.. | .. |
---|
867 | 865 | u8 regTypeReqOnRead; |
---|
868 | 866 | __le16 seqNum; |
---|
869 | 867 | |
---|
870 | | - struct { |
---|
871 | | - u32 ldSyncRequired:1; |
---|
872 | | - u32 reserved:31; |
---|
| 868 | +struct { |
---|
| 869 | +#ifndef __BIG_ENDIAN_BITFIELD |
---|
| 870 | + u32 ldSyncRequired:1; |
---|
| 871 | + u32 regTypeReqOnReadIsValid:1; |
---|
| 872 | + u32 isEPD:1; |
---|
| 873 | + u32 enableSLDOnAllRWIOs:1; |
---|
| 874 | + u32 reserved:28; |
---|
| 875 | +#else |
---|
| 876 | + u32 reserved:28; |
---|
| 877 | + u32 enableSLDOnAllRWIOs:1; |
---|
| 878 | + u32 isEPD:1; |
---|
| 879 | + u32 regTypeReqOnReadIsValid:1; |
---|
| 880 | + u32 ldSyncRequired:1; |
---|
| 881 | +#endif |
---|
873 | 882 | } flags; |
---|
874 | 883 | |
---|
875 | 884 | u8 LUN[8]; /* 0x24 8 byte LUN field used for SCSI IO's */ |
---|
.. | .. |
---|
880 | 889 | /* 0x30 - 0x33, Logical block size for the LD */ |
---|
881 | 890 | u32 logical_block_length; |
---|
882 | 891 | struct { |
---|
883 | | -#ifndef MFI_BIG_ENDIAN |
---|
| 892 | +#ifndef __BIG_ENDIAN_BITFIELD |
---|
884 | 893 | /* 0x34, P_I_EXPONENT from READ CAPACITY 16 */ |
---|
885 | 894 | u32 ld_pi_exp:4; |
---|
886 | 895 | /* 0x34, LOGICAL BLOCKS PER PHYSICAL |
---|
.. | .. |
---|
953 | 962 | u8 pd_after_lb; |
---|
954 | 963 | u16 r1_alt_dev_handle; /* raid 1/10 only */ |
---|
955 | 964 | bool ra_capable; |
---|
| 965 | + u8 data_arms; |
---|
956 | 966 | }; |
---|
957 | 967 | |
---|
958 | 968 | struct MR_LD_TARGET_SYNC { |
---|
.. | .. |
---|
1063 | 1073 | #define MPI26_IEEE_SGE_FLAGS_NSF_MPI_IEEE (0x00) |
---|
1064 | 1074 | #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_PRP (0x08) |
---|
1065 | 1075 | #define MPI26_IEEE_SGE_FLAGS_NSF_NVME_SGL (0x10) |
---|
| 1076 | + |
---|
| 1077 | +#define MEGASAS_DEFAULT_SNAP_DUMP_WAIT_TIME 15 |
---|
| 1078 | +#define MEGASAS_MAX_SNAP_DUMP_WAIT_TIME 60 |
---|
1066 | 1079 | |
---|
1067 | 1080 | struct megasas_register_set; |
---|
1068 | 1081 | struct megasas_instance; |
---|
.. | .. |
---|
1334 | 1347 | dma_addr_t ioc_init_request_phys; |
---|
1335 | 1348 | struct MPI2_IOC_INIT_REQUEST *ioc_init_request; |
---|
1336 | 1349 | struct megasas_cmd *ioc_init_cmd; |
---|
1337 | | - |
---|
| 1350 | + bool pcie_bw_limitation; |
---|
| 1351 | + bool r56_div_offload; |
---|
1338 | 1352 | }; |
---|
1339 | 1353 | |
---|
1340 | 1354 | union desc_value { |
---|
.. | .. |
---|
1351 | 1365 | RETURN_CMD = 3, |
---|
1352 | 1366 | }; |
---|
1353 | 1367 | |
---|
| 1368 | +struct MR_SNAPDUMP_PROPERTIES { |
---|
| 1369 | + u8 offload_num; |
---|
| 1370 | + u8 max_num_supported; |
---|
| 1371 | + u8 cur_num_supported; |
---|
| 1372 | + u8 trigger_min_num_sec_before_ocr; |
---|
| 1373 | + u8 reserved[12]; |
---|
| 1374 | +}; |
---|
| 1375 | + |
---|
| 1376 | +struct megasas_debugfs_buffer { |
---|
| 1377 | + void *buf; |
---|
| 1378 | + u32 len; |
---|
| 1379 | +}; |
---|
| 1380 | + |
---|
1354 | 1381 | void megasas_free_cmds_fusion(struct megasas_instance *instance); |
---|
1355 | 1382 | int megasas_ioc_init_fusion(struct megasas_instance *instance); |
---|
1356 | 1383 | u8 megasas_get_map_info(struct megasas_instance *instance); |
---|