• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/fs/partitions/
1/*
2 *  fs/partitions/osf.c
3 *
4 *  Code extracted from drivers/block/genhd.c
5 *
6 *  Copyright (C) 1991-1998  Linus Torvalds
7 *  Re-organised Feb 1998 Russell King
8 */
9
10#include "check.h"
11#include "osf.h"
12
13int osf_partition(struct parsed_partitions *state)
14{
15	int i;
16	int slot = 1;
17	Sector sect;
18	unsigned char *data;
19	struct disklabel {
20		__le32 d_magic;
21		__le16 d_type,d_subtype;
22		u8 d_typename[16];
23		u8 d_packname[16];
24		__le32 d_secsize;
25		__le32 d_nsectors;
26		__le32 d_ntracks;
27		__le32 d_ncylinders;
28		__le32 d_secpercyl;
29		__le32 d_secprtunit;
30		__le16 d_sparespertrack;
31		__le16 d_sparespercyl;
32		__le32 d_acylinders;
33		__le16 d_rpm, d_interleave, d_trackskew, d_cylskew;
34		__le32 d_headswitch, d_trkseek, d_flags;
35		__le32 d_drivedata[5];
36		__le32 d_spare[5];
37		__le32 d_magic2;
38		__le16 d_checksum;
39		__le16 d_npartitions;
40		__le32 d_bbsize, d_sbsize;
41		struct d_partition {
42			__le32 p_size;
43			__le32 p_offset;
44			__le32 p_fsize;
45			u8  p_fstype;
46			u8  p_frag;
47			__le16 p_cpg;
48		} d_partitions[8];
49	} * label;
50	struct d_partition * partition;
51
52	data = read_part_sector(state, 0, &sect);
53	if (!data)
54		return -1;
55
56	label = (struct disklabel *) (data+64);
57	partition = label->d_partitions;
58	if (le32_to_cpu(label->d_magic) != DISKLABELMAGIC) {
59		put_dev_sector(sect);
60		return 0;
61	}
62	if (le32_to_cpu(label->d_magic2) != DISKLABELMAGIC) {
63		put_dev_sector(sect);
64		return 0;
65	}
66	for (i = 0 ; i < le16_to_cpu(label->d_npartitions); i++, partition++) {
67		if (slot == state->limit)
68		        break;
69		if (le32_to_cpu(partition->p_size))
70			put_partition(state, slot,
71				le32_to_cpu(partition->p_offset),
72				le32_to_cpu(partition->p_size));
73		slot++;
74	}
75	strlcat(state->pp_buf, "\n", PAGE_SIZE);
76	put_dev_sector(sect);
77	return 1;
78}
79