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 "15.100.00.00"
77#define MPT3SAS_MAJOR_VERSION 15
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_G3 12
304#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_COUNT_G35 16
305#define MPT3_SUP_REPLY_POST_HOST_INDEX_REG_OFFSET (0x10)
306
307
308#define MFG10_OEM_ID_INVALID (0x00000000)
309#define MFG10_OEM_ID_DELL (0x00000001)
310#define MFG10_OEM_ID_FSC (0x00000002)
311#define MFG10_OEM_ID_SUN (0x00000003)
312#define MFG10_OEM_ID_IBM (0x00000004)
313
314
315#define MFG10_GF0_OCE_DISABLED (0x00000001)
316#define MFG10_GF0_R1E_DRIVE_COUNT (0x00000002)
317#define MFG10_GF0_R10_DISPLAY (0x00000004)
318#define MFG10_GF0_SSD_DATA_SCRUB_DISABLE (0x00000008)
319#define MFG10_GF0_SINGLE_DRIVE_R0 (0x00000010)
320
321#define VIRTUAL_IO_FAILED_RETRY (0x32010081)
322
323
324struct Mpi2ManufacturingPage10_t {
325 MPI2_CONFIG_PAGE_HEADER Header;
326 U8 OEMIdentifier;
327 U8 Reserved1;
328 U16 Reserved2;
329 U32 Reserved3;
330 U32 GenericFlags0;
331 U32 GenericFlags1;
332 U32 Reserved4;
333 U32 OEMSpecificFlags0;
334 U32 OEMSpecificFlags1;
335 U32 Reserved5[18];
336};
337
338
339
340struct Mpi2ManufacturingPage11_t {
341 MPI2_CONFIG_PAGE_HEADER Header;
342 __le32 Reserved1;
343 u8 Reserved2;
344 u8 EEDPTagMode;
345 u8 Reserved3;
346 u8 Reserved4;
347 __le32 Reserved5[23];
348};
349
350
351
352
353
354
355
356
357
358
359
360
361
362struct MPT3SAS_TARGET {
363 struct scsi_target *starget;
364 u64 sas_address;
365 struct _raid_device *raid_device;
366 u16 handle;
367 int num_luns;
368 u32 flags;
369 u8 deleted;
370 u8 tm_busy;
371 struct _sas_device *sdev;
372};
373
374
375
376
377
378#define MPT_DEVICE_FLAGS_INIT 0x01
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
397
398struct MPT3SAS_DEVICE {
399 struct MPT3SAS_TARGET *sas_target;
400 unsigned int lun;
401 u32 flags;
402 u8 configured_lun;
403 u8 block;
404 u8 tlr_snoop_check;
405 u8 ignore_delay_remove;
406
407 u8 ncq_prio_enable;
408
409
410
411
412
413
414
415
416
417
418 unsigned long ata_command_pending;
419
420};
421
422#define MPT3_CMD_NOT_USED 0x8000
423#define MPT3_CMD_COMPLETE 0x0001
424#define MPT3_CMD_PENDING 0x0002
425#define MPT3_CMD_REPLY_VALID 0x0004
426#define MPT3_CMD_RESET 0x0008
427
428
429
430
431
432
433
434
435
436
437struct _internal_cmd {
438 struct mutex mutex;
439 struct completion done;
440 void *reply;
441 void *sense;
442 u16 status;
443 u16 smid;
444};
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471struct _sas_device {
472 struct list_head list;
473 struct scsi_target *starget;
474 u64 sas_address;
475 u64 device_name;
476 u16 handle;
477 u64 sas_address_parent;
478 u16 enclosure_handle;
479 u64 enclosure_logical_id;
480 u16 volume_handle;
481 u64 volume_wwid;
482 u32 device_info;
483 int id;
484 int channel;
485 u16 slot;
486 u8 phy;
487 u8 responding;
488 u8 fast_path;
489 u8 pfa_led_on;
490 u8 pend_sas_rphy_add;
491 u8 enclosure_level;
492 u8 connector_name[5];
493 struct kref refcount;
494};
495
496static inline void sas_device_get(struct _sas_device *s)
497{
498 kref_get(&s->refcount);
499}
500
501static inline void sas_device_free(struct kref *r)
502{
503 kfree(container_of(r, struct _sas_device, refcount));
504}
505
506static inline void sas_device_put(struct _sas_device *s)
507{
508 kref_put(&s->refcount, sas_device_free);
509}
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534#define MPT_MAX_WARPDRIVE_PDS 8
535struct _raid_device {
536 struct list_head list;
537 struct scsi_target *starget;
538 struct scsi_device *sdev;
539 u64 wwid;
540 u16 handle;
541 u16 block_sz;
542 int id;
543 int channel;
544 u8 volume_type;
545 u8 num_pds;
546 u8 responding;
547 u8 percent_complete;
548 u8 direct_io_enabled;
549 u8 stripe_exponent;
550 u8 block_exponent;
551 u64 max_lba;
552 u32 stripe_sz;
553 u32 device_info;
554 u16 pd_handle[MPT_MAX_WARPDRIVE_PDS];
555};
556
557
558
559
560
561
562
563struct _boot_device {
564 u8 is_raid;
565 void *device;
566};
567
568
569
570
571
572
573
574
575
576
577struct _sas_port {
578 struct list_head port_list;
579 u8 num_phys;
580 struct sas_identify remote_identify;
581 struct sas_rphy *rphy;
582 struct sas_port *port;
583 struct list_head phy_list;
584};
585
586
587
588
589
590
591
592
593
594
595
596
597struct _sas_phy {
598 struct list_head port_siblings;
599 struct sas_identify identify;
600 struct sas_identify remote_identify;
601 struct sas_phy *phy;
602 u8 phy_id;
603 u16 handle;
604 u16 attached_handle;
605 u8 phy_belongs_to_port;
606};
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622struct _sas_node {
623 struct list_head list;
624 struct device *parent_dev;
625 u8 num_phys;
626 u64 sas_address;
627 u16 handle;
628 u64 sas_address_parent;
629 u16 enclosure_handle;
630 u64 enclosure_logical_id;
631 u8 responding;
632 struct _sas_phy *phy;
633 struct list_head sas_port_list;
634};
635
636
637
638
639
640
641enum reset_type {
642 FORCE_BIG_HAMMER,
643 SOFT_RESET,
644};
645
646
647
648
649
650
651
652struct chain_tracker {
653 void *chain_buffer;
654 dma_addr_t chain_buffer_dma;
655 struct list_head tracker_list;
656};
657
658
659
660
661
662
663
664
665
666
667struct scsiio_tracker {
668 u16 smid;
669 struct scsi_cmnd *scmd;
670 u8 cb_idx;
671 u8 direct_io;
672 struct list_head chain_list;
673 struct list_head tracker_list;
674 u16 msix_io;
675};
676
677
678
679
680
681
682
683struct request_tracker {
684 u16 smid;
685 u8 cb_idx;
686 struct list_head tracker_list;
687};
688
689
690
691
692
693
694struct _tr_list {
695 struct list_head list;
696 u16 handle;
697 u16 state;
698};
699
700
701
702
703
704struct _sc_list {
705 struct list_head list;
706 u16 handle;
707};
708
709
710
711
712
713
714struct _event_ack_list {
715 struct list_head list;
716 u16 Event;
717 u32 EventContext;
718};
719
720
721
722
723
724
725
726
727
728
729
730
731struct adapter_reply_queue {
732 struct MPT3SAS_ADAPTER *ioc;
733 u8 msix_index;
734 u32 reply_post_host_index;
735 Mpi2ReplyDescriptorsUnion_t *reply_post_free;
736 char name[MPT_NAME_LENGTH];
737 atomic_t busy;
738 struct list_head list;
739};
740
741typedef void (*MPT_ADD_SGE)(void *paddr, u32 flags_length, dma_addr_t dma_addr);
742
743
744typedef int (*MPT_BUILD_SG_SCMD)(struct MPT3SAS_ADAPTER *ioc,
745 struct scsi_cmnd *scmd, u16 smid);
746typedef void (*MPT_BUILD_SG)(struct MPT3SAS_ADAPTER *ioc, void *psge,
747 dma_addr_t data_out_dma, size_t data_out_sz,
748 dma_addr_t data_in_dma, size_t data_in_sz);
749typedef void (*MPT_BUILD_ZERO_LEN_SGE)(struct MPT3SAS_ADAPTER *ioc,
750 void *paddr);
751
752
753typedef void (*PUT_SMID_IO_FP_HIP) (struct MPT3SAS_ADAPTER *ioc, u16 smid,
754 u16 funcdep);
755typedef void (*PUT_SMID_DEFAULT) (struct MPT3SAS_ADAPTER *ioc, u16 smid);
756
757
758union mpi3_version_union {
759 MPI2_VERSION_STRUCT Struct;
760 u32 Word;
761};
762
763struct mpt3sas_facts {
764 u16 MsgVersion;
765 u16 HeaderVersion;
766 u8 IOCNumber;
767 u8 VP_ID;
768 u8 VF_ID;
769 u16 IOCExceptions;
770 u16 IOCStatus;
771 u32 IOCLogInfo;
772 u8 MaxChainDepth;
773 u8 WhoInit;
774 u8 NumberOfPorts;
775 u8 MaxMSIxVectors;
776 u16 RequestCredit;
777 u16 ProductID;
778 u32 IOCCapabilities;
779 union mpi3_version_union FWVersion;
780 u16 IOCRequestFrameSize;
781 u16 IOCMaxChainSegmentSize;
782 u16 MaxInitiators;
783 u16 MaxTargets;
784 u16 MaxSasExpanders;
785 u16 MaxEnclosures;
786 u16 ProtocolFlags;
787 u16 HighPriorityCredit;
788 u16 MaxReplyDescriptorPostQueueDepth;
789 u8 ReplyFrameSize;
790 u8 MaxVolumes;
791 u16 MaxDevHandle;
792 u16 MaxPersistentEntries;
793 u16 MinDevHandle;
794};
795
796struct mpt3sas_port_facts {
797 u8 PortNumber;
798 u8 VP_ID;
799 u8 VF_ID;
800 u8 PortType;
801 u16 MaxPostedCmdBuffers;
802};
803
804struct reply_post_struct {
805 Mpi2ReplyDescriptorsUnion_t *reply_post_free;
806 dma_addr_t reply_post_free_dma;
807};
808
809typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc);
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
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967struct MPT3SAS_ADAPTER {
968 struct list_head list;
969 struct Scsi_Host *shost;
970 u8 id;
971 int cpu_count;
972 char name[MPT_NAME_LENGTH];
973 char driver_name[MPT_NAME_LENGTH];
974 char tmp_string[MPT_STRING_LENGTH];
975 struct pci_dev *pdev;
976 Mpi2SystemInterfaceRegs_t __iomem *chip;
977 resource_size_t chip_phys;
978 int logging_level;
979 int fwfault_debug;
980 u8 ir_firmware;
981 int bars;
982 u8 mask_interrupts;
983 int dma_mask;
984
985
986 char fault_reset_work_q_name[20];
987 struct workqueue_struct *fault_reset_work_q;
988 struct delayed_work fault_reset_work;
989
990
991 char firmware_event_name[20];
992 struct workqueue_struct *firmware_event_thread;
993 spinlock_t fw_event_lock;
994 struct list_head fw_event_list;
995
996
997 int aen_event_read_flag;
998 u8 broadcast_aen_busy;
999 u16 broadcast_aen_pending;
1000 u8 shost_recovery;
1001 u8 got_task_abort_from_ioctl;
1002
1003 struct mutex reset_in_progress_mutex;
1004 spinlock_t ioc_reset_in_progress_lock;
1005 u8 ioc_link_reset_in_progress;
1006 u8 ioc_reset_in_progress_status;
1007
1008 u8 ignore_loginfos;
1009 u8 remove_host;
1010 u8 pci_error_recovery;
1011 u8 wait_for_discovery_to_complete;
1012 u8 is_driver_loading;
1013 u8 port_enable_failed;
1014 u8 start_scan;
1015 u16 start_scan_failed;
1016
1017 u8 msix_enable;
1018 u16 msix_vector_count;
1019 u8 *cpu_msix_table;
1020 u16 cpu_msix_table_sz;
1021 resource_size_t __iomem **reply_post_host_index;
1022 u32 ioc_reset_count;
1023 MPT3SAS_FLUSH_RUNNING_CMDS schedule_dead_ioc_flush_running_cmds;
1024 u32 non_operational_loop;
1025
1026
1027 u8 scsi_io_cb_idx;
1028 u8 tm_cb_idx;
1029 u8 transport_cb_idx;
1030 u8 scsih_cb_idx;
1031 u8 ctl_cb_idx;
1032 u8 base_cb_idx;
1033 u8 port_enable_cb_idx;
1034 u8 config_cb_idx;
1035 u8 tm_tr_cb_idx;
1036 u8 tm_tr_volume_cb_idx;
1037 u8 tm_sas_control_cb_idx;
1038 struct _internal_cmd base_cmds;
1039 struct _internal_cmd port_enable_cmds;
1040 struct _internal_cmd transport_cmds;
1041 struct _internal_cmd scsih_cmds;
1042 struct _internal_cmd tm_cmds;
1043 struct _internal_cmd ctl_cmds;
1044 struct _internal_cmd config_cmds;
1045
1046 MPT_ADD_SGE base_add_sg_single;
1047
1048
1049 MPT_BUILD_SG_SCMD build_sg_scmd;
1050 MPT_BUILD_SG build_sg;
1051 MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge;
1052 u16 sge_size_ieee;
1053 u16 hba_mpi_version_belonged;
1054
1055
1056 MPT_BUILD_SG build_sg_mpi;
1057 MPT_BUILD_ZERO_LEN_SGE build_zero_len_sge_mpi;
1058
1059
1060 u32 event_type[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];
1061 u32 event_context;
1062 void *event_log;
1063 u32 event_masks[MPI2_EVENT_NOTIFY_EVENTMASK_WORDS];
1064
1065
1066 struct mpt3sas_facts facts;
1067 struct mpt3sas_port_facts *pfacts;
1068 Mpi2ManufacturingPage0_t manu_pg0;
1069 struct Mpi2ManufacturingPage10_t manu_pg10;
1070 struct Mpi2ManufacturingPage11_t manu_pg11;
1071 Mpi2BiosPage2_t bios_pg2;
1072 Mpi2BiosPage3_t bios_pg3;
1073 Mpi2IOCPage8_t ioc_pg8;
1074 Mpi2IOUnitPage0_t iounit_pg0;
1075 Mpi2IOUnitPage1_t iounit_pg1;
1076 Mpi2IOUnitPage8_t iounit_pg8;
1077
1078 struct _boot_device req_boot_device;
1079 struct _boot_device req_alt_boot_device;
1080 struct _boot_device current_boot_device;
1081
1082
1083 struct _sas_node sas_hba;
1084 struct list_head sas_expander_list;
1085 spinlock_t sas_node_lock;
1086 struct list_head sas_device_list;
1087 struct list_head sas_device_init_list;
1088 spinlock_t sas_device_lock;
1089 struct list_head raid_device_list;
1090 spinlock_t raid_device_lock;
1091 u8 io_missing_delay;
1092 u16 device_missing_delay;
1093 int sas_id;
1094
1095 void *blocking_handles;
1096 void *pd_handles;
1097 u16 pd_handles_sz;
1098
1099 void *pend_os_device_add;
1100 u16 pend_os_device_add_sz;
1101
1102
1103 u16 config_page_sz;
1104 void *config_page;
1105 dma_addr_t config_page_dma;
1106
1107
1108 u16 hba_queue_depth;
1109 u16 sge_size;
1110 u16 scsiio_depth;
1111 u16 request_sz;
1112 u8 *request;
1113 dma_addr_t request_dma;
1114 u32 request_dma_sz;
1115 struct scsiio_tracker *scsi_lookup;
1116 ulong scsi_lookup_pages;
1117 spinlock_t scsi_lookup_lock;
1118 struct list_head free_list;
1119 int pending_io_count;
1120 wait_queue_head_t reset_wq;
1121
1122
1123 struct chain_tracker *chain_lookup;
1124 struct list_head free_chain_list;
1125 struct dma_pool *chain_dma_pool;
1126 ulong chain_pages;
1127 u16 max_sges_in_main_message;
1128 u16 max_sges_in_chain_message;
1129 u16 chains_needed_per_io;
1130 u32 chain_depth;
1131 u16 chain_segment_sz;
1132
1133
1134 u16 hi_priority_smid;
1135 u8 *hi_priority;
1136 dma_addr_t hi_priority_dma;
1137 u16 hi_priority_depth;
1138 struct request_tracker *hpr_lookup;
1139 struct list_head hpr_free_list;
1140
1141
1142 u16 internal_smid;
1143 u8 *internal;
1144 dma_addr_t internal_dma;
1145 u16 internal_depth;
1146 struct request_tracker *internal_lookup;
1147 struct list_head internal_free_list;
1148
1149
1150 u8 *sense;
1151 dma_addr_t sense_dma;
1152 struct dma_pool *sense_dma_pool;
1153
1154
1155 u16 reply_sz;
1156 u8 *reply;
1157 dma_addr_t reply_dma;
1158 u32 reply_dma_max_address;
1159 u32 reply_dma_min_address;
1160 struct dma_pool *reply_dma_pool;
1161
1162
1163 u16 reply_free_queue_depth;
1164 __le32 *reply_free;
1165 dma_addr_t reply_free_dma;
1166 struct dma_pool *reply_free_dma_pool;
1167 u32 reply_free_host_index;
1168
1169
1170 u16 reply_post_queue_depth;
1171 struct reply_post_struct *reply_post;
1172 u8 rdpq_array_capable;
1173 u8 rdpq_array_enable;
1174 u8 rdpq_array_enable_assigned;
1175 struct dma_pool *reply_post_free_dma_pool;
1176 u8 reply_queue_count;
1177 struct list_head reply_queue_list;
1178
1179 u8 combined_reply_queue;
1180 u8 combined_reply_index_count;
1181
1182 resource_size_t **replyPostRegisterIndex;
1183
1184 struct list_head delayed_tr_list;
1185 struct list_head delayed_tr_volume_list;
1186 struct list_head delayed_sc_list;
1187 struct list_head delayed_event_ack_list;
1188 u8 temp_sensors_count;
1189 struct mutex pci_access_mutex;
1190
1191
1192 u8 *diag_buffer[MPI2_DIAG_BUF_TYPE_COUNT];
1193 u32 diag_buffer_sz[MPI2_DIAG_BUF_TYPE_COUNT];
1194 dma_addr_t diag_buffer_dma[MPI2_DIAG_BUF_TYPE_COUNT];
1195 u8 diag_buffer_status[MPI2_DIAG_BUF_TYPE_COUNT];
1196 u32 unique_id[MPI2_DIAG_BUF_TYPE_COUNT];
1197 u32 product_specific[MPI2_DIAG_BUF_TYPE_COUNT][23];
1198 u32 diagnostic_flags[MPI2_DIAG_BUF_TYPE_COUNT];
1199 u32 ring_buffer_offset;
1200 u32 ring_buffer_sz;
1201 u8 is_warpdrive;
1202 u8 hide_ir_msg;
1203 u8 mfg_pg10_hide_flag;
1204 u8 hide_drives;
1205 spinlock_t diag_trigger_lock;
1206 u8 diag_trigger_active;
1207 struct SL_WH_MASTER_TRIGGER_T diag_trigger_master;
1208 struct SL_WH_EVENT_TRIGGERS_T diag_trigger_event;
1209 struct SL_WH_SCSI_TRIGGERS_T diag_trigger_scsi;
1210 struct SL_WH_MPI_TRIGGERS_T diag_trigger_mpi;
1211 void *device_remove_in_progress;
1212 u16 device_remove_in_progress_sz;
1213 u8 is_gen35_ioc;
1214 u8 atomic_desc_capable;
1215 PUT_SMID_IO_FP_HIP put_smid_scsi_io;
1216 PUT_SMID_IO_FP_HIP put_smid_fast_path;
1217 PUT_SMID_IO_FP_HIP put_smid_hi_priority;
1218 PUT_SMID_DEFAULT put_smid_default;
1219
1220};
1221
1222typedef u8 (*MPT_CALLBACK)(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1223 u32 reply);
1224
1225
1226
1227extern struct list_head mpt3sas_ioc_list;
1228extern char driver_name[MPT_NAME_LENGTH];
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239extern spinlock_t gioc_lock;
1240
1241void mpt3sas_base_start_watchdog(struct MPT3SAS_ADAPTER *ioc);
1242void mpt3sas_base_stop_watchdog(struct MPT3SAS_ADAPTER *ioc);
1243
1244int mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc);
1245void mpt3sas_base_detach(struct MPT3SAS_ADAPTER *ioc);
1246int mpt3sas_base_map_resources(struct MPT3SAS_ADAPTER *ioc);
1247void mpt3sas_base_free_resources(struct MPT3SAS_ADAPTER *ioc);
1248int mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc,
1249 enum reset_type type);
1250
1251void *mpt3sas_base_get_msg_frame(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1252void *mpt3sas_base_get_sense_buffer(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1253__le32 mpt3sas_base_get_sense_buffer_dma(struct MPT3SAS_ADAPTER *ioc,
1254 u16 smid);
1255
1256void mpt3sas_base_sync_reply_irqs(struct MPT3SAS_ADAPTER *ioc);
1257
1258
1259u16 mpt3sas_base_get_smid_hpr(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
1260u16 mpt3sas_base_get_smid_scsiio(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx,
1261 struct scsi_cmnd *scmd);
1262
1263u16 mpt3sas_base_get_smid(struct MPT3SAS_ADAPTER *ioc, u8 cb_idx);
1264void mpt3sas_base_free_smid(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1265void mpt3sas_base_initialize_callback_handler(void);
1266u8 mpt3sas_base_register_callback_handler(MPT_CALLBACK cb_func);
1267void mpt3sas_base_release_callback_handler(u8 cb_idx);
1268
1269u8 mpt3sas_base_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1270 u32 reply);
1271u8 mpt3sas_port_enable_done(struct MPT3SAS_ADAPTER *ioc, u16 smid,
1272 u8 msix_index, u32 reply);
1273void *mpt3sas_base_get_reply_virt_addr(struct MPT3SAS_ADAPTER *ioc,
1274 u32 phys_addr);
1275
1276u32 mpt3sas_base_get_iocstate(struct MPT3SAS_ADAPTER *ioc, int cooked);
1277
1278void mpt3sas_base_fault_info(struct MPT3SAS_ADAPTER *ioc , u16 fault_code);
1279int mpt3sas_base_sas_iounit_control(struct MPT3SAS_ADAPTER *ioc,
1280 Mpi2SasIoUnitControlReply_t *mpi_reply,
1281 Mpi2SasIoUnitControlRequest_t *mpi_request);
1282int mpt3sas_base_scsi_enclosure_processor(struct MPT3SAS_ADAPTER *ioc,
1283 Mpi2SepReply_t *mpi_reply, Mpi2SepRequest_t *mpi_request);
1284
1285void mpt3sas_base_validate_event_type(struct MPT3SAS_ADAPTER *ioc,
1286 u32 *event_type);
1287
1288void mpt3sas_halt_firmware(struct MPT3SAS_ADAPTER *ioc);
1289
1290void mpt3sas_base_update_missing_delay(struct MPT3SAS_ADAPTER *ioc,
1291 u16 device_missing_delay, u8 io_missing_delay);
1292
1293int mpt3sas_port_enable(struct MPT3SAS_ADAPTER *ioc);
1294
1295
1296
1297u8 mpt3sas_scsih_event_callback(struct MPT3SAS_ADAPTER *ioc, u8 msix_index,
1298 u32 reply);
1299void mpt3sas_scsih_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
1300
1301int mpt3sas_scsih_issue_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1302 uint channel, uint id, uint lun, u8 type, u16 smid_task,
1303 ulong timeout);
1304int mpt3sas_scsih_issue_locked_tm(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1305 uint channel, uint id, uint lun, u8 type, u16 smid_task,
1306 ulong timeout);
1307
1308void mpt3sas_scsih_set_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1309void mpt3sas_scsih_clear_tm_flag(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1310void mpt3sas_expander_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1311void mpt3sas_device_remove_by_sas_address(struct MPT3SAS_ADAPTER *ioc,
1312 u64 sas_address);
1313u8 mpt3sas_check_for_pending_internal_cmds(struct MPT3SAS_ADAPTER *ioc,
1314 u16 smid);
1315
1316struct _sas_node *mpt3sas_scsih_expander_find_by_handle(
1317 struct MPT3SAS_ADAPTER *ioc, u16 handle);
1318struct _sas_node *mpt3sas_scsih_expander_find_by_sas_address(
1319 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1320struct _sas_device *mpt3sas_get_sdev_by_addr(
1321 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1322struct _sas_device *__mpt3sas_get_sdev_by_addr(
1323 struct MPT3SAS_ADAPTER *ioc, u64 sas_address);
1324
1325void mpt3sas_port_enable_complete(struct MPT3SAS_ADAPTER *ioc);
1326struct _raid_device *
1327mpt3sas_raid_device_find_by_handle(struct MPT3SAS_ADAPTER *ioc, u16 handle);
1328
1329
1330u8 mpt3sas_config_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1331 u32 reply);
1332int mpt3sas_config_get_number_hba_phys(struct MPT3SAS_ADAPTER *ioc,
1333 u8 *num_phys);
1334int mpt3sas_config_get_manufacturing_pg0(struct MPT3SAS_ADAPTER *ioc,
1335 Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage0_t *config_page);
1336int mpt3sas_config_get_manufacturing_pg7(struct MPT3SAS_ADAPTER *ioc,
1337 Mpi2ConfigReply_t *mpi_reply, Mpi2ManufacturingPage7_t *config_page,
1338 u16 sz);
1339int mpt3sas_config_get_manufacturing_pg10(struct MPT3SAS_ADAPTER *ioc,
1340 Mpi2ConfigReply_t *mpi_reply,
1341 struct Mpi2ManufacturingPage10_t *config_page);
1342
1343int mpt3sas_config_get_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
1344 Mpi2ConfigReply_t *mpi_reply,
1345 struct Mpi2ManufacturingPage11_t *config_page);
1346int mpt3sas_config_set_manufacturing_pg11(struct MPT3SAS_ADAPTER *ioc,
1347 Mpi2ConfigReply_t *mpi_reply,
1348 struct Mpi2ManufacturingPage11_t *config_page);
1349
1350int mpt3sas_config_get_bios_pg2(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1351 *mpi_reply, Mpi2BiosPage2_t *config_page);
1352int mpt3sas_config_get_bios_pg3(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1353 *mpi_reply, Mpi2BiosPage3_t *config_page);
1354int mpt3sas_config_get_iounit_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1355 *mpi_reply, Mpi2IOUnitPage0_t *config_page);
1356int mpt3sas_config_get_sas_device_pg0(struct MPT3SAS_ADAPTER *ioc,
1357 Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage0_t *config_page,
1358 u32 form, u32 handle);
1359int mpt3sas_config_get_sas_device_pg1(struct MPT3SAS_ADAPTER *ioc,
1360 Mpi2ConfigReply_t *mpi_reply, Mpi2SasDevicePage1_t *config_page,
1361 u32 form, u32 handle);
1362int mpt3sas_config_get_sas_iounit_pg0(struct MPT3SAS_ADAPTER *ioc,
1363 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage0_t *config_page,
1364 u16 sz);
1365int mpt3sas_config_get_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1366 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1367int mpt3sas_config_get_iounit_pg3(struct MPT3SAS_ADAPTER *ioc,
1368 Mpi2ConfigReply_t *mpi_reply, Mpi2IOUnitPage3_t *config_page, u16 sz);
1369int mpt3sas_config_set_iounit_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1370 *mpi_reply, Mpi2IOUnitPage1_t *config_page);
1371int mpt3sas_config_get_iounit_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1372 *mpi_reply, Mpi2IOUnitPage8_t *config_page);
1373int mpt3sas_config_get_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
1374 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
1375 u16 sz);
1376int mpt3sas_config_set_sas_iounit_pg1(struct MPT3SAS_ADAPTER *ioc,
1377 Mpi2ConfigReply_t *mpi_reply, Mpi2SasIOUnitPage1_t *config_page,
1378 u16 sz);
1379int mpt3sas_config_get_ioc_pg8(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1380 *mpi_reply, Mpi2IOCPage8_t *config_page);
1381int mpt3sas_config_get_expander_pg0(struct MPT3SAS_ADAPTER *ioc,
1382 Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage0_t *config_page,
1383 u32 form, u32 handle);
1384int mpt3sas_config_get_expander_pg1(struct MPT3SAS_ADAPTER *ioc,
1385 Mpi2ConfigReply_t *mpi_reply, Mpi2ExpanderPage1_t *config_page,
1386 u32 phy_number, u16 handle);
1387int mpt3sas_config_get_enclosure_pg0(struct MPT3SAS_ADAPTER *ioc,
1388 Mpi2ConfigReply_t *mpi_reply, Mpi2SasEnclosurePage0_t *config_page,
1389 u32 form, u32 handle);
1390int mpt3sas_config_get_phy_pg0(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1391 *mpi_reply, Mpi2SasPhyPage0_t *config_page, u32 phy_number);
1392int mpt3sas_config_get_phy_pg1(struct MPT3SAS_ADAPTER *ioc, Mpi2ConfigReply_t
1393 *mpi_reply, Mpi2SasPhyPage1_t *config_page, u32 phy_number);
1394int mpt3sas_config_get_raid_volume_pg1(struct MPT3SAS_ADAPTER *ioc,
1395 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage1_t *config_page, u32 form,
1396 u32 handle);
1397int mpt3sas_config_get_number_pds(struct MPT3SAS_ADAPTER *ioc, u16 handle,
1398 u8 *num_pds);
1399int mpt3sas_config_get_raid_volume_pg0(struct MPT3SAS_ADAPTER *ioc,
1400 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidVolPage0_t *config_page, u32 form,
1401 u32 handle, u16 sz);
1402int mpt3sas_config_get_phys_disk_pg0(struct MPT3SAS_ADAPTER *ioc,
1403 Mpi2ConfigReply_t *mpi_reply, Mpi2RaidPhysDiskPage0_t *config_page,
1404 u32 form, u32 form_specific);
1405int mpt3sas_config_get_volume_handle(struct MPT3SAS_ADAPTER *ioc, u16 pd_handle,
1406 u16 *volume_handle);
1407int mpt3sas_config_get_volume_wwid(struct MPT3SAS_ADAPTER *ioc,
1408 u16 volume_handle, u64 *wwid);
1409
1410
1411extern struct device_attribute *mpt3sas_host_attrs[];
1412extern struct device_attribute *mpt3sas_dev_attrs[];
1413void mpt3sas_ctl_init(ushort hbas_to_enumerate);
1414void mpt3sas_ctl_exit(ushort hbas_to_enumerate);
1415u8 mpt3sas_ctl_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1416 u32 reply);
1417void mpt3sas_ctl_reset_handler(struct MPT3SAS_ADAPTER *ioc, int reset_phase);
1418u8 mpt3sas_ctl_event_callback(struct MPT3SAS_ADAPTER *ioc,
1419 u8 msix_index, u32 reply);
1420void mpt3sas_ctl_add_to_event_log(struct MPT3SAS_ADAPTER *ioc,
1421 Mpi2EventNotificationReply_t *mpi_reply);
1422
1423void mpt3sas_enable_diag_buffer(struct MPT3SAS_ADAPTER *ioc,
1424 u8 bits_to_register);
1425int mpt3sas_send_diag_release(struct MPT3SAS_ADAPTER *ioc, u8 buffer_type,
1426 u8 *issue_reset);
1427
1428
1429extern struct scsi_transport_template *mpt3sas_transport_template;
1430u8 mpt3sas_transport_done(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 msix_index,
1431 u32 reply);
1432struct _sas_port *mpt3sas_transport_port_add(struct MPT3SAS_ADAPTER *ioc,
1433 u16 handle, u64 sas_address);
1434void mpt3sas_transport_port_remove(struct MPT3SAS_ADAPTER *ioc, u64 sas_address,
1435 u64 sas_address_parent);
1436int mpt3sas_transport_add_host_phy(struct MPT3SAS_ADAPTER *ioc, struct _sas_phy
1437 *mpt3sas_phy, Mpi2SasPhyPage0_t phy_pg0, struct device *parent_dev);
1438int mpt3sas_transport_add_expander_phy(struct MPT3SAS_ADAPTER *ioc,
1439 struct _sas_phy *mpt3sas_phy, Mpi2ExpanderPage1_t expander_pg1,
1440 struct device *parent_dev);
1441void mpt3sas_transport_update_links(struct MPT3SAS_ADAPTER *ioc,
1442 u64 sas_address, u16 handle, u8 phy_number, u8 link_rate);
1443extern struct sas_function_template mpt3sas_transport_functions;
1444extern struct scsi_transport_template *mpt3sas_transport_template;
1445
1446void mpt3sas_send_trigger_data_event(struct MPT3SAS_ADAPTER *ioc,
1447 struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
1448void mpt3sas_process_trigger_data(struct MPT3SAS_ADAPTER *ioc,
1449 struct SL_WH_TRIGGERS_EVENT_DATA_T *event_data);
1450void mpt3sas_trigger_master(struct MPT3SAS_ADAPTER *ioc,
1451 u32 tigger_bitmask);
1452void mpt3sas_trigger_event(struct MPT3SAS_ADAPTER *ioc, u16 event,
1453 u16 log_entry_qualifier);
1454void mpt3sas_trigger_scsi(struct MPT3SAS_ADAPTER *ioc, u8 sense_key,
1455 u8 asc, u8 ascq);
1456void mpt3sas_trigger_mpi(struct MPT3SAS_ADAPTER *ioc, u16 ioc_status,
1457 u32 loginfo);
1458
1459
1460u8 mpt3sas_get_num_volumes(struct MPT3SAS_ADAPTER *ioc);
1461void mpt3sas_init_warpdrive_properties(struct MPT3SAS_ADAPTER *ioc,
1462 struct _raid_device *raid_device);
1463u8
1464mpt3sas_scsi_direct_io_get(struct MPT3SAS_ADAPTER *ioc, u16 smid);
1465void
1466mpt3sas_scsi_direct_io_set(struct MPT3SAS_ADAPTER *ioc, u16 smid, u8 direct_io);
1467void
1468mpt3sas_setup_direct_io(struct MPT3SAS_ADAPTER *ioc, struct scsi_cmnd *scmd,
1469 struct _raid_device *raid_device, Mpi2SCSIIORequest_t *mpi_request,
1470 u16 smid);
1471
1472
1473bool scsih_ncq_prio_supp(struct scsi_device *sdev);
1474
1475#endif
1476