Update to upstream util-linux 2.20.1
[framework/base/util-linux-ng.git] / fdisk / fdisksgilabel.h
1 #ifndef FDISK_SGI_LABEL_H
2 #define FDISK_SGI_LABEL_H
3
4 #include <stdint.h>
5
6 #include "bitops.h"
7
8 /*
9  * Copyright (C) Andreas Neuper, Sep 1998.
10  *      This file may be modified and redistributed under
11  *      the terms of the GNU Public License.
12  */
13
14 struct device_parameter { /* 48 bytes */
15         unsigned char  skew;
16         unsigned char  gap1;
17         unsigned char  gap2;
18         unsigned char  sparecyl;
19         unsigned short pcylcount;
20         unsigned short head_vol0;
21         unsigned short ntrks;   /* tracks in cyl 0 or vol 0 */
22         unsigned char  cmd_tag_queue_depth;
23         unsigned char  unused0;
24         unsigned short unused1;
25         unsigned short nsect;   /* sectors/tracks in cyl 0 or vol 0 */
26         unsigned short bytes;
27         unsigned short ilfact;
28         unsigned int   flags;           /* controller flags */
29         unsigned int   datarate;
30         unsigned int   retries_on_error;
31         unsigned int   ms_per_word;
32         unsigned short xylogics_gap1;
33         unsigned short xylogics_syncdelay;
34         unsigned short xylogics_readdelay;
35         unsigned short xylogics_gap2;
36         unsigned short xylogics_readgate;
37         unsigned short xylogics_writecont;
38 };
39
40 #define SGI_VOLHDR      0x00
41 /* 1 and 2 were used for drive types no longer supported by SGI */
42 #define SGI_SWAP        0x03
43 /* 4 and 5 were for filesystem types SGI haven't ever supported on MIPS CPUs */
44 #define SGI_VOLUME      0x06
45 #define SGI_EFS         0x07
46 #define SGI_LVOL        0x08
47 #define SGI_RLVOL       0x09
48 #define SGI_XFS         0x0a
49 #define SGI_XFSLOG      0x0b
50 #define SGI_XLV         0x0c
51 #define SGI_XVM         0x0d
52 #define ENTIRE_DISK     SGI_VOLUME
53 /*
54  * controller flags
55  */
56 #define SECTOR_SLIP     0x01
57 #define SECTOR_FWD      0x02
58 #define TRACK_FWD       0x04
59 #define TRACK_MULTIVOL  0x08
60 #define IGNORE_ERRORS   0x10
61 #define RESEEK          0x20
62 #define CMDTAGQ_ENABLE  0x40
63
64 typedef struct {
65         unsigned int   magic;            /* expect SGI_LABEL_MAGIC */
66         unsigned short boot_part;        /* active boot partition */
67         unsigned short swap_part;        /* active swap partition */
68         unsigned char  boot_file[16];    /* name of the bootfile */
69         struct device_parameter devparam;       /*  1 * 48 bytes */
70         struct volume_directory {               /* 15 * 16 bytes */
71                 unsigned char vol_file_name[8]; /* a character array */
72                 unsigned int  vol_file_start;   /* number of logical block */
73                 unsigned int  vol_file_size;    /* number of bytes */
74         } directory[15];
75         struct sgi_partition {                  /* 16 * 12 bytes */
76                 unsigned int num_sectors;       /* number of blocks */
77                 unsigned int start_sector;      /* must be cylinder aligned */
78                 unsigned int id;
79         } partitions[16];
80         unsigned int   csum;
81         unsigned int   fillbytes;
82 } sgi_partition;
83
84 typedef struct {
85         unsigned int   magic;           /* looks like a magic number */
86         unsigned int   a2;
87         unsigned int   a3;
88         unsigned int   a4;
89         unsigned int   b1;
90         unsigned short b2;
91         unsigned short b3;
92         unsigned int   c[16];
93         unsigned short d[3];
94         unsigned char  scsi_string[50];
95         unsigned char  serial[137];
96         unsigned short check1816;
97         unsigned char  installer[225];
98 } sgiinfo;
99
100 #define SGI_LABEL_MAGIC         0x0be5a941
101 #define SGI_LABEL_MAGIC_SWAPPED 0x41a9e50b
102 #define SGI_INFO_MAGIC          0x00072959
103 #define SGI_INFO_MAGIC_SWAPPED  0x59290700
104
105 #define SSWAP16(x) (other_endian ? swab16(x) : (uint16_t)(x))
106 #define SSWAP32(x) (other_endian ? swab32(x) : (uint32_t)(x))
107
108 /* fdisk.c */
109 #define sgilabel ((sgi_partition *)MBRbuffer)
110 #define sgiparam (sgilabel->devparam)
111
112 /* fdisksgilabel.c */
113 extern struct   systypes sgi_sys_types[];
114 extern void     sgi_nolabel( void );
115 extern int      check_sgi_label( void );
116 extern void     sgi_list_table( int xtra );
117 extern int  sgi_change_sysid( int i, int sys );
118 extern unsigned int     sgi_get_start_sector( int i );
119 extern unsigned int     sgi_get_num_sectors( int i );
120 extern int      sgi_get_sysid( int i );
121 extern void     sgi_delete_partition( int i );
122 extern void     sgi_add_partition( int n, int sys );
123 extern void     create_sgilabel( void );
124 extern void     create_sgiinfo( void );
125 extern int      verify_sgi( int verbose );
126 extern void     sgi_write_table( void );
127 extern void     sgi_set_ilfact( void );
128 extern void     sgi_set_rspeed( void );
129 extern void     sgi_set_pcylcount( void );
130 extern void     sgi_set_xcyl( void );
131 extern void     sgi_set_ncyl( void );
132 extern void     sgi_set_bootpartition( int i );
133 extern void     sgi_set_swappartition( int i );
134 extern int      sgi_get_bootpartition( void );
135 extern int      sgi_get_swappartition( void );
136 extern void     sgi_set_bootfile( const char* aFile );
137 extern const char *sgi_get_bootfile( void );
138
139 #endif /* FDISK_SGI_LABEL_H */