61 lines · c
1// SPDX-License-Identifier: GPL-2.02/*3 * fs/partitions/karma.c4 * Rio Karma partition info.5 *6 * Copyright (C) 2006 Bob Copeland (me@bobcopeland.com)7 * based on osf.c8 */9 10#include "check.h"11#include <linux/compiler.h>12 13#define KARMA_LABEL_MAGIC 0xAB5614 15int karma_partition(struct parsed_partitions *state)16{17 int i;18 int slot = 1;19 Sector sect;20 unsigned char *data;21 struct disklabel {22 u8 d_reserved[270];23 struct d_partition {24 __le32 p_res;25 u8 p_fstype;26 u8 p_res2[3];27 __le32 p_offset;28 __le32 p_size;29 } d_partitions[2];30 u8 d_blank[208];31 __le16 d_magic;32 } __packed *label;33 struct d_partition *p;34 35 data = read_part_sector(state, 0, §);36 if (!data)37 return -1;38 39 label = (struct disklabel *)data;40 if (le16_to_cpu(label->d_magic) != KARMA_LABEL_MAGIC) {41 put_dev_sector(sect);42 return 0;43 }44 45 p = label->d_partitions;46 for (i = 0 ; i < 2; i++, p++) {47 if (slot == state->limit)48 break;49 50 if (p->p_fstype == 0x4d && le32_to_cpu(p->p_size)) {51 put_partition(state, slot, le32_to_cpu(p->p_offset),52 le32_to_cpu(p->p_size));53 }54 slot++;55 }56 strlcat(state->pp_buf, "\n", PAGE_SIZE);57 put_dev_sector(sect);58 return 1;59}60 61