1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46#ifndef MPT3SAS_BASE_H_INCLUDED
47#define MPT3SAS_BASE_H_INCLUDED
48
49#include "mpi/mpi2_type.h"
50#include "mpi/mpi2.h"
51#include "mpi/mpi2_ioc.h"
52#include "mpi/mpi2_cnfg.h"
53#include "mpi/mpi2_init.h"
54#include "mpi/mpi2_raid.h"
55#include "mpi/mpi2_tool.h"
56#include "mpi/mpi2_sas.h"
57
58#include <scsi/scsi.h>
59#include <scsi/scsi_cmnd.h>
60#include <scsi/scsi_device.h>
61#include <scsi/scsi_host.h>
62#include <scsi/scsi_tcq.h>
63#include <scsi/scsi_transport_sas.h>
64#include <scsi/scsi_dbg.h>
65#include <scsi/scsi_eh.h>
66#include <linux/pci.h>
67#include <linux/poll.h>
68
69#include "mpt3sas_debug.h"
70#include "mpt3sas_trigger_diag.h"
71
72
73#define MPT3SAS_DRIVER_NAME "mpt3sas"
74#define MPT3SAS_AUTHOR "Avago Technologies <MPT-FusionLinux.pdl@avagotech.com>"
75#define MPT3SAS_DESCRIPTION "LSI MPT Fusion SAS 3.0 Device Driver"
76#define MPT3SAS_DRIVER_VERSION "13.100.00.00"
77#define MPT3SAS_MAJOR_VERSION 13
78#define MPT3SAS_MINOR_VERSION 100
79#define MPT3SAS_BUILD_VERSION 0
80#define MPT3SAS_RELEASE_VERSION 00
81
82#define MPT2SAS_DRIVER_NAME "mpt2sas"
83#define MPT2SAS_DESCRIPTION "LSI MPT Fusion SAS 2.0 Device Driver"
84#define MPT2SAS_DRIVER_VERSION "20.102.00.00"
85#define MPT2SAS_MAJOR_VERSION 20
86#define MPT2SAS_MINOR_VERSION 102
87#define MPT2SAS_BUILD_VERSION 0
88#define MPT2SAS_RELEASE_VERSION 00
89
90
91
92
93#define MPT_MAX_PHYS_SEGMENTS SG_CHUNK_SIZE
94#define MPT_MIN_PHYS_SEGMENTS 16
95
96#ifdef CONFIG_SCSI_MPT3SAS_MAX_SGE
97#define MPT3SAS_SG_DEPTH CONFIG_SCSI_MPT3SAS_MAX_SGE
98#else
99#define MPT3SAS_SG_DEPTH MPT_MAX_PHYS_SEGMENTS
100#endif
101
102#ifdef CONFIG_SCSI_MPT2SAS_MAX_SGE
103#define MPT2SAS_SG_DEPTH CONFIG_SCSI_MPT2SAS_MAX_SGE
104#else
105#define MPT2SAS_SG_DEPTH MPT_MAX_PHYS_SEGMENTS
106#endif
107
108
109
110
111#define MPT3SAS_SATA_QUEUE_DEPTH 32
112#define MPT3SAS_SAS_QUEUE_DEPTH 254
113#define MPT3SAS_RAID_QUEUE_DEPTH 128
114
115#define MPT3SAS_RAID_MAX_SECTORS 8192
116
117#define MPT_NAME_LENGTH 32
118#define MPT_STRING_LENGTH 64
119
120#define MPT_MAX_CALLBACKS 32
121
122#define INTERNAL_CMDS_COUNT 10
123
124#define INTERNAL_SCSIIO_CMDS_COUNT 3
125
126#define MPI3_HIM_MASK 0xFFFFFFFF
127
128#define MPT3SAS_INVALID_DEVICE_HANDLE 0xFFFF
129
130#define MAX_CHAIN_ELEMT_SZ 16
131#define DEFAULT_NUM_FWCHAIN_ELEMTS 8
132
133
134
135
136#define MPT3_IOC_PRE_RESET 1
137#define MPT3_IOC_AFTER_RESET 2
138#define MPT3_IOC_DONE_RESET 3
139
140
141
142
143#define MPT3SAS_FMT "%s: "
144
145
146
147
148
149#define MPT2_WARPDRIVE_LOGENTRY (0x8002)
150#define MPT2_WARPDRIVE_LC_SSDT (0x41)
151#define MPT2_WARPDRIVE_LC_SSDLW (0x43)
152#define MPT2_WARPDRIVE_LC_SSDLF (0x44)
153#define MPT2_WARPDRIVE_LC_BRMF (0x4D)
154
155
156
157
158#define MPT_TARGET_FLAGS_RAID_COMPONENT 0x01
159#define MPT_TARGET_FLAGS_VOLUME 0x02
160#define MPT_TARGET_FLAGS_DELETED 0x04
161#define MPT_TARGET_FASTPATH_IO 0x08
162
163#define SAS2_PCI_DEVICE_B0_REVISION (0x01)
164#define SAS3_PCI_DEVICE_C0_REVISION (0x02)
165
166
167
168
169#define MPT2SAS_INTEL_RMS25JB080_BRANDING \
170 "Intel(R) Integrated RAID Module RMS25JB080"
171#define MPT2SAS_INTEL_RMS25JB040_BRANDING \
172 "Intel(R) Integrated RAID Module RMS25JB040"
173#define MPT2SAS_INTEL_RMS25KB080_BRANDING \
174 "Intel(R) Integrated RAID Module RMS25KB080"
175#define MPT2SAS_INTEL_RMS25KB040_BRANDING \
176 "Intel(R) Integrated RAID Module RMS25KB040"
177#define MPT2SAS_INTEL_RMS25LB040_BRANDING \
178 "Intel(R) Integrated RAID Module RMS25LB040"
179#define MPT2SAS_INTEL_RMS25LB080_BRANDING \
180 "Intel(R) Integrated RAID Module RMS25LB080"
181#define MPT2SAS_INTEL_RMS2LL080_BRANDING \
182 "Intel Integrated RAID Module RMS2LL080"
183#define MPT2SAS_INTEL_RMS2LL040_BRANDING \
184 "Intel Integrated RAID Module RMS2LL040"
185#define MPT2SAS_INTEL_RS25GB008_BRANDING \
186 "Intel(R) RAID Controller RS25GB008"
187#define MPT2SAS_INTEL_SSD910_BRANDING \
188 "Intel(R) SSD 910 Series"
189
190#define MPT3SAS_INTEL_RMS3JC080_BRANDING \
191 "Intel(R) Integrated RAID Module RMS3JC080"
192#define MPT3SAS_INTEL_RS3GC008_BRANDING \
193 "Intel(R) RAID Controller RS3GC008"
194#define MPT3SAS_INTEL_RS3FC044_BRANDING \
195 "Intel(R) RAID Controller RS3FC044"
196#define MPT3SAS_INTEL_RS3UC080_BRANDING \
197 "Intel(R) RAID Controller RS3UC080"
198
199
200
201
202#define MPT2SAS_INTEL_RMS25JB080_SSDID 0x3516
203#define MPT2SAS_INTEL_RMS25JB040_SSDID 0x3517
204#define MPT2SAS_INTEL_RMS25KB080_SSDID 0x3518
205#define MPT2SAS_INTEL_RMS25KB040_SSDID 0x3519
206#define MPT2SAS_INTEL_RMS25LB040_SSDID 0x351A
207#define MPT2SAS_INTEL_RMS25LB080_SSDID 0x351B
208#define MPT2SAS_INTEL_RMS2LL080_SSDID 0x350E
209#define MPT2SAS_INTEL_RMS2LL040_SSDID 0x350F
210#define MPT2SAS_INTEL_RS25GB008_SSDID 0x3000
211#define MPT2SAS_INTEL_SSD910_SSDID 0x3700
212
213#define MPT3SAS_INTEL_RMS3JC080_SSDID 0x3521
214#define MPT3SAS_INTEL_RS3GC008_SSDID 0x3522
215#define MPT3SAS_INTEL_RS3FC044_SSDID 0x3523
216#define MPT3SAS_INTEL_RS3UC080_SSDID 0x3524
217
218
219
220
221#define MPT2SAS_DELL_BRANDING_SIZE 32
222
223#define MPT2SAS_DELL_6GBPS_SAS_HBA_BRANDING "Dell 6Gbps SAS HBA"
224#define MPT2SAS_DELL_PERC_H200_ADAPTER_BRANDING "Dell PERC H200 Adapter"
225#define MPT2SAS_DELL_PERC_H200_INTEGRATED_BRANDING "Dell PERC H200 Integrated"
226#define MPT2SAS_DELL_PERC_H200_MODULAR_BRANDING "Dell PERC H200 Modular"
227#define MPT2SAS_DELL_PERC_H200_EMBEDDED_BRANDING "Dell PERC H200 Embedded"
228#define MPT2SAS_DELL_PERC_H200_BRANDING "Dell PERC H200"
229#define MPT2SAS_DELL_6GBPS_SAS_BRANDING "Dell 6Gbps SAS"
230
231#define MPT3SAS_DELL_12G_HBA_BRANDING \
232 "Dell 12Gbps HBA"
233
234
235
236
237#define MPT2SAS_DELL_6GBPS_SAS_HBA_SSDID 0x1F1C
238#define MPT2SAS_DELL_PERC_H200_ADAPTER_SSDID 0x1F1D
239#define MPT2SAS_DELL_PERC_H200_INTEGRATED_SSDID 0x1F1E
240#define MPT2SAS_DELL_PERC_H200_MODULAR_SSDID 0x1F1F
241#define MPT2SAS_DELL_PERC_H200_EMBEDDED_SSDID 0x1F20
242#define MPT2SAS_DELL_PERC_H200_SSDID 0x1F21
243#define MPT2SAS_DELL_6GBPS_SAS_SSDID 0x1F22
244
245#define MPT3SAS_DELL_12G_HBA_SSDID 0x1F46
246
247
248
249
250#define MPT3SAS_CISCO_12G_8E_HBA_BRANDING \
251 "Cisco 9300-8E 12G SAS HBA"
252#define MPT3SAS_CISCO_12G_8I_HBA_BRANDING \
253 "Cisco 9300-8i 12G SAS HBA"
254#define MPT3SAS_CISCO_12G_AVILA_HBA_BRANDING \
255 "Cisco 12G Modular SAS Pass through Controller"
256#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_BRANDING \
257 "UCS C3X60 12G SAS Pass through Controller"
258
259
260
261#define MPT3SAS_CISCO_12G_8E_HBA_SSDID 0x14C
262#define MPT3SAS_CISCO_12G_8I_HBA_SSDID 0x154
263#define MPT3SAS_CISCO_12G_AVILA_HBA_SSDID 0x155
264#define MPT3SAS_CISCO_12G_COLUSA_MEZZANINE_HBA_SSDID 0x156
265
266
267
268
269#define MPT3_DIAG_BUFFER_IS_REGISTERED (0x01)
270#define MPT3_DIAG_BUFFER_IS_RELEASED (0x02)
271#define MPT3_DIAG_BUFFER_IS_DIAG_RESET (0x04)
272
273
274
275
276#define MPT2SAS_HP_3PAR_SSVID 0x1590
277
278#define MPT2SAS_HP_2_4_INTERNAL_BRANDING \
279 "HP H220 Host Bus Adapter"
280#define MPT2SAS_HP_2_4_EXTERNAL_BRANDING \
281 "HP H221 Host Bus Adapter"
282#define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_BRANDING \
283 "HP H222 Host Bus Adapter"
284#define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_BRANDING \
285 "HP H220i Host Bus Adapter"
286#define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_BRANDING \
287 "HP H210i Host Bus Adapter"
288
289
290
291
292#define MPT2SAS_HP_2_4_INTERNAL_SSDID 0x0041
293#define MPT2SAS_HP_2_4_EXTERNAL_SSDID 0x0042
294#define MPT2SAS_HP_1_4_INTERNAL_1_4_EXTERNAL_SSDID 0x0043
295#define MPT2SAS_HP_EMBEDDED_2_4_INTERNAL_SSDID 0x0044
296#define MPT2SAS_HP_DAUGHTER_2_4_INTERNAL_SSDID 0x0046
297
298
299
300
301
302
303#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT 12
304#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET (0x10)
305
306
307#define MFG10_OEM_ID_INVALID (0x00000000)
308#define MFG10_OEM_ID_DELL (0x00000001)
309#define MFG10_OEM_ID_FSC (0x00000002)
310#define MFG10_OEM_ID_SUN (0x00000003)
311#define MFG10_OEM_ID_IBM (0x00000004)
312
313
314#define MFG10_GF0_OCE_DISABLED (0x00000001)
315#define MFG10_GF0_R1E_DRIVE_COUNT (0x00000002)
316#define MFG10_GF0_R10_DISPLAY (0x00000004)
317#define MFG10_GF0_SSD_DATA_SCRUB_DISABLE (0x00000008)
318#define MFG10_GF0_SINGLE_DRIVE_R0 (0x00000010)
319
320#define VIRTUAL_IO_FAILED_RETRY (0x32010081)
321
322
323struct Mpi2ManufacturingPage10_t {
324 MPI2_CONFIG_PAGE_HEADER Header;
325 U8 OEMIdentifier;
326 U8 Reserved1;
327 U16 Reserved2;
328 U32 Reserved3;
329 U32 GenericFlags0;
330 U32 GenericFlags1;
331 U32 Reserved4;
332 U32 OEMSpecificFlags0;
333 U32 OEMSpecificFlags1;
334 U32 Reserved5[18];
335};
336
337
338
339struct Mpi2ManufacturingPage11_t {
340 MPI2_CONFIG_PAGE_HEADER Header;
341 __le32 Reserved1;
342 u8 Reserved2;
343 u8 EEDPTagMode;
344 u8 Reserved3;
345 u8 Reserved4;
346 __le32 Reserved5[23];
347};
348
349
350
351
352
353
354
355
356
357
358
359
360
361struct MPT3SAS_TARGET {
362 struct scsi_target *starget;
363 u64 sas_address;
364 struct _raid_device *raid_device;
365 u16 handle;
366 int num_luns;
367 u32 flags;
368 u8 deleted;
369 u8 tm_busy;
370 struct _sas_device *sdev;
371};
372
373
374
375
376
377#define MPT_DEVICE_FLAGS_INIT 0x01
378#define MPT_DEVICE_TLR_ON 0x02
379
380#define MFG_PAGE10_HIDE_SSDS_MASK (0x00000003)
381#define MFG_PAGE10_HIDE_ALL_DISKS (0x00)
382#define MFG_PAGE10_EXPOSE_ALL_DISKS (0x01)
383#define MFG_PAGE10_HIDE_IF_VOL_PRESENT (0x02)
384
385
386
387
388
389
390
391
392
393
394
395
396
397struct MPT3SAS_DEVICE {
398 struct MPT3SAS_TARGET *sas_target;
399 unsigned int lun;
400 u32 flags;
401 u8 configured_lun;
402 u8 block;
403 u8 tlr_snoop_check;
404 u8 ignore_delay_remove;
405};
406
407#define MPT3_CMD_NOT_USED 0x8000
408#define MPT3_CMD_COMPLETE 0x0001
409#define MPT3_CMD_PENDING 0x0002
410#define MPT3_CMD_REPLY_VALID 0x0004
411#define MPT3_CMD_RESET 0x0008
412
413
414
415
416
417
418
419
420
421
422struct _internal_cmd {
423 struct mutex mutex;
424 struct completion done;
425 void *reply;
426 void *sense;
427 u16 status;
428 u16 smid;
429};
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456struct _sas_device {
457 struct list_head list;
458 struct scsi_target *starget;
459 u64 sas_address;
460 u64 device_name;
461 u16 handle;
462 u64 sas_address_parent;
463 u16 enclosure_handle;
464 u64 enclosure_logical_id;
465 u16 volume_handle;
466 u64 volume_wwid;
467 u32 device_info;
468 int id;
469 int channel;
470 u16 slot;
471 u8 phy;
472 u8 responding;
473 u8 fast_path;
474 u8 pfa_led_on;
475 u8 pend_sas_rphy_add;
476 u8 enclosure_level;
477 u8 connector_name[5];
478 struct kref refcount;
479};
480
481static inline void sas_device_get(struct _sas_device *s)
482{
483 kref_get(&s->refcount);
484}
485
486static inline void sas_device_free(struct kref *r)
487{
488 kfree(container_of(r, struct _sas_device, refcount));
489}
490
491static inline void sas_device_put(struct _sas_device *s)
492{
493 kref_put(&s->refcount, sas_device_free);
494}
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519#define MPT_MAX_WARPDRIVE_PDS 8
520struct _raid_device {
521 struct list_head list;
522 struct scsi_target *starget;
523 struct scsi_device *sdev;
524 u64 wwid;
525 u16 handle;
526 u16 block_sz;
527 int id;
528 int channel;
529 u8 volume_type;
530 u8 num_pds;
531 u8 responding;
532 u8 percent_complete;
533 u8 direct_io_enabled;
534 u8 stripe_exponent;
535 u8 block_exponent;
536 u64 max_lba;
537 u32 stripe_sz;
538 u32 device_info;
539 u16 pd_handle[MPT_MAX_WARPDRIVE_PDS];
540};
541
542
543
544
545
546
547
548struct _boot_device {
549 u8 is_raid;
550 void *device;
551};
552
553
554
555
556
557
558
559
560
561
562struct _sas_port {
563 struct list_head port_list;
564 u8 num_phys;
565 struct sas_identify remote_identify;
566 struct sas_rphy *rphy;
567 struct sas_port *port;
568 struct list_head phy_list;
569};
570
571
572
573
574
575
576
577
578
579
580
581
582struct _sas_phy {
583 struct list_head port_siblings;
584 struct sas_identify identify;
585 struct sas_identify remote_identify;
586 struct sas_phy *phy;
587 u8 phy_id;
588 u16 handle;
589 u16 attached_handle;
590 u8 phy_belongs_to_port;
591};
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607struct _sas_node {
608 struct list_head list;
609 struct device *parent_dev;
610 u8 num_phys;
611 u64 sas_address;
612 u16 handle;
613 u64 sas_address_parent;
614 u16 enclosure_handle;
615 u64 enclosure_logical_id;
616 u8 responding;
617 struct _sas_phy *phy;
618 struct list_head sas_port_list;
619};
620
621
622
623
624
625
626enum reset_type {
627 FORCE_BIG_HAMMER,
628 SOFT_RESET,
629};
630
631
632
633
634
635
636
637struct chain_tracker {
638 void *chain_buffer;
639 dma_addr_t chain_buffer_dma;
640 struct list_head tracker_list;
641};
642
643
644
645
646
647
648
649
650
651
652struct scsiio_tracker {
653 u16 smid;
654 struct scsi_cmnd *scmd;
655 u8 cb_idx;
656 u8 direct_io;
657 struct list_head chain_list;
658 struct list_head tracker_list;
659 u16 msix_io;
660};
661
662
663
664
665
666
667
668struct request_tracker {
669 u16 smid;
670 u8 cb_idx;
671 struct list_head tracker_list;
672};
673
674
675
676
677
678
679struct _tr_list {
680 struct list_head list;
681 u16 handle;
682 u16 state;
683};
684
685
686
687
688
689struct _sc_list {
690 struct list_head list;
691 u16 handle;
692};
693
694
695
696
697
698
699struct _event_ack_list {
700 struct list_head list;
701 u16 Event;
702 u32 EventContext;
703};
704
705
706
707
708
709
710
711
712
713
714
715
716struct adapter_reply_queue {
717 struct MPT3SAS_ADAPTER *ioc;
718 u8 msix_index;
719 unsigned int vector;
720 u32 reply_post_host_index;
721 Mpi2ReplyDescriptorsUnion_t *reply_post_free;
722 char name[MPT_NAME_LENGTH];
723 atomic_t busy;
724 cpumask_var_t affinity_hint;
725 struct list_head list;
726};
727
728typedef void (*MPT_ADD_SGE)(void *paddr, u32 flags_length, dma_addr_t dma_addr);
729
730
731typedef int (*MPT_BUILD_SG_SCMD)(struct MPT3SAS_ADAPTER *ioc,
732 struct scsi_cmnd *scmd, u16 smid);
733typedef void (*MPT_BUILD_SG)(struct MPT3SAS_ADAPTER *ioc, void *psge,
734 dma_addr_t data_out_dma, size_t data_out_sz,
735 dma_addr_t data_in_dma, size_t data_in_sz);
736typedef void (*MPT_BUILD_ZERO_LEN_SGE)(struct MPT3SAS_ADAPTER *ioc,
737 void *paddr);
738
739
740
741
742union mpi3_version_union {
743 MPI2_VERSION_STRUCT Struct;
744 u32 Word;
745};
746
747struct mpt3sas_facts {
748 u16 MsgVersion;
749 u16 HeaderVersion;
750 u8 IOCNumber;
751 u8 VP_ID;
752 u8 VF_ID;
753 u16 IOCExceptions;
754 u16 IOCStatus;
755 u32 IOCLogInfo;
756 u8 MaxChainDepth;
757 u8 WhoInit;
758 u8 NumberOfPorts;
759 u8 MaxMSIxVectors;
760 u16 RequestCredit;
761 u16 ProductID;
762 u32 IOCCapabilities;
763 union mpi3_version_union FWVersion;
764 u16 IOCRequestFrameSize;
765 u16 IOCMaxChainSegmentSize;
766 u16 MaxInitiators;
767 u16 MaxTargets;
768 u16 MaxSasExpanders;
769 u16 MaxEnclosures;
770 u16 ProtocolFlags;
771 u16 HighPriorityCredit;
772 u16 MaxReplyDescriptorPostQueueDepth;
773 u8 ReplyFrameSize;
774 u8 MaxVolumes;
775 u16 MaxDevHandle;
776 u16 MaxPersistentEntries;
777 u16 MinDevHandle;
778};
779
780struct mpt3sas_port_facts {
781 u8 PortNumber;
782 u8 VP_ID;
783 u8 VF_ID;
784 u8 PortType;
785 u16 MaxPostedCmdBuffers;
786};
787
788struct reply_post_struct {
789 Mpi2ReplyDescriptorsUnion_t *reply_post_free;
790 dma_addr_t reply_post_free_dma;
791};
792
793typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951struct MPT3SAS_ADAPTER {
952 struct list_head list;
953 struct Scsi_Host *shost;
954 u8 id;
955 int cpu_count;
956 char name[MPT_NAME_LENGTH];
957 char driver_name[MPT_NAME_LENGTH];
958 char tmp_string[MPT_STRING_LENGTH];
959 struct pci_dev *pdev;
960 Mpi2SystemInterfaceRegs_t __iomem *chip;
961 resource_size_t chip_phys;
962 int logging_level;
963 int fwfault_debug;
964 u8 ir_firmware;
965 int bars;
966 u8 mask_interrupts;
967 int dma_mask;
968
969
970 char fault_reset_work_q_name[20];
971 struct workqueue_struct *fault_reset_work_q;
972 struct delayed_work fault_reset_work;
973
974
975 char firmware_event_name[20];
976 struct workqueue_struct *firmware_event_thread;
977 spinlock_t fw_event_lock;
978 struct list_head fw_event_list;
979
980
981 int aen_event_read_flag;
982 u8 broadcast_aen_busy;
983 u16 broadcast_aen_pending;
984 u8 shost_recovery;
985
986 struct mutex reset_in_progress_mutex;
987 spinlock_t ioc_reset_in_progress_lock;
988 u8 ioc_link_reset_in_progress;
989 u8 ioc_reset_in_progress_status;
990
991 u8 ignore_loginfos;
992 u8 remove_host;
993 u8 pci_error_recovery;
994 u8 wait_for_discovery_to_complete;
995 u8 is_driver_loading;
996 u8 port_enable_failed;
997 u8 start_scan;
998 u16 start_scan_failed;
999
1000 u8 msix_enable;
1001 u16 msix_vector_count;
1002 u8 *cpu_msix_table;
1003 u16 cpu_msix_table_sz;
1004 resource_size_t __iomem **reply_post_host_index;
1005 u32 ioc_reset_count;
1006 MPT3SAS_FLUSH_RUNNING_CMDS schedule_dead_ioc_flush_running_cmds;
1007 u32 non_operational_loop;
1008
1009
1010 u8 scsi_io_cb_idx;
1011 u8 tm_cb_idx;
1012 u8 transport_cb_idx;
1013 u8 scsih_cb_idx;
1014 u8 ctl_cb_idx;
1015 u8 base_cb_idx;
1016 u8 port_enable_cb_idx;
1017 u8 config_cb_idx;
1018 u8 tm_tr_cb_idx;
1019 u8 tm_tr_volume_cb_idx;
1020 u8 tm_sas_control_cb_idx;
1021 struct _internal_cmd base_cmds;
1022 struct _internal_cmd port_enable_cmds;
1023 struct _internal_cmd transport_cmds;
1024 struct _internal_cmd scsih_cmds;
1025 struct _internal_cmd tm_cmds;
1026 struct _internal_cmd ctl_cmds;
1027 struct _internal_cmd config_cmds;
1028
1029 MPT_ADD_SGE base_add_sg_single;
1030
1031
1032 MPT_BUILD_SG_SCMD build_sg_scmd;
1033 MPT_BUILD_SG build_sg;
1034 MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge;
1035 u16 sge_size_ieee;
1036 u16 hba_mpi_version_belonged;
1037
1038
1039 MPT_BUILD_SG build_sg_mpi;
1040 MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge_mpi;
1041
1042
1043 u32 event_type[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];
1044 u32 event_context;
1045 void *event_log;
1046 u32 event_masks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];
1047
1048
1049 struct mpt3sas_facts facts;
1050 struct mpt3sas_port_facts *pfacts;
1051 Mpi2ManufacturingPage0_t manu_pg0;
1052 struct Mpi2ManufacturingPage10_t manu_pg10;
1053 struct Mpi2ManufacturingPage11_t manu_pg11;
1054 Mpi2BiosPage2_t bios_pg2;
1055 Mpi2BiosPage3_t bios_pg3;
1056 Mpi2IOCPage8_t ioc_pg8;
1057 Mpi2IOUnitPage0_t iounit_pg0;
1058 Mpi2IOUnitPage1_t iounit_pg1;
1059 Mpi2IOUnitPage8_t iounit_pg8;
1060
1061 struct _boot_device req_boot_device;
1062 struct _boot_device req_alt_boot_device;
1063 struct _boot_device current_boot_device;
1064
1065
1066 struct _sas_node sas_hba;
1067 struct list_head sas_expander_list;
1068 spinlock_t sas_node_lock;
1069 struct list_head sas_device_list;
1070 struct list_head sas_device_init_list;
1071 spinlock_t sas_device_lock;
1072 struct list_head raid_device_list;
1073 spinlock_t raid_device_lock;
1074 u8 io_missing_delay;
1075 u16 device_missing_delay;
1076 int sas_id;
1077
1078 void *blocking_handles;
1079 void *pd_handles;
1080 u16 pd_handles_sz;
1081
1082
1083 u16 config_page_sz;
1084 void *config_page;
1085 dma_addr_t config_page_dma;
1086
1087
1088 u16 hba_queue_depth;
1089 u16 sge_size;
1090 u16 scsiio_depth;
1091 u16 request_sz;
1092 u8 *request;
1093 dma_addr_t request_dma;
1094 u32 request_dma_sz;
1095 struct scsiio_tracker *scsi_lookup;
1096 ulong scsi_lookup_pages;
1097 spinlock_t scsi_lookup_lock;
1098 struct list_head free_list;
1099 int pending_io_count;
1100 wait_queue_head_t reset_wq;
1101
1102
1103 struct chain_tracker *chain_lookup;
1104 struct list_head free_chain_list;
1105 struct dma_pool *chain_dma_pool;
1106 ulong chain_pages;
1107 u16 max_sges_in_main_message;
1108 u16 max_sges_in_chain_message;
1109 u16 chains_needed_per_io;
1110 u32 chain_depth;
1111 u16 chain_segment_sz;
1112
1113
1114 u16 hi_priority_smid;
1115 u8 *hi_priority;
1116 dma_addr_t hi_priority_dma;
1117 u16 hi_priority_depth;
1118 struct request_tracker *hpr_lookup;
1119 struct list_head hpr_free_list;
1120
1121
1122 u16 internal_smid;
1123 u8 *internal;
1124 dma_addr_t internal_dma;
1125 u16 internal_depth;
1126 struct request_tracker *internal_lookup;
1127 struct list_head internal_free_list;
1128
1129
1130 u8 *sense;
1131 dma_addr_t sense_dma;
1132 struct dma_pool *sense_dma_pool;
1133
1134
1135 u16 reply_sz;
1136 u8 *reply;
1137 dma_addr_t reply_dma;
1138 u32 reply_dma_max_address;
1139 u32 reply_dma_min_address;
1140 struct dma_pool *reply_dma_pool;
1141
1142
1143 u16 reply_free_queue_depth;
1144 __le32 *reply_free;
1145 dma_addr_t reply_free_dma;
1146 struct dma_pool *reply_free_dma_pool;
1147 u32 reply_free_host_index;
1148
1149
1150 u16 reply_post_queue_depth;
1151 struct reply_post_struct *reply_post;
1152 u8 rdpq_array_capable;
1153 u8 rdpq_array_enable;
1154 u8 rdpq_array_enable_assigned;
1155 struct dma_pool *reply_post_free_dma_pool;
1156 u8 reply_queue_count;
1157 struct list_head reply_queue_list;
1158
1159 u8 msix96_vector;
1160
1161 resource_size_t **replyPostRegisterIndex;
1162
1163 struct list_head delayed_tr_list;
1164 struct list_head delayed_tr_volume_list;
1165 struct list_head delayed_sc_list;
1166 struct list_head delayed_event_ack_list;
1167 u8 temp_sensors_count;
1168 struct mutex pci_access_mutex;
1169
1170
1171 u8 *diag_buffer[MPI2_DIAG_BUF_TYPE_COUNT];
1172 u32 diag_buffer_sz[MPI2_DIAG_BUF_TYPE_COUNT];
1173 dma_addr_t diag_buffer_dma[MPI2_DIAG_BUF_TYPE_COUNT];
1174 u8 diag_buffer_status[MPI2_DIAG_BUF_TYPE_COUNT];
1175 u32 unique_id[MPI2_DIAG_BUF_TYPE_COUNT];
1176 u32 product_specific[MPI2_DIAG_BUF_TYPE_COUNT][23];
1177 u32 diagnostic_flags[MPI2_DIAG_BUF_TYPE_COUNT];
1178 u32 ring_buffer_offset;
1179 u32 ring_buffer_sz;
1180 u8 is_warpdrive;
1181 u8 hide_ir_msg;
1182 u8 mfg_pg10_hide_flag;
1183 u8 hide_drives;
1184 spinlock_t diag_trigger_lock;
1185 u8 diag_trigger_active;
1186 struct SL_WH_MASTER_TRIGGER_T diag_trigger_master;
1187 struct SL_WH_EVENT_TRIGGERS_T diag_trigger_event;
1188 struct SL_WH_SCSI_TRIGGERS_T diag_trigger_scsi;
1189 struct SL_WH_MPI_TRIGGERS_T diag_trigger_mpi;
1190};
1191
1192typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1193 u32 reply);
1194
1195
1196
1197extern struct list_head mpt3sas_ioc_list;
1198extern char driver_name[MPT_NAME_LENGTH];
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209extern spinlock_t gioc_lock;
1210
1211void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc);
1212void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc);
1213
1214int mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc);
1215void mpt3sas_base_detach(struct MPT3SAS_ADAPTER *ioc);
1216int mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc);
1217void mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc);
1218int mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc,
1219 enum reset_type type);
1220
1221void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1222void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1223__le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
1224 u16 smid);
1225
1226void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
1227
1228
1229u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
1230u16 mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx,
1231 struct scsi_cmnd *scmd);
1232
1233u16 mpt3sas_base_get_smid(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
1234void mpt3sas_base_free_smid(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1235void mpt3sas_base_put_smid_scsi_io(struct MPT3SAS_ADAPTER *ioc, u16 smid,
1236 u16 handle);
1237void mpt3sas_base_put_smid_fast_path(struct MPT3SAS_ADAPTER *ioc, u16 smid,
1238 u16 handle);
1239void mpt3sas_base_put_smid_hi_priority(struct MPT3SAS_ADAPTER *ioc,
1240 u16 smid, u16 msix_task);
1241void mpt3sas_base_put_smid_default(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1242void mpt3sas_base_initialize_callback_handler(void);
1243u8 mpt3sas_base_register_callback_handler(MPT_CALLBACK cb_func);
1244void mpt3sas_base_release_callback_handler(u8 cb_idx);
1245
1246u8 mpt3sas_base_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1247 u32 reply);
1248u8 mpt3sas_port_enable_done(struct MPT3SAS_ADAPTER *ioc, u16 smid,
1249 u8 msix_index, u32 reply);
1250void *mpt3sas_base_get_reply_virt_addr(struct MPT3SAS_ADAPTER *ioc,
1251 u32 phys_addr);
1252
1253u32 mpt3sas_base_get_iocstate(struct MPT3SAS_ADAPTER *ioc, int cooked);
1254
1255void mpt3sas_base_fault_info(struct MPT3SAS_ADAPTER *ioc , u16 fault_code);
1256int mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
1257 Mpi2SasIoUnitControlReply_t *mpi_reply,
1258 Mpi2SasIoUnitControlRequest_t *mpi_request);
1259int mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
1260 Mpi2SepReply_t *mpi_reply, Mpi2SepRequest_t *mpi_request);
1261
1262void mpt3sas_base_validate_event_type(struct MPT3SAS_ADAPTER *ioc,
1263 u32 *event_type);
1264
1265void mpt3sas_halt_firmware(struct MPT3SAS_ADAPTER *ioc);
1266
1267void mpt3sas_base_update_missing_delay(struct MPT3SAS_ADAPTER *ioc,
1268 u16 device_missing_delay, u8 io_missing_delay);
1269
1270int mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc);
1271
1272
1273
1274u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
1275 u32 reply);
1276void mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
1277
1278int mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1279 uint channel, uint id, uint lun, u8 type, u16 smid_task,
1280 ulong timeout);
1281int mpt3sas_scsih_issue_locked_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1282 uint channel, uint id, uint lun, u8 type, u16 smid_task,
1283 ulong timeout);
1284
1285void mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1286void mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1287void mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1288void mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc,
1289 u64 sas_address);
1290u8 mpt3sas_check_for_pending_internal_cmds(struct MPT3SAS_ADAPTER *ioc,
1291 u16 smid);
1292
1293struct _sas_node *mpt3sas_scsih_expander_find_by_handle(
1294 struct MPT3SAS_ADAPTER *ioc, u16 handle);
1295struct _sas_node *mpt3sas_scsih_expander_find_by_sas_address(
1296 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1297struct _sas_device *mpt3sas_get_sdev_by_addr(
1298 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1299struct _sas_device *__mpt3sas_get_sdev_by_addr(
1300 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1301
1302void mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc);
1303struct _raid_device *
1304mpt3sas_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1305
1306
1307u8 mpt3sas_config_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1308 u32 reply);
1309int mpt3sas_config_get_number_hba_phys(struct MPT3SAS_ADAPTER *ioc,
1310 u8 *num_phys);
1311int mpt3sas_config_get_manufacturing_pg0(struct MPT3SAS_ADAPTER *ioc,
1312 Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage0_t *config_page);
1313int mpt3sas_config_get_manufacturing_pg7(struct MPT3SAS_ADAPTER *ioc,
1314 Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage7_t *config_page,
1315 u16 sz);
1316int mpt3sas_config_get_manufacturing_pg10(struct MPT3SAS_ADAPTER *ioc,
1317 Mpi2ConfigReply_t *mpi_reply,
1318 struct Mpi2ManufacturingPage10_t *config_page);
1319
1320int mpt3sas_config_get_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
1321 Mpi2ConfigReply_t *mpi_reply,
1322 struct Mpi2ManufacturingPage11_t *config_page);
1323int mpt3sas_config_set_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
1324 Mpi2ConfigReply_t *mpi_reply,
1325 struct Mpi2ManufacturingPage11_t *config_page);
1326
1327int mpt3sas_config_get_bios_pg2(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1328 *mpi_reply, Mpi2BiosPage2_t *config_page);
1329int mpt3sas_config_get_bios_pg3(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1330 *mpi_reply, Mpi2BiosPage3_t *config_page);
1331int mpt3sas_config_get_iounit_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1332 *mpi_reply, Mpi2IOUnitPage0_t *config_page);
1333int mpt3sas_config_get_sas_device_pg0(struct MPT3SAS_ADAPTER *ioc,
1334 Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage0_t *config_page,
1335 u32 form, u32 handle);
1336int mpt3sas_config_get_sas_device_pg1(struct MPT3SAS_ADAPTER *ioc,
1337 Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage1_t *config_page,
1338 u32 form, u32 handle);
1339int mpt3sas_config_get_sas_iounit_pg0(struct MPT3SAS_ADAPTER *ioc,
1340 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage0_t *config_page,
1341 u16 sz);
1342int mpt3sas_config_get_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1343 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1344int mpt3sas_config_get_iounit_pg3(struct MPT3SAS_ADAPTER *ioc,
1345 Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
1346int mpt3sas_config_set_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1347 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1348int mpt3sas_config_get_iounit_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1349 *mpi_reply, Mpi2IOUnitPage8_t *config_page);
1350int mpt3sas_config_get_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
1351 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
1352 u16 sz);
1353int mpt3sas_config_set_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
1354 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
1355 u16 sz);
1356int mpt3sas_config_get_ioc_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1357 *mpi_reply, Mpi2IOCPage8_t *config_page);
1358int mpt3sas_config_get_expander_pg0(struct MPT3SAS_ADAPTER *ioc,
1359 Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage0_t *config_page,
1360 u32 form, u32 handle);
1361int mpt3sas_config_get_expander_pg1(struct MPT3SAS_ADAPTER *ioc,
1362 Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage1_t *config_page,
1363 u32 phy_number, u16 handle);
1364int mpt3sas_config_get_enclosure_pg0(struct MPT3SAS_ADAPTER *ioc,
1365 Mpi2ConfigReply_t *mpi_reply, Mpi2SasEnclosurePage0_t *config_page,
1366 u32 form, u32 handle);
1367int mpt3sas_config_get_phy_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1368 *mpi_reply, Mpi2SasPhyPage0_t *config_page, u32 phy_number);
1369int mpt3sas_config_get_phy_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1370 *mpi_reply, Mpi2SasPhyPage1_t *config_page, u32 phy_number);
1371int mpt3sas_config_get_raid_volume_pg1(struct MPT3SAS_ADAPTER *ioc,
1372 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage1_t *config_page, u32 form,
1373 u32 handle);
1374int mpt3sas_config_get_number_pds(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1375 u8 *num_pds);
1376int mpt3sas_config_get_raid_volume_pg0(struct MPT3SAS_ADAPTER *ioc,
1377 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage0_t *config_page, u32 form,
1378 u32 handle, u16 sz);
1379int mpt3sas_config_get_phys_disk_pg0(struct MPT3SAS_ADAPTER *ioc,
1380 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidPhysDiskPage0_t *config_page,
1381 u32 form, u32 form_specific);
1382int mpt3sas_config_get_volume_handle(struct MPT3SAS_ADAPTER *ioc, u16 pd_handle,
1383 u16 *volume_handle);
1384int mpt3sas_config_get_volume_wwid(struct MPT3SAS_ADAPTER *ioc,
1385 u16 volume_handle, u64 *wwid);
1386
1387
1388extern struct device_attribute *mpt3sas_host_attrs[];
1389extern struct device_attribute *mpt3sas_dev_attrs[];
1390void mpt3sas_ctl_init(ushort hbas_to_enumerate);
1391void mpt3sas_ctl_exit(ushort hbas_to_enumerate);
1392u8 mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1393 u32 reply);
1394void mpt3sas_ctl_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
1395u8 mpt3sas_ctl_event_callback(struct MPT3SAS_ADAPTER *ioc,
1396 u8 msix_index, u32 reply);
1397void mpt3sas_ctl_add_to_event_log(struct MPT3SAS_ADAPTER *ioc,
1398 Mpi2EventNotificationReply_t *mpi_reply);
1399
1400void mpt3sas_enable_diag_buffer(struct MPT3SAS_ADAPTER *ioc,
1401 u8 bits_to_regsiter);
1402int mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
1403 u8 *issue_reset);
1404
1405
1406extern struct scsi_transport_template *mpt3sas_transport_template;
1407u8 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1408 u32 reply);
1409struct _sas_port *mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc,
1410 u16 handle, u64 sas_address);
1411void mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
1412 u64 sas_address_parent);
1413int mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy
1414 *mpt3sas_phy, Mpi2SasPhyPage0_t phy_pg0, struct device *parent_dev);
1415int mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc,
1416 struct _sas_phy *mpt3sas_phy, Mpi2ExpanderPage1_t expander_pg1,
1417 struct device *parent_dev);
1418void mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
1419 u64 sas_address, u16 handle, u8 phy_number, u8 link_rate);
1420extern struct sas_function_template mpt3sas_transport_functions;
1421extern struct scsi_transport_template *mpt3sas_transport_template;
1422extern int scsi_internal_device_block(struct scsi_device *sdev);
1423extern int scsi_internal_device_unblock(struct scsi_device *sdev,
1424 enum scsi_device_state new_state);
1425
1426void mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc,
1427 struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
1428void mpt3sas_process_trigger_data(struct MPT3SAS_ADAPTER *ioc,
1429 struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
1430void mpt3sas_trigger_master(struct MPT3SAS_ADAPTER *ioc,
1431 u32 tigger_bitmask);
1432void mpt3sas_trigger_event(struct MPT3SAS_ADAPTER *ioc, u16 event,
1433 u16 log_entry_qualifier);
1434void mpt3sas_trigger_scsi(struct MPT3SAS_ADAPTER *ioc, u8 sense_key,
1435 u8 asc, u8 ascq);
1436void mpt3sas_trigger_mpi(struct MPT3SAS_ADAPTER *ioc, u16 ioc_status,
1437 u32 loginfo);
1438
1439
1440u8 mpt3sas_get_num_volumes(struct MPT3SAS_ADAPTER *ioc);
1441void mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
1442 struct _raid_device *raid_device);
1443u8
1444mpt3sas_scsi_direct_io_get(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1445void
1446mpt3sas_scsi_direct_io_set(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 direct_io);
1447void
1448mpt3sas_setup_direct_io(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
1449 struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request,
1450 u16 smid);
1451
1452#endif
1453