📄 ide_part_table.h
字号:
/** * @file rtems/ide_part_table.h * * Support for "MS-DOS-style" partition tables *//* * Copyright (C) 2002 OKTET Ltd., St.-Petersburg, Russia * * Author: Konstantin Abramenko <Konstantin.Abramenko@oktet.ru> * Alexander Kukuta <Alexander.Kukuta@oktet.ru> * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://www.rtems.com/license/LICENSE. * * $Id: ide_part_table.h,v 1.10 2005/07/05 09:25:37 ralf Exp $ * *****************************************************************************/#ifndef _RTEMS_IDE_PART_TABLE_H#define _RTEMS_IDE_PART_TABLE_H#include <assert.h>#include <rtems/chain.h>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <errno.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>#include <rtems.h>#include <rtems/blkdev.h>#include <rtems/libio.h>#include <rtems/libio_.h>#include <rtems/bdbuf.h>#include <rtems/seterr.h>/* Minor base number for all logical devices */#define RTEMS_IDE_SECTOR_BITS 9#define RTEMS_IDE_SECTOR_SIZE 512#define RTEMS_IDE_PARTITION_DESCRIPTOR_SIZE 16#define RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER 63#define RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER 4#define RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX 16#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA1 0x55#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_DATA2 0xaa#define RTEMS_IDE_PARTITION_MSDOS_SIGNATURE_OFFSET 0x1fe#define RTEMS_IDE_PARTITION_TABLE_OFFSET 0x1be#define RTEMS_IDE_PARTITION_BOOTABLE_OFFSET 0#define RTEMS_IDE_PARTITION_SYS_TYPE_OFFSET 4#define RTEMS_IDE_PARTITION_START_OFFSET 8#define RTEMS_IDE_PARTITION_SIZE_OFFSET 12/* * Conversion from and to little-endian byte order. (no-op on i386/i486) */#if (CPU_BIG_ENDIAN == TRUE)# define LE_TO_CPU_U16(v) CPU_swap_u16(v)# define LE_TO_CPU_U32(v) CPU_swap_u32(v)# define CPU_TO_LE_U16(v) CPU_swap_u16(v)# define CPU_TO_LE_U32(v) CPU_swap_u32(v)#else# define LE_TO_CPU_U16(v) (v)# define LE_TO_CPU_U32(v) (v)# define CPU_TO_LE_U16(v) (v)# define CPU_TO_LE_U32(v) (v)#endif/* * sector_data_t -- * corresponds to the sector on the device */typedef struct sector_data_s{ uint32_t sector_num; /* sector number on the device */ uint8_t data[0]; /* raw sector data */} sector_data_t;/* * Enum partition types * see list at http://ata-atapi.com/hiwtab.htm */enum { EMPTY_PARTITION = 0x00, DOS_FAT12_PARTITION = 0x01, DOS_FAT16_PARTITION = 0x04, EXTENDED_PARTITION = 0x05, DOS_P32MB_PARTITION = 0x06, FAT32_PARTITION = 0x0B, FAT32_LBA_PARTITION = 0x0C, FAT16_LBA_PARTITION = 0x0E, DM6_PARTITION = 0x54, EZD_PARTITION = 0x55, DM6_AUX1PARTITION = 0x51, DM6_AUX3PARTITION = 0x53, LINUX_SWAP = 0x82, LINUX_NATIVE = 0x83, LINUX_EXTENDED = 0x85};/* Forward declaration */struct disk_desc_s;/* * part_desc_t -- * contains all neccessary information about partition */typedef struct part_desc_s { uint8_t bootable; /* is the partition active */ uint8_t sys_type; /* type of partition */ uint8_t log_id; /* logical number of partition */ uint32_t start; /* first partition sector, in absolute numeration */ uint32_t size; /* size in sectors */ uint32_t end; /* last partition sector, end = start + size - 1 */ struct disk_desc_s *disk_desc; /* descriptor of disk, partition contains in */ struct part_desc_s *ext_part; /* extended partition containing this one */ /* partitions, containing in this one */ struct part_desc_s *sub_part[RTEMS_IDE_PARTITION_MAX_SUB_PARTITION_NUMBER];} part_desc_t;typedef struct disk_desc_s { dev_t dev; /* device number */ /* device name in /dev filesystem */ char dev_name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX]; uint32_t sector_size; /* size of sector */ uint32_t sector_bits; /* the base-2 logarithm of sector_size */ uint32_t lba_size; /* total amount of sectors in lba address mode */ int last_log_id; /* used for logical disks enumerating */ /* primary partition descriptors */ part_desc_t *partitions[RTEMS_IDE_PARTITION_MAX_PARTITION_NUMBER];} disk_desc_t;#ifdef __cplusplusextern "C" {#endif/* * rtems_ide_part_table_free -- * frees disk descriptor structure * * PARAMETERS: * disk_desc - disc descriptor structure to free * * RETURNS: * N/A */voidrtems_ide_part_table_free(disk_desc_t *disk_desc);/* * rtems_ide_part_table_get -- * reads partition table structure from the device * and creates disk description structure * * PARAMETERS: * dev_name - path to physical device in /dev filesystem * disk_desc - returned disc description structure * * RETURNS: * RTEMS_SUCCESSFUL if success, or -1 and corresponding errno else */rtems_status_codertems_ide_part_table_get(const char *dev_name, disk_desc_t *disk_desc);/* * rtems_ide_part_table_initialize -- * initializes logical devices on the physical IDE drive * * PARAMETERS: * dev_name - path to physical device in /dev filesystem * * RETURNS: * RTEMS_SUCCESSFUL if success, or -1 and corresponding errno else */rtems_status_codertems_ide_part_table_initialize(char *dev_name);#ifdef __cplusplus}#endif#endif /* _RTEMS_IDE_PART_TABLE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -