Print this page




 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