Index: uspace/lib/label/include/std/gpt.h
===================================================================
--- uspace/lib/label/include/std/gpt.h	(revision 3faa03dd95010d106f2bcc2ad1b10dd7ed86bcff)
+++ uspace/lib/label/include/std/gpt.h	(revision 3faa03dd95010d106f2bcc2ad1b10dd7ed86bcff)
@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup bd
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBLABEL_STD_GPT_H_
+#define LIBLABEL_STD_GPT_H_
+
+#include <sys/types.h>
+
+/** Block address of GPT header. */
+#define GPT_HDR_BA	1
+
+/** GPT header */
+typedef struct {
+	uint8_t efi_signature[8];
+	uint32_t revision;
+	uint32_t header_size;
+	uint32_t header_crc32;
+	uint32_t reserved;
+	uint64_t my_lba;
+	uint64_t alternate_lba;
+	uint64_t first_usable_lba;
+	uint64_t last_usable_lba;
+	uint8_t disk_guid[16];
+	uint64_t entry_lba;
+	uint32_t num_entries;
+	uint32_t entry_size;
+	uint32_t pe_array_crc32;
+} __attribute__((packed)) gpt_header_t;
+
+/** GPT partition entry */
+typedef struct {
+	uint8_t part_type[16];
+	uint8_t part_id[16];
+	uint64_t start_lba;
+	uint64_t end_lba;
+	uint64_t attributes;
+	uint16_t part_name[36];
+} __attribute__((packed)) gpt_entry_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/label/include/std/mbr.h
===================================================================
--- uspace/lib/label/include/std/mbr.h	(revision 3faa03dd95010d106f2bcc2ad1b10dd7ed86bcff)
+++ uspace/lib/label/include/std/mbr.h	(revision 3faa03dd95010d106f2bcc2ad1b10dd7ed86bcff)
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2015 Jiri Svoboda
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/** @addtogroup bd
+ * @{
+ */
+/** @file
+ */
+
+#ifndef LIBLABEL_STD_MBR_H_
+#define LIBLABEL_STD_MBR_H_
+
+#include <stdint.h>
+
+/** Block address of Master Boot Record. */
+#define MBR_BA	0
+
+enum {
+	/** Number of primary partition records */
+	mbr_nprimary = 4,
+
+	/** Boot record signature */
+	mbr_br_signature = 0xAA55
+};
+
+enum ptype {
+	/** Unused partition entry */
+	mbr_pt_unused	= 0x00,
+	/** Extended partition */
+	mbr_pt_extended	= 0x05
+};
+
+/** Structure of a partition table entry */
+typedef struct {
+	uint8_t status;
+	/** CHS of fist block in partition */
+	uint8_t first_chs[3];
+	/** Partition type */
+	uint8_t ptype;
+	/** CHS of last block in partition */
+	uint8_t last_chs[3];
+	/** LBA of first block in partition */
+	uint32_t first_lba;
+	/** Number of blocks in partition */
+	uint32_t length;
+} __attribute__((packed)) mbr_pte_t;
+
+/** Structure of a boot-record block */
+typedef struct {
+	/* Area for boot code */
+	uint8_t code_area[440];
+
+	/* Optional media ID */
+	uint32_t media_id;
+
+	uint16_t pad0;
+
+	/** Partition table entries */
+	mbr_pte_t pte[mbr_nprimary];
+
+	/** Boot record block signature (@c BR_SIGNATURE) */
+	uint16_t signature;
+} __attribute__((packed)) mbr_br_block_t;
+
+#endif
+
+/** @}
+ */
Index: uspace/lib/label/include/types/liblabel.h
===================================================================
--- uspace/lib/label/include/types/liblabel.h	(revision 78d50bd06d1f1eb12182cb42a78d0182b9256f3d)
+++ uspace/lib/label/include/types/liblabel.h	(revision 3faa03dd95010d106f2bcc2ad1b10dd7ed86bcff)
@@ -42,4 +42,22 @@
 #include <vol.h>
 
+typedef struct label label_t;
+typedef struct label_part label_part_t;
+typedef struct label_part_info label_part_info_t;
+typedef struct label_part_spec label_part_spec_t;
+
+/** Ops for individual label type */
+typedef struct {
+	int (*open)(service_id_t, label_t **);
+	int (*create)(service_id_t, label_t **);
+	void (*close)(label_t *);
+	int (*destroy)(label_t *);
+	label_part_t *(*part_first)(label_t *);
+	label_part_t *(*part_next)(label_part_t *);
+	void (*part_get_info)(label_part_t *, label_part_info_t *);
+	int (*part_create)(label_t *, label_part_spec_t *, label_part_t **);
+	int (*part_destroy)(label_part_t *);
+} label_ops_t;
+
 typedef struct {
 	/** Disk contents */
@@ -49,28 +67,34 @@
 } label_info_t;
 
-typedef struct {
+struct label_part_info {
 	/** Address of first block */
 	aoff64_t block0;
 	/** Number of blocks */
 	aoff64_t nblocks;
-} label_part_info_t;
+};
 
 /** Partition */
-typedef struct {
+struct label_part {
 	/** Containing label */
 	struct label *label;
 	/** Link to label_t.parts */
 	link_t llabel;
-} label_part_t;
+	aoff64_t block0;
+	aoff64_t nblocks;
+};
 
 /** Specification of new partition */
-typedef struct {
-} label_part_spec_t;
+struct label_part_spec {
+};
 
 /** Label instance */
-typedef struct label {
+struct label {
+	/** Label type ops */
+	label_ops_t *ops;
+	/** Label type */
+	label_type_t ltype;
 	/** Partitions */
 	list_t parts; /* of label_part_t */
-} label_t;
+};
 
 #endif
