@@ -193,7 +193,12 @@ extern atomic64_t event_counter;
193193#define MPI3MR_DEFAULT_HDB_MIN_SZ (2 * 1024 * 1024)
194194#define MPI3MR_MAX_NUM_HDB 2
195195
196+ #define MPI3MR_HDB_TRIGGER_TYPE_UNKNOWN 0
197+ #define MPI3MR_HDB_TRIGGER_TYPE_FAULT 1
198+ #define MPI3MR_HDB_TRIGGER_TYPE_ELEMENT 2
196199#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
197202
198203/* SGE Flag definition */
199204#define MPI3MR_SGEFLAGS_SYSTEM_SIMPLE_END_OF_LIST \
@@ -218,6 +223,7 @@ extern atomic64_t event_counter;
218223#define MPI3MR_WRITE_SAME_MAX_LEN_256_BLKS 256
219224#define MPI3MR_WRITE_SAME_MAX_LEN_2048_BLKS 2048
220225
226+ #define MPI3MR_DRIVER_EVENT_PROCESS_TRIGGER (0xFFFD)
221227
222228/**
223229 * struct mpi3mr_nvme_pt_sge - Structure to store SGEs for NVMe
@@ -303,6 +309,7 @@ enum mpi3mr_reset_reason {
303309 MPI3MR_RESET_FROM_FIRMWARE = 27 ,
304310 MPI3MR_RESET_FROM_CFG_REQ_TIMEOUT = 29 ,
305311 MPI3MR_RESET_FROM_SAS_TRANSPORT_TIMEOUT = 30 ,
312+ MPI3MR_RESET_FROM_TRIGGER = 31 ,
306313};
307314
308315#define MPI3MR_RESET_REASON_OSTYPE_LINUX 1
@@ -878,6 +885,24 @@ union mpi3mr_trigger_data {
878885 union mpi3_driver2_trigger_element element ;
879886};
880887
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+
881906/**
882907 * struct diag_buffer_desc - memory descriptor structure to
883908 * store virtual, dma addresses, size, buffer status for host
@@ -1113,6 +1138,9 @@ struct scmd_priv {
11131138 * @ioctl_chain_sge: DMA buffer descriptor for IOCTL chain
11141139 * @ioctl_resp_sge: DMA buffer descriptor for Mgmt cmd response
11151140 * @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
11161144 */
11171145struct mpi3mr_ioc {
11181146 struct list_head list ;
@@ -1310,6 +1338,9 @@ struct mpi3mr_ioc {
13101338 struct diag_buffer_desc diag_buffers [MPI3MR_MAX_NUM_HDB ];
13111339 struct mpi3_driver_page2 * driver_pg2 ;
13121340 spinlock_t trigger_lock ;
1341+ bool snapdump_trigger_active ;
1342+ bool trace_release_trigger_active ;
1343+ bool fw_release_trigger_active ;
13131344};
13141345
13151346/**
@@ -1513,4 +1544,16 @@ struct diag_buffer_desc *mpi3mr_diag_buffer_for_type(struct mpi3mr_ioc *mrioc,
15131544 u8 buf_type );
15141545int mpi3mr_issue_diag_buf_post (struct mpi3mr_ioc * mrioc ,
15151546 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 );
15161559#endif /*MPI3MR_H_INCLUDED*/
0 commit comments