1 #ifndef UTIL_LINUX_PT_SUN_H
2 #define UTIL_LINUX_PT_SUN_H
6 #define SGI_LABEL_MAGIC 0x0be5a941
8 #define SGI_MAXPARTITIONS 16
9 #define SGI_MAXVOLUMES 15
13 SGI_TYPE_VOLHDR
= 0x00,
14 SGI_TYPE_TRKREPL
= 0x01,
15 SGI_TYPE_SECREPL
= 0x02,
19 SGI_TYPE_ENTIRE_DISK
= 0x06,
22 SGI_TYPE_RLVOL
= 0x09,
24 SGI_TYPE_XFSLOG
= 0x0b,
29 struct sgi_device_parameter
{
33 unsigned char sparecyl
;
37 uint16_t ntrks
; /* tracks in cyl 0 or vol 0 */
39 unsigned char cmd_tag_queue_depth
;
40 unsigned char unused0
;
43 uint16_t nsect
; /* sectors/tracks in cyl 0 or vol 0 */
46 uint32_t flags
; /* SGI_DEVPARAM_* controller flags */
48 uint32_t retries_on_error
;
50 uint16_t xylogics_gap1
;
51 uint16_t xylogics_syncdelay
;
52 uint16_t xylogics_readdelay
;
53 uint16_t xylogics_gap2
;
54 uint16_t xylogics_readgate
;
55 uint16_t xylogics_writecont
;
56 } __attribute__((packed
));
59 SGI_DEVPARAM_SECTOR_SLIP
= 0x01,
60 SGI_DEVPARAM_SECTOR_FWD
= 0x02,
61 SGI_DEVPARAM_TRACK_FWD
= 0x04,
62 SGI_DEVPARAM_TRACK_MULTIVOL
= 0x08,
63 SGI_DEVPARAM_IGNORE_ERRORS
= 0x10,
64 SGI_DEVPARAM_RESEEK
= 0x20,
65 SGI_DEVPARAM_CMDTAGQ_ENABLE
= 0x40
69 struct sgi_disklabel
{
70 uint32_t magic
; /* magic number */
71 uint16_t root_part_num
; /* # root partition */
72 uint16_t swap_part_num
; /* # swap partition */
73 unsigned char boot_file
[16]; /* name of boot file */
75 struct sgi_device_parameter devparam
; /* not used now */
78 unsigned char name
[8]; /* name of volume */
79 uint32_t block_num
; /* logical block number */
80 uint32_t num_bytes
; /* how big, in bytes */
81 } __attribute__((packed
)) volume
[SGI_MAXVOLUMES
];
83 struct sgi_partition
{
84 uint32_t num_blocks
; /* size in logical blocks */
85 uint32_t first_block
; /* first logical block */
86 uint32_t type
; /* type of this partition */
87 } __attribute__((packed
)) partitions
[SGI_MAXPARTITIONS
];
89 /* checksum is the 32bit 2's complement sum of the disklabel */
90 uint32_t csum
; /* disk label checksum */
91 uint32_t padding
; /* padding */
92 } __attribute__((packed
));
94 static inline uint32_t sgi_pt_checksum(struct sgi_disklabel
*label
)
98 unsigned char *ptr
= (unsigned char *) label
;
100 count
= sizeof(*label
) / sizeof(uint32_t);
101 ptr
+= sizeof(uint32_t) * (count
- 1);
106 memcpy(&val
, ptr
, sizeof(uint32_t));
107 sum
-= be32_to_cpu(val
);
109 ptr
-= sizeof(uint32_t);
115 #endif /* UTIL_LINUX_PT_SUN_H */