394 U8 reserved;
395 /* 0x04 dev handles for all the paths. */
396 U16 devHandle[2];
397 } MR_DEV_HANDLE_INFO; /* 0x08, Total Size */
398
399 typedef struct _MR_ARRAY_INFO {
400 U16 pd[MAX_RAIDMAP_ROW_SIZE];
401 } MR_ARRAY_INFO; /* 0x40, Total Size */
402
403 typedef struct _MR_QUAD_ELEMENT {
404 U64 logStart; /* 0x00 */
405 U64 logEnd; /* 0x08 */
406 U64 offsetInSpan; /* 0x10 */
407 U32 diff; /* 0x18 */
408 U32 reserved1; /* 0x1C */
409 } MR_QUAD_ELEMENT; /* 0x20, Total size */
410
411 typedef struct _MR_SPAN_INFO {
412 U32 noElements; /* 0x00 */
413 U32 reserved1; /* 0x04 */
414 MR_QUAD_ELEMENT quad[MAX_RAIDMAP_SPAN_DEPTH]; /* 0x08 */
415 } MR_SPAN_INFO; /* 0x108, Total size */
416
417 typedef struct _MR_LD_SPAN_ { /* SPAN structure */
418 /* 0x00, starting block number in array */
419 U64 startBlk;
420
421 /* 0x08, number of blocks */
422 U64 numBlks;
423
424 /* 0x10, array reference */
425 U16 arrayRef;
426
427 U8 reserved[6]; /* 0x12 */
428 } MR_LD_SPAN; /* 0x18, Total Size */
429
430 typedef struct _MR_SPAN_BLOCK_INFO {
431 /* number of rows/span */
432 U64 num_rows;
433
434 MR_LD_SPAN span; /* 0x08 */
458 /* 0x12, shift-count to get stripe size (0=512, 1=1K, 7=64K, etc.) */
459 U8 stripeShift;
460 U8 rowSize; /* 0x13, number of disks in a row */
461 /* 0x14, number of data disks in a row */
462 U8 rowDataSize;
463 U8 writeMode; /* 0x15, WRITE_THROUGH or WRITE_BACK */
464
465 /* 0x16, To differentiate between RAID1 and RAID1E */
466 U8 PRL;
467
468 U8 SRL; /* 0x17 */
469 U16 targetId; /* 0x18, ld Target Id. */
470
471 /* 0x1a, state of ld, state corresponds to MR_LD_STATE */
472 U8 ldState;
473
474 /* 0x1b, Pre calculate region type requests based on MFC etc.. */
475 U8 regTypeReqOnWrite;
476
477 U8 modFactor; /* 0x1c, same as rowSize */
478 U8 regTypeReqOnRead; /* 0x1d, region lock type used for read, valid only if regTypeOnReadIsValid=1 */
479 U16 seqNum; /* 0x1e, LD sequence number */
480
481 struct {
482 /* This LD requires sync command before completing */
483 U32 ldSyncRequired:1;
484 U32 reserved:31;
485 } flags; /* 0x20 */
486
487 U8 reserved3[0x5C]; /* 0x24 */
488 } MR_LD_RAID; /* 0x80, Total Size */
489
490 typedef struct _MR_LD_SPAN_MAP {
491 MR_LD_RAID ldRaid; /* 0x00 */
492
493 /* 0x80, needed for GET_ARM() - R0/1/5 only. */
494 U8 dataArmMap[MAX_RAIDMAP_ROW_SIZE];
495
496 MR_SPAN_BLOCK_INFO spanBlock[MAX_RAIDMAP_SPAN_DEPTH]; /* 0xA0 */
497 } MR_LD_SPAN_MAP; /* 0x9E0 */
498
499 typedef struct _MR_FW_RAID_MAP {
500 /* total size of this structure, including this field */
501 U32 totalSize;
502 union {
503 /* Simple method of version checking variables */
504 struct {
505 U32 maxLd;
506 U32 maxSpanDepth;
507 U32 maxRowSize;
508 U32 maxPdCount;
509 U32 maxArrays;
510 } validationInfo;
511 U32 version[5];
512 U32 reserved1[5];
513 } u1;
514
515 U32 ldCount; /* count of lds */
516 U32 Reserved1;
517
518 /* 0x20 This doesn't correspond to
519 * FW Ld Tgt Id to LD, but will purge. For example: if tgt Id is 4
520 * and FW LD is 2, and there is only one LD, FW will populate the
521 * array like this. [0xFF, 0xFF, 0xFF, 0xFF, 0x0.....]. This is to
522 * help reduce the entire strcture size if there are few LDs or
523 * driver is looking info for 1 LD only.
524 */
525 U8 ldTgtIdToLd[MAX_RAIDMAP_LOGICAL_DRIVES+ \
526 MAX_RAIDMAP_VIEWS]; /* 0x20 */
527 /* timeout value used by driver in FP IOs */
528 U8 fpPdIoTimeoutSec;
529 U8 reserved2[7];
530 MR_ARRAY_INFO arMapInfo[MAX_RAIDMAP_ARRAYS]; /* 0x00a8 */
531 MR_DEV_HANDLE_INFO devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES];
532
533 /* 0x28a8-[0 -MAX_RAIDMAP_LOGICAL_DRIVES+MAX_RAIDMAP_VIEWS+1]; */
534 MR_LD_SPAN_MAP ldSpanMap[1];
535 }MR_FW_RAID_MAP; /* 0x3288, Total Size */
536
537 typedef struct _LD_TARGET_SYNC {
538 U8 ldTargetId;
539 U8 reserved;
540 U16 seqNum;
541 } LD_TARGET_SYNC;
542
|
394 U8 reserved;
395 /* 0x04 dev handles for all the paths. */
396 U16 devHandle[2];
397 } MR_DEV_HANDLE_INFO; /* 0x08, Total Size */
398
399 typedef struct _MR_ARRAY_INFO {
400 U16 pd[MAX_RAIDMAP_ROW_SIZE];
401 } MR_ARRAY_INFO; /* 0x40, Total Size */
402
403 typedef struct _MR_QUAD_ELEMENT {
404 U64 logStart; /* 0x00 */
405 U64 logEnd; /* 0x08 */
406 U64 offsetInSpan; /* 0x10 */
407 U32 diff; /* 0x18 */
408 U32 reserved1; /* 0x1C */
409 } MR_QUAD_ELEMENT; /* 0x20, Total size */
410
411 typedef struct _MR_SPAN_INFO {
412 U32 noElements; /* 0x00 */
413 U32 reserved1; /* 0x04 */
414 MR_QUAD_ELEMENT quads[MAX_RAIDMAP_SPAN_DEPTH]; /* 0x08 */
415 } MR_SPAN_INFO; /* 0x108, Total size */
416
417 typedef struct _MR_LD_SPAN_ { /* SPAN structure */
418 /* 0x00, starting block number in array */
419 U64 startBlk;
420
421 /* 0x08, number of blocks */
422 U64 numBlks;
423
424 /* 0x10, array reference */
425 U16 arrayRef;
426
427 U8 reserved[6]; /* 0x12 */
428 } MR_LD_SPAN; /* 0x18, Total Size */
429
430 typedef struct _MR_SPAN_BLOCK_INFO {
431 /* number of rows/span */
432 U64 num_rows;
433
434 MR_LD_SPAN span; /* 0x08 */
458 /* 0x12, shift-count to get stripe size (0=512, 1=1K, 7=64K, etc.) */
459 U8 stripeShift;
460 U8 rowSize; /* 0x13, number of disks in a row */
461 /* 0x14, number of data disks in a row */
462 U8 rowDataSize;
463 U8 writeMode; /* 0x15, WRITE_THROUGH or WRITE_BACK */
464
465 /* 0x16, To differentiate between RAID1 and RAID1E */
466 U8 PRL;
467
468 U8 SRL; /* 0x17 */
469 U16 targetId; /* 0x18, ld Target Id. */
470
471 /* 0x1a, state of ld, state corresponds to MR_LD_STATE */
472 U8 ldState;
473
474 /* 0x1b, Pre calculate region type requests based on MFC etc.. */
475 U8 regTypeReqOnWrite;
476
477 U8 modFactor; /* 0x1c, same as rowSize */
478 /*
479 * 0x1d, region lock type used for read, valid only if
480 * regTypeOnReadIsValid=1
481 */
482 U8 regTypeReqOnRead;
483 U16 seqNum; /* 0x1e, LD sequence number */
484
485 struct {
486 /* This LD requires sync command before completing */
487 U32 ldSyncRequired:1;
488 U32 reserved:31;
489 } flags; /* 0x20 */
490
491 U8 reserved3[0x5C]; /* 0x24 */
492 } MR_LD_RAID; /* 0x80, Total Size */
493
494 typedef struct _MR_LD_SPAN_MAP {
495 MR_LD_RAID ldRaid; /* 0x00 */
496
497 /* 0x80, needed for GET_ARM() - R0/1/5 only. */
498 U8 dataArmMap[MAX_RAIDMAP_ROW_SIZE];
499
500 MR_SPAN_BLOCK_INFO spanBlock[MAX_RAIDMAP_SPAN_DEPTH]; /* 0xA0 */
501 } MR_LD_SPAN_MAP; /* 0x9E0 */
502
503 typedef struct _MR_FW_RAID_MAP {
504 /* total size of this structure, including this field */
505 U32 totalSize;
506 union {
507 /* Simple method of version checking variables */
508 struct {
509 U32 maxLd;
510 U32 maxSpanDepth;
511 U32 maxRowSize;
512 U32 maxPdCount;
513 U32 maxArrays;
514 } validationInfo;
515 U32 version[5];
516 U32 reserved1[5];
517 } u1;
518
519 U32 ldCount; /* count of lds */
520 U32 Reserved1;
521
522 /*
523 * 0x20 This doesn't correspond to
524 * FW Ld Tgt Id to LD, but will purge. For example: if tgt Id is 4
525 * and FW LD is 2, and there is only one LD, FW will populate the
526 * array like this. [0xFF, 0xFF, 0xFF, 0xFF, 0x0.....]. This is to
527 * help reduce the entire structure size if there are few LDs or
528 * driver is looking info for 1 LD only.
529 */
530 U8 ldTgtIdToLd[MAX_RAIDMAP_LOGICAL_DRIVES+ \
531 MAX_RAIDMAP_VIEWS]; /* 0x20 */
532 /* timeout value used by driver in FP IOs */
533 U8 fpPdIoTimeoutSec;
534 U8 reserved2[7];
535 MR_ARRAY_INFO arMapInfo[MAX_RAIDMAP_ARRAYS]; /* 0x00a8 */
536 MR_DEV_HANDLE_INFO devHndlInfo[MAX_RAIDMAP_PHYSICAL_DEVICES];
537
538 /* 0x28a8-[0 -MAX_RAIDMAP_LOGICAL_DRIVES+MAX_RAIDMAP_VIEWS+1]; */
539 MR_LD_SPAN_MAP ldSpanMap[1];
540 }MR_FW_RAID_MAP; /* 0x3288, Total Size */
541
542 typedef struct _LD_TARGET_SYNC {
543 U8 ldTargetId;
544 U8 reserved;
545 U16 seqNum;
546 } LD_TARGET_SYNC;
547
|