]>
Commit | Line | Data |
---|---|---|
faeb1b64 KZ |
1 | /* |
2 | * No copyright is claimed. This code is in the public domain; do with | |
3 | * it what you wish. | |
4 | */ | |
a08dc0ca KZ |
5 | #ifndef UTIL_LINUX_PT_SUN_H |
6 | #define UTIL_LINUX_PT_SUN_H | |
7 | ||
8 | #include <stdint.h> | |
9 | ||
9d3d9754 KZ |
10 | #define SUN_LABEL_MAGIC 0xDABE |
11 | ||
a08dc0ca KZ |
12 | /* Supported VTOC setting */ |
13 | #define SUN_VTOC_SANITY 0x600DDEEE /* magic number */ | |
14 | #define SUN_VTOC_VERSION 1 | |
a08dc0ca KZ |
15 | #define SUN_MAXPARTITIONS 8 |
16 | ||
a08dc0ca | 17 | struct sun_disklabel { |
9d3d9754 | 18 | unsigned char label_id[128]; /* Informative text string */ |
a08dc0ca KZ |
19 | |
20 | struct sun_vtoc { | |
21 | uint32_t version; /* version */ | |
9d3d9754 | 22 | char volume_id[8];/* volume name */ |
a08dc0ca KZ |
23 | uint16_t nparts; /* num of partitions */ |
24 | ||
ce337318 KZ |
25 | struct sun_info { /* partition information */ |
26 | uint16_t id; /* SUN_TAG_* */ | |
27 | uint16_t flags; /* SUN_FLAG_* */ | |
a08dc0ca KZ |
28 | } __attribute__ ((packed)) infos[8]; |
29 | ||
30 | uint16_t padding; /* padding */ | |
31 | uint32_t bootinfo[3]; /* info needed by mboot */ | |
32 | uint32_t sanity; /* magic number */ | |
33 | uint32_t reserved[10]; /* padding */ | |
34 | uint32_t timestamp[8]; /* partition timestamp */ | |
35 | } __attribute__ ((packed)) vtoc; | |
36 | ||
37 | uint32_t write_reinstruct; /* sectors to skip, writes */ | |
38 | uint32_t read_reinstruct; /* sectors to skip, reads */ | |
39 | unsigned char spare[148]; /* padding */ | |
9d3d9754 KZ |
40 | uint16_t rpm; /* disk rotational speed */ |
41 | uint16_t pcyl; /* physical cylinder count */ | |
42 | uint16_t apc; /* extra sects per cylinder */ | |
a08dc0ca KZ |
43 | uint16_t obs1; |
44 | uint16_t obs2; | |
9d3d9754 | 45 | uint16_t intrlv; /* interleave factor */ |
a08dc0ca | 46 | uint16_t ncyl; /* data cylinder count */ |
9d3d9754 KZ |
47 | uint16_t acyl; /* alt. cylinder count */ |
48 | uint16_t nhead; /* tracks per cylinder <---- */ | |
a08dc0ca KZ |
49 | uint16_t nsect; /* sectors per track <---- */ |
50 | uint16_t obs3; | |
51 | uint16_t obs4; | |
52 | ||
53 | struct sun_partition { /* partitions */ | |
54 | uint32_t start_cylinder; | |
55 | uint32_t num_sectors; | |
56 | } __attribute__ ((packed)) partitions[8]; | |
57 | ||
58 | uint16_t magic; /* magic number */ | |
59 | uint16_t csum; /* label xor'd checksum */ | |
60 | } __attribute__ ((packed)); | |
61 | ||
62 | ||
ce337318 KZ |
63 | #define SUN_TAG_UNASSIGNED 0x00 /* Unassigned partition */ |
64 | #define SUN_TAG_BOOT 0x01 /* Boot partition */ | |
65 | #define SUN_TAG_ROOT 0x02 /* Root filesystem */ | |
66 | #define SUN_TAG_SWAP 0x03 /* Swap partition */ | |
67 | #define SUN_TAG_USR 0x04 /* /usr filesystem */ | |
68 | #define SUN_TAG_WHOLEDISK 0x05 /* Full-disk slice */ | |
69 | #define SUN_TAG_STAND 0x06 /* Stand partition */ | |
70 | #define SUN_TAG_VAR 0x07 /* /var filesystem */ | |
71 | #define SUN_TAG_HOME 0x08 /* /home filesystem */ | |
72 | #define SUN_TAG_ALTSCTR 0x09 /* Alt sector partition */ | |
73 | #define SUN_TAG_CACHE 0x0a /* Cachefs partition */ | |
74 | #define SUN_TAG_RESERVED 0x0b /* SMI reserved data */ | |
75 | #define SUN_TAG_LINUX_SWAP 0x82 /* Linux SWAP */ | |
76 | #define SUN_TAG_LINUX_NATIVE 0x83 /* Linux filesystem */ | |
77 | #define SUN_TAG_LINUX_LVM 0x8e /* Linux LVM */ | |
78 | #define SUN_TAG_LINUX_RAID 0xfd /* LInux RAID */ | |
79 | ||
80 | #define SUN_FLAG_UNMNT 0x01 /* Unmountable partition*/ | |
81 | #define SUN_FLAG_RONLY 0x10 /* Read only */ | |
82 | ||
7f387c5c | 83 | static inline uint16_t sun_pt_checksum(const struct sun_disklabel *label) |
a08dc0ca | 84 | { |
47afae0c | 85 | const uint16_t *ptr = ((const uint16_t *) (label + 1)) - 1; |
a08dc0ca KZ |
86 | uint16_t sum; |
87 | ||
47afae0c | 88 | for (sum = 0; ptr >= ((const uint16_t *) label);) |
a08dc0ca KZ |
89 | sum ^= *ptr--; |
90 | ||
91 | return sum; | |
92 | } | |
93 | ||
94 | #endif /* UTIL_LINUX_PT_SUN_H */ |