1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru md_u.h : user <=> kernel API between Linux raidtools and RAID drivers 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru Copyright (C) 1998 Ingo Molnar 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru This program is free software; you can redistribute it and/or modify 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru it under the terms of the GNU General Public License as published by 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru the Free Software Foundation; either version 2, or (at your option) 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru any later version. 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru You should have received a copy of the GNU General Public License 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru (for example /usr/src/linux/COPYING); if not, write to the Free 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru*/ 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _MD_U_H 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _MD_U_H 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* ioctls */ 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* status */ 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define RAID_VERSION _IOR (MD_MAJOR, 0x10, mdu_version_t) 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GET_ARRAY_INFO _IOR (MD_MAJOR, 0x11, mdu_array_info_t) 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GET_DISK_INFO _IOR (MD_MAJOR, 0x12, mdu_disk_info_t) 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define PRINT_RAID_DEBUG _IO (MD_MAJOR, 0x13) 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define RAID_AUTORUN _IO (MD_MAJOR, 0x14) 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define GET_BITMAP_FILE _IOR (MD_MAJOR, 0x15, mdu_bitmap_file_t) 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* configuration */ 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define CLEAR_ARRAY _IO (MD_MAJOR, 0x20) 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define ADD_NEW_DISK _IOW (MD_MAJOR, 0x21, mdu_disk_info_t) 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define HOT_REMOVE_DISK _IO (MD_MAJOR, 0x22) 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SET_ARRAY_INFO _IOW (MD_MAJOR, 0x23, mdu_array_info_t) 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SET_DISK_INFO _IO (MD_MAJOR, 0x24) 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define WRITE_RAID_INFO _IO (MD_MAJOR, 0x25) 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define UNPROTECT_ARRAY _IO (MD_MAJOR, 0x26) 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define PROTECT_ARRAY _IO (MD_MAJOR, 0x27) 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define HOT_ADD_DISK _IO (MD_MAJOR, 0x28) 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SET_DISK_FAULTY _IO (MD_MAJOR, 0x29) 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define HOT_GENERATE_ERROR _IO (MD_MAJOR, 0x2a) 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define SET_BITMAP_FILE _IOW (MD_MAJOR, 0x2b, int) 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* usage */ 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define RUN_ARRAY _IOW (MD_MAJOR, 0x30, mdu_param_t) 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define START_ARRAY _IO (MD_MAJOR, 0x31) 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define STOP_ARRAY _IO (MD_MAJOR, 0x32) 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define STOP_ARRAY_RO _IO (MD_MAJOR, 0x33) 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define RESTART_ARRAY_RW _IO (MD_MAJOR, 0x34) 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_version_s { 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int major; 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int minor; 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int patchlevel; 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_version_t; 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_array_info_s { 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Generic constant information 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int major_version; 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int minor_version; 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int patch_version; 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int ctime; 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int level; 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int size; 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int nr_disks; 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int raid_disks; 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int md_minor; 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int not_persistent; 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Generic state information 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int utime; /* 0 Superblock update time */ 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int state; /* 1 State bits (clean, ...) */ 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int active_disks; /* 2 Number of currently active disks */ 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int working_disks; /* 3 Number of working disks */ 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int failed_disks; /* 4 Number of failed disks */ 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int spare_disks; /* 5 Number of spare disks */ 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * Personality information 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int layout; /* 0 the array's physical layout */ 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int chunk_size; /* 1 chunk size in bytes */ 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_array_info_t; 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_disk_info_s { 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * configuration/status of one particular disk 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int number; 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int major; 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int minor; 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int raid_disk; 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int state; 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_disk_info_t; 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_start_info_s { 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru /* 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * configuration/status of one particular disk 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int major; 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int minor; 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int raid_disk; 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int state; 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_start_info_t; 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_bitmap_file_s 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char pathname[4096]; 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_bitmap_file_t; 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct mdu_param_s 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int personality; /* 1,2,3,4 */ 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int chunk_size; /* in bytes */ 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int max_fault; /* unused for now */ 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} mdu_param_t; 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 125