📄 ide_part_table.h
字号:
/***************************************************************************** * * ide_part_table.h * * The header file for library supporting "MS-DOS-style" partition table * * * 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.1.2.3 2005/07/06 18:06:18 joel Exp $ * *****************************************************************************/#ifndef __RTEMS_IDE_PART_TABLE_H__#define __RTEMS_IDE_PART_TABLE_H__#include <assert.h>#include <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 { unsigned32 sector_num; /* sector number on the device */ unsigned8 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 { unsigned8 bootable; /* is the partition active */ unsigned8 sys_type; /* type of partition */ unsigned8 log_id; /* logical number of partition */ unsigned32 start; /* first partition sector, in absolute numeration */ unsigned32 size; /* size in sectors */ unsigned32 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 */ unsigned8 dev_name[RTEMS_IDE_PARTITION_DEV_NAME_LENGTH_MAX]; unsigned32 sector_size; /* size of sector */ unsigned32 sector_bits; /* the base-2 logarithm of sector_size */ unsigned32 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 + -