uboot/include/part.h
<<
>>
Prefs
   1/*
   2 * (C) Copyright 2000-2004
   3 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   4 *
   5 * See file CREDITS for list of people who contributed to this
   6 * project.
   7 *
   8 * This program is free software; you can redistribute it and/or
   9 * modify it under the terms of the GNU General Public License as
  10 * published by the Free Software Foundation; either version 2 of
  11 * the License, or (at your option) any later version.
  12 *
  13 * This program is distributed in the hope that it will be useful,
  14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16 * GNU General Public License for more details.
  17 *
  18 * You should have received a copy of the GNU General Public License
  19 * along with this program; if not, write to the Free Software
  20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  21 * MA 02111-1307 USA
  22 */
  23#ifndef _PART_H
  24#define _PART_H
  25
  26#include <ide.h>
  27
  28typedef struct block_dev_desc {
  29        int             if_type;        /* type of the interface */
  30        int             dev;            /* device number */
  31        unsigned char   part_type;      /* partition type */
  32        unsigned char   target;         /* target SCSI ID */
  33        unsigned char   lun;            /* target LUN */
  34        unsigned char   type;           /* device type */
  35        unsigned char   removable;      /* removable device */
  36#ifdef CONFIG_LBA48
  37        unsigned char   lba48;          /* device can use 48bit addr (ATA/ATAPI v7) */
  38#endif
  39        lbaint_t        lba;            /* number of blocks */
  40        unsigned long   blksz;          /* block size */
  41        char            vendor [40+1];  /* IDE model, SCSI Vendor */
  42        char            product[20+1];  /* IDE Serial no, SCSI product */
  43        char            revision[8+1];  /* firmware revision */
  44        unsigned long   (*block_read)(int dev,
  45                                      unsigned long start,
  46                                      lbaint_t blkcnt,
  47                                      void *buffer);
  48        unsigned long   (*block_write)(int dev,
  49                                       unsigned long start,
  50                                       lbaint_t blkcnt,
  51                                       const void *buffer);
  52        unsigned long   (*block_erase)(int dev,
  53                                       unsigned long start,
  54                                       lbaint_t blkcnt);
  55        void            *priv;          /* driver private struct pointer */
  56}block_dev_desc_t;
  57
  58/* Interface types: */
  59#define IF_TYPE_UNKNOWN         0
  60#define IF_TYPE_IDE             1
  61#define IF_TYPE_SCSI            2
  62#define IF_TYPE_ATAPI           3
  63#define IF_TYPE_USB             4
  64#define IF_TYPE_DOC             5
  65#define IF_TYPE_MMC             6
  66#define IF_TYPE_SD              7
  67#define IF_TYPE_SATA            8
  68
  69/* Part types */
  70#define PART_TYPE_UNKNOWN       0x00
  71#define PART_TYPE_MAC           0x01
  72#define PART_TYPE_DOS           0x02
  73#define PART_TYPE_ISO           0x03
  74#define PART_TYPE_AMIGA         0x04
  75#define PART_TYPE_EFI           0x05
  76
  77/*
  78 * Type string for U-Boot bootable partitions
  79 */
  80#define BOOT_PART_TYPE  "U-Boot"        /* primary boot partition type  */
  81#define BOOT_PART_COMP  "PPCBoot"       /* PPCBoot compatibility type   */
  82
  83/* device types */
  84#define DEV_TYPE_UNKNOWN        0xff    /* not connected */
  85#define DEV_TYPE_HARDDISK       0x00    /* harddisk */
  86#define DEV_TYPE_TAPE           0x01    /* Tape */
  87#define DEV_TYPE_CDROM          0x05    /* CD-ROM */
  88#define DEV_TYPE_OPDISK         0x07    /* optical disk */
  89
  90typedef struct disk_partition {
  91        ulong   start;          /* # of first block in partition        */
  92        ulong   size;           /* number of blocks in partition        */
  93        ulong   blksz;          /* block size in bytes                  */
  94        uchar   name[32];       /* partition name                       */
  95        uchar   type[32];       /* string type description              */
  96        int     bootable;       /* Active/Bootable flag is set          */
  97#ifdef CONFIG_PARTITION_UUIDS
  98        char    uuid[37];       /* filesystem UUID as string, if exists */
  99#endif
 100} disk_partition_t;
 101
 102/* Misc _get_dev functions */
 103#ifdef CONFIG_PARTITIONS
 104block_dev_desc_t *get_dev(const char *ifname, int dev);
 105block_dev_desc_t* ide_get_dev(int dev);
 106block_dev_desc_t* sata_get_dev(int dev);
 107block_dev_desc_t* scsi_get_dev(int dev);
 108block_dev_desc_t* usb_stor_get_dev(int dev);
 109block_dev_desc_t* mmc_get_dev(int dev);
 110block_dev_desc_t* systemace_get_dev(int dev);
 111block_dev_desc_t* mg_disk_get_dev(int dev);
 112
 113/* disk/part.c */
 114int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 115void print_part (block_dev_desc_t *dev_desc);
 116void  init_part (block_dev_desc_t *dev_desc);
 117void dev_print(block_dev_desc_t *dev_desc);
 118int get_device(const char *ifname, const char *dev_str,
 119               block_dev_desc_t **dev_desc);
 120int get_device_and_partition(const char *ifname, const char *dev_part_str,
 121                             block_dev_desc_t **dev_desc,
 122                             disk_partition_t *info, int allow_whole_dev);
 123#else
 124static inline block_dev_desc_t *get_dev(const char *ifname, int dev)
 125{ return NULL; }
 126static inline block_dev_desc_t* ide_get_dev(int dev) { return NULL; }
 127static inline block_dev_desc_t* sata_get_dev(int dev) { return NULL; }
 128static inline block_dev_desc_t* scsi_get_dev(int dev) { return NULL; }
 129static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }
 130static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }
 131static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }
 132static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; }
 133
 134static inline int get_partition_info (block_dev_desc_t * dev_desc, int part,
 135        disk_partition_t *info) { return -1; }
 136static inline void print_part (block_dev_desc_t *dev_desc) {}
 137static inline void  init_part (block_dev_desc_t *dev_desc) {}
 138static inline void dev_print(block_dev_desc_t *dev_desc) {}
 139static inline int get_device(const char *ifname, const char *dev_str,
 140               block_dev_desc_t **dev_desc)
 141{ return -1; }
 142static inline int get_device_and_partition(const char *ifname,
 143                                           const char *dev_part_str,
 144                                           block_dev_desc_t **dev_desc,
 145                                           disk_partition_t *info,
 146                                           int allow_whole_dev)
 147{ *dev_desc = NULL; return -1; }
 148#endif
 149
 150#ifdef CONFIG_MAC_PARTITION
 151/* disk/part_mac.c */
 152int get_partition_info_mac (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 153void print_part_mac (block_dev_desc_t *dev_desc);
 154int   test_part_mac (block_dev_desc_t *dev_desc);
 155#endif
 156
 157#ifdef CONFIG_DOS_PARTITION
 158/* disk/part_dos.c */
 159int get_partition_info_dos (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 160void print_part_dos (block_dev_desc_t *dev_desc);
 161int   test_part_dos (block_dev_desc_t *dev_desc);
 162#endif
 163
 164#ifdef CONFIG_ISO_PARTITION
 165/* disk/part_iso.c */
 166int get_partition_info_iso (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 167void print_part_iso (block_dev_desc_t *dev_desc);
 168int   test_part_iso (block_dev_desc_t *dev_desc);
 169#endif
 170
 171#ifdef CONFIG_AMIGA_PARTITION
 172/* disk/part_amiga.c */
 173int get_partition_info_amiga (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 174void print_part_amiga (block_dev_desc_t *dev_desc);
 175int   test_part_amiga (block_dev_desc_t *dev_desc);
 176#endif
 177
 178#ifdef CONFIG_EFI_PARTITION
 179#include <part_efi.h>
 180/* disk/part_efi.c */
 181int get_partition_info_efi (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
 182void print_part_efi (block_dev_desc_t *dev_desc);
 183int   test_part_efi (block_dev_desc_t *dev_desc);
 184
 185/**
 186 * write_gpt_table() - Write the GUID Partition Table to disk
 187 *
 188 * @param dev_desc - block device descriptor
 189 * @param gpt_h - pointer to GPT header representation
 190 * @param gpt_e - pointer to GPT partition table entries
 191 *
 192 * @return - zero on success, otherwise error
 193 */
 194int write_gpt_table(block_dev_desc_t *dev_desc,
 195                  gpt_header *gpt_h, gpt_entry *gpt_e);
 196
 197/**
 198 * gpt_fill_pte(): Fill the GPT partition table entry
 199 *
 200 * @param gpt_h - GPT header representation
 201 * @param gpt_e - GPT partition table entries
 202 * @param partitions - list of partitions
 203 * @param parts - number of partitions
 204 *
 205 * @return zero on success
 206 */
 207int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
 208                disk_partition_t *partitions, int parts);
 209
 210/**
 211 * gpt_fill_header(): Fill the GPT header
 212 *
 213 * @param dev_desc - block device descriptor
 214 * @param gpt_h - GPT header representation
 215 * @param str_guid - disk guid string representation
 216 * @param parts_count - number of partitions
 217 *
 218 * @return - error on str_guid conversion error
 219 */
 220int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
 221                char *str_guid, int parts_count);
 222
 223/**
 224 * gpt_restore(): Restore GPT partition table
 225 *
 226 * @param dev_desc - block device descriptor
 227 * @param str_disk_guid - disk GUID
 228 * @param partitions - list of partitions
 229 * @param parts - number of partitions
 230 *
 231 * @return zero on success
 232 */
 233int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
 234                disk_partition_t *partitions, const int parts_count);
 235#endif
 236
 237#endif /* _PART_H */
 238