Lines Matching defs:meta

96 static void ata_raid_print_meta(struct ar_softc *meta);
97 static void ata_raid_adaptec_print_meta(struct adaptec_raid_conf *meta);
98 static void ata_raid_ddf_print_meta(uint8_t *meta);
99 static void ata_raid_hptv2_print_meta(struct hptv2_raid_conf *meta);
100 static void ata_raid_hptv3_print_meta(struct hptv3_raid_conf *meta);
101 static void ata_raid_intel_print_meta(struct intel_raid_conf *meta);
102 static void ata_raid_ite_print_meta(struct ite_raid_conf *meta);
103 static void ata_raid_jmicron_print_meta(struct jmicron_raid_conf *meta);
104 static void ata_raid_lsiv2_print_meta(struct lsiv2_raid_conf *meta);
105 static void ata_raid_lsiv3_print_meta(struct lsiv3_raid_conf *meta);
106 static void ata_raid_nvidia_print_meta(struct nvidia_raid_conf *meta);
107 static void ata_raid_promise_print_meta(struct promise_raid_conf *meta);
108 static void ata_raid_sii_print_meta(struct sii_raid_conf *meta);
109 static void ata_raid_sis_print_meta(struct sis_raid_conf *meta);
110 static void ata_raid_via_print_meta(struct via_raid_conf *meta);
1495 u_int8_t *meta;
1571 if (!(meta = malloc(size, M_AR, M_NOWAIT | M_ZERO)))
1573 if (ata_raid_rw(rdp->disks[disk].dev, lba, meta, size,
1578 free(meta, M_AR);
1590 struct adaptec_raid_conf *meta;
1594 if (!(meta = (struct adaptec_raid_conf *)
1599 meta, sizeof(struct adaptec_raid_conf), ATA_R_READ)) {
1606 if (meta->magic_0 != ADP_MAGIC_0 || meta->magic_3 != ADP_MAGIC_3) {
1613 ata_raid_adaptec_print_meta(meta);
1630 if (raid->magic_0 && raid->magic_0 != meta->configs[0].magic_0)
1633 if (!meta->generation || be32toh(meta->generation) > raid->generation) {
1634 switch (meta->configs[0].type) {
1636 raid->magic_0 = meta->configs[0].magic_0;
1638 raid->interleave = 1 << (meta->configs[0].stripe_shift >> 1);
1639 raid->width = be16toh(meta->configs[0].total_disks);
1643 raid->magic_0 = meta->configs[0].magic_0;
1645 raid->width = be16toh(meta->configs[0].total_disks) / 2;
1650 meta->configs[0].type);
1657 raid->generation = be32toh(meta->generation);
1658 raid->total_disks = be16toh(meta->configs[0].total_disks);
1659 raid->total_sectors = be32toh(meta->configs[0].sectors);
1666 strncpy(raid->name, meta->configs[0].name,
1667 min(sizeof(raid->name), sizeof(meta->configs[0].name)));
1677 if (be32toh(meta->generation) >= raid->generation) {
1684 be32toh(meta->configs[disk_number + 1].sectors);
1695 free(meta, M_AR);
1751 uint8_t *meta, *cr;
1763 if (!(meta = malloc(DDF_HEADER_LENGTH, M_AR, M_NOWAIT | M_ZERO)))
1767 meta, DDF_HEADER_LENGTH, ATA_R_READ)) {
1777 hdr = (struct ddf_header *)meta;
1810 free(meta, M_AR);
1811 if (!(meta = malloc(hdr_len * DEV_BSIZE, M_AR, M_NOWAIT | M_ZERO)))
1814 if (ata_raid_rw(parent, pri_lba, meta, hdr_len * DEV_BSIZE, ATA_R_READ)) {
1821 hdr = (struct ddf_header *)meta;
1830 ata_raid_ddf_print_meta(meta);
1837 pdr = (struct ddf_pd_record*)(meta + ddf32toh(hdr->pdr_section)*DEV_BSIZE);
1838 vdr = (struct ddf_vd_record*)(meta + ddf32toh(hdr->vdr_section)*DEV_BSIZE);
1839 cr = (uint8_t *)(meta + ddf32toh(hdr->cr_section)*DEV_BSIZE);
1840 pdd = (struct ddf_pdd_record*)(meta + ddf32toh(hdr->pdd_section)*DEV_BSIZE);
2027 free(meta, M_AR);
2037 struct hptv2_raid_conf *meta;
2041 if (!(meta = (struct hptv2_raid_conf *)
2046 meta, sizeof(struct hptv2_raid_conf), ATA_R_READ)) {
2053 if (meta->magic != HPTV2_MAGIC_OK && meta->magic != HPTV2_MAGIC_BAD) {
2060 if (!meta->magic_0) {
2067 ata_raid_hptv2_print_meta(meta);
2084 switch (meta->type) {
2086 if ((meta->order & (HPTV2_O_RAID0|HPTV2_O_OK)) ==
2089 if (meta->order & (HPTV2_O_RAID0 | HPTV2_O_RAID1))
2091 if (raid->magic_0 && raid->magic_0 != meta->magic_0)
2093 raid->magic_0 = meta->magic_0;
2095 raid->interleave = 1 << meta->stripe_shift;
2096 disk_number = meta->disk_number;
2097 if (!(meta->order & HPTV2_O_OK))
2098 meta->magic = 0; /* mark bad */
2103 if (raid->magic_0 && raid->magic_0 != meta->magic_0)
2105 raid->magic_0 = meta->magic_0;
2107 disk_number = (meta->disk_number > 0);
2112 if (meta->order & HPTV2_O_RAID0) {
2113 if ((raid->magic_0 && raid->magic_0 != meta->magic_0) ||
2114 (raid->magic_1 && raid->magic_1 != meta->magic_1))
2116 raid->magic_0 = meta->magic_0;
2117 raid->magic_1 = meta->magic_1;
2119 raid->interleave = 1 << meta->stripe_shift;
2120 disk_number = meta->disk_number;
2123 if (raid->magic_1 && raid->magic_1 != meta->magic_1)
2125 raid->magic_1 = meta->magic_1;
2127 raid->interleave = 1 << meta->stripe_shift;
2128 disk_number = meta->disk_number + meta->array_width;
2129 if (!(meta->order & HPTV2_O_RAID1))
2130 meta->magic = 0; /* mark bad */
2135 if (raid->magic_0 && raid->magic_0 != meta->magic_0)
2137 raid->magic_0 = meta->magic_0;
2139 disk_number = meta->disk_number;
2144 meta->type);
2154 strncpy(raid->name, meta->name_1,
2155 min(sizeof(raid->name), sizeof(meta->name_1)));
2156 if (meta->magic == HPTV2_MAGIC_OK) {
2158 raid->width = meta->array_width;
2159 raid->total_sectors = meta->total_sectors;
2164 raid->rebuild_lba = meta->rebuild_lba;
2182 free(meta, M_AR);
2189 struct hptv2_raid_conf *meta;
2193 if (!(meta = (struct hptv2_raid_conf *)
2206 meta->magic = HPTV2_MAGIC_OK;
2208 meta->magic_0 = rdp->magic_0;
2210 strncpy(meta->name_1, rdp->name, sizeof(meta->name_1));
2212 strcpy(meta->name_1, "FreeBSD");
2214 meta->disk_number = disk;
2218 meta->type = HPTV2_T_RAID0;
2219 strcpy(meta->name_2, "RAID 0");
2221 meta->order = HPTV2_O_OK;
2225 meta->type = HPTV2_T_RAID0;
2226 strcpy(meta->name_2, "RAID 1");
2227 meta->disk_number = (disk < rdp->width) ? disk : disk + 5;
2228 meta->order = HPTV2_O_RAID0 | HPTV2_O_OK;
2232 meta->type = HPTV2_T_RAID01_RAID0;
2233 strcpy(meta->name_2, "RAID 0+1");
2236 meta->order = (HPTV2_O_RAID0 | HPTV2_O_RAID1);
2237 meta->magic_0 = rdp->magic_0 - 1;
2240 meta->order = HPTV2_O_RAID1;
2241 meta->disk_number -= rdp->width;
2245 meta->magic_0 = rdp->magic_0 - 1;
2246 meta->magic_1 = rdp->magic_1;
2250 meta->type = HPTV2_T_SPAN;
2251 strcpy(meta->name_2, "SPAN");
2254 free(meta, M_AR);
2258 meta->array_width = rdp->width;
2259 meta->stripe_shift = (rdp->width > 1) ? (ffs(rdp->interleave)-1) : 0;
2260 meta->total_sectors = rdp->total_sectors;
2261 meta->rebuild_lba = rdp->rebuild_lba;
2263 ata_raid_hptv2_print_meta(meta);
2266 HPTV2_LBA(rdp->disks[disk].dev), meta,
2274 free(meta, M_AR);
2284 struct hptv3_raid_conf *meta;
2288 if (!(meta = (struct hptv3_raid_conf *)
2293 meta, sizeof(struct hptv3_raid_conf), ATA_R_READ)) {
2300 if (meta->magic != HPTV3_MAGIC) {
2307 if (meta->config_entries < 1) {
2314 ata_raid_hptv3_print_meta(meta);
2331 if ((raid->format & AR_F_HPTV3_RAID) && raid->magic_0 != meta->magic_0)
2334 switch (meta->configs[0].type) {
2337 raid->width = meta->configs[0].total_disks;
2338 disk_number = meta->configs[0].disk_number;
2343 raid->width = meta->configs[0].total_disks / 2;
2344 disk_number = meta->configs[0].disk_number;
2349 raid->width = meta->configs[0].total_disks;
2350 disk_number = meta->configs[0].disk_number;
2355 raid->width = meta->configs[0].total_disks;
2356 disk_number = meta->configs[0].disk_number;
2361 meta->configs[0].type);
2366 if (meta->config_entries == 2) {
2367 switch (meta->configs[1].type) {
2371 disk_number = meta->configs[1].disk_number +
2372 (meta->configs[0].disk_number << 1);
2377 meta->configs[1].type);
2384 raid->magic_0 = meta->magic_0;
2386 raid->generation = meta->timestamp;
2387 raid->interleave = 1 << meta->configs[0].stripe_shift;
2388 raid->total_disks = meta->configs[0].total_disks +
2389 meta->configs[1].total_disks;
2390 raid->total_sectors = meta->configs[0].total_sectors +
2391 ((u_int64_t)meta->configs_high[0].total_sectors << 32);
2396 raid->rebuild_lba = meta->configs[0].rebuild_lba +
2397 ((u_int64_t)meta->configs_high[0].rebuild_lba << 32);
2399 strncpy(raid->name, meta->name,
2400 min(sizeof(raid->name), sizeof(meta->name)));
2413 free(meta, M_AR);
2423 struct intel_raid_conf *meta;
2430 if (!(meta = (struct intel_raid_conf *)
2434 if (ata_raid_rw(parent, INTEL_LBA(parent), meta, 1024, ATA_R_READ)) {
2439 tmp = (char *)meta;
2445 if (strncmp(meta->intel_id, INTEL_MAGIC, strlen(INTEL_MAGIC))) {
2451 for (checksum = 0, ptr = (u_int32_t *)meta, count = 0;
2452 count < (meta->config_size / sizeof(u_int32_t)); count++) {
2455 checksum -= meta->checksum;
2456 if (checksum != meta->checksum) {
2463 ata_raid_intel_print_meta(meta);
2465 map = (struct intel_raid_mapping *)&meta->disk[meta->total_disks];
2483 (raid->magic_0 != meta->config_id))
2490 if (!meta->generation || meta->generation > raid->generation) {
2530 raid->magic_0 = meta->config_id;
2532 raid->generation = meta->generation;
2551 bcopy(meta->disk[disk_idx].serial,
2555 meta->disk[disk_idx].sectors;
2557 if (meta->disk[disk_idx].flags & INTEL_F_ONLINE)
2559 if (meta->disk[disk_idx].flags & INTEL_F_ASSIGNED)
2561 if (meta->disk[disk_idx].flags & INTEL_F_SPARE) {
2565 if (meta->disk[disk_idx].flags & INTEL_F_DOWN)
2569 if (meta->generation >= raid->generation) {
2594 if (volume < meta->total_volumes) {
2612 free(meta, M_AR);
2619 struct intel_raid_conf *meta;
2626 if (!(meta = (struct intel_raid_conf *)
2638 bcopy(INTEL_MAGIC, meta->intel_id, sizeof(meta->intel_id));
2639 bcopy(INTEL_VERSION_1100, meta->version, sizeof(meta->version));
2640 meta->config_id = rdp->magic_0;
2641 meta->generation = rdp->generation;
2642 meta->total_disks = rdp->total_disks;
2643 meta->total_volumes = 1; /* XXX SOS */
2658 bcopy(atadev->param.serial + len, meta->disk[disk].serial,
2660 meta->disk[disk].sectors = rdp->disks[disk].sectors;
2661 meta->disk[disk].id = (ch->unit << 16) | atadev->unit;
2664 meta->disk[disk].sectors = rdp->total_sectors / rdp->width;
2665 meta->disk[disk].flags = 0;
2667 meta->disk[disk].flags |= INTEL_F_SPARE;
2670 meta->disk[disk].flags |= INTEL_F_ONLINE;
2672 meta->disk[disk].flags |= INTEL_F_DOWN;
2674 meta->disk[disk].flags |= INTEL_F_ASSIGNED;
2677 map = (struct intel_raid_mapping *)&meta->disk[meta->total_disks];
2701 free(meta, M_AR);
2711 meta->config_size = (char *)&map->disk_idx[disk] - (char *)meta;
2712 for (checksum = 0, ptr = (u_int32_t *)meta, count = 0;
2713 count < (meta->config_size / sizeof(u_int32_t)); count++) {
2716 meta->checksum = checksum;
2719 ata_raid_intel_print_meta(meta);
2721 tmp = (char *)meta;
2730 meta, 1024, ATA_R_WRITE | ATA_R_DIRECT)) {
2736 free(meta, M_AR);
2747 struct ite_raid_conf *meta;
2752 if (!(meta = (struct ite_raid_conf *)
2757 meta, sizeof(struct ite_raid_conf), ATA_R_READ)) {
2764 for (ptr = (u_int16_t *)meta->ite_id, count = 0;
2765 count < sizeof(meta->ite_id)/sizeof(uint16_t); count++)
2768 if (strncmp(meta->ite_id, ITE_MAGIC, strlen(ITE_MAGIC))) {
2775 ata_raid_ite_print_meta(meta);
2782 if (raid->magic_0 != *((u_int64_t *)meta->timestamp_0))
2787 if (*((u_int64_t *)meta->timestamp_1) == 0)
2799 switch (meta->type) {
2802 raid->width = meta->array_width;
2803 raid->total_disks = meta->array_width;
2804 disk_number = meta->disk_number;
2811 disk_number = meta->disk_number;
2816 raid->width = meta->array_width;
2818 disk_number = ((meta->disk_number & 0x02) >> 1) |
2819 ((meta->disk_number & 0x01) << 1);
2825 raid->total_disks = meta->array_width;
2826 disk_number = meta->disk_number;
2830 device_printf(parent, "ITE unknown RAID type 0x%02x\n", meta->type);
2836 raid->magic_0 = *((u_int64_t *)meta->timestamp_0);
2839 raid->interleave = meta->stripe_sectors;
2840 raid->total_sectors = meta->total_sectors;
2858 free(meta, M_AR);
2868 struct jmicron_raid_conf *meta;
2874 if (!(meta = (struct jmicron_raid_conf *)
2879 meta, sizeof(struct jmicron_raid_conf), ATA_R_READ)) {
2886 if (strncmp(meta->signature, JMICRON_MAGIC, 2)) {
2893 for (checksum = 0, ptr = (u_int16_t *)meta, count = 0; count < 64; count++)
2902 ata_raid_jmicron_print_meta(meta);
2904 /* now convert JMicron meta into our generic form */
2921 if (meta->disks[disk]) {
2923 if (bcmp(&meta->disks[disk],
2930 bcopy(&meta->disks[disk],
2937 switch (meta->type) {
2965 "JMicron unknown RAID type 0x%02x\n", meta->type);
2970 disk_size = (meta->disk_sectors_high << 16) + meta->disk_sectors_low;
2972 strncpy(raid->name, meta->name, sizeof(meta->name));
2974 raid->interleave = 2 << meta->stripe_shift;
2980 raid->offset_sectors = meta->offset * 16;
2985 if (meta->disks[disk] == meta->disk_id) {
2999 free(meta, M_AR);
3006 struct jmicron_raid_conf *meta;
3010 if (!(meta = (struct jmicron_raid_conf *)
3019 meta->type = JM_T_JBOD;
3023 meta->type = JM_T_RAID0;
3027 meta->type = JM_T_RAID1;
3031 meta->type = JM_T_RAID5;
3035 meta->type = JM_T_RAID01;
3039 free(meta, M_AR);
3042 bcopy(JMICRON_MAGIC, meta->signature, sizeof(JMICRON_MAGIC));
3043 meta->version = JMICRON_VERSION;
3044 meta->offset = rdp->offset_sectors / 16;
3046 meta->disk_sectors_low = disk_sectors & 0xffff;
3047 meta->disk_sectors_high = disk_sectors >> 16;
3048 strncpy(meta->name, rdp->name, sizeof(meta->name));
3049 meta->stripe_shift = ffs(rdp->interleave) - 2;
3053 bcopy(rdp->disks[disk].serial,&meta->disks[disk],sizeof(u_int32_t));
3055 meta->disks[disk] = (u_int32_t)(uintptr_t)rdp->disks[disk].dev;
3063 meta->disk_id = meta->disks[disk];
3064 meta->checksum = 0;
3065 for (ptr = (u_int16_t *)meta, count = 0; count < 64; count++)
3067 meta->checksum -= checksum;
3070 ata_raid_jmicron_print_meta(meta);
3074 meta, sizeof(struct jmicron_raid_conf),
3083 free(meta, M_AR);
3093 struct lsiv2_raid_conf *meta;
3097 if (!(meta = (struct lsiv2_raid_conf *)
3102 meta, sizeof(struct lsiv2_raid_conf), ATA_R_READ)) {
3109 if (strncmp(meta->lsi_id, LSIV2_MAGIC, strlen(LSIV2_MAGIC))) {
3116 ata_raid_lsiv2_print_meta(meta);
3118 /* now convert LSI (v2) config meta into our generic form */
3122 if (!raidp[array + meta->raid_number]) {
3123 raidp[array + meta->raid_number] =
3126 if (!raidp[array + meta->raid_number]) {
3131 raid = raidp[array + meta->raid_number];
3136 ((raid->magic_0 != meta->timestamp) ||
3137 (raid->magic_1 != meta->raid_number)))
3140 array += meta->raid_number;
3142 raid_entry = meta->raid_number;
3143 conf_entry = (meta->configs[raid_entry].raid.config_offset >> 4) +
3144 meta->disk_number - 1;
3146 switch (meta->configs[raid_entry].raid.type) {
3148 raid->magic_0 = meta->timestamp;
3149 raid->magic_1 = meta->raid_number;
3151 raid->interleave = meta->configs[raid_entry].raid.stripe_sectors;
3152 raid->width = meta->configs[raid_entry].raid.array_width;
3156 raid->magic_0 = meta->timestamp;
3157 raid->magic_1 = meta->raid_number;
3159 raid->width = meta->configs[raid_entry].raid.array_width;
3163 raid->magic_0 = meta->timestamp;
3164 raid->magic_1 = meta->raid_number;
3166 raid->interleave = meta->configs[raid_entry].raid.stripe_sectors;
3167 raid->width = meta->configs[raid_entry].raid.array_width;
3172 meta->configs[raid_entry].raid.type);
3180 raid->total_disks = meta->configs[raid_entry].raid.disk_count;
3181 raid->total_sectors = meta->configs[raid_entry].raid.total_sectors;
3189 if (meta->configs[conf_entry].disk.device != LSIV2_D_NONE) {
3190 raid->disks[meta->disk_number].dev = parent;
3191 raid->disks[meta->disk_number].sectors =
3192 meta->configs[conf_entry].disk.disk_sectors;
3193 raid->disks[meta->disk_number].flags =
3196 ars->disk_number[raid->volume] = meta->disk_number;
3200 raid->disks[meta->disk_number].flags &= ~AR_DF_ONLINE;
3206 free(meta, M_AR);
3216 struct lsiv3_raid_conf *meta;
3221 if (!(meta = (struct lsiv3_raid_conf *)
3226 meta, sizeof(struct lsiv3_raid_conf), ATA_R_READ)) {
3233 if (strncmp(meta->lsi_id, LSIV3_MAGIC, strlen(LSIV3_MAGIC))) {
3240 for (checksum = 0, ptr = meta->lsi_id, count = 0; count < 512; count++)
3249 ata_raid_lsiv3_print_meta(meta);
3251 /* now convert LSI (v3) config meta into our generic form */
3269 (raid->magic_0 != meta->timestamp)) {
3274 switch (meta->raid[entry].total_disks) {
3279 if (meta->raid[entry].device == meta->device) {
3288 disk_number = (meta->device & (LSIV3_D_DEVICE|LSIV3_D_CHANNEL))?1:0;
3292 disk_number = (meta->device & LSIV3_D_DEVICE ? 1 : 0) +
3293 (meta->device & LSIV3_D_CHANNEL ? 2 : 0);
3297 switch (meta->raid[entry].type) {
3300 raid->width = meta->raid[entry].total_disks;
3305 raid->width = meta->raid[entry].array_width;
3310 meta->raid[entry].type);
3317 raid->magic_0 = meta->timestamp;
3320 raid->interleave = meta->raid[entry].stripe_pages * 8;
3321 raid->total_disks = meta->raid[entry].total_disks;
3322 raid->total_sectors = raid->width * meta->raid[entry].sectors;
3326 raid->offset_sectors = meta->raid[entry].offset;
3342 free(meta, M_AR);
3352 struct nvidia_raid_conf *meta;
3357 if (!(meta = (struct nvidia_raid_conf *)
3362 meta, sizeof(struct nvidia_raid_conf), ATA_R_READ)) {
3369 if (strncmp(meta->nvidia_id, NV_MAGIC, strlen(NV_MAGIC))) {
3376 for (checksum = 0, ptr = (u_int32_t*)meta, count = 0;
3377 count < meta->config_size; count++)
3386 ata_raid_nvidia_print_meta(meta);
3388 /* now convert nVidia meta into our generic form */
3404 ((raid->magic_0 != meta->magic_1) ||
3405 (raid->magic_1 != meta->magic_2))) {
3409 switch (meta->type) {
3432 meta->type);
3437 raid->magic_0 = meta->magic_1;
3438 raid->magic_1 = meta->magic_2;
3441 raid->interleave = meta->stripe_sectors;
3442 raid->width = meta->array_width;
3443 raid->total_disks = meta->total_disks;
3444 raid->total_sectors = meta->total_sectors;
3449 raid->rebuild_lba = meta->rebuild_lba;
3452 if (meta->status & NV_S_DEGRADED)
3455 raid->disks[meta->disk_number].dev = parent;
3456 raid->disks[meta->disk_number].sectors =
3458 raid->disks[meta->disk_number].flags =
3461 ars->disk_number[raid->volume] = meta->disk_number;
3467 free(meta, M_AR);
3477 struct promise_raid_conf *meta;
3482 if (!(meta = (struct promise_raid_conf *)
3487 meta, sizeof(struct promise_raid_conf), ATA_R_READ)) {
3496 if (strncmp(meta->promise_id, ATA_MAGIC, strlen(ATA_MAGIC))) {
3503 if (strncmp(meta->promise_id, PR_MAGIC, strlen(PR_MAGIC))) {
3511 for (checksum = 0, ptr = (u_int32_t *)meta, count = 0; count < 511; count++)
3521 if (meta->raid.integrity != PR_I_VALID) {
3529 ata_raid_promise_print_meta(meta);
3548 !(meta->raid.magic_1 == (raid->magic_1)))
3552 if (!meta->raid.generation || meta->raid.generation > raid->generation){
3553 switch (meta->raid.type) {
3568 if (meta->raid.array_width > 1)
3578 native ? "FreeBSD" : "Promise", meta->raid.type);
3583 raid->magic_1 = meta->raid.magic_1;
3585 raid->generation = meta->raid.generation;
3586 raid->interleave = 1 << meta->raid.stripe_shift;
3587 raid->width = meta->raid.array_width;
3588 raid->total_disks = meta->raid.total_disks;
3589 raid->heads = meta->raid.heads + 1;
3590 raid->sectors = meta->raid.sectors;
3591 raid->cylinders = meta->raid.cylinders + 1;
3592 raid->total_sectors = meta->raid.total_sectors;
3594 raid->rebuild_lba = meta->raid.rebuild_lba;
3596 if ((meta->raid.status &
3600 if (meta->raid.status & PR_S_DEGRADED)
3607 for (disk = 0; disk < meta->raid.total_disks; disk++) {
3611 meta->raid.disk[disk].magic_0;
3612 disksum += meta->raid.disk[disk].flags;
3613 if (meta->raid.disk[disk].flags & PR_F_ONLINE)
3615 if (meta->raid.disk[disk].flags & PR_F_ASSIGNED)
3617 if (meta->raid.disk[disk].flags & PR_F_SPARE) {
3621 if (meta->raid.disk[disk].flags & (PR_F_REDIR | PR_F_DOWN))
3632 if (meta->raid.generation >= raid->generation) {
3633 int disk_number = meta->raid.disk_number;
3635 if (raid->disks[disk_number].flags && (meta->magic_0 ==
3639 raid->disks[disk_number].sectors = meta->raid.disk_sectors;
3653 free(meta, M_AR);
3660 struct promise_raid_conf *meta;
3665 if (!(meta = (struct promise_raid_conf *)
3676 *(((u_int8_t *)meta) + count) = 255 - (count % 256);
3677 meta->dummy_0 = 0x00020000;
3678 meta->raid.disk_number = disk;
3685 meta->raid.channel = ch->unit;
3686 meta->raid.device = atadev->unit;
3687 meta->raid.disk_sectors = rdp->disks[disk].sectors;
3688 meta->raid.disk_offset = rdp->offset_sectors;
3691 meta->raid.channel = 0;
3692 meta->raid.device = 0;
3693 meta->raid.disk_sectors = 0;
3694 meta->raid.disk_offset = 0;
3696 meta->magic_0 = PR_MAGIC0(meta->raid) | timestamp.tv_sec;
3697 meta->magic_1 = timestamp.tv_sec >> 16;
3698 meta->magic_2 = timestamp.tv_sec;
3699 meta->raid.integrity = PR_I_VALID;
3700 meta->raid.magic_0 = meta->magic_0;
3701 meta->raid.rebuild_lba = rdp->rebuild_lba;
3702 meta->raid.generation = rdp->generation;
3705 meta->raid.flags = (PR_F_VALID | PR_F_ASSIGNED | PR_F_ONLINE);
3706 meta->raid.status =
3709 meta->raid.status |= PR_S_DEGRADED;
3711 meta->raid.status |= PR_S_FUNCTIONAL;
3714 meta->raid.flags = PR_F_DOWN;
3715 meta->raid.status = 0;
3720 meta->raid.type = PR_T_RAID0;
3723 meta->raid.type = PR_T_RAID1;
3726 meta->raid.type = PR_T_RAID1;
3729 meta->raid.type = PR_T_RAID5;
3732 meta->raid.type = PR_T_SPAN;
3735 meta->raid.type = PR_T_JBOD;
3738 free(meta, M_AR);
3742 meta->raid.total_disks = rdp->total_disks;
3743 meta->raid.stripe_shift = ffs(rdp->interleave) - 1;
3744 meta->raid.array_width = rdp->width;
3745 meta->raid.array_number = rdp->lun;
3746 meta->raid.total_sectors = rdp->total_sectors;
3747 meta->raid.cylinders = rdp->cylinders - 1;
3748 meta->raid.heads = rdp->heads - 1;
3749 meta->raid.sectors = rdp->sectors;
3750 meta->raid.magic_1 = (u_int64_t)meta->magic_2<<16 | meta->magic_1;
3752 bzero(&meta->raid.disk, 8 * 12);
3754 meta->raid.disk[drive].flags = 0;
3756 meta->raid.disk[drive].flags |= PR_F_VALID;
3758 meta->raid.disk[drive].flags |= PR_F_ASSIGNED;
3760 meta->raid.disk[drive].flags |= PR_F_ONLINE;
3763 meta->raid.disk[drive].flags = (PR_F_REDIR | PR_F_DOWN);
3765 meta->raid.disk[drive].flags |= PR_F_SPARE;
3766 meta->raid.disk[drive].dummy_0 = 0x0;
3773 meta->raid.disk[drive].channel = ch->unit;
3774 meta->raid.disk[drive].device = atadev->unit;
3776 meta->raid.disk[drive].magic_0 =
3777 PR_MAGIC0(meta->raid.disk[drive]) | timestamp.tv_sec;
3784 bcopy(ATA_MAGIC, meta->promise_id, sizeof(ATA_MAGIC));
3786 bcopy(PR_MAGIC, meta->promise_id, sizeof(PR_MAGIC));
3789 bzero(meta->promise_id, sizeof(meta->promise_id));
3790 meta->checksum = 0;
3791 for (ckptr = (int32_t *)meta, count = 0; count < 511; count++)
3792 meta->checksum += *ckptr++;
3794 ata_raid_promise_print_meta(meta);
3797 meta, sizeof(struct promise_raid_conf),
3804 free(meta, M_AR);
3814 struct sii_raid_conf *meta;
3819 if (!(meta = (struct sii_raid_conf *)
3824 meta, sizeof(struct sii_raid_conf), ATA_R_READ)) {
3831 for (checksum = 0, ptr = (u_int16_t *)meta, count = 0; count < 160; count++)
3839 for (checksum = 0, ptr = (u_int16_t *)meta, count = 0; count < 256; count++)
3841 if (checksum != meta->checksum_1) {
3848 if (meta->version_major != 0x0002 ||
3849 (meta->version_minor != 0x0000 && meta->version_minor != 0x0001)) {
3856 ata_raid_sii_print_meta(meta);
3858 /* now convert Silicon Image meta into our generic form */
3874 (raid->magic_0 != *((u_int64_t *)meta->timestamp))) {
3879 if (!meta->generation || meta->generation > raid->generation) {
3880 switch (meta->type) {
3901 meta->type);
3906 raid->magic_0 = *((u_int64_t *)meta->timestamp);
3908 raid->generation = meta->generation;
3909 raid->interleave = meta->stripe_sectors;
3910 raid->width = (meta->raid0_disks != 0xff) ? meta->raid0_disks : 1;
3912 ((meta->raid0_disks != 0xff) ? meta->raid0_disks : 0) +
3913 ((meta->raid1_disks != 0xff) ? meta->raid1_disks : 0);
3914 raid->total_sectors = meta->total_sectors;
3919 raid->rebuild_lba = meta->rebuild_lba;
3921 strncpy(raid->name, meta->name,
3922 min(sizeof(raid->name), sizeof(meta->name)));
3932 if (meta->generation >= raid->generation) {
3934 if (meta->status & SII_S_READY) {
3936 meta->raid1_ident + (meta->raid0_ident << 1) :
3937 meta->disk_number;
3953 free(meta, M_AR);
3963 struct sis_raid_conf *meta;
3967 if (!(meta = (struct sis_raid_conf *)
3972 meta, sizeof(struct sis_raid_conf), ATA_R_READ)) {
3979 if (meta->magic != SIS_MAGIC) {
3987 ata_raid_sis_print_meta(meta);
3989 /* now convert SiS meta into our generic form */
4006 ((raid->magic_0 != meta->controller_pci_id) ||
4007 (raid->magic_1 != meta->timestamp))) {
4011 switch (meta->type_total_disks & SIS_T_MASK) {
4014 raid->width = (meta->type_total_disks & SIS_D_MASK);
4020 raid->width = (meta->type_total_disks & SIS_D_MASK);
4035 "unknown RAID type 0x%08x\n", meta->magic);
4040 raid->magic_0 = meta->controller_pci_id;
4041 raid->magic_1 = meta->timestamp;
4044 raid->interleave = meta->stripe_sectors;
4045 raid->total_disks = (meta->type_total_disks & SIS_D_MASK);
4053 if (((meta->disks & SIS_D_MASTER) >> 4) == meta->disk_number)
4073 free(meta, M_AR);
4080 struct sis_raid_conf *meta;
4084 if (!(meta = (struct sis_raid_conf *)
4093 meta->magic = SIS_MAGIC;
4102 meta->disks |= disk_number << ((1 - disk) << 2);
4107 meta->type_total_disks = SIS_T_JBOD;
4111 meta->type_total_disks = SIS_T_RAID0;
4115 meta->type_total_disks = SIS_T_RAID1;
4119 free(meta, M_AR);
4122 meta->type_total_disks |= (rdp->total_disks & SIS_D_MASK);
4123 meta->stripe_sectors = rdp->interleave;
4124 meta->timestamp = timestamp.tv_sec;
4132 meta->controller_pci_id =
4135 bcopy(atadev->param.model, meta->model, sizeof(meta->model));
4138 meta->disk_number = 1 + atadev->unit + (ch->unit << 1);
4141 ata_raid_sis_print_meta(meta);
4145 meta, sizeof(struct sis_raid_conf),
4152 free(meta, M_AR);
4162 struct via_raid_conf *meta;
4167 if (!(meta = (struct via_raid_conf *)
4172 meta, sizeof(struct via_raid_conf), ATA_R_READ)) {
4179 if (meta->magic != VIA_MAGIC) {
4186 for (checksum = 0, ptr = (u_int8_t *)meta, count = 0; count < 50; count++)
4188 if (checksum != meta->checksum) {
4195 ata_raid_via_print_meta(meta);
4197 /* now convert VIA meta into our generic form */
4212 if (raid->format == AR_F_VIA_RAID && (raid->magic_0 != meta->disks[0]))
4215 switch (meta->type & VIA_T_MASK) {
4218 raid->width = meta->stripe_layout & VIA_L_DISKS;
4220 (raid->total_sectors > (raid->width * meta->disk_sectors)))
4221 raid->total_sectors = raid->width * meta->disk_sectors;
4227 raid->total_sectors = meta->disk_sectors;
4232 raid->width = meta->stripe_layout & VIA_L_DISKS;
4234 (raid->total_sectors > (raid->width * meta->disk_sectors)))
4235 raid->total_sectors = raid->width * meta->disk_sectors;
4240 raid->width = meta->stripe_layout & VIA_L_DISKS;
4242 (raid->total_sectors > ((raid->width - 1)*meta->disk_sectors)))
4243 raid->total_sectors = (raid->width - 1) * meta->disk_sectors;
4249 raid->total_sectors += meta->disk_sectors;
4253 device_printf(parent,"VIA unknown RAID type 0x%02x\n", meta->type);
4258 raid->magic_0 = meta->disks[0];
4262 0x08 << ((meta->stripe_layout & VIA_L_MASK) >> VIA_L_SHIFT);
4264 if (meta->disks[disk])
4275 if (meta->disks[disk] == meta->disk_id) {
4277 bcopy(&meta->disk_id, raid->disks[disk].serial,
4279 raid->disks[disk].sectors = meta->disk_sectors;
4292 free(meta, M_AR);
4299 struct via_raid_conf *meta;
4302 if (!(meta = (struct via_raid_conf *)
4310 meta->magic = VIA_MAGIC;
4311 meta->dummy_0 = 0x02;
4314 meta->type = VIA_T_SPAN;
4315 meta->stripe_layout = (rdp->total_disks & VIA_L_DISKS);
4319 meta->type = VIA_T_RAID0;
4320 meta->stripe_layout = ((rdp->interleave >> 1) & VIA_L_MASK);
4321 meta->stripe_layout |= (rdp->total_disks & VIA_L_DISKS);
4325 meta->type = VIA_T_RAID1;
4326 meta->stripe_layout = (rdp->total_disks & VIA_L_DISKS);
4330 meta->type = VIA_T_RAID5;
4331 meta->stripe_layout = ((rdp->interleave >> 1) & VIA_L_MASK);
4332 meta->stripe_layout |= (rdp->total_disks & VIA_L_DISKS);
4336 meta->type = VIA_T_RAID01;
4337 meta->stripe_layout = ((rdp->interleave >> 1) & VIA_L_MASK);
4338 meta->stripe_layout |= (rdp->width & VIA_L_DISKS);
4342 free(meta, M_AR);
4345 meta->type |= VIA_T_BOOTABLE; /* XXX SOS */
4346 meta->disk_sectors =
4349 meta->disks[disk] = (u_int32_t)(uintptr_t)rdp->disks[disk].dev;
4356 meta->disk_index = disk * sizeof(u_int32_t);
4358 meta->disk_index = ((meta->disk_index & 0x08) << 2) |
4359 (meta->disk_index & ~0x08);
4360 meta->disk_id = meta->disks[disk];
4361 meta->checksum = 0;
4362 for (ptr = (u_int8_t *)meta, count = 0; count < 50; count++)
4363 meta->checksum += *ptr++;
4366 ata_raid_via_print_meta(meta);
4370 meta, sizeof(struct via_raid_conf),
4377 free(meta, M_AR);
4724 ata_raid_adaptec_print_meta(struct adaptec_raid_conf *meta)
4729 printf("magic_0 <0x%08x>\n", be32toh(meta->magic_0));
4730 printf("generation 0x%08x\n", be32toh(meta->generation));
4731 printf("dummy_0 0x%04x\n", be16toh(meta->dummy_0));
4732 printf("total_configs %u\n", be16toh(meta->total_configs));
4733 printf("dummy_1 0x%04x\n", be16toh(meta->dummy_1));
4734 printf("checksum 0x%04x\n", be16toh(meta->checksum));
4735 printf("dummy_2 0x%08x\n", be32toh(meta->dummy_2));
4736 printf("dummy_3 0x%08x\n", be32toh(meta->dummy_3));
4737 printf("flags 0x%08x\n", be32toh(meta->flags));
4738 printf("timestamp 0x%08x\n", be32toh(meta->timestamp));
4740 be32toh(meta->dummy_4[0]), be32toh(meta->dummy_4[1]),
4741 be32toh(meta->dummy_4[2]), be32toh(meta->dummy_4[3]));
4743 be32toh(meta->dummy_5[0]), be32toh(meta->dummy_5[1]),
4744 be32toh(meta->dummy_5[2]), be32toh(meta->dummy_5[3]));
4746 for (i = 0; i < be16toh(meta->total_configs); i++) {
4748 be16toh(meta->configs[i].disk_number));
4750 be16toh(meta->configs[i].generation));
4752 be32toh(meta->configs[i].magic_0));
4753 printf(" %d dummy_0 0x%02x\n", i, meta->configs[i].dummy_0);
4755 ata_raid_adaptec_type(meta->configs[i].type));
4756 printf(" %d dummy_1 0x%02x\n", i, meta->configs[i].dummy_1);
4758 be32toh(meta->configs[i].flags));
4759 printf(" %d dummy_2 0x%02x\n", i, meta->configs[i].dummy_2);
4760 printf(" %d dummy_3 0x%02x\n", i, meta->configs[i].dummy_3);
4761 printf(" %d dummy_4 0x%02x\n", i, meta->configs[i].dummy_4);
4762 printf(" %d dummy_5 0x%02x\n", i, meta->configs[i].dummy_5);
4764 be32toh(meta->configs[i].disk_number));
4766 be32toh(meta->configs[i].dummy_6));
4768 be32toh(meta->configs[i].sectors));
4770 be16toh(meta->configs[i].stripe_shift));
4772 be32toh(meta->configs[i].dummy_7));
4774 be32toh(meta->configs[i].dummy_8[0]),
4775 be32toh(meta->configs[i].dummy_8[1]),
4776 be32toh(meta->configs[i].dummy_8[2]),
4777 be32toh(meta->configs[i].dummy_8[3]));
4778 printf(" %d name <%s>\n", i, meta->configs[i].name);
4780 printf("magic_1 <0x%08x>\n", be32toh(meta->magic_1));
4781 printf("magic_2 <0x%08x>\n", be32toh(meta->magic_2));
4782 printf("magic_3 <0x%08x>\n", be32toh(meta->magic_3));
4783 printf("magic_4 <0x%08x>\n", be32toh(meta->magic_4));
4788 ata_raid_ddf_print_meta(uint8_t *meta)
4804 hdr = (struct ddf_header *)meta;
4815 hdr = (struct ddf_header*)meta;
4816 cd = (struct ddf_cd_record*)(meta + ddf32toh(hdr->cd_section) *DEV_BSIZE);
4817 pdr = (struct ddf_pd_record*)(meta + ddf32toh(hdr->pdr_section)*DEV_BSIZE);
4818 vdr = (struct ddf_vd_record*)(meta + ddf32toh(hdr->vdr_section)*DEV_BSIZE);
4819 cr = (uint8_t *)(meta + ddf32toh(hdr->cr_section) * DEV_BSIZE);
4820 pdd = (struct ddf_pdd_record*)(meta + ddf32toh(hdr->pdd_section)*DEV_BSIZE);
4872 ata_raid_hptv2_print_meta(struct hptv2_raid_conf *meta)
4877 printf("magic 0x%08x\n", meta->magic);
4878 printf("magic_0 0x%08x\n", meta->magic_0);
4879 printf("magic_1 0x%08x\n", meta->magic_1);
4880 printf("order 0x%08x\n", meta->order);
4881 printf("array_width %u\n", meta->array_width);
4882 printf("stripe_shift %u\n", meta->stripe_shift);
4883 printf("type %s\n", ata_raid_hptv2_type(meta->type));
4884 printf("disk_number %u\n", meta->disk_number);
4885 printf("total_sectors %u\n", meta->total_sectors);
4886 printf("disk_mode 0x%08x\n", meta->disk_mode);
4887 printf("boot_mode 0x%08x\n", meta->boot_mode);
4888 printf("boot_disk 0x%02x\n", meta->boot_disk);
4889 printf("boot_protect 0x%02x\n", meta->boot_protect);
4890 printf("log_entries 0x%02x\n", meta->error_log_entries);
4891 printf("log_index 0x%02x\n", meta->error_log_index);
4892 if (meta->error_log_entries) {
4894 for (i = meta->error_log_index;
4895 i < meta->error_log_index + meta->error_log_entries; i++)
4897 meta->errorlog[i%32].timestamp,
4898 meta->errorlog[i%32].reason,
4899 meta->errorlog[i%32].disk, meta->errorlog[i%32].status,
4900 meta->errorlog[i%32].sectors, meta->errorlog[i%32].lba);
4902 printf("rebuild_lba 0x%08x\n", meta->rebuild_lba);
4903 printf("dummy_1 0x%02x\n", meta->dummy_1);
4904 printf("name_1 <%.15s>\n", meta->name_1);
4905 printf("dummy_2 0x%02x\n", meta->dummy_2);
4906 printf("name_2 <%.15s>\n", meta->name_2);
4929 ata_raid_hptv3_print_meta(struct hptv3_raid_conf *meta)
4934 printf("magic 0x%08x\n", meta->magic);
4935 printf("magic_0 0x%08x\n", meta->magic_0);
4936 printf("checksum_0 0x%02x\n", meta->checksum_0);
4937 printf("mode 0x%02x\n", meta->mode);
4938 printf("user_mode 0x%02x\n", meta->user_mode);
4939 printf("config_entries 0x%02x\n", meta->config_entries);
4940 for (i = 0; i < meta->config_entries; i++) {
4943 meta->configs[0].total_sectors +
4944 ((u_int64_t)meta->configs_high[0].total_sectors << 32));
4946 ata_raid_hptv3_type(meta->configs[i].type));
4947 printf(" total_disks %u\n", meta->configs[i].total_disks);
4948 printf(" disk_number %u\n", meta->configs[i].disk_number);
4949 printf(" stripe_shift %u\n", meta->configs[i].stripe_shift);
4950 printf(" status %b\n", meta->configs[i].status,
4952 printf(" critical_disks %u\n", meta->configs[i].critical_disks);
4954 meta->configs_high[0].rebuild_lba +
4955 ((u_int64_t)meta->configs_high[0].rebuild_lba << 32));
4957 printf("name <%.16s>\n", meta->name);
4958 printf("timestamp 0x%08x\n", meta->timestamp);
4959 printf("description <%.16s>\n", meta->description);
4960 printf("creator <%.16s>\n", meta->creator);
4961 printf("checksum_1 0x%02x\n", meta->checksum_1);
4962 printf("dummy_0 0x%02x\n", meta->dummy_0);
4963 printf("dummy_1 0x%02x\n", meta->dummy_1);
4964 printf("flags %b\n", meta->flags,
4984 ata_raid_intel_print_meta(struct intel_raid_conf *meta)
4990 printf("intel_id <%.24s>\n", meta->intel_id);
4991 printf("version <%.6s>\n", meta->version);
4992 printf("checksum 0x%08x\n", meta->checksum);
4993 printf("config_size 0x%08x\n", meta->config_size);
4994 printf("config_id 0x%08x\n", meta->config_id);
4995 printf("generation 0x%08x\n", meta->generation);
4996 printf("total_disks %u\n", meta->total_disks);
4997 printf("total_volumes %u\n", meta->total_volumes);
4999 for (i = 0; i < meta->total_disks; i++ ) {
5001 meta->disk[i].serial, meta->disk[i].sectors,
5002 meta->disk[i].id, meta->disk[i].flags);
5004 map = (struct intel_raid_mapping *)&meta->disk[meta->total_disks];
5005 for (j = 0; j < meta->total_volumes; j++) {
5044 ata_raid_ite_print_meta(struct ite_raid_conf *meta)
5047 printf("ite_id <%.40s>\n", meta->ite_id);
5049 *((u_int16_t *)meta->timestamp_0), meta->timestamp_0[2],
5050 meta->timestamp_0[3], meta->timestamp_0[5], meta->timestamp_0[4],
5051 meta->timestamp_0[7], meta->timestamp_0[6]);
5052 printf("total_sectors %jd\n", meta->total_sectors);
5053 printf("type %s\n", ata_raid_ite_type(meta->type));
5054 printf("stripe_1kblocks %u\n", meta->stripe_1kblocks);
5056 *((u_int16_t *)meta->timestamp_1), meta->timestamp_1[2],
5057 meta->timestamp_1[3], meta->timestamp_1[5], meta->timestamp_1[4],
5058 meta->timestamp_1[7], meta->timestamp_1[6]);
5059 printf("stripe_sectors %u\n", meta->stripe_sectors);
5060 printf("array_width %u\n", meta->array_width);
5061 printf("disk_number %u\n", meta->disk_number);
5062 printf("disk_sectors %u\n", meta->disk_sectors);
5083 ata_raid_jmicron_print_meta(struct jmicron_raid_conf *meta)
5088 printf("signature %.2s\n", meta->signature);
5089 printf("version 0x%04x\n", meta->version);
5090 printf("checksum 0x%04x\n", meta->checksum);
5091 printf("disk_id 0x%08x\n", meta->disk_id);
5092 printf("offset 0x%08x\n", meta->offset);
5093 printf("disk_sectors_low 0x%08x\n", meta->disk_sectors_low);
5094 printf("disk_sectors_high 0x%08x\n", meta->disk_sectors_high);
5095 printf("name %.16s\n", meta->name);
5096 printf("type %s\n", ata_raid_jmicron_type(meta->type));
5097 printf("stripe_shift %d\n", meta->stripe_shift);
5098 printf("flags 0x%04x\n", meta->flags);
5100 for (i=0; i < 2 && meta->spare[i]; i++)
5101 printf(" %d 0x%08x\n", i, meta->spare[i]);
5103 for (i=0; i < 8 && meta->disks[i]; i++)
5104 printf(" %d 0x%08x\n", i, meta->disks[i]);
5123 ata_raid_lsiv2_print_meta(struct lsiv2_raid_conf *meta)
5128 printf("lsi_id <%s>\n", meta->lsi_id);
5129 printf("dummy_0 0x%02x\n", meta->dummy_0);
5130 printf("flags 0x%02x\n", meta->flags);
5131 printf("version 0x%04x\n", meta->version);
5132 printf("config_entries 0x%02x\n", meta->config_entries);
5133 printf("raid_count 0x%02x\n", meta->raid_count);
5134 printf("total_disks 0x%02x\n", meta->total_disks);
5135 printf("dummy_1 0x%02x\n", meta->dummy_1);
5136 printf("dummy_2 0x%04x\n", meta->dummy_2);
5137 for (i = 0; i < meta->config_entries; i++) {
5139 ata_raid_lsiv2_type(meta->configs[i].raid.type));
5140 printf(" dummy_0 %02x\n", meta->configs[i].raid.dummy_0);
5142 meta->configs[i].raid.stripe_sectors);
5144 meta->configs[i].raid.array_width);
5145 printf(" disk_count %u\n", meta->configs[i].raid.disk_count);
5147 meta->configs[i].raid.config_offset);
5148 printf(" dummy_1 %u\n", meta->configs[i].raid.dummy_1);
5149 printf(" flags %02x\n", meta->configs[i].raid.flags);
5151 meta->configs[i].raid.total_sectors);
5153 printf("disk_number 0x%02x\n", meta->disk_number);
5154 printf("raid_number 0x%02x\n", meta->raid_number);
5155 printf("timestamp 0x%08x\n", meta->timestamp);
5173 ata_raid_lsiv3_print_meta(struct lsiv3_raid_conf *meta)
5178 printf("lsi_id <%.6s>\n", meta->lsi_id);
5179 printf("dummy_0 0x%04x\n", meta->dummy_0);
5180 printf("version 0x%04x\n", meta->version);
5181 printf("dummy_0 0x%04x\n", meta->dummy_1);
5184 if (meta->raid[i].total_disks) {
5186 meta->raid[i].stripe_pages);
5188 ata_raid_lsiv3_type(meta->raid[i].type));
5190 meta->raid[i].total_disks);
5192 meta->raid[i].array_width);
5193 printf("%02d sectors %u\n", i, meta->raid[i].sectors);
5194 printf("%02d offset %u\n", i, meta->raid[i].offset);
5196 meta->raid[i].device);
5201 if (meta->disk[i].disk_sectors) {
5203 meta->disk[i].disk_sectors);
5204 printf("%02d flags 0x%02x\n", i, meta->disk[i].flags);
5207 printf("device 0x%02x\n", meta->device);
5208 printf("timestamp 0x%08x\n", meta->timestamp);
5209 printf("checksum_1 0x%02x\n", meta->checksum_1);
5231 ata_raid_nvidia_print_meta(struct nvidia_raid_conf *meta)
5234 printf("nvidia_id <%.8s>\n", meta->nvidia_id);
5235 printf("config_size %d\n", meta->config_size);
5236 printf("checksum 0x%08x\n", meta->checksum);
5237 printf("version 0x%04x\n", meta->version);
5238 printf("disk_number %d\n", meta->disk_number);
5239 printf("dummy_0 0x%02x\n", meta->dummy_0);
5240 printf("total_sectors %d\n", meta->total_sectors);
5241 printf("sectors_size %d\n", meta->sector_size);
5242 printf("serial %.16s\n", meta->serial);
5243 printf("revision %.4s\n", meta->revision);
5244 printf("dummy_1 0x%08x\n", meta->dummy_1);
5245 printf("magic_0 0x%08x\n", meta->magic_0);
5246 printf("magic_1 0x%016jx\n", meta->magic_1);
5247 printf("magic_2 0x%016jx\n", meta->magic_2);
5248 printf("flags 0x%02x\n", meta->flags);
5249 printf("array_width %d\n", meta->array_width);
5250 printf("total_disks %d\n", meta->total_disks);
5251 printf("dummy_2 0x%02x\n", meta->dummy_2);
5252 printf("type %s\n", ata_raid_nvidia_type(meta->type));
5253 printf("dummy_3 0x%04x\n", meta->dummy_3);
5254 printf("stripe_sectors %d\n", meta->stripe_sectors);
5255 printf("stripe_bytes %d\n", meta->stripe_bytes);
5256 printf("stripe_shift %d\n", meta->stripe_shift);
5257 printf("stripe_mask 0x%08x\n", meta->stripe_mask);
5258 printf("stripe_sizesectors %d\n", meta->stripe_sizesectors);
5259 printf("stripe_sizebytes %d\n", meta->stripe_sizebytes);
5260 printf("rebuild_lba %d\n", meta->rebuild_lba);
5261 printf("dummy_4 0x%08x\n", meta->dummy_4);
5262 printf("dummy_5 0x%08x\n", meta->dummy_5);
5263 printf("status 0x%08x\n", meta->status);
5284 ata_raid_promise_print_meta(struct promise_raid_conf *meta)
5289 printf("promise_id <%s>\n", meta->promise_id);
5290 printf("dummy_0 0x%08x\n", meta->dummy_0);
5291 printf("magic_0 0x%016jx\n", meta->magic_0);
5292 printf("magic_1 0x%04x\n", meta->magic_1);
5293 printf("magic_2 0x%08x\n", meta->magic_2);
5294 printf("integrity 0x%08x %b\n", meta->raid.integrity,
5295 meta->raid.integrity, "\20\10VALID\n" );
5297 meta->raid.flags, meta->raid.flags,
5300 printf("disk_number %d\n", meta->raid.disk_number);
5301 printf("channel 0x%02x\n", meta->raid.channel);
5302 printf("device 0x%02x\n", meta->raid.device);
5303 printf("magic_0 0x%016jx\n", meta->raid.magic_0);
5304 printf("disk_offset %u\n", meta->raid.disk_offset);
5305 printf("disk_sectors %u\n", meta->raid.disk_sectors);
5306 printf("rebuild_lba 0x%08x\n", meta->raid.rebuild_lba);
5307 printf("generation 0x%04x\n", meta->raid.generation);
5309 meta->raid.status, meta->raid.status,
5311 printf("type %s\n", ata_raid_promise_type(meta->raid.type));
5312 printf("total_disks %u\n", meta->raid.total_disks);
5313 printf("stripe_shift %u\n", meta->raid.stripe_shift);
5314 printf("array_width %u\n", meta->raid.array_width);
5315 printf("array_number %u\n", meta->raid.array_number);
5316 printf("total_sectors %u\n", meta->raid.total_sectors);
5317 printf("cylinders %u\n", meta->raid.cylinders);
5318 printf("heads %u\n", meta->raid.heads);
5319 printf("sectors %u\n", meta->raid.sectors);
5320 printf("magic_1 0x%016jx\n", meta->raid.magic_1);
5324 i, meta->raid.disk[i].flags,
5326 "\3ASSIGNED\2ONLINE\1VALID\n", meta->raid.disk[i].dummy_0,
5327 meta->raid.disk[i].channel, meta->raid.disk[i].device);
5328 printf("0x%016jx\n", meta->raid.disk[i].magic_0);
5330 printf("checksum 0x%08x\n", meta->checksum);
5350 ata_raid_sii_print_meta(struct sii_raid_conf *meta)
5353 printf("total_sectors %ju\n", meta->total_sectors);
5354 printf("dummy_0 0x%04x\n", meta->dummy_0);
5355 printf("dummy_1 0x%04x\n", meta->dummy_1);
5356 printf("controller_pci_id 0x%08x\n", meta->controller_pci_id);
5357 printf("version_minor 0x%04x\n", meta->version_minor);
5358 printf("version_major 0x%04x\n", meta->version_major);
5360 meta->timestamp[5], meta->timestamp[4], meta->timestamp[3],
5361 meta->timestamp[2], meta->timestamp[1], meta->timestamp[0]);
5362 printf("stripe_sectors %u\n", meta->stripe_sectors);
5363 printf("dummy_2 0x%04x\n", meta->dummy_2);
5364 printf("disk_number %u\n", meta->disk_number);
5365 printf("type %s\n", ata_raid_sii_type(meta->type));
5366 printf("raid0_disks %u\n", meta->raid0_disks);
5367 printf("raid0_ident %u\n", meta->raid0_ident);
5368 printf("raid1_disks %u\n", meta->raid1_disks);
5369 printf("raid1_ident %u\n", meta->raid1_ident);
5370 printf("rebuild_lba %ju\n", meta->rebuild_lba);
5371 printf("generation 0x%08x\n", meta->generation);
5373 meta->status, meta->status,
5375 printf("base_raid1_position %02x\n", meta->base_raid1_position);
5376 printf("base_raid0_position %02x\n", meta->base_raid0_position);
5377 printf("position %02x\n", meta->position);
5378 printf("dummy_3 %04x\n", meta->dummy_3);
5379 printf("name <%.16s>\n", meta->name);
5380 printf("checksum_0 0x%04x\n", meta->checksum_0);
5381 printf("checksum_1 0x%04x\n", meta->checksum_1);
5400 ata_raid_sis_print_meta(struct sis_raid_conf *meta)
5403 printf("magic 0x%04x\n", meta->magic);
5404 printf("disks 0x%02x\n", meta->disks);
5406 ata_raid_sis_type(meta->type_total_disks & SIS_T_MASK));
5407 printf("total_disks %u\n", meta->type_total_disks & SIS_D_MASK);
5408 printf("dummy_0 0x%08x\n", meta->dummy_0);
5409 printf("controller_pci_id 0x%08x\n", meta->controller_pci_id);
5410 printf("stripe_sectors %u\n", meta->stripe_sectors);
5411 printf("dummy_1 0x%04x\n", meta->dummy_1);
5412 printf("timestamp 0x%08x\n", meta->timestamp);
5413 printf("model %.40s\n", meta->model);
5414 printf("disk_number %u\n", meta->disk_number);
5416 meta->dummy_2[0], meta->dummy_2[1], meta->dummy_2[2]);
5437 ata_raid_via_print_meta(struct via_raid_conf *meta)
5442 printf("magic 0x%02x\n", meta->magic);
5443 printf("dummy_0 0x%02x\n", meta->dummy_0);
5445 ata_raid_via_type(meta->type & VIA_T_MASK));
5446 printf("bootable %d\n", meta->type & VIA_T_BOOTABLE);
5447 printf("unknown %d\n", meta->type & VIA_T_UNKNOWN);
5448 printf("disk_index 0x%02x\n", meta->disk_index);
5449 printf("stripe_layout 0x%02x\n", meta->stripe_layout);
5450 printf(" stripe_disks %d\n", meta->stripe_layout & VIA_L_DISKS);
5452 0x08 << ((meta->stripe_layout & VIA_L_MASK) >> VIA_L_SHIFT));
5453 printf("disk_sectors %ju\n", meta->disk_sectors);
5454 printf("disk_id 0x%08x\n", meta->disk_id);
5457 if (meta->disks[i])
5458 printf(" %d 0x%08x\n", i, meta->disks[i]);
5460 printf("checksum 0x%02x\n", meta->checksum);