Logo Search packages:      
Sourcecode: dmraid version File versions

nv.h

/*
 * Copyright (C) 2004,2005  NVidia Corporation. All rights reserved.
 *
 * dmraid extensions:
 * Copyright (C) 2004,2005 Heinz Mauelshagen, Red Hat GmbH.
 *                          All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * You should have received a copy of the GNU General Public License
 * (for example /usr/src/linux/COPYING); if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 *
 */

#ifndef     _NV_H_
#define     _NV_H_

#ifdef      FORMAT_HANDLER

#include <stdint.h>

#define     NV_CONFIGOFFSET         ((di->sectors - 2) << 9)
#define     NV_DATAOFFSET           0

#define NV_ID_LENGTH          8
#define NV_ID_STRING          "NVIDIA"
#define NV_VERSION            100 
#define NV_SECTOR_SIZE        512
#define NV_PRODUCT_ID_LEN     16 /* Product ID size in bytes */

typedef uint32_t lba_t;

/* Array info */
struct nv_array_base {
      uint32_t version; /* Version of this struct               */
                        /* 0x640000 + sizeof(nv_array_base) */
#define NV_SIGNATURES   4
      uint32_t signature[NV_SIGNATURES]; /* Unique signature for array */

      uint8_t  raidJobCode;   /* State of array */ 
#define NV_IDLE               0
#define NV_SCDB_INIT_RAID     2
#define NV_SCDB_REBUILD_RAID  3
#define NV_SCDB_UPGRADE_RAID  4
#define NV_SCDB_SYNC_RAID     5

      uint8_t  stripeWidth;   /* Array stripe width */
      uint8_t  totalVolumes;  /* Total # of disks in array, including spare */
      uint8_t  originalWidth; /* Stripe width before morph */

      uint32_t raidLevel;     /* Array RAID level */
#define     NV_RAIDLEVEL(nv)  ((nv)->array.raidLevel)
#define NV_LEVEL_UNKNOWN            0x00
#define NV_LEVEL_JBOD               0xFF
#define NV_LEVEL_0                  0x80
#define NV_LEVEL_1                  0x81
#define NV_LEVEL_3                  0x83
#define NV_LEVEL_5                  0x85
#define NV_LEVEL_10                 0x8a
#define NV_LEVEL_1_0                0x8180
#define NVRAID_1_0(nv)  (NV_RAIDLEVEL((nv)) == NV_LEVEL_1_0)
#define NV_LEVEL_5_SYM_FLAG         0x10
#define NV_LEVEL_5_SYM        (NV_LEVEL_5|NV_LEVEL_5_SYM_FLAG)

      lba_t    stripeBlockSize;     /* Array stripe block size in sectors */
      uint32_t stripeBlockByteSize; /* stripeBlockSize in bytes */
      uint32_t stripeBlockPower;    /* Array stripe block size in log2 */
      lba_t    stripeMask;    /* stripeBlockSize - 1 */
      lba_t    stripeSize;    /* stripeBlockSize * stripeWidth */
      uint32_t stripeByteSize;      /* stripeSize in bytes */
      lba_t    raidJobMark;   /* Ignored if array is idle, otherwise the */
                              /* LBA where job is finished               */
      uint32_t originalLevel; /* RAID level before morph */
      lba_t    originalCapacity;    /* Array capacity before morph */

      uint32_t flags;         /* Flags for array */
#define NV_ARRAY_FLAG_BOOT          (0x00000001) /* BIOS use only */
#define NV_ARRAY_FLAG_ERROR         (0x00000002) /* Degraded or offling */
#define NV_ARRAY_FLAG_PARITY_VALID  (0x00000004) /* RAID-3/5 parity valid */
#define     NV_BROKEN(n)            (n->array.flags & NV_ARRAY_FLAG_ERROR)
#define     NV_SET_BROKEN(n)  (n->array.flags |= NV_ARRAY_FLAG_ERROR)
} __attribute__ ((packed));

/* Ondisk metadata */
struct nv {
      uint8_t  vendor[NV_ID_LENGTH]; /* 0x00 - 0x07 ID string */
      uint32_t size;          /* 0x08 - 0x0B Size of metadata in dwords */
      uint32_t chksum;  /* 0x0C - 0x0F Checksum of this struct */
      uint16_t version; /* 0x10 - 0x11 NV version */
      uint8_t  unitNumber;    /* 0x12 Disk index in array */
      uint8_t  reserved;      /* 0x13 */
      lba_t    capacity;      /* 0x14 - 0x17 Array capacity in sectors */ 
      uint32_t sectorSize;    /* 0x18 - 0x1B Sector size */
#define     NV_PRODUCTIDS     16
                        /* 0x1C - 0x2B Array product ID */
      uint8_t  productID[NV_PRODUCTIDS];
                        /*             Match INQUIRY data */
#define     NV_PRODUCTREVISIONS     4
                        /* 0x2C - 0x2F Array product revision */
      uint8_t  productRevision[NV_PRODUCTREVISIONS];
                        /*             Match INQUIRY data */
      uint32_t unitFlags;     /* 0x30 - 0x33 Flags for this disk */
      struct nv_array_base array;      /* Array information */
} __attribute__ ((packed));
#endif

/* Prototype of the register function for this metadata format handler */
int register_nv(struct lib_context *lc);

#endif

Generated by  Doxygen 1.6.0   Back to index