summaryrefslogtreecommitdiffstats
path: root/cpukit/libblock/include/rtems/bdpart.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/libblock/include/rtems/bdpart.h')
-rw-r--r--cpukit/libblock/include/rtems/bdpart.h411
1 files changed, 0 insertions, 411 deletions
diff --git a/cpukit/libblock/include/rtems/bdpart.h b/cpukit/libblock/include/rtems/bdpart.h
deleted file mode 100644
index 8886c3614d..0000000000
--- a/cpukit/libblock/include/rtems/bdpart.h
+++ /dev/null
@@ -1,411 +0,0 @@
-/**
- * @file
- *
- * @ingroup rtems_bdpart
- *
- * @brief Block Device Partition Management
- */
-
-/*
- * Copyright (c) 2009-2012 embedded brains GmbH. All rights reserved.
- *
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * 82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#ifndef RTEMS_BDPART_H
-#define RTEMS_BDPART_H
-
-#include <uuid/uuid.h>
-
-#include <rtems.h>
-#include <rtems/blkdev.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-/**
- * @defgroup rtems_bdpart Block Device Partition Management
- *
- * @ingroup rtems_libblock
- *
- * @brief This module provides functions to manage partitions of a disk device.
- *
- * A @ref rtems_disk "disk" is a set of blocks which are identified by a
- * consecutive set of non-negative integers starting at zero. There are also
- * logical disks which contain a subset of consecutive disk blocks. The
- * logical disks are used to represent the partitions of a disk. The disk
- * devices are accessed via the @ref rtems_disk "block device buffer module".
- *
- * The partition format on the physical disk will be converted to an internal
- * representation. It is possible to convert the internal representation into
- * a specific output format and write it to the physical disk. One of the
- * constrains for the internal representation was to support the GPT format
- * easily.
- *
- * Currently two physical partition formats are supported. These are the MBR
- * and the GPT format. Please note that the GPT support is not implemented.
- * With MBR format we mean the partition format of the wide spread IBM
- * PC-compatible systems. The GPT format is defined in the Extensible Firmware
- * Interface (EFI).
- *
- * The most common task will be to read the partition information of a disk and
- * register logical disks for each partition. This can be done with the
- * rtems_bdpart_register_from_disk() function. Afterwards you can
- * @ref rtems_fsmount "mount" the file systems within the partitions.
- *
- * You can read the partition information from a disk with rtems_bdpart_read()
- * and write it to the disk with rtems_bdpart_write().
- *
- * To create a partition table from scratch for a disk use
- * rtems_bdpart_create().
- *
- * You can access some disk functions with the shell command @c fdisk.
- *
- * References used to create this module:
- * - <a href="http://en.wikipedia.org/wiki/UUID">Universally Unique Identifier</a>
- * - <a href="http://en.wikipedia.org/wiki/Globally_Unique_Identifier">Globally Unique Identifier</a>
- * - <a href="http://en.wikipedia.org/wiki/Disk_partitioning">Disk Paritioning</a>
- * - <a href="http://en.wikipedia.org/wiki/GUID_Partition_Table">GUID Partition Table</a>
- * - <a href="http://en.wikipedia.org/wiki/Master_boot_record">Master Boot Record</a>
- * - <a href="http://en.wikipedia.org/wiki/Extended_boot_record">Extended Boot Record</a>
- * - <a href="http://en.wikipedia.org/wiki/Cylinder-head-sector">Cylinder Head Sector</a>
- * - <a href="http://www.win.tue.nl/~aeb/partitions/partition_types-1.html">Partition Types</a>
- */
-/**@{**/
-
-/**
- * @name MBR Partition Types and Flags
- */
-/**@{**/
-
-#define RTEMS_BDPART_MBR_EMPTY 0x0U
-
-#define RTEMS_BDPART_MBR_FAT_12 0x1U
-
-#define RTEMS_BDPART_MBR_FAT_16 0x4U
-
-#define RTEMS_BDPART_MBR_FAT_16_LBA 0xeU
-
-#define RTEMS_BDPART_MBR_FAT_32 0xbU
-
-#define RTEMS_BDPART_MBR_FAT_32_LBA 0xcU
-
-#define RTEMS_BDPART_MBR_EXTENDED 0x5U
-
-#define RTEMS_BDPART_MBR_DATA 0xdaU
-
-#define RTEMS_BDPART_MBR_GPT 0xeeU
-
-#define RTEMS_BDPART_MBR_FLAG_ACTIVE 0x80U
-
-/** @} */
-
-/**
- * Recommended maximum partition table size.
- */
-#define RTEMS_BDPART_PARTITION_NUMBER_HINT 16
-
-/**
- * Partition description.
- */
-typedef struct rtems_bdpart_partition {
- /**
- * Block index for partition begin.
- */
- rtems_blkdev_bnum begin;
-
- /**
- * Block index for partition end (this block is not a part of the partition).
- */
- rtems_blkdev_bnum end;
-
- /**
- * Partition type.
- */
- uuid_t type;
-
- /**
- * Partition ID.
- */
- uuid_t id;
-
- /**
- * Partition flags.
- */
- uint64_t flags;
-} rtems_bdpart_partition;
-
-/**
- * Disk format for the partition tables.
- */
-typedef enum {
- /**
- * Type value for MBR format.
- */
- RTEMS_BDPART_FORMAT_MBR,
-
- /**
- * Type value for GPT format.
- */
- RTEMS_BDPART_FORMAT_GPT
-} rtems_bdpart_format_type;
-
-/**
- * Disk format description.
- */
-typedef union {
- /**
- * Format type.
- */
- rtems_bdpart_format_type type;
-
- /**
- * MBR format fields.
- */
- struct {
- rtems_bdpart_format_type type;
-
- /**
- * Disk ID in MBR at offset 440.
- */
- uint32_t disk_id;
-
- /**
- * This option is used for partition table creation and validation checks
- * before a write to the disk. It ensures that the first primary
- * partition and the logical partitions start at head one and sector one
- * under the virtual one head and 63 sectors geometry. Each begin and
- * end of a partition will be aligned to the virtual cylinder boundary.
- */
- bool dos_compatibility;
- } mbr;
-
- /**
- * GPT format fields.
- */
- struct {
- rtems_bdpart_format_type type;
-
- /**
- * Disk ID in GPT header.
- */
- uuid_t disk_id;
- } gpt;
-} rtems_bdpart_format;
-
-/**
- * @brief Reads the partition information from the physical disk device with
- * name @a disk_name.
- *
- * The partition information will be stored in the partition table
- * @a partitions with a maximum of @a count partitions. The number of actual
- * partitions will be stored in @a count. If there are more partitions than
- * space for storage an error status will be returned. The partition table
- * format recognized on the disk will be stored in @a format.
- */
-rtems_status_code rtems_bdpart_read(
- const char *disk_name,
- rtems_bdpart_format *format,
- rtems_bdpart_partition *partitions,
- size_t *count
-);
-
-/**
- * @brief Sorts the partition table @a partitions with @a count partitions to
- * have ascending begin blocks
- */
-void rtems_bdpart_sort( rtems_bdpart_partition *partitions, size_t count);
-
-/**
- * @brief Writes the partition table to the physical disk device with name
- * @a disk_name.
- *
- * The partition table @a partitions with @a count partitions will be written
- * to the disk. The output format for the partition table on the disk is
- * specified by @a format. There are some consistency checks applied to the
- * partition table. The partition table must be sorted such that the begin
- * blocks are in ascending order. This can be done with the
- * rtems_bdpart_sort() function. The partitions must not overlap. The
- * partitions must have a positive size. The partitions must be within the
- * disk. Depending on the output format there are additional constrains.
- */
-rtems_status_code rtems_bdpart_write(
- const char *disk_name,
- const rtems_bdpart_format *format,
- const rtems_bdpart_partition *partitions,
- size_t count
-);
-
-/**
- * @brief Creates a partition table in @a partitions with @a count partitions
- * for the physical disk device with name @a disk_name.
- *
- * The array of positive integer weights in @a distribution must have exactly
- * @a count elements. The weights in the distribution array are summed up.
- * Each weight is then divided by the sum to obtain the disk fraction which
- * forms the corresponding partition. The partition boundaries are generated
- * with respect to the output format in @a format.
- */
-rtems_status_code rtems_bdpart_create(
- const char *disk_name,
- const rtems_bdpart_format *format,
- rtems_bdpart_partition *partitions,
- const unsigned *distribution,
- size_t count
-);
-
-/**
- * @brief Registers the partitions as logical disks for the physical disk
- * device with name @a disk_name.
- *
- * For each partition of the partition table @a partitions with @a count
- * partitions a logical disk is registered. The partition number equals the
- * partition table index plus one. The name of the logical disk device is the
- * concatenation of the physical disk device name and the partition number.
- *
- * @see rtems_blkdev_create_partition().
- */
-rtems_status_code rtems_bdpart_register(
- const char *disk_name,
- const rtems_bdpart_partition *partitions,
- size_t count
-);
-
-/**
- * @a brief Reads the partition table from the disk device with name @a
- * disk_name and registers the partitions as logical disks.
- *
- * @see rtems_bdpart_register() and rtems_fsmount().
- */
-rtems_status_code rtems_bdpart_register_from_disk( const char *disk_name);
-
-/**
- * @brief Deletes the logical disks associated with the partitions of the disk
- * device with name @a disk_name.
- *
- * The partition table @a partitions with @a count partitions will be used to
- * determine which disks need to be deleted. It may be obtained from
- * rtems_bdpart_read().
- */
-rtems_status_code rtems_bdpart_unregister(
- const char *disk_name,
- const rtems_bdpart_partition *partitions,
- size_t count
-);
-
-/**
- * @brief Mounts all supported file systems inside the logical disks derived
- * from the partitions of the physical disk device with name @a disk_name.
- *
- * For each partition in the partition table @a partitions with @a count
- * partitions it will be checked if it contains a supported file system. In
- * this case a mount point derived from the disk name will be created in the
- * mount base path @a mount_base. The file system will be mounted there. The
- * partition number equals the partition table index plus one. The mount point
- * name for each partition will be the concatenation of the mount base path,
- * the disk device file name and the parition number.
- *
- * @see rtems_bdpart_read().
- */
-rtems_status_code rtems_bdpart_mount(
- const char *disk_name,
- const rtems_bdpart_partition *partitions,
- size_t count,
- const char *mount_base
-);
-
-/**
- * @brief Unmounts all file systems mounted with rtems_bdpart_mount().
- */
-rtems_status_code rtems_bdpart_unmount(
- const char *disk_name,
- const rtems_bdpart_partition *partitions,
- size_t count,
- const char *mount_base
-);
-
-/**
- * @brief Prints the partition table @a partitions with @a count partitions to
- * standard output.
- */
-void rtems_bdpart_dump( const rtems_bdpart_partition *partitions, size_t count);
-
-/**
- * @brief Returns the partition type for the MBR partition type value
- * @a mbr_type in @a type.
- */
-void rtems_bdpart_to_partition_type( uint8_t mbr_type, uuid_t type);
-
-/**
- * @brief Converts the partition type in @a type to the MBR partition type.
- *
- * The result will be stored in @a mbr_type. Returns @c true in case of a
- * successful convertion and otherwise @c false. Both arguments must not be
- * @c NULL.
- */
-bool rtems_bdpart_to_mbr_partition_type(
- const uuid_t type,
- uint8_t *mbr_type
-);
-
-/** @} */
-
-#define RTEMS_BDPART_MBR_CYLINDER_SIZE 63
-
-#define RTEMS_BDPART_NUMBER_SIZE 4
-
-#define RTEMS_BDPART_BLOCK_SIZE 512
-
-#define RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE 16
-
-#define RTEMS_BDPART_MBR_OFFSET_TABLE_0 446
-
-#define RTEMS_BDPART_MBR_OFFSET_TABLE_1 \
- (RTEMS_BDPART_MBR_OFFSET_TABLE_0 + RTEMS_BDPART_MBR_TABLE_ENTRY_SIZE)
-
-#define RTEMS_BDPART_MBR_OFFSET_DISK_ID 440
-
-#define RTEMS_BDPART_MBR_OFFSET_SIGNATURE_0 510
-
-#define RTEMS_BDPART_MBR_OFFSET_SIGNATURE_1 511
-
-#define RTEMS_BDPART_MBR_SIGNATURE_0 0x55U
-
-#define RTEMS_BDPART_MBR_SIGNATURE_1 0xaaU
-
-#define RTEMS_BDPART_MBR_OFFSET_BEGIN 8
-
-#define RTEMS_BDPART_MBR_OFFSET_SIZE 12
-
-#define RTEMS_BDPART_MBR_OFFSET_TYPE 4
-
-#define RTEMS_BDPART_MBR_OFFSET_FLAGS 0
-
-static inline uint8_t rtems_bdpart_mbr_partition_type(
- const uuid_t type
-)
-{
- return type [0];
-}
-
-rtems_status_code rtems_bdpart_get_disk_data(
- const char *disk_name,
- int *fd_ptr,
- rtems_disk_device **dd_ptr,
- rtems_blkdev_bnum *disk_end
-);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* RTEMS_BDPART_H */