@@ -193,7 +193,12 @@ extern atomic64_t event_counter;
193
193
#define MPI3MR_DEFAULT_HDB_MIN_SZ (2 * 1024 * 1024)
194
194
#define MPI3MR_MAX_NUM_HDB 2
195
195
196
+ #define MPI3MR_HDB_TRIGGER_TYPE_UNKNOWN 0
197
+ #define MPI3MR_HDB_TRIGGER_TYPE_FAULT 1
198
+ #define MPI3MR_HDB_TRIGGER_TYPE_ELEMENT 2
196
199
#define MPI3MR_HDB_TRIGGER_TYPE_GLOBAL 3
200
+ #define MPI3MR_HDB_TRIGGER_TYPE_SOFT_RESET 4
201
+ #define MPI3MR_HDB_TRIGGER_TYPE_FW_RELEASED 5
197
202
198
203
/* SGE Flag definition */
199
204
#define MPI3MR_SGEFLAGS_SYSTEM_SIMPLE_END_OF_LIST \
@@ -218,6 +223,7 @@ extern atomic64_t event_counter;
218
223
#define MPI3MR_WRITE_SAME_MAX_LEN_256_BLKS 256
219
224
#define MPI3MR_WRITE_SAME_MAX_LEN_2048_BLKS 2048
220
225
226
+ #define MPI3MR_DRIVER_EVENT_PROCESS_TRIGGER (0xFFFD)
221
227
222
228
/**
223
229
* struct mpi3mr_nvme_pt_sge - Structure to store SGEs for NVMe
@@ -303,6 +309,7 @@ enum mpi3mr_reset_reason {
303
309
MPI3MR_RESET_FROM_FIRMWARE = 27 ,
304
310
MPI3MR_RESET_FROM_CFG_REQ_TIMEOUT = 29 ,
305
311
MPI3MR_RESET_FROM_SAS_TRANSPORT_TIMEOUT = 30 ,
312
+ MPI3MR_RESET_FROM_TRIGGER = 31 ,
306
313
};
307
314
308
315
#define MPI3MR_RESET_REASON_OSTYPE_LINUX 1
@@ -878,6 +885,24 @@ union mpi3mr_trigger_data {
878
885
union mpi3_driver2_trigger_element element ;
879
886
};
880
887
888
+ /**
889
+ * struct trigger_event_data - store trigger related
890
+ * information.
891
+ *
892
+ * @trace_hdb: Trace diag buffer descriptor reference
893
+ * @fw_hdb: FW diag buffer descriptor reference
894
+ * @trigger_type: Trigger type
895
+ * @trigger_specific_data: Trigger specific data
896
+ * @snapdump: Snapdump enable or disable flag
897
+ */
898
+ struct trigger_event_data {
899
+ struct diag_buffer_desc * trace_hdb ;
900
+ struct diag_buffer_desc * fw_hdb ;
901
+ u8 trigger_type ;
902
+ union mpi3mr_trigger_data trigger_specific_data ;
903
+ bool snapdump ;
904
+ };
905
+
881
906
/**
882
907
* struct diag_buffer_desc - memory descriptor structure to
883
908
* store virtual, dma addresses, size, buffer status for host
@@ -1113,6 +1138,9 @@ struct scmd_priv {
1113
1138
* @ioctl_chain_sge: DMA buffer descriptor for IOCTL chain
1114
1139
* @ioctl_resp_sge: DMA buffer descriptor for Mgmt cmd response
1115
1140
* @ioctl_sges_allocated: Flag for IOCTL SGEs allocated or not
1141
+ * @trace_release_trigger_active: Trace trigger active flag
1142
+ * @fw_release_trigger_active: Fw release trigger active flag
1143
+ * @snapdump_trigger_active: Snapdump trigger active flag
1116
1144
*/
1117
1145
struct mpi3mr_ioc {
1118
1146
struct list_head list ;
@@ -1310,6 +1338,9 @@ struct mpi3mr_ioc {
1310
1338
struct diag_buffer_desc diag_buffers [MPI3MR_MAX_NUM_HDB ];
1311
1339
struct mpi3_driver_page2 * driver_pg2 ;
1312
1340
spinlock_t trigger_lock ;
1341
+ bool snapdump_trigger_active ;
1342
+ bool trace_release_trigger_active ;
1343
+ bool fw_release_trigger_active ;
1313
1344
};
1314
1345
1315
1346
/**
@@ -1513,4 +1544,16 @@ struct diag_buffer_desc *mpi3mr_diag_buffer_for_type(struct mpi3mr_ioc *mrioc,
1513
1544
u8 buf_type );
1514
1545
int mpi3mr_issue_diag_buf_post (struct mpi3mr_ioc * mrioc ,
1515
1546
struct diag_buffer_desc * diag_buffer );
1547
+ void mpi3mr_set_trigger_data_in_all_hdb (struct mpi3mr_ioc * mrioc ,
1548
+ u8 type , union mpi3mr_trigger_data * trigger_data , bool force );
1549
+ void mpi3mr_reply_trigger (struct mpi3mr_ioc * mrioc , u16 iocstatus ,
1550
+ u32 iocloginfo );
1551
+ void mpi3mr_hdb_trigger_data_event (struct mpi3mr_ioc * mrioc ,
1552
+ struct trigger_event_data * event_data );
1553
+ void mpi3mr_scsisense_trigger (struct mpi3mr_ioc * mrioc , u8 senseky , u8 asc ,
1554
+ u8 ascq );
1555
+ void mpi3mr_event_trigger (struct mpi3mr_ioc * mrioc , u8 event );
1556
+ void mpi3mr_global_trigger (struct mpi3mr_ioc * mrioc , u64 trigger_data );
1557
+ void mpi3mr_hdbstatuschg_evt_th (struct mpi3mr_ioc * mrioc ,
1558
+ struct mpi3_event_notification_reply * event_reply );
1516
1559
#endif /*MPI3MR_H_INCLUDED*/
0 commit comments