The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/ata/ata-raid.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2000 - 2008 Søren Schmidt <sos@FreeBSD.org>
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer,
   10  *    without modification, immediately at the beginning of the file.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   16  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   17  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   18  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   19  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   20  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   21  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   22  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   24  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   25  *
   26  * $FreeBSD$
   27  */
   28 
   29 /* misc defines */
   30 #define MAX_ARRAYS      16
   31 #define MAX_VOLUMES     4
   32 #define MAX_DISKS       16
   33 #define AR_PROXIMITY    2048    /* how many sectors is "close" */
   34 
   35 #define ATA_MAGIC       "FreeBSD ATA driver RAID "
   36 
   37 struct ata_raid_subdisk {
   38     struct ar_softc     *raid[MAX_VOLUMES];
   39     int                 disk_number[MAX_VOLUMES];
   40 };
   41 
   42 /*  ATA PseudoRAID Metadata */
   43 struct ar_softc {
   44     int                 lun;
   45     u_int8_t            name[32];
   46     int                 volume;
   47     u_int64_t           magic_0;
   48     u_int64_t           magic_1;
   49     int                 type;
   50 #define AR_T_JBOD               0x0001
   51 #define AR_T_SPAN               0x0002
   52 #define AR_T_RAID0              0x0004
   53 #define AR_T_RAID1              0x0008
   54 #define AR_T_RAID01             0x0010  
   55 #define AR_T_RAID3              0x0020
   56 #define AR_T_RAID4              0x0040
   57 #define AR_T_RAID5              0x0080
   58 
   59     int                 status;
   60 #define AR_S_READY              0x0001
   61 #define AR_S_DEGRADED           0x0002
   62 #define AR_S_REBUILDING         0x0004
   63 
   64     int                 format;
   65 #define AR_F_FREEBSD_RAID       0x0001
   66 #define AR_F_ADAPTEC_RAID       0x0002
   67 #define AR_F_HPTV2_RAID         0x0004
   68 #define AR_F_HPTV3_RAID         0x0008
   69 #define AR_F_INTEL_RAID         0x0010
   70 #define AR_F_ITE_RAID           0x0020
   71 #define AR_F_JMICRON_RAID       0x0040
   72 #define AR_F_LSIV2_RAID         0x0080
   73 #define AR_F_LSIV3_RAID         0x0100
   74 #define AR_F_NVIDIA_RAID        0x0200
   75 #define AR_F_PROMISE_RAID       0x0400
   76 #define AR_F_SII_RAID           0x0800
   77 #define AR_F_SIS_RAID           0x1000
   78 #define AR_F_VIA_RAID           0x2000
   79 #define AR_F_DDF_RAID           0x4000
   80 #define AR_F_FORMAT_MASK        0x7fff
   81 
   82     u_int               generation;
   83     u_int64_t           total_sectors;
   84     u_int64_t           offset_sectors; /* offset from start of disk */
   85     u_int16_t           heads;
   86     u_int16_t           sectors;
   87     u_int32_t           cylinders;
   88     u_int               width;          /* array width in disks */
   89     u_int               interleave;     /* interleave in sectors */
   90     u_int               total_disks;    /* number of disks in this array */
   91     struct ar_disk {
   92         device_t        dev;
   93         u_int8_t        serial[16];     /* serial # of physical disk */
   94         u_int64_t       sectors;        /* useable sectors on this disk */
   95         off_t           last_lba;       /* last lba used (for performance) */
   96         u_int           flags;
   97 #define AR_DF_PRESENT           0x0001  /* this HW pos has a disk present */
   98 #define AR_DF_ASSIGNED          0x0002  /* this HW pos assigned to an array */
   99 #define AR_DF_SPARE             0x0004  /* this HW pos is a spare */
  100 #define AR_DF_ONLINE            0x0008  /* this HW pos is online and in use */
  101 
  102     } disks[MAX_DISKS];
  103     int                 toggle;         /* performance hack for RAID1's */
  104     u_int64_t           rebuild_lba;    /* rebuild progress indicator */
  105     struct mtx          lock;           /* metadata lock */
  106     struct disk         *disk;          /* disklabel/slice stuff */
  107     struct proc         *pid;           /* rebuilder process id */
  108 };
  109 
  110 /* Adaptec HostRAID Metadata */
  111 #define ADP_LBA(dev) \
  112         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 17)
  113 
  114 /* note all entries are big endian */
  115 struct adaptec_raid_conf {
  116     u_int32_t           magic_0;
  117 #define ADP_MAGIC_0             0xc4650790
  118 
  119     u_int32_t           generation;
  120     u_int16_t           dummy_0;
  121     u_int16_t           total_configs;
  122     u_int16_t           dummy_1;
  123     u_int16_t           checksum;
  124     u_int32_t           dummy_2;
  125     u_int32_t           dummy_3;
  126     u_int32_t           flags;
  127     u_int32_t           timestamp;
  128     u_int32_t           dummy_4[4];
  129     u_int32_t           dummy_5[4];
  130     struct {
  131         u_int16_t       total_disks;
  132         u_int16_t       generation;
  133         u_int32_t       magic_0;
  134         u_int8_t        dummy_0;
  135         u_int8_t        type;
  136 #define ADP_T_RAID0             0x00
  137 #define ADP_T_RAID1             0x01
  138         u_int8_t        dummy_1;
  139         u_int8_t        flags;
  140 
  141         u_int8_t        dummy_2;
  142         u_int8_t        dummy_3;
  143         u_int8_t        dummy_4;
  144         u_int8_t        dummy_5;
  145 
  146         u_int32_t       disk_number;
  147         u_int32_t       dummy_6;
  148         u_int32_t       sectors;
  149         u_int16_t       stripe_shift;
  150         u_int16_t       dummy_7;
  151 
  152         u_int32_t       dummy_8[4];
  153         u_int8_t        name[16];
  154     } configs[127];
  155     u_int32_t           dummy_6[13];
  156     u_int32_t           magic_1;
  157 #define ADP_MAGIC_1             0x9ff85009
  158     u_int32_t           dummy_7[3];
  159     u_int32_t           magic_2;
  160     u_int32_t           dummy_8[46];
  161     u_int32_t           magic_3;
  162 #define ADP_MAGIC_3             0x4d545044
  163     u_int32_t           magic_4;
  164 #define ADP_MAGIC_4             0x9ff85009
  165     u_int32_t           dummy_9[62];
  166 } __packed;
  167 
  168 /* DDF Information.  Metadata definitions are in another file */
  169 #define DDF_LBA(dev) \
  170         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 1)
  171 
  172 /* Highpoint V2 RocketRAID Metadata */
  173 #define HPTV2_LBA(dev)  9
  174 
  175 struct hptv2_raid_conf {
  176     int8_t              filler1[32];
  177     u_int32_t           magic;
  178 #define HPTV2_MAGIC_OK          0x5a7816f0
  179 #define HPTV2_MAGIC_BAD         0x5a7816fd
  180 
  181     u_int32_t           magic_0;
  182     u_int32_t           magic_1;
  183     u_int32_t           order;
  184 #define HPTV2_O_RAID0           0x01
  185 #define HPTV2_O_RAID1           0x02
  186 #define HPTV2_O_OK              0x04
  187 
  188     u_int8_t            array_width;
  189     u_int8_t            stripe_shift;
  190     u_int8_t            type;
  191 #define HPTV2_T_RAID0           0x00
  192 #define HPTV2_T_RAID1           0x01
  193 #define HPTV2_T_RAID01_RAID0    0x02
  194 #define HPTV2_T_SPAN            0x03
  195 #define HPTV2_T_RAID_3          0x04
  196 #define HPTV2_T_RAID_5          0x05
  197 #define HPTV2_T_JBOD            0x06
  198 #define HPTV2_T_RAID01_RAID1    0x07
  199 
  200     u_int8_t            disk_number;
  201     u_int32_t           total_sectors;
  202     u_int32_t           disk_mode;
  203     u_int32_t           boot_mode;
  204     u_int8_t            boot_disk;
  205     u_int8_t            boot_protect;
  206     u_int8_t            error_log_entries;
  207     u_int8_t            error_log_index;
  208     struct {
  209         u_int32_t       timestamp;
  210         u_int8_t        reason;
  211 #define HPTV2_R_REMOVED         0xfe
  212 #define HPTV2_R_BROKEN          0xff
  213         
  214         u_int8_t        disk;
  215         u_int8_t        status;
  216         u_int8_t        sectors;
  217         u_int32_t       lba;
  218     } errorlog[32];
  219     int8_t              filler2[16];
  220     u_int32_t           rebuild_lba;
  221     u_int8_t            dummy_1;
  222     u_int8_t            name_1[15];
  223     u_int8_t            dummy_2;
  224     u_int8_t            name_2[15];
  225     int8_t              filler3[8];
  226 } __packed;
  227 
  228 
  229 /* Highpoint V3 RocketRAID Metadata */
  230 #define HPTV3_LBA(dev) \
  231         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 11)
  232 
  233 struct hptv3_raid_conf {
  234     u_int32_t           magic;
  235 #define HPTV3_MAGIC             0x5a7816f3
  236 
  237     u_int32_t           magic_0;
  238     u_int8_t            checksum_0;
  239     u_int8_t            mode;
  240 #define HPTV3_BOOT_MARK         0x01
  241 #define HPTV3_USER_MODE         0x02
  242     
  243     u_int8_t            user_mode;
  244     u_int8_t            config_entries;
  245     struct {
  246         u_int32_t       total_sectors;
  247         u_int8_t        type;
  248 #define HPTV3_T_SPARE           0x00
  249 #define HPTV3_T_JBOD            0x03
  250 #define HPTV3_T_SPAN            0x04
  251 #define HPTV3_T_RAID0           0x05
  252 #define HPTV3_T_RAID1           0x06
  253 #define HPTV3_T_RAID3           0x07
  254 #define HPTV3_T_RAID5           0x08
  255 
  256         u_int8_t        total_disks;
  257         u_int8_t        disk_number;
  258         u_int8_t        stripe_shift;
  259         u_int16_t       status;
  260 #define HPTV3_T_NEED_REBUILD    0x01
  261 #define HPTV3_T_RAID5_FLAG      0x02
  262 
  263         u_int16_t       critical_disks;
  264         u_int32_t       rebuild_lba;
  265     } __packed configs[2];
  266     u_int8_t            name[16];
  267     u_int32_t           timestamp;
  268     u_int8_t            description[64];
  269     u_int8_t            creator[16];
  270     u_int8_t            checksum_1;
  271     u_int8_t            dummy_0;
  272     u_int8_t            dummy_1;
  273     u_int8_t            flags;
  274 #define HPTV3_T_ENABLE_TCQ      0x01
  275 #define HPTV3_T_ENABLE_NCQ      0x02
  276 #define HPTV3_T_ENABLE_WCACHE   0x04
  277 #define HPTV3_T_ENABLE_RCACHE   0x08
  278 
  279     struct {
  280         u_int32_t       total_sectors;
  281         u_int32_t       rebuild_lba;
  282     } __packed configs_high[2];
  283     u_int32_t           filler[87];
  284 } __packed;
  285 
  286 
  287 /* Intel MatrixRAID Metadata */
  288 #define INTEL_LBA(dev) \
  289         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 3)
  290 
  291 struct intel_raid_conf {
  292     u_int8_t            intel_id[24];
  293 #define INTEL_MAGIC             "Intel Raid ISM Cfg Sig. "
  294 
  295     u_int8_t            version[6];
  296 #define INTEL_VERSION_1100      "1.1.00"
  297 #define INTEL_VERSION_1201      "1.2.01"
  298 #define INTEL_VERSION_1202      "1.2.02"
  299 
  300     u_int8_t            dummy_0[2];
  301     u_int32_t           checksum;
  302     u_int32_t           config_size;
  303     u_int32_t           config_id;
  304     u_int32_t           generation;
  305     u_int32_t           dummy_1[2];
  306     u_int8_t            total_disks;
  307     u_int8_t            total_volumes;
  308     u_int8_t            dummy_2[2];
  309     u_int32_t           filler_0[39];
  310     struct {
  311         u_int8_t        serial[16];
  312         u_int32_t       sectors;
  313         u_int32_t       id;
  314         u_int32_t       flags;
  315 #define INTEL_F_SPARE           0x01
  316 #define INTEL_F_ASSIGNED        0x02
  317 #define INTEL_F_DOWN            0x04
  318 #define INTEL_F_ONLINE          0x08
  319 
  320         u_int32_t       filler[5];
  321     } __packed disk[1];
  322     u_int32_t           filler_1[62];
  323 } __packed;
  324 
  325 struct intel_raid_mapping {
  326     u_int8_t            name[16];
  327     u_int64_t           total_sectors __packed;
  328     u_int32_t           state;
  329     u_int32_t           reserved;
  330     u_int32_t           filler_0[20];
  331     u_int32_t           offset;
  332     u_int32_t           disk_sectors;
  333     u_int32_t           stripe_count;
  334     u_int16_t           stripe_sectors;
  335     u_int8_t            status;
  336 #define INTEL_S_READY           0x00
  337 #define INTEL_S_DISABLED        0x01
  338 #define INTEL_S_DEGRADED        0x02
  339 #define INTEL_S_FAILURE         0x03
  340 
  341     u_int8_t            type;
  342 #define INTEL_T_RAID0           0x00
  343 #define INTEL_T_RAID1           0x01
  344 #define INTEL_T_RAID5           0x05
  345 
  346     u_int8_t            total_disks;
  347     u_int8_t            magic[3];
  348     u_int32_t           filler_1[7];
  349     u_int32_t           disk_idx[1];
  350 } __packed;
  351 
  352 
  353 /* Integrated Technology Express Metadata */
  354 #define ITE_LBA(dev) \
  355         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 2)
  356 
  357 struct ite_raid_conf {
  358     u_int32_t           filler_1[5];
  359     u_int8_t            timestamp_0[8];
  360     u_int32_t           dummy_1;
  361     u_int32_t           filler_2[5];
  362     u_int16_t           filler_3;
  363     u_int8_t            ite_id[40];
  364 #define ITE_MAGIC               "Integrated Technology Express Inc      "
  365 
  366     u_int16_t           filler_4;
  367     u_int32_t           filler_5[6];
  368     u_int32_t           dummy_2;
  369     u_int32_t           dummy_3;
  370     u_int32_t           filler_6[12];
  371     u_int32_t           dummy_4;
  372     u_int32_t           filler_7[5];
  373     u_int64_t           total_sectors __packed;
  374     u_int32_t           filler_8[12];
  375     
  376     u_int16_t           filler_9;
  377     u_int8_t            type;
  378 #define ITE_T_RAID0             0x00
  379 #define ITE_T_RAID1             0x01
  380 #define ITE_T_RAID01            0x02
  381 #define ITE_T_SPAN              0x03
  382 
  383     u_int8_t            filler_10;
  384     u_int32_t           dummy_5[8];
  385     u_int8_t            stripe_1kblocks;
  386     u_int8_t            filler_11[3];
  387     u_int32_t           filler_12[54];
  388 
  389     u_int32_t           dummy_6[4];
  390     u_int8_t            timestamp_1[8];
  391     u_int32_t           filler_13[9];
  392     u_int8_t            stripe_sectors;
  393     u_int8_t            filler_14[3];
  394     u_int8_t            array_width;
  395     u_int8_t            filler_15[3];
  396     u_int32_t           filler_16;
  397     u_int8_t            filler_17;
  398     u_int8_t            disk_number;
  399     u_int32_t           disk_sectors;
  400     u_int16_t           filler_18;
  401     u_int32_t           dummy_7[4];
  402     u_int32_t           filler_20[104];
  403 } __packed;
  404 
  405 
  406 /* JMicron Technology Corp Metadata */
  407 #define JMICRON_LBA(dev) \
  408         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 1)
  409 #define JM_MAX_DISKS            8
  410 
  411 struct jmicron_raid_conf {
  412     u_int8_t            signature[2];
  413 #define JMICRON_MAGIC           "JM"
  414 
  415     u_int16_t           version;
  416 #define JMICRON_VERSION         0x0001
  417 
  418     u_int16_t           checksum;
  419     u_int8_t            filler_1[10];
  420     u_int32_t           disk_id;
  421     u_int32_t           offset;
  422     u_int32_t           disk_sectors_high;
  423     u_int16_t           disk_sectors_low;
  424     u_int8_t            filler_2[2];
  425     u_int8_t            name[16];
  426     u_int8_t            type;
  427 #define JM_T_RAID0              0
  428 #define JM_T_RAID1              1
  429 #define JM_T_RAID01             2
  430 #define JM_T_JBOD               3
  431 #define JM_T_RAID5              5
  432 
  433     u_int8_t            stripe_shift;
  434     u_int16_t           flags;
  435 #define JM_F_READY              0x0001
  436 #define JM_F_BOOTABLE           0x0002
  437 #define JM_F_BAD                0x0004
  438 #define JM_F_ACTIVE             0c0010
  439 #define JM_F_UNSYNC             0c0020
  440 #define JM_F_NEWEST             0c0040
  441 
  442     u_int8_t            filler_3[4];
  443     u_int32_t           spare[2];
  444     u_int32_t           disks[JM_MAX_DISKS];
  445     u_int8_t            filler_4[32];
  446     u_int8_t            filler_5[384];
  447 };
  448 
  449 
  450 /* LSILogic V2 MegaRAID Metadata */
  451 #define LSIV2_LBA(dev) \
  452         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 1)
  453 
  454 struct lsiv2_raid_conf {
  455     u_int8_t            lsi_id[6];
  456 #define LSIV2_MAGIC             "$XIDE$"
  457 
  458     u_int8_t            dummy_0;
  459     u_int8_t            flags;
  460     u_int16_t           version;
  461     u_int8_t            config_entries;
  462     u_int8_t            raid_count;
  463     u_int8_t            total_disks;
  464     u_int8_t            dummy_1;
  465     u_int16_t           dummy_2;
  466 
  467     union {
  468         struct {
  469             u_int8_t    type;
  470 #define LSIV2_T_RAID0           0x01
  471 #define LSIV2_T_RAID1           0x02
  472 #define LSIV2_T_SPARE           0x08
  473 
  474             u_int8_t    dummy_0;
  475             u_int16_t   stripe_sectors;
  476             u_int8_t    array_width;
  477             u_int8_t    disk_count;
  478             u_int8_t    config_offset;
  479             u_int8_t    dummy_1;
  480             u_int8_t    flags;
  481 #define LSIV2_R_DEGRADED        0x02
  482 
  483             u_int32_t   total_sectors;
  484             u_int8_t    filler[3];
  485         } __packed raid;
  486         struct {
  487             u_int8_t    device;
  488 #define LSIV2_D_MASTER          0x00
  489 #define LSIV2_D_SLAVE           0x01
  490 #define LSIV2_D_CHANNEL0        0x00
  491 #define LSIV2_D_CHANNEL1        0x10
  492 #define LSIV2_D_NONE            0xff
  493 
  494             u_int8_t    dummy_0;
  495             u_int32_t   disk_sectors;
  496             u_int8_t    disk_number;
  497             u_int8_t    raid_number;
  498             u_int8_t    flags;
  499 #define LSIV2_D_GONE            0x02
  500 
  501             u_int8_t    filler[7];
  502         } __packed disk;
  503     } configs[30];
  504     u_int8_t            disk_number;
  505     u_int8_t            raid_number;
  506     u_int32_t           timestamp;
  507     u_int8_t            filler[10];
  508 } __packed;
  509 
  510 
  511 /* LSILogic V3 MegaRAID Metadata */
  512 #define LSIV3_LBA(dev) \
  513         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 4)
  514 
  515 struct lsiv3_raid_conf {
  516     u_int32_t           magic_0;        /* 0xa0203200 */
  517     u_int32_t           filler_0[3];
  518     u_int8_t            magic_1[4];     /* "SATA" */
  519     u_int32_t           filler_1[40];
  520     u_int32_t           dummy_0;        /* 0x0d000003 */
  521     u_int32_t           filler_2[7];
  522     u_int32_t           dummy_1;        /* 0x0d000003 */
  523     u_int32_t           filler_3[70];
  524     u_int8_t            magic_2[8];     /* "$_ENQ$31" */
  525     u_int8_t            filler_4[7];
  526     u_int8_t            checksum_0;
  527     u_int8_t            filler_5[512*2];
  528     u_int8_t            lsi_id[6];
  529 #define LSIV3_MAGIC             "$_IDE$"
  530 
  531     u_int16_t           dummy_2;        /* 0x33de for OK disk */
  532     u_int16_t           version;        /* 0x0131 for this version */
  533     u_int16_t           dummy_3;        /* 0x0440 always */
  534     u_int32_t           filler_6;
  535 
  536     struct {
  537         u_int16_t       stripe_pages;
  538         u_int8_t        type;
  539 #define LSIV3_T_RAID0           0x00
  540 #define LSIV3_T_RAID1           0x01
  541 
  542         u_int8_t        dummy_0;
  543         u_int8_t        total_disks;
  544         u_int8_t        array_width;
  545         u_int8_t        filler_0[10];
  546 
  547         u_int32_t       sectors;
  548         u_int16_t       dummy_1;
  549         u_int32_t       offset;
  550         u_int16_t       dummy_2;
  551         u_int8_t        device;
  552 #define LSIV3_D_DEVICE          0x01
  553 #define LSIV3_D_CHANNEL         0x10
  554 
  555         u_int8_t        dummy_3;
  556         u_int8_t        dummy_4;
  557         u_int8_t        dummy_5;
  558         u_int8_t        filler_1[16];
  559     } __packed raid[8];
  560     struct {
  561         u_int32_t       disk_sectors;
  562         u_int32_t       dummy_0;
  563         u_int32_t       dummy_1;
  564         u_int8_t        dummy_2;
  565         u_int8_t        dummy_3;
  566         u_int8_t        flags;
  567 #define LSIV3_D_MIRROR          0x00
  568 #define LSIV3_D_STRIPE          0xff
  569         u_int8_t        dummy_4;
  570     } __packed disk[6];
  571     u_int8_t            filler_7[7];
  572     u_int8_t            device;
  573     u_int32_t           timestamp;
  574     u_int8_t            filler_8[3];
  575     u_int8_t            checksum_1;
  576 } __packed;
  577 
  578 
  579 /* nVidia MediaShield Metadata */
  580 #define NVIDIA_LBA(dev) \
  581         (((struct ad_softc *)device_get_ivars(dev))->total_secs - 2)
  582 
  583 struct nvidia_raid_conf {
  584     u_int8_t            nvidia_id[8];
  585 #define NV_MAGIC                "NVIDIA  "
  586 
  587     u_int32_t           config_size;
  588     u_int32_t           checksum;
  589     u_int16_t           version;
  590     u_int8_t            disk_number;
  591     u_int8_t            dummy_0;
  592     u_int32_t           total_sectors;
  593     u_int32_t           sector_size;
  594     u_int8_t            serial[16];
  595     u_int8_t            revision[4];
  596     u_int32_t           dummy_1;
  597 
  598     u_int32_t           magic_0;
  599 #define NV_MAGIC0               0x00640044
  600 
  601     u_int64_t           magic_1;
  602     u_int64_t           magic_2;
  603     u_int8_t            flags;
  604     u_int8_t            array_width;
  605     u_int8_t            total_disks;
  606     u_int8_t            dummy_2;
  607     u_int16_t           type;
  608 #define NV_T_RAID0              0x00000080
  609 #define NV_T_RAID1              0x00000081
  610 #define NV_T_RAID3              0x00000083
  611 #define NV_T_RAID5              0x00000085
  612 #define NV_T_RAID01             0x00008180
  613 #define NV_T_SPAN               0x000000ff
  614 
  615     u_int16_t           dummy_3;
  616     u_int32_t           stripe_sectors;
  617     u_int32_t           stripe_bytes;
  618     u_int32_t           stripe_shift;
  619     u_int32_t           stripe_mask;
  620     u_int32_t           stripe_sizesectors;
  621     u_int32_t           stripe_sizebytes;
  622     u_int32_t           rebuild_lba;
  623     u_int32_t           dummy_4;
  624     u_int32_t           dummy_5;
  625     u_int32_t           status;
  626 #define NV_S_BOOTABLE           0x00000001
  627 #define NV_S_DEGRADED           0x00000002
  628 
  629     u_int32_t           filler[98];
  630 } __packed;
  631 
  632 
  633 /* Promise FastTrak Metadata */
  634 #define PROMISE_LBA(dev) \
  635         (((((struct ad_softc *)device_get_ivars(dev))->total_secs / (((struct ad_softc *)device_get_ivars(dev))->heads * ((struct ad_softc *)device_get_ivars(dev))->sectors)) * ((struct ad_softc *)device_get_ivars(dev))->heads * ((struct ad_softc *)device_get_ivars(dev))->sectors) - ((struct ad_softc *)device_get_ivars(dev))->sectors)
  636 
  637 struct promise_raid_conf {
  638     char                promise_id[24];
  639 #define PR_MAGIC                "Promise Technology, Inc."
  640 
  641     u_int32_t           dummy_0;
  642     u_int64_t           magic_0;
  643 #define PR_MAGIC0(x)            (((u_int64_t)(x.channel) << 48) | \
  644                                 ((u_int64_t)(x.device != 0) << 56))
  645     u_int16_t           magic_1;
  646     u_int32_t           magic_2;
  647     u_int8_t            filler1[470];
  648     struct {
  649         u_int32_t       integrity;
  650 #define PR_I_VALID              0x00000080
  651 
  652         u_int8_t        flags;
  653 #define PR_F_VALID              0x00000001
  654 #define PR_F_ONLINE             0x00000002
  655 #define PR_F_ASSIGNED           0x00000004
  656 #define PR_F_SPARE              0x00000008
  657 #define PR_F_DUPLICATE          0x00000010
  658 #define PR_F_REDIR              0x00000020
  659 #define PR_F_DOWN               0x00000040
  660 #define PR_F_READY              0x00000080
  661 
  662         u_int8_t        disk_number;
  663         u_int8_t        channel;
  664         u_int8_t        device;
  665         u_int64_t       magic_0 __packed;
  666         u_int32_t       disk_offset;
  667         u_int32_t       disk_sectors;
  668         u_int32_t       rebuild_lba;
  669         u_int16_t       generation;
  670         u_int8_t        status;
  671 #define PR_S_VALID              0x01
  672 #define PR_S_ONLINE             0x02
  673 #define PR_S_INITED             0x04
  674 #define PR_S_READY              0x08
  675 #define PR_S_DEGRADED           0x10
  676 #define PR_S_MARKED             0x20
  677 #define PR_S_FUNCTIONAL         0x80
  678 
  679         u_int8_t        type;
  680 #define PR_T_RAID0              0x00
  681 #define PR_T_RAID1              0x01
  682 #define PR_T_RAID3              0x02
  683 #define PR_T_RAID5              0x04
  684 #define PR_T_SPAN               0x08
  685 #define PR_T_JBOD               0x10
  686 
  687         u_int8_t        total_disks;
  688         u_int8_t        stripe_shift;
  689         u_int8_t        array_width;
  690         u_int8_t        array_number;
  691         u_int32_t       total_sectors;
  692         u_int16_t       cylinders;
  693         u_int8_t        heads;
  694         u_int8_t        sectors;
  695         u_int64_t       magic_1 __packed;
  696         struct {
  697             u_int8_t    flags;
  698             u_int8_t    dummy_0;
  699             u_int8_t    channel;
  700             u_int8_t    device;
  701             u_int64_t   magic_0 __packed;
  702         } disk[8];
  703     } raid;
  704     int32_t             filler2[346];
  705     u_int32_t           checksum;
  706 } __packed;
  707 
  708 
  709 /* Silicon Image Medley Metadata */
  710 #define SII_LBA(dev) \
  711         ( ((struct ad_softc *)device_get_ivars(dev))->total_secs - 1)
  712 
  713 struct sii_raid_conf {
  714     u_int16_t           ata_params_00_53[54];
  715     u_int64_t           total_sectors;
  716     u_int16_t           ata_params_58_79[70];
  717     u_int16_t           dummy_0;
  718     u_int16_t           dummy_1;
  719     u_int32_t           controller_pci_id;
  720     u_int16_t           version_minor;
  721     u_int16_t           version_major;
  722     u_int8_t            timestamp[6];
  723     u_int16_t           stripe_sectors;
  724     u_int16_t           dummy_2;
  725     u_int8_t            disk_number;
  726     u_int8_t            type;
  727 #define SII_T_RAID0             0x00
  728 #define SII_T_RAID1             0x01
  729 #define SII_T_RAID01            0x02
  730 #define SII_T_SPARE             0x03
  731 
  732     u_int8_t            raid0_disks;
  733     u_int8_t            raid0_ident;
  734     u_int8_t            raid1_disks;
  735     u_int8_t            raid1_ident;
  736     u_int64_t           rebuild_lba;
  737     u_int32_t           generation;
  738     u_int8_t            status;
  739 #define SII_S_READY             0x01
  740     
  741     u_int8_t            base_raid1_position;
  742     u_int8_t            base_raid0_position;
  743     u_int8_t            position;
  744     u_int16_t           dummy_3;
  745     u_int8_t            name[16];
  746     u_int16_t           checksum_0;
  747     int8_t              filler1[190];
  748     u_int16_t           checksum_1;
  749 } __packed;
  750 
  751 
  752 /* Silicon Integrated Systems RAID Metadata */
  753 #define SIS_LBA(dev) \
  754         ( ((struct ad_softc *)device_get_ivars(dev))->total_secs - 16)
  755 
  756 struct sis_raid_conf {
  757     u_int16_t           magic;
  758 #define SIS_MAGIC               0x0010
  759 
  760     u_int8_t            disks;
  761 #define SIS_D_MASTER            0xf0
  762 #define SIS_D_MIRROR            0x0f
  763 
  764     u_int8_t            type_total_disks;
  765 #define SIS_D_MASK              0x0f
  766 #define SIS_T_MASK              0xf0
  767 #define SIS_T_JBOD              0x10
  768 #define SIS_T_RAID0             0x20
  769 #define SIS_T_RAID1             0x30
  770 
  771     u_int32_t           dummy_0;
  772     u_int32_t           controller_pci_id;
  773     u_int16_t           stripe_sectors;
  774     u_int16_t           dummy_1;
  775     u_int32_t           timestamp;
  776     u_int8_t            model[40];
  777     u_int8_t            disk_number;
  778     u_int8_t            dummy_2[3];
  779     int8_t              filler1[448];
  780 } __packed;
  781 
  782 
  783 /* VIA Tech V-RAID Metadata */
  784 #define VIA_LBA(dev) \
  785         ( ((struct ad_softc *)device_get_ivars(dev))->total_secs - 1)
  786 
  787 struct via_raid_conf {
  788     u_int16_t           magic;
  789 #define VIA_MAGIC               0xaa55
  790 
  791     u_int8_t            dummy_0;
  792     u_int8_t            type;
  793 #define VIA_T_MASK              0x7e
  794 #define VIA_T_BOOTABLE          0x01
  795 #define VIA_T_RAID0             0x04
  796 #define VIA_T_RAID1             0x0c
  797 #define VIA_T_RAID01            0x4c
  798 #define VIA_T_RAID5             0x2c
  799 #define VIA_T_SPAN              0x44
  800 #define VIA_T_UNKNOWN           0x80
  801 
  802     u_int8_t            disk_index;
  803 #define VIA_D_MASK              0x0f
  804 #define VIA_D_DEGRADED          0x10
  805 #define VIA_D_HIGH_IDX          0x20
  806 
  807     u_int8_t            stripe_layout;
  808 #define VIA_L_DISKS             0x07
  809 #define VIA_L_MASK              0xf0
  810 #define VIA_L_SHIFT             4
  811 
  812     u_int64_t           disk_sectors;
  813     u_int32_t           disk_id;
  814     u_int32_t           disks[8];
  815     u_int8_t            checksum;
  816     u_int8_t            filler_1[461];
  817 } __packed;

Cache object: cf0d794992eaed2e4b4ae182b7fef8b0


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.