Blame view

include/part.h 8.04 KB
012771d88   wdenk   Initial revision
1
  /*
42dfe7a18   wdenk   Code cleanup; mak...
2
   * (C) Copyright 2000-2004
012771d88   wdenk   Initial revision
3
4
   * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   *
3765b3e7b   Wolfgang Denk   Coding Style clea...
5
   * SPDX-License-Identifier:	GPL-2.0+
012771d88   wdenk   Initial revision
6
7
8
   */
  #ifndef _PART_H
  #define _PART_H
735dd97b1   Grant Likely   [PATCH 1_4] Merge...
9

6e5923851   wdenk   * Cleanup, minor ...
10
  #include <ide.h>
012771d88   wdenk   Initial revision
11
12
  
  typedef struct block_dev_desc {
42dfe7a18   wdenk   Code cleanup; mak...
13
  	int		if_type;	/* type of the interface */
d049cc7f7   Wolfgang Denk   Coding style clea...
14
15
  	int		dev;		/* device number */
  	unsigned char	part_type;	/* partition type */
42dfe7a18   wdenk   Code cleanup; mak...
16
17
18
19
20
21
22
  	unsigned char	target;		/* target SCSI ID */
  	unsigned char	lun;		/* target LUN */
  	unsigned char	type;		/* device type */
  	unsigned char	removable;	/* removable device */
  #ifdef CONFIG_LBA48
  	unsigned char	lba48;		/* device can use 48bit addr (ATA/ATAPI v7) */
  #endif
985889b11   Anatolij Gustschin   include/part.h: f...
23
  	lbaint_t	lba;		/* number of blocks */
42dfe7a18   wdenk   Code cleanup; mak...
24
  	unsigned long	blksz;		/* block size */
0472fbfd3   Egbert Eich   part/dev_desc: Ad...
25
  	int		log2blksz;	/* for convenience: log2(blksz) */
d049cc7f7   Wolfgang Denk   Coding style clea...
26
  	char		vendor [40+1];	/* IDE model, SCSI Vendor */
2a4741d9a   Marcel Ziswiler   fix pxa255_idp board
27
28
  	char		product[20+1];	/* IDE Serial no, SCSI product */
  	char		revision[8+1];	/* firmware revision */
42dfe7a18   wdenk   Code cleanup; mak...
29
  	unsigned long	(*block_read)(int dev,
ff8fef566   Sascha Silbe   Fix block device ...
30
  				      lbaint_t start,
6e5923851   wdenk   * Cleanup, minor ...
31
  				      lbaint_t blkcnt,
eb867a762   Grant Likely   [PATCH 9_9] Use "...
32
  				      void *buffer);
53758fa20   Grant Likely   [PATCH 8_9] Add b...
33
  	unsigned long	(*block_write)(int dev,
ff8fef566   Sascha Silbe   Fix block device ...
34
  				       lbaint_t start,
53758fa20   Grant Likely   [PATCH 8_9] Add b...
35
36
  				       lbaint_t blkcnt,
  				       const void *buffer);
e6f99a561   Lei Wen   MMC: add erase fu...
37
  	unsigned long   (*block_erase)(int dev,
ff8fef566   Sascha Silbe   Fix block device ...
38
  				       lbaint_t start,
e6f99a561   Lei Wen   MMC: add erase fu...
39
  				       lbaint_t blkcnt);
c7057b529   Dave Liu   ata: add the supp...
40
  	void		*priv;		/* driver private struct pointer */
012771d88   wdenk   Initial revision
41
  }block_dev_desc_t;
b0fce99bf   wdenk   Fix some missing ...
42

ae1768a72   Egbert Eich   disk/gpt: Fix GPT...
43
44
45
  #define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz))
  #define PAD_TO_BLOCKSIZE(size, block_dev_desc) \
  	(PAD_SIZE(size, block_dev_desc->blksz))
0472fbfd3   Egbert Eich   part/dev_desc: Ad...
46
47
48
49
  #define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \
  		 ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \
  		 ((x & 0xffff0000) ? 16 : 0))
  #define LOG2_INVALID(type) ((type)((sizeof(type)<<3)-1))
ae1768a72   Egbert Eich   disk/gpt: Fix GPT...
50

012771d88   wdenk   Initial revision
51
  /* Interface types: */
b0fce99bf   wdenk   Fix some missing ...
52
53
  #define IF_TYPE_UNKNOWN		0
  #define IF_TYPE_IDE		1
012771d88   wdenk   Initial revision
54
55
  #define IF_TYPE_SCSI		2
  #define IF_TYPE_ATAPI		3
b0fce99bf   wdenk   Fix some missing ...
56
57
  #define IF_TYPE_USB		4
  #define IF_TYPE_DOC		5
7205e4075   wdenk   * Patches by Deni...
58
  #define IF_TYPE_MMC		6
c95219fae   stefano babic   MMC for PXA 27X (...
59
  #define IF_TYPE_SD		7
c7057b529   Dave Liu   ata: add the supp...
60
  #define IF_TYPE_SATA		8
f4d8de48f   Henrik Nordström   sandbox: block dr...
61
62
  #define IF_TYPE_HOST		9
  #define IF_TYPE_MAX		10	/* Max number of IF_TYPE_* supported */
b0fce99bf   wdenk   Fix some missing ...
63

012771d88   wdenk   Initial revision
64
  /* Part types */
42dfe7a18   wdenk   Code cleanup; mak...
65
  #define PART_TYPE_UNKNOWN	0x00
012771d88   wdenk   Initial revision
66
67
68
  #define PART_TYPE_MAC		0x01
  #define PART_TYPE_DOS		0x02
  #define PART_TYPE_ISO		0x03
42dfe7a18   wdenk   Code cleanup; mak...
69
  #define PART_TYPE_AMIGA		0x04
07f3d789b   richardretanubun   Add support for C...
70
  #define PART_TYPE_EFI		0x05
c7de829c7   wdenk   * Patch by Thomas...
71

b0fce99bf   wdenk   Fix some missing ...
72
73
74
75
76
  /*
   * Type string for U-Boot bootable partitions
   */
  #define BOOT_PART_TYPE	"U-Boot"	/* primary boot partition type	*/
  #define BOOT_PART_COMP	"PPCBoot"	/* PPCBoot compatibility type	*/
012771d88   wdenk   Initial revision
77
  /* device types */
b0fce99bf   wdenk   Fix some missing ...
78
79
  #define DEV_TYPE_UNKNOWN	0xff	/* not connected */
  #define DEV_TYPE_HARDDISK	0x00	/* harddisk */
42dfe7a18   wdenk   Code cleanup; mak...
80
81
82
  #define DEV_TYPE_TAPE		0x01	/* Tape */
  #define DEV_TYPE_CDROM		0x05	/* CD-ROM */
  #define DEV_TYPE_OPDISK		0x07	/* optical disk */
012771d88   wdenk   Initial revision
83

42dfe7a18   wdenk   Code cleanup; mak...
84
  typedef struct disk_partition {
04735e9c5   Frederic Leroy   Fix ext2/ext4 fil...
85
86
  	lbaint_t	start;	/* # of first block in partition	*/
  	lbaint_t	size;	/* number of blocks in partition	*/
012771d88   wdenk   Initial revision
87
88
89
  	ulong	blksz;		/* block size in bytes			*/
  	uchar	name[32];	/* partition name			*/
  	uchar	type[32];	/* string type description		*/
40e0e5686   Rob Herring   disk/part: check ...
90
  	int	bootable;	/* Active/Bootable flag is set		*/
894bfbbfb   Stephen Warren   disk: part_efi: p...
91
92
93
  #ifdef CONFIG_PARTITION_UUIDS
  	char	uuid[37];	/* filesystem UUID as string, if exists	*/
  #endif
012771d88   wdenk   Initial revision
94
  } disk_partition_t;
735dd97b1   Grant Likely   [PATCH 1_4] Merge...
95
  /* Misc _get_dev functions */
df3fc5260   Matthew McClintock   disk/part.c: Make...
96
  #ifdef CONFIG_PARTITIONS
99d2c205d   Rob Herring   disk/part: introd...
97
  block_dev_desc_t *get_dev(const char *ifname, int dev);
735dd97b1   Grant Likely   [PATCH 1_4] Merge...
98
  block_dev_desc_t* ide_get_dev(int dev);
c7057b529   Dave Liu   ata: add the supp...
99
  block_dev_desc_t* sata_get_dev(int dev);
735dd97b1   Grant Likely   [PATCH 1_4] Merge...
100
101
102
103
  block_dev_desc_t* scsi_get_dev(int dev);
  block_dev_desc_t* usb_stor_get_dev(int dev);
  block_dev_desc_t* mmc_get_dev(int dev);
  block_dev_desc_t* systemace_get_dev(int dev);
75eb82ec7   unsik Kim   mflash: Initial m...
104
  block_dev_desc_t* mg_disk_get_dev(int dev);
f4d8de48f   Henrik Nordström   sandbox: block dr...
105
106
  block_dev_desc_t *host_get_dev(int dev);
  int host_get_dev_err(int dev, block_dev_desc_t **blk_devp);
735dd97b1   Grant Likely   [PATCH 1_4] Merge...
107

012771d88   wdenk   Initial revision
108
109
110
111
112
  /* disk/part.c */
  int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part (block_dev_desc_t *dev_desc);
  void  init_part (block_dev_desc_t *dev_desc);
  void dev_print(block_dev_desc_t *dev_desc);
2023e6086   Stephen Warren   disk: introduce g...
113
114
  int get_device(const char *ifname, const char *dev_str,
  	       block_dev_desc_t **dev_desc);
10a37fd7a   Stephen Warren   disk: get_device_...
115
  int get_device_and_partition(const char *ifname, const char *dev_part_str,
99d2c205d   Rob Herring   disk/part: introd...
116
  			     block_dev_desc_t **dev_desc,
10a37fd7a   Stephen Warren   disk: get_device_...
117
  			     disk_partition_t *info, int allow_whole_dev);
df3fc5260   Matthew McClintock   disk/part.c: Make...
118
  #else
99d2c205d   Rob Herring   disk/part: introd...
119
120
  static inline block_dev_desc_t *get_dev(const char *ifname, int dev)
  { return NULL; }
df3fc5260   Matthew McClintock   disk/part.c: Make...
121
122
123
124
125
126
127
  static inline block_dev_desc_t* ide_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* sata_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* scsi_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }
  static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; }
f4d8de48f   Henrik Nordström   sandbox: block dr...
128
  static inline block_dev_desc_t *host_get_dev(int dev) { return NULL; }
012771d88   wdenk   Initial revision
129

df3fc5260   Matthew McClintock   disk/part.c: Make...
130
131
132
133
134
  static inline int get_partition_info (block_dev_desc_t * dev_desc, int part,
  	disk_partition_t *info) { return -1; }
  static inline void print_part (block_dev_desc_t *dev_desc) {}
  static inline void  init_part (block_dev_desc_t *dev_desc) {}
  static inline void dev_print(block_dev_desc_t *dev_desc) {}
2023e6086   Stephen Warren   disk: introduce g...
135
136
137
  static inline int get_device(const char *ifname, const char *dev_str,
  	       block_dev_desc_t **dev_desc)
  { return -1; }
99d2c205d   Rob Herring   disk/part: introd...
138
  static inline int get_device_and_partition(const char *ifname,
10a37fd7a   Stephen Warren   disk: get_device_...
139
  					   const char *dev_part_str,
99d2c205d   Rob Herring   disk/part: introd...
140
  					   block_dev_desc_t **dev_desc,
10a37fd7a   Stephen Warren   disk: get_device_...
141
142
  					   disk_partition_t *info,
  					   int allow_whole_dev)
99d2c205d   Rob Herring   disk/part: introd...
143
  { *dev_desc = NULL; return -1; }
df3fc5260   Matthew McClintock   disk/part.c: Make...
144
  #endif
012771d88   wdenk   Initial revision
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
  
  #ifdef CONFIG_MAC_PARTITION
  /* disk/part_mac.c */
  int get_partition_info_mac (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part_mac (block_dev_desc_t *dev_desc);
  int   test_part_mac (block_dev_desc_t *dev_desc);
  #endif
  
  #ifdef CONFIG_DOS_PARTITION
  /* disk/part_dos.c */
  int get_partition_info_dos (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part_dos (block_dev_desc_t *dev_desc);
  int   test_part_dos (block_dev_desc_t *dev_desc);
  #endif
  
  #ifdef CONFIG_ISO_PARTITION
  /* disk/part_iso.c */
  int get_partition_info_iso (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part_iso (block_dev_desc_t *dev_desc);
  int   test_part_iso (block_dev_desc_t *dev_desc);
  #endif
c7de829c7   wdenk   * Patch by Thomas...
166
167
168
169
170
171
  #ifdef CONFIG_AMIGA_PARTITION
  /* disk/part_amiga.c */
  int get_partition_info_amiga (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part_amiga (block_dev_desc_t *dev_desc);
  int   test_part_amiga (block_dev_desc_t *dev_desc);
  #endif
07f3d789b   richardretanubun   Add support for C...
172
  #ifdef CONFIG_EFI_PARTITION
40684ddb8   Lukasz Majewski   gpt: Support for ...
173
  #include <part_efi.h>
07f3d789b   richardretanubun   Add support for C...
174
175
176
177
  /* disk/part_efi.c */
  int get_partition_info_efi (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
  void print_part_efi (block_dev_desc_t *dev_desc);
  int   test_part_efi (block_dev_desc_t *dev_desc);
40684ddb8   Lukasz Majewski   gpt: Support for ...
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
  
  /**
   * write_gpt_table() - Write the GUID Partition Table to disk
   *
   * @param dev_desc - block device descriptor
   * @param gpt_h - pointer to GPT header representation
   * @param gpt_e - pointer to GPT partition table entries
   *
   * @return - zero on success, otherwise error
   */
  int write_gpt_table(block_dev_desc_t *dev_desc,
  		  gpt_header *gpt_h, gpt_entry *gpt_e);
  
  /**
   * gpt_fill_pte(): Fill the GPT partition table entry
   *
   * @param gpt_h - GPT header representation
   * @param gpt_e - GPT partition table entries
   * @param partitions - list of partitions
   * @param parts - number of partitions
   *
   * @return zero on success
   */
  int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
  		disk_partition_t *partitions, int parts);
  
  /**
   * gpt_fill_header(): Fill the GPT header
   *
   * @param dev_desc - block device descriptor
   * @param gpt_h - GPT header representation
   * @param str_guid - disk guid string representation
   * @param parts_count - number of partitions
   *
   * @return - error on str_guid conversion error
   */
  int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
  		char *str_guid, int parts_count);
  
  /**
   * gpt_restore(): Restore GPT partition table
   *
   * @param dev_desc - block device descriptor
   * @param str_disk_guid - disk GUID
   * @param partitions - list of partitions
   * @param parts - number of partitions
   *
   * @return zero on success
   */
  int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
  		disk_partition_t *partitions, const int parts_count);
07f3d789b   richardretanubun   Add support for C...
229
  #endif
012771d88   wdenk   Initial revision
230
  #endif /* _PART_H */