Imported Upstream version 0.6.2
[platform/upstream/multipath-tools.git] / libmultipath / hwtable.c
1 #include <stdio.h>
2
3 #include "checkers.h"
4 #include "vector.h"
5 #include "defaults.h"
6 #include "structs.h"
7 #include "config.h"
8 #include "pgpolicies.h"
9 #include "prio.h"
10
11 /*
12  * Tuning suggestions on these parameters should go to
13  * dm-devel@redhat.com (subscribers-only, see README)
14  *
15  * You are welcome to claim maintainership over a controller
16  * family. Please mail the currently enlisted maintainer and
17  * the upstream package maintainer.
18  *
19  * Please, use the TEMPLATE below to add new hardware.
20  *
21  * WARNING:
22  *
23  * Devices with a proprietary handler must also be included in
24  * the kernel side. Currently at drivers/scsi/scsi_dh.c
25  */
26 static struct hwentry default_hw[] = {
27         /*
28          * Compellent Technologies/DELL
29          */
30         {
31                 .vendor        = "COMPELNT",
32                 .product       = "Compellent Vol",
33                 .pgpolicy      = MULTIBUS,
34                 .no_path_retry = NO_PATH_RETRY_QUEUE,
35         },
36         /*
37          * Apple
38          *
39          * Maintainer : Shyam Sundar
40          * Mail : g.shyamsundar@yahoo.co.in
41          */
42         {
43                 .vendor        = "APPLE.*",
44                 .product       = "Xserve RAID",
45                 .pgpolicy      = MULTIBUS,
46                 .pgfailback    = FAILBACK_UNDEF,
47         },
48         /*
49          * StorageWorks/HPE
50          */
51         {
52                 .vendor        = "3PARdata",
53                 .product       = "VV",
54                 .pgpolicy      = MULTIBUS,
55                 .pgfailback    = FAILBACK_UNDEF,
56         },
57         {
58                 .vendor        = "DEC",
59                 .product       = "HSG80",
60                 .features      = "1 queue_if_no_path",
61                 .hwhandler     = "1 hp_sw",
62                 .pgfailback    = FAILBACK_UNDEF,
63                 .checker_name  = HP_SW,
64                 .prio_name     = PRIO_HP_SW,
65         },
66         {
67                 .vendor        = "HP",
68                 .product       = "A6189A",
69                 .pgpolicy      = MULTIBUS,
70                 .pgfailback    = FAILBACK_UNDEF,
71                 .no_path_retry = 12,
72         },
73         {
74                 /* MSA 1000/MSA1500 EVA 3000/5000 with old firmware */
75                 .vendor        = "(COMPAQ|HP)",
76                 .product       = "(MSA|HSV)1.0.*",
77                 .features      = "1 queue_if_no_path",
78                 .hwhandler     = "1 hp_sw",
79                 .pgfailback    = FAILBACK_UNDEF,
80                 .no_path_retry = 12,
81                 .minio         = 100,
82                 .checker_name  = HP_SW,
83                 .prio_name     = PRIO_HP_SW,
84         },
85         {
86                 /* MSA 1000/1500 with new firmware */
87                 .vendor        = "(COMPAQ|HP)",
88                 .product       = "MSA VOLUME",
89                 .no_path_retry = 12,
90                 .minio         = 100,
91                 .prio_name     = PRIO_ALUA,
92         },
93         {
94                 /* EVA 3000/5000 with new firmware, EVA 4000/6000/8000 */
95                 .vendor        = "(COMPAQ|HP)",
96                 .product       = "HSV1[01]1|HSV2[01]0|HSV3[046]0|HSV4[05]0",
97                 .no_path_retry = 12,
98                 .minio         = 100,
99                 .prio_name     = PRIO_ALUA,
100         },
101         {
102                 /* HP MSA2000 family with old firmware */
103                 .vendor        = "HP",
104                 .product       = "MSA2[02]12fc|MSA2012i",
105                 .pgpolicy      = MULTIBUS,
106                 .no_path_retry = 18,
107                 .minio         = 100,
108         },
109         {
110                 /* HP MSA2000 family with new firmware */
111                 .vendor        = "HP",
112                 .product       = "MSA2012sa|MSA23(12|24)(fc|i|sa)|MSA2000s VOLUME",
113                 .no_path_retry = 18,
114                 .minio         = 100,
115                 .prio_name     = PRIO_ALUA,
116         },
117         {
118                 /* HP MSA 1040/2040 family */
119                 .vendor        = "HP",
120                 .product       = "MSA (1|2)040 SA(N|S)",
121                 .no_path_retry = 18,
122                 .minio         = 100,
123                 .prio_name     = PRIO_ALUA,
124         },
125         {
126                 /* HP SVSP */
127                 .vendor        = "HP",
128                 .product       = "HSVX700",
129                 .hwhandler     = "1 alua",
130                 .no_path_retry = 12,
131                 .minio         = 100,
132                 .prio_name     = PRIO_ALUA,
133         },
134         {
135                 /* HP Smart Array */
136                 .vendor        = "HP",
137                 .product       = "LOGICAL VOLUME.*",
138                 .pgpolicy      = MULTIBUS,
139                 .pgfailback    = FAILBACK_UNDEF,
140                 .no_path_retry = 12,
141         },
142         {
143                 /* HP P2000 family */
144                 .vendor        = "HP",
145                 .product       = "P2000 G3 FC|P2000G3 FC/iSCSI|P2000 G3 SAS|P2000 G3 iSCSI",
146                 .no_path_retry = 18,
147                 .minio         = 100,
148                 .prio_name     = PRIO_ALUA,
149         },
150         /*
151          * DDN
152          */
153         {
154                 .vendor        = "DDN",
155                 .product       = "SAN DataDirector",
156                 .pgpolicy      = MULTIBUS,
157                 .pgfailback    = FAILBACK_UNDEF,
158         },
159         /*
160          * EMC/DELL
161          *
162          * Maintainer : Edward Goggin, EMC
163          * Mail : egoggin@emc.com
164          */
165         {
166                 .vendor        = "EMC",
167                 .product       = "SYMMETRIX",
168                 .pgpolicy      = MULTIBUS,
169                 .pgfailback    = FAILBACK_UNDEF,
170                 .no_path_retry = 6,
171         },
172         {
173                 /* DGC CLARiiON CX/AX and EMC VNX */
174                 .vendor        = "^DGC",
175                 .product       = "^RAID|^DISK|^VRAID",
176                 .bl_product    = "LUNZ",
177                 .features      = "1 queue_if_no_path",
178                 .hwhandler     = "1 emc",
179                 .no_path_retry = (300 / DEFAULT_CHECKINT),
180                 .checker_name  = EMC_CLARIION,
181                 .prio_name     = PRIO_EMC,
182         },
183         {
184                 .vendor        = "EMC",
185                 .product       = "Invista",
186                 .bl_product    = "LUNZ",
187                 .pgpolicy      = MULTIBUS,
188                 .pgfailback    = FAILBACK_UNDEF,
189                 .no_path_retry = 5,
190         },
191         {
192                 .vendor        = "XtremIO",
193                 .product       = "XtremApp",
194                 .selector      = "queue-length 0",
195                 .pgpolicy      = MULTIBUS,
196                 .pgfailback    = FAILBACK_UNDEF,
197         },
198         /*
199          * Fujitsu
200          */
201         {
202                 .vendor        = "FSC",
203                 .product       = "CentricStor",
204                 .pgpolicy      = GROUP_BY_SERIAL,
205                 .pgfailback    = FAILBACK_UNDEF,
206         },
207         {
208                 .vendor        = "FUJITSU",
209                 .product       = "ETERNUS_DX(H|L|M|400|8000)",
210                 .features      = "1 queue_if_no_path",
211                 .no_path_retry = 10,
212                 .prio_name     = PRIO_ALUA,
213         },
214         /*
215          * Hitachi
216          *
217          * Maintainer : Matthias Rudolph
218          * Mail : matthias.rudolph@hds.com
219          */
220         {
221                 .vendor        = "(HITACHI|HP)",
222                 .product       = "OPEN-.*",
223                 .pgpolicy      = MULTIBUS,
224                 .pgfailback    = FAILBACK_UNDEF,
225         },
226         {
227                 .vendor        = "HITACHI",
228                 .product       = "DF.*",
229                 .features      = "1 queue_if_no_path",
230                 .prio_name     = PRIO_HDS,
231         },
232         /*
233          * IBM
234          *
235          * Maintainer : Hannes Reinecke, SuSE
236          * Mail : hare@suse.de
237          */
238         {
239                 .vendor        = "IBM",
240                 .product       = "ProFibre 4000R",
241                 .pgpolicy      = MULTIBUS,
242                 .pgfailback    = FAILBACK_UNDEF,
243         },
244         {
245                 /* IBM FAStT 1722-600 */
246                 .vendor        = "IBM",
247                 .product       = "^1722-600",
248                 .bl_product    = "Universal Xport",
249                 .features      = "1 queue_if_no_path",
250                 .hwhandler     = "1 rdac",
251                 .no_path_retry = 300,
252                 .checker_name  = RDAC,
253                 .prio_name     = PRIO_RDAC,
254         },
255         {
256                 /* IBM DS4100 */
257                 .vendor        = "IBM",
258                 .product       = "^1724",
259                 .bl_product    = "Universal Xport",
260                 .features      = "1 queue_if_no_path",
261                 .hwhandler     = "1 rdac",
262                 .no_path_retry = 300,
263                 .checker_name  = RDAC,
264                 .prio_name     = PRIO_RDAC,
265         },
266         {
267                 /* IBM DS3200 / DS3300 / DS3400 */
268                 .vendor        = "IBM",
269                 .product       = "^1726",
270                 .bl_product    = "Universal Xport",
271                 .features      = "1 queue_if_no_path",
272                 .hwhandler     = "1 rdac",
273                 .no_path_retry = 300,
274                 .checker_name  = RDAC,
275                 .prio_name     = PRIO_RDAC,
276         },
277         {
278                 /* IBM DS4400 / DS4500 / FAStT700 */
279                 .vendor        = "IBM",
280                 .product       = "^1742",
281                 .bl_product    = "Universal Xport",
282                 .hwhandler     = "1 rdac",
283                 .no_path_retry = NO_PATH_RETRY_QUEUE,
284                 .checker_name  = RDAC,
285                 .prio_name     = PRIO_RDAC,
286         },
287         {
288                 .vendor        = "IBM",
289                 .product       = "^1745|^1746",
290                 .bl_product    = "Universal Xport",
291                 .features      = "2 pg_init_retries 50",
292                 .hwhandler     = "1 rdac",
293                 .no_path_retry = 15,
294                 .checker_name  = RDAC,
295                 .prio_name     = PRIO_RDAC,
296         },
297         {
298                 /* IBM DS4700 */
299                 .vendor        = "IBM",
300                 .product       = "^1814",
301                 .bl_product    = "Universal Xport",
302                 .hwhandler     = "1 rdac",
303                 .no_path_retry = NO_PATH_RETRY_QUEUE,
304                 .checker_name  = RDAC,
305                 .prio_name     = PRIO_RDAC,
306         },
307         {
308                 /* IBM DS4800 */
309                 .vendor        = "IBM",
310                 .product       = "^1815",
311                 .bl_product    = "Universal Xport",
312                 .hwhandler     = "1 rdac",
313                 .no_path_retry = NO_PATH_RETRY_QUEUE,
314                 .checker_name  = RDAC,
315                 .prio_name     = PRIO_RDAC,
316         },
317         {
318                 /* IBM DS5000 */
319                 .vendor        = "IBM",
320                 .product       = "^1818",
321                 .bl_product    = "Universal Xport",
322                 .hwhandler     = "1 rdac",
323                 .no_path_retry = NO_PATH_RETRY_QUEUE,
324                 .checker_name  = RDAC,
325                 .prio_name     = PRIO_RDAC,
326         },
327         {
328                 /* IBM Netfinity Fibre Channel RAID Controller Unit */
329                 .vendor        = "IBM",
330                 .product       = "^3526",
331                 .bl_product    = "Universal Xport",
332                 .hwhandler     = "1 rdac",
333                 .no_path_retry = NO_PATH_RETRY_QUEUE,
334                 .checker_name  = RDAC,
335                 .prio_name     = PRIO_RDAC,
336         },
337         {
338                 /* IBM DS4200 / FAStT200 */
339                 .vendor        = "IBM",
340                 .product       = "^3542",
341                 .pgpolicy      = GROUP_BY_SERIAL,
342                 .pgfailback    = FAILBACK_UNDEF,
343         },
344         {
345                 /* IBM ESS F20 aka Shark */
346                 .vendor        = "IBM",
347                 .product       = "^2105800",
348                 .features      = "1 queue_if_no_path",
349                 .pgpolicy      = GROUP_BY_SERIAL,
350                 .pgfailback    = FAILBACK_UNDEF,
351         },
352         {
353                 /* IBM ESS F20 aka Shark */
354                 .vendor        = "IBM",
355                 .product       = "^2105F20",
356                 .features      = "1 queue_if_no_path",
357                 .pgpolicy      = GROUP_BY_SERIAL,
358                 .pgfailback    = FAILBACK_UNDEF,
359         },
360         {
361                 /* IBM DS6000 */
362                 .vendor        = "IBM",
363                 .product       = "^1750500",
364                 .features      = "1 queue_if_no_path",
365                 .prio_name     = PRIO_ALUA,
366         },
367         {
368                 /* IBM DS8000 */
369                 .vendor        = "IBM",
370                 .product       = "^2107900",
371                 .features      = "1 queue_if_no_path",
372                 .pgpolicy      = MULTIBUS,
373                 .pgfailback    = FAILBACK_UNDEF,
374         },
375         {
376                 /* IBM SAN Volume Controller */
377                 .vendor        = "IBM",
378                 .product       = "^2145",
379                 .features      = "1 queue_if_no_path",
380                 .prio_name     = PRIO_ALUA,
381         },
382         {
383                 /* IBM S/390 ECKD DASD */
384                 .vendor        = "IBM",
385                 .product       = "S/390 DASD ECKD",
386                 .bl_product    = "S/390.*",
387                 .uid_attribute = "ID_UID",
388                 .features      = "1 queue_if_no_path",
389                 .pgpolicy      = MULTIBUS,
390                 .pgfailback    = FAILBACK_UNDEF,
391         },
392         {
393                 /* IBM S/390 FBA DASD */
394                 .vendor        = "IBM",
395                 .product       = "S/390 DASD FBA",
396                 .bl_product    = "S/390.*",
397                 .uid_attribute = "ID_UID",
398                 .features      = "1 queue_if_no_path",
399                 .pgpolicy      = MULTIBUS,
400                 .pgfailback    = FAILBACK_UNDEF,
401         },
402         {
403                 /* IBM IPR */
404                 .vendor        = "IBM",
405                 .product       = "^IPR.*",
406                 .features      = "1 queue_if_no_path",
407                 .hwhandler     = "1 alua",
408                 .prio_name     = PRIO_ALUA,
409         },
410         {
411                 /* IBM RSSM */
412                 .vendor        = "IBM",
413                 .product       = "1820N00",
414                 .no_path_retry = NO_PATH_RETRY_QUEUE,
415                 .minio         = 100,
416                 .prio_name     = PRIO_ALUA,
417         },
418         {
419                 /* IBM XIV Storage System */
420                 .vendor        = "IBM",
421                 .product       = "2810XIV",
422                 .features      = "1 queue_if_no_path",
423                 .pgpolicy      = MULTIBUS,
424                 .pgfailback    = 15,
425                 .minio         = 15,
426         },
427         /*
428          * IBM Power Virtual SCSI Devices
429          *
430          * Maintainer : Brian King, IBM
431          * Mail : brking@linux.vnet.ibm.com
432          */
433         {
434                 /* AIX VDASD */
435                 .vendor        = "AIX",
436                 .product       = "VDASD",
437                 .pgpolicy      = MULTIBUS,
438                 .no_path_retry = (300 / DEFAULT_CHECKINT),
439         },
440         {
441                 /* IBM 3303 NVDISK */
442                 .vendor        = "IBM",
443                 .product       = "3303      NVDISK",
444                 .no_path_retry = (300 / DEFAULT_CHECKINT),
445                 .pgpolicy      = FAILOVER,
446         },
447         {
448                 /* AIX NVDISK */
449                 .vendor        = "AIX",
450                 .product       = "NVDISK",
451                 .hwhandler     = "1 alua",
452                 .no_path_retry = (300 / DEFAULT_CHECKINT),
453                 .prio_name     = PRIO_ALUA,
454         },
455         /*
456          * DELL
457          */
458         {
459                 /* DELL MD3000 */
460                 .vendor        = "DELL",
461                 .product       = "MD3000",
462                 .bl_product    = "Universal Xport",
463                 .features      = "2 pg_init_retries 50",
464                 .hwhandler     = "1 rdac",
465                 .no_path_retry = 15,
466                 .checker_name  = RDAC,
467                 .prio_name     = PRIO_RDAC,
468         },
469         {
470                 /* DELL MD32xx/MD36xx */
471                 .vendor        = "DELL",
472                 .product       = "MD32xx|MD36xx",
473                 .bl_product    = "Universal Xport",
474                 .features      = "2 pg_init_retries 50",
475                 .hwhandler     = "1 rdac",
476                 .no_path_retry = 15,
477                 .checker_name  = RDAC,
478                 .prio_name     = PRIO_RDAC,
479         },
480         {
481                 /* DELL MD34xx/MD38xx */
482                 .vendor        = "DELL",
483                 .product       = "MD34xx|MD38xx",
484                 .bl_product    = "Universal Xport",
485                 .features      = "2 pg_init_retries 50",
486                 .hwhandler     = "1 rdac",
487                 .no_path_retry = 15,
488                 .checker_name  = RDAC,
489                 .prio_name     = PRIO_RDAC,
490         },
491         /*
492          * NETAPP ONTAP family
493          *
494          * Maintainer : Martin George
495          * Mail : marting@netapp.com
496          */
497         {
498                 .vendor        = "NETAPP",
499                 .product       = "LUN.*",
500                 .features      = "3 queue_if_no_path pg_init_retries 50",
501                 .flush_on_last_del = FLUSH_ENABLED,
502                 .minio         = 128,
503                 .dev_loss      = MAX_DEV_LOSS_TMO,
504                 .prio_name     = PRIO_ONTAP,
505         },
506         {
507                 /* IBM NSeries */
508                 .vendor        = "IBM",
509                 .product       = "Nseries.*",
510                 .features      = "1 queue_if_no_path",
511                 .minio         = 128,
512                 .prio_name     = PRIO_ONTAP,
513         },
514         /*
515          * NEXENTA
516          *
517          * Maintainer : Yacine Kheddache
518          * Mail : yacine@alyseo.com
519          */
520         {
521                 .vendor        = "NEXENTA",
522                 .product       = "COMSTAR",
523                 .features      = "1 queue_if_no_path",
524                 .pgpolicy      = GROUP_BY_SERIAL,
525                 .no_path_retry = 30,
526                 .minio         = 128,
527         },
528         /*
529          * Pillar Data/Oracle
530          *
531          * Maintainer : Srinivasan Ramani
532          * Mail : srinivas.ramani@oracle.com
533          */
534         {
535                 .vendor        = "Pillar",
536                 .product       = "Axiom.*",
537                 .pgfailback    = FAILBACK_UNDEF,
538                 .prio_name     = PRIO_ALUA,
539         },
540         /*
541          * SGI
542          */
543         {
544                 .vendor        = "SGI",
545                 .product       = "TP9[13]00",
546                 .pgpolicy      = MULTIBUS,
547                 .pgfailback    = FAILBACK_UNDEF,
548         },
549         {
550                 .vendor        = "SGI",
551                 .product       = "TP9[45]00",
552                 .bl_product    = "Universal Xport",
553                 .hwhandler     = "1 rdac",
554                 .no_path_retry = NO_PATH_RETRY_QUEUE,
555                 .checker_name  = RDAC,
556                 .prio_name     = PRIO_RDAC,
557         },
558         {
559                 .vendor        = "SGI",
560                 .product       = "IS.*",
561                 .bl_product    = "Universal Xport",
562                 .features      = "2 pg_init_retries 50",
563                 .hwhandler     = "1 rdac",
564                 .no_path_retry = 15,
565                 .checker_name  = RDAC,
566                 .prio_name     = PRIO_RDAC,
567         },
568         /*
569          * NEC
570          */
571         {
572                 /* M-Series */
573                 .vendor        = "NEC",
574                 .product       = "DISK ARRAY",
575                 .hwhandler     = "1 alua",
576                 .prio_name     = PRIO_ALUA,
577         },
578         /*
579          * STK/Oracle
580          */
581         {
582                 .vendor        = "STK",
583                 .product       = "OPENstorage D280",
584                 .bl_product    = "Universal Xport",
585                 .hwhandler     = "1 rdac",
586                 .checker_name  = RDAC,
587                 .prio_name     = PRIO_RDAC,
588         },
589         /*
590          * SUN/Oracle
591          */
592         {
593                 .vendor        = "SUN",
594                 .product       = "(StorEdge 3510|T4)",
595                 .pgpolicy      = MULTIBUS,
596                 .pgfailback    = FAILBACK_UNDEF,
597         },
598         {
599                 .vendor        = "SUN",
600                 .product       = "STK6580_6780",
601                 .bl_product    = "Universal Xport",
602                 .hwhandler     = "1 rdac",
603                 .checker_name  = RDAC,
604                 .prio_name     = PRIO_RDAC,
605         },
606         {
607                 .vendor        = "EUROLOGC",
608                 .product       = "FC2502",
609                 .pgfailback    = FAILBACK_UNDEF,
610         },
611         /*
612          * Pivot3
613          *
614          * Maintainer : Bart Brooks, Pivot3
615          * Mail : bartb@pivot3.com
616          */
617         {
618                 .vendor        = "PIVOT3",
619                 .product       = "RAIGE VOLUME",
620                 .features      = "1 queue_if_no_path",
621                 .pgpolicy      = MULTIBUS,
622                 .pgfailback    = FAILBACK_UNDEF,
623                 .minio         = 100,
624         },
625         {
626                 .vendor        = "SUN",
627                 .product       = "CSM200_R",
628                 .bl_product    = "Universal Xport",
629                 .hwhandler     = "1 rdac",
630                 .no_path_retry = NO_PATH_RETRY_QUEUE,
631                 .checker_name  = RDAC,
632                 .prio_name     = PRIO_RDAC,
633         },
634         /* SUN/LSI 2510, 2540, 2530, 2540 */
635         {
636                 .vendor        = "SUN",
637                 .product       = "LCSM100_[IEFS]",
638                 .bl_product    = "Universal Xport",
639                 .hwhandler     = "1 rdac",
640                 .no_path_retry = NO_PATH_RETRY_QUEUE,
641                 .checker_name  = RDAC,
642                 .prio_name     = PRIO_RDAC,
643         },
644         /* StorageTek 6180 */
645         {
646                 .vendor        = "SUN",
647                 .product       = "SUN_6180",
648                 .bl_product    = "Universal Xport",
649                 .hwhandler     = "1 rdac",
650                 .no_path_retry = NO_PATH_RETRY_QUEUE,
651                 .checker_name  = RDAC,
652                 .prio_name     = PRIO_RDAC,
653         },
654         /* LSI/Engenio/NetApp RDAC
655          *
656          * Maintainer : Sean Stewart
657          * Mail : sean.stewart@netapp.com
658          */
659         {
660                 .vendor        = "(NETAPP|LSI|ENGENIO)",
661                 .product       = "INF-01-00",
662                 .bl_product    = "Universal Xport",
663                 .features      = "2 pg_init_retries 50",
664                 .hwhandler     = "1 rdac",
665                 .no_path_retry = 30,
666                 .checker_name  = RDAC,
667                 .prio_name     = PRIO_RDAC,
668         },
669         {
670                 .vendor        = "STK",
671                 .product       = "FLEXLINE 380",
672                 .bl_product    = "Universal Xport",
673                 .hwhandler     = "1 rdac",
674                 .no_path_retry = NO_PATH_RETRY_QUEUE,
675                 .checker_name  = RDAC,
676                 .prio_name     = PRIO_RDAC,
677         },
678         {
679                 .vendor        = "Intel",
680                 .product       = "Multi-Flex",
681                 .hwhandler     = "1 alua",
682                 .no_path_retry = NO_PATH_RETRY_QUEUE,
683                 .prio_name     = PRIO_ALUA,
684         },
685         {
686                 .vendor        = "(LIO-ORG|SUSE)",
687                 .product       = "RBD",
688                 .hwhandler     = "1 alua",
689                 .no_path_retry = 12,
690                 .minio         = 100,
691                 .prio_name     = PRIO_ALUA,
692         },
693         {
694                 .vendor        = "DataCore",
695                 .product       = "SANmelody",
696                 .no_path_retry = NO_PATH_RETRY_QUEUE,
697                 .prio_name     = PRIO_ALUA,
698         },
699         {
700                 .vendor        = "DataCore",
701                 .product       = "Virtual Disk",
702                 .no_path_retry = NO_PATH_RETRY_QUEUE,
703                 .prio_name     = PRIO_ALUA,
704         },
705         {
706                 .vendor        = "PURE",
707                 .product       = "FlashArray",
708                 .selector      = "queue-length 0",
709                 .pgpolicy      = MULTIBUS,
710                 .fast_io_fail  = 10,
711                 .no_path_retry = 0,
712                 .dev_loss      = 60,
713         },
714         {
715                 .vendor        = "HUAWEI",
716                 .product       = "XSG1",
717                 .pgpolicy      = MULTIBUS,
718         },
719         /*
720          * Violin Memory
721          */
722         {
723                 .vendor        = "VIOLIN",
724                 .product       = "CONCERTO ARRAY",
725                 .selector      = "round-robin 0",
726                 .pgpolicy      = MULTIBUS,
727                 .prio_name     = PRIO_ALUA,
728                 .minio         = 100,
729                 .rr_weight     = RR_WEIGHT_PRIO,
730                 .features      = "1 queue_if_no_path",
731                 .no_path_retry = 300,
732         },
733         /*
734          * Infinidat
735          */
736         {
737                 .vendor        = "NFINIDAT",
738                 .product       = "InfiniBox.*",
739                 .prio_name     = PRIO_ALUA,
740                 .selector      = "round-robin 0",
741                 .pgfailback    = 30,
742                 .rr_weight     = RR_WEIGHT_PRIO,
743                 .no_path_retry = NO_PATH_RETRY_FAIL,
744                 .flush_on_last_del = FLUSH_ENABLED,
745                 .dev_loss      = 30,
746         },
747         /*
748          * Tegile Systems
749          */
750         {
751                 .vendor        = "TEGILE",
752                 .product       = "ZEBI-(FC|ISCSI)|INTELLIFLASH",
753                 .hwhandler     = "1 alua",
754                 .selector      = "round-robin 0",
755                 .no_path_retry = 10,
756                 .dev_loss      = 50,
757                 .prio_name     = PRIO_ALUA,
758                 .pgfailback    = 30,
759                 .minio         = 128,
760         },
761 #if 0
762         /*
763          * Copy this TEMPLATE to add new hardware.
764          *
765          * Keep only mandatory and modified attributes.
766          * Standard attributes must be removed.
767          *
768          * COMPANY_NAME
769          *
770          * Maintainer : XXX
771          * Mail : XXX
772          */
773         {
774                 .vendor        = "VENDOR", (Mandatory)
775                 .product       = "PRODUCT", (Mandatory)
776                 .revision      = "REVISION",
777                 .bl_product    = "BL_PRODUCT",
778                 .pgpolicy      = GROUP_BY_PRIO,
779                 .uid_attribute = "ID_SERIAL",
780                 .selector      = "service-time 0",
781                 .checker_name  = TUR,
782                 .features      = "0",
783                 .hwhandler     = "0",
784                 .prio_name     = "const",
785                 .prio_args     = "",
786                 .pgfailback    = -FAILBACK_IMMEDIATE,
787                 .rr_weight     = RR_WEIGHT_NONE,
788                 .no_path_retry = NO_PATH_RETRY_UNDEF,
789                 .minio         = 1000,
790                 .minio_rq      = 1,
791                 .flush_on_last_del = FLUSH_DISABLED,
792                 .fast_io_fail  = 5,
793                 .dev_loss      = 600,
794                 .retain_hwhandler = RETAIN_HWHANDLER_ON,
795                 .detect_prio   = DETECT_PRIO_ON,
796                 .deferred_remove = DEFERRED_REMOVE_OFF,
797                 .delay_watch_checks = DELAY_CHECKS_OFF,
798                 .delay_wait_checks = DELAY_CHECKS_OFF,
799         },
800 #endif
801         /*
802          * EOL
803          */
804         {
805                 .vendor        = NULL,
806                 .product       = NULL,
807                 .features      = NULL,
808                 .hwhandler     = NULL,
809                 .selector      = NULL,
810                 .pgpolicy      = 0,
811                 .pgfailback    = 0,
812                 .rr_weight     = 0,
813                 .no_path_retry = 0,
814                 .minio         = 0,
815                 .minio_rq      = 0,
816                 .checker_name  = NULL,
817                 .prio_name     = NULL,
818                 .prio_args     = NULL,
819         },
820 };
821
822 extern int
823 setup_default_hwtable (vector hw)
824 {
825         int r = 0;
826         struct hwentry * hwe = default_hw;
827
828         while (hwe->vendor) {
829                 r += store_hwe(hw, hwe);
830                 hwe++;
831         }
832         return r;
833 }