181966bceSXin LI /*- 2*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 3718cf2ccSPedro F. Giffuni * 481966bceSXin LI * Copyright (c) 2011 HighPoint Technologies, Inc. 581966bceSXin LI * All rights reserved. 681966bceSXin LI * 781966bceSXin LI * Redistribution and use in source and binary forms, with or without 881966bceSXin LI * modification, are permitted provided that the following conditions 981966bceSXin LI * are met: 1081966bceSXin LI * 1. Redistributions of source code must retain the above copyright 1181966bceSXin LI * notice, this list of conditions and the following disclaimer. 1281966bceSXin LI * 2. Redistributions in binary form must reproduce the above copyright 1381966bceSXin LI * notice, this list of conditions and the following disclaimer in the 1481966bceSXin LI * documentation and/or other materials provided with the distribution. 1581966bceSXin LI * 1681966bceSXin LI * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1781966bceSXin LI * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1881966bceSXin LI * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1981966bceSXin LI * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2081966bceSXin LI * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2181966bceSXin LI * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2281966bceSXin LI * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2381966bceSXin LI * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2481966bceSXin LI * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2581966bceSXin LI * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2681966bceSXin LI * SUCH DAMAGE. 2781966bceSXin LI */ 2881966bceSXin LI 2981966bceSXin LI #include <dev/hpt27xx/hpt27xx_config.h> 3081966bceSXin LI 31f29c86f1SXin LI 3281966bceSXin LI #ifndef HPT_INTF_H 3381966bceSXin LI #define HPT_INTF_H 3481966bceSXin LI 3581966bceSXin LI #if defined(__BIG_ENDIAN__)&&!defined(__BIG_ENDIAN_BITFIELD) 3681966bceSXin LI #define __BIG_ENDIAN_BITFIELD 3781966bceSXin LI #endif 3881966bceSXin LI 3981966bceSXin LI #ifdef __cplusplus 4081966bceSXin LI extern "C" { 4181966bceSXin LI #endif 4281966bceSXin LI 4381966bceSXin LI #ifndef __GNUC__ 4481966bceSXin LI #define __attribute__(x) 4581966bceSXin LI #endif 4681966bceSXin LI 4781966bceSXin LI #pragma pack(1) 4881966bceSXin LI 4981966bceSXin LI /* 5081966bceSXin LI * Version of this interface. 5181966bceSXin LI * The user mode application must first issue a hpt_get_version() call to 5281966bceSXin LI * check HPT_INTERFACE_VERSION. When an utility using newer version interface 5381966bceSXin LI * is used with old version drivers, it must call only the functions that 5481966bceSXin LI * driver supported. 5581966bceSXin LI * A new version interface should only add ioctl functions; it should implement 5681966bceSXin LI * all old version functions without change their definition. 5781966bceSXin LI */ 5881966bceSXin LI #define __this_HPT_INTERFACE_VERSION 0x02010000 5981966bceSXin LI 6081966bceSXin LI #ifndef HPT_INTERFACE_VERSION 6181966bceSXin LI #error "You must define HPT_INTERFACE_VERSION you implemented" 6281966bceSXin LI #endif 6381966bceSXin LI 6481966bceSXin LI #if HPT_INTERFACE_VERSION > __this_HPT_INTERFACE_VERSION 6581966bceSXin LI #error "HPT_INTERFACE_VERSION is invalid" 6681966bceSXin LI #endif 6781966bceSXin LI 6881966bceSXin LI /* 6981966bceSXin LI * DEFINITION 7081966bceSXin LI * Logical device --- a device that can be accessed by OS. 7181966bceSXin LI * Physical device --- device attached to the controller. 7281966bceSXin LI * A logical device can be simply a physical device. 7381966bceSXin LI * 7481966bceSXin LI * Each logical and physical device has a 32bit ID. GUI will use this ID 7581966bceSXin LI * to identify devices. 7681966bceSXin LI * 1. The ID must be unique. 7781966bceSXin LI * 2. The ID must be immutable. Once an ID is assigned to a device, it 7881966bceSXin LI * must not change when system is running and the device exists. 7981966bceSXin LI * 3. The ID of logical device must be NOT reusable. If a device is 8081966bceSXin LI * removed, other newly created logical device must not use the same ID. 8181966bceSXin LI * 4. The ID must not be zero or 0xFFFFFFFF. 8281966bceSXin LI */ 8381966bceSXin LI typedef HPT_U32 DEVICEID; 8481966bceSXin LI 8581966bceSXin LI /* 8681966bceSXin LI * logical device type. 8781966bceSXin LI * Identify array (logical device) and physical device. 8881966bceSXin LI */ 8981966bceSXin LI #define LDT_ARRAY 1 9081966bceSXin LI #define LDT_DEVICE 2 9181966bceSXin LI 9281966bceSXin LI /* 9381966bceSXin LI * Array types 9481966bceSXin LI * GUI will treat all array as 1-level RAID. No RAID0/1 or RAID1/0. 9581966bceSXin LI * A RAID0/1 device is type AT_RAID1. A RAID1/0 device is type AT_RAID0. 9681966bceSXin LI * Their members may be another array of type RAID0 or RAID1. 9781966bceSXin LI */ 9881966bceSXin LI #define AT_UNKNOWN 0 9981966bceSXin LI #define AT_RAID0 1 10081966bceSXin LI #define AT_RAID1 2 10181966bceSXin LI #define AT_RAID5 3 10281966bceSXin LI #define AT_RAID6 4 10381966bceSXin LI #define AT_RAID3 5 10481966bceSXin LI #define AT_RAID4 6 10581966bceSXin LI #define AT_JBOD 7 10681966bceSXin LI #define AT_RAID1E 8 10781966bceSXin LI 10881966bceSXin LI /* 10981966bceSXin LI * physical device type 11081966bceSXin LI */ 11181966bceSXin LI #define PDT_UNKNOWN 0 11281966bceSXin LI #define PDT_HARDDISK 1 11381966bceSXin LI #define PDT_CDROM 2 11481966bceSXin LI #define PDT_TAPE 3 115f29c86f1SXin LI #define PDT_CHANGER 4 11681966bceSXin LI 11781966bceSXin LI /* 11881966bceSXin LI * Some constants. 11981966bceSXin LI */ 12081966bceSXin LI #define MAX_NAME_LENGTH 36 12181966bceSXin LI #define MAX_ARRAYNAME_LEN 16 12281966bceSXin LI 12381966bceSXin LI #define MAX_ARRAY_MEMBERS_V1 8 12481966bceSXin LI 12581966bceSXin LI #ifndef MAX_ARRAY_MEMBERS_V2 12681966bceSXin LI #define MAX_ARRAY_MEMBERS_V2 16 12781966bceSXin LI #endif 12881966bceSXin LI 12981966bceSXin LI #ifndef MAX_ARRAY_MEMBERS_V3 13081966bceSXin LI #define MAX_ARRAY_MEMBERS_V3 64 13181966bceSXin LI #endif 13281966bceSXin LI 13304389c85SGordon Bergling /* keep definition for source code compatibility */ 13481966bceSXin LI #define MAX_ARRAY_MEMBERS MAX_ARRAY_MEMBERS_V1 13581966bceSXin LI 13681966bceSXin LI /* 13781966bceSXin LI * io commands 13881966bceSXin LI * GUI use these commands to do IO on logical/physical devices. 13981966bceSXin LI */ 14081966bceSXin LI #define IO_COMMAND_READ 1 14181966bceSXin LI #define IO_COMMAND_WRITE 2 14281966bceSXin LI 14381966bceSXin LI 14481966bceSXin LI 14581966bceSXin LI /* 14681966bceSXin LI * array flags 14781966bceSXin LI */ 14881966bceSXin LI #define ARRAY_FLAG_DISABLED 0x00000001 /* The array is disabled */ 14981966bceSXin LI #define ARRAY_FLAG_NEEDBUILDING 0x00000002 /* array data need to be rebuilt */ 15081966bceSXin LI #define ARRAY_FLAG_REBUILDING 0x00000004 /* array is in rebuilding process */ 15181966bceSXin LI #define ARRAY_FLAG_BROKEN 0x00000008 /* broken but may still working */ 15281966bceSXin LI #define ARRAY_FLAG_BOOTDISK 0x00000010 /* array has a active partition */ 15381966bceSXin LI 15481966bceSXin LI #define ARRAY_FLAG_BOOTMARK 0x00000040 /* array has boot mark set */ 15581966bceSXin LI #define ARRAY_FLAG_NEED_AUTOREBUILD 0x00000080 /* auto-rebuild should start */ 15681966bceSXin LI #define ARRAY_FLAG_VERIFYING 0x00000100 /* is being verified */ 15781966bceSXin LI #define ARRAY_FLAG_INITIALIZING 0x00000200 /* is being initialized */ 15881966bceSXin LI #define ARRAY_FLAG_TRANSFORMING 0x00000400 /* tranform in progress */ 15981966bceSXin LI #define ARRAY_FLAG_NEEDTRANSFORM 0x00000800 /* array need tranform */ 16081966bceSXin LI #define ARRAY_FLAG_NEEDINITIALIZING 0x00001000 /* the array's initialization hasn't finished*/ 16181966bceSXin LI #define ARRAY_FLAG_BROKEN_REDUNDANT 0x00002000 /* broken but redundant (raid6) */ 16281966bceSXin LI #define ARRAY_FLAG_RAID15PLUS 0x80000000 /* display this RAID 1 as RAID 1.5 */ 163f29c86f1SXin LI 164f29c86f1SXin LI #define ARRAY_FLAG_ZERO_STARTING 0x40000000 /* start lba of all members of this array is 0 */ 165f29c86f1SXin LI 16681966bceSXin LI /* 16781966bceSXin LI * device flags 16881966bceSXin LI */ 16981966bceSXin LI #define DEVICE_FLAG_DISABLED 0x00000001 /* device is disabled */ 17081966bceSXin LI #define DEVICE_FLAG_BOOTDISK 0x00000002 /* disk has a active partition */ 17181966bceSXin LI #define DEVICE_FLAG_BOOTMARK 0x00000004 /* disk has boot mark set */ 17281966bceSXin LI #define DEVICE_FLAG_WITH_601 0x00000008 /* has HPT601 connected */ 17381966bceSXin LI #define DEVICE_FLAG_SATA 0x00000010 /* SATA or SAS device */ 17481966bceSXin LI #define DEVICE_FLAG_ON_PM_PORT 0x00000020 /* PM port */ 17581966bceSXin LI #define DEVICE_FLAG_SAS 0x00000040 /* SAS device */ 17681966bceSXin LI #define DEVICE_FLAG_IN_ENCLOSURE 0x00000080 /* PathId is enclosure# */ 177f29c86f1SXin LI #define DEVICE_FLAG_TAPE 0x00000200 /* SAS Tape device */ 178f29c86f1SXin LI #define DEVICE_FLAG_CHANGER 0x00000400 /* SAS Changer device */ 17981966bceSXin LI #define DEVICE_FLAG_UNINITIALIZED 0x00010000 /* device is not initialized, can't be used to create array */ 18081966bceSXin LI #define DEVICE_FLAG_LEGACY 0x00020000 /* single disk & mbr contains at least one partition */ 181f29c86f1SXin LI #define DEVICE_FLAG_BAD_SECTOR_FOUND 0x00040000 /* found bad sector on target disk, set and clear by GUI */ 18281966bceSXin LI 18381966bceSXin LI #define DEVICE_FLAG_IS_SPARE 0x80000000 /* is a spare disk */ 18481966bceSXin LI 185f29c86f1SXin LI 186f29c86f1SXin LI #define DEVICE_FLAG_SSD 0x00000100 /* SSD device */ 187f29c86f1SXin LI #define DEVICE_FLAG_3G 0x10000000 188f29c86f1SXin LI #define DEVICE_FLAG_6G 0x20000000 189f29c86f1SXin LI 190f29c86f1SXin LI 19181966bceSXin LI /* 19281966bceSXin LI * array states used by hpt_set_array_state() 19381966bceSXin LI */ 19481966bceSXin LI /* old defines */ 19581966bceSXin LI #define MIRROR_REBUILD_START 1 19681966bceSXin LI #define MIRROR_REBUILD_ABORT 2 19781966bceSXin LI #define MIRROR_REBUILD_COMPLETE 3 19881966bceSXin LI /* new defines */ 19981966bceSXin LI #define AS_REBUILD_START 1 20081966bceSXin LI #define AS_REBUILD_ABORT 2 20181966bceSXin LI #define AS_REBUILD_PAUSE AS_REBUILD_ABORT 20281966bceSXin LI #define AS_REBUILD_COMPLETE 3 20381966bceSXin LI #define AS_VERIFY_START 4 20481966bceSXin LI #define AS_VERIFY_ABORT 5 20581966bceSXin LI #define AS_VERIFY_COMPLETE 6 20681966bceSXin LI #define AS_INITIALIZE_START 7 20781966bceSXin LI #define AS_INITIALIZE_ABORT 8 20881966bceSXin LI #define AS_INITIALIZE_COMPLETE 9 20981966bceSXin LI #define AS_VERIFY_FAILED 10 21081966bceSXin LI #define AS_REBUILD_STOP 11 21181966bceSXin LI #define AS_SAVE_STATE 12 21281966bceSXin LI #define AS_TRANSFORM_START 13 21381966bceSXin LI #define AS_TRANSFORM_ABORT 14 21481966bceSXin LI 21581966bceSXin LI /************************************************************************ 21681966bceSXin LI * ioctl code 21781966bceSXin LI * It would be better if ioctl code are the same on different platforms, 21881966bceSXin LI * but we must not conflict with system defined ioctl code. 21981966bceSXin LI ************************************************************************/ 22081966bceSXin LI #if defined(LINUX) || defined(__FreeBSD_version) || defined(linux) 22181966bceSXin LI #define HPT_CTL_CODE(x) (x+0xFF00) 22281966bceSXin LI #define HPT_CTL_CODE_LINUX_TO_IOP(x) ((x)-0xff00) 22381966bceSXin LI #elif defined(_MS_WIN32_) || defined(WIN32) 22481966bceSXin LI 22581966bceSXin LI #ifndef CTL_CODE 22681966bceSXin LI #define CTL_CODE( DeviceType, Function, Method, Access ) \ 22781966bceSXin LI (((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)) 22881966bceSXin LI #endif 22981966bceSXin LI #define HPT_CTL_CODE(x) CTL_CODE(0x370, 0x900+(x), 0, 0) 23081966bceSXin LI #define HPT_CTL_CODE_WIN32_TO_IOP(x) ((((x) & 0xffff)>>2)-0x900) 23181966bceSXin LI 23281966bceSXin LI #else 23381966bceSXin LI #define HPT_CTL_CODE(x) (x) 23481966bceSXin LI #endif 23581966bceSXin LI 23681966bceSXin LI #define HPT_IOCTL_GET_VERSION HPT_CTL_CODE(0) 23781966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_COUNT HPT_CTL_CODE(1) 23881966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_INFO HPT_CTL_CODE(2) 23981966bceSXin LI #define HPT_IOCTL_GET_CHANNEL_INFO HPT_CTL_CODE(3) 24081966bceSXin LI #define HPT_IOCTL_GET_LOGICAL_DEVICES HPT_CTL_CODE(4) 24181966bceSXin LI #define HPT_IOCTL_GET_DEVICE_INFO HPT_CTL_CODE(5) 24281966bceSXin LI #define HPT_IOCTL_CREATE_ARRAY HPT_CTL_CODE(6) 24381966bceSXin LI #define HPT_IOCTL_DELETE_ARRAY HPT_CTL_CODE(7) 24481966bceSXin LI #define HPT_IOCTL_ARRAY_IO HPT_CTL_CODE(8) 24581966bceSXin LI #define HPT_IOCTL_DEVICE_IO HPT_CTL_CODE(9) 24681966bceSXin LI #define HPT_IOCTL_GET_EVENT HPT_CTL_CODE(10) 24781966bceSXin LI #define HPT_IOCTL_REBUILD_MIRROR HPT_CTL_CODE(11) 24881966bceSXin LI /* use HPT_IOCTL_REBUILD_DATA_BLOCK from now on */ 24981966bceSXin LI #define HPT_IOCTL_REBUILD_DATA_BLOCK HPT_IOCTL_REBUILD_MIRROR 25081966bceSXin LI #define HPT_IOCTL_ADD_SPARE_DISK HPT_CTL_CODE(12) 25181966bceSXin LI #define HPT_IOCTL_REMOVE_SPARE_DISK HPT_CTL_CODE(13) 25281966bceSXin LI #define HPT_IOCTL_ADD_DISK_TO_ARRAY HPT_CTL_CODE(14) 25381966bceSXin LI #define HPT_IOCTL_SET_ARRAY_STATE HPT_CTL_CODE(15) 25481966bceSXin LI #define HPT_IOCTL_SET_ARRAY_INFO HPT_CTL_CODE(16) 25581966bceSXin LI #define HPT_IOCTL_SET_DEVICE_INFO HPT_CTL_CODE(17) 25681966bceSXin LI #define HPT_IOCTL_RESCAN_DEVICES HPT_CTL_CODE(18) 25781966bceSXin LI #define HPT_IOCTL_GET_DRIVER_CAPABILITIES HPT_CTL_CODE(19) 25881966bceSXin LI #define HPT_IOCTL_GET_601_INFO HPT_CTL_CODE(20) 25981966bceSXin LI #define HPT_IOCTL_SET_601_INFO HPT_CTL_CODE(21) 26081966bceSXin LI #define HPT_IOCTL_LOCK_DEVICE HPT_CTL_CODE(22) 26181966bceSXin LI #define HPT_IOCTL_UNLOCK_DEVICE HPT_CTL_CODE(23) 26281966bceSXin LI #define HPT_IOCTL_IDE_PASS_THROUGH HPT_CTL_CODE(24) 26381966bceSXin LI #define HPT_IOCTL_VERIFY_DATA_BLOCK HPT_CTL_CODE(25) 26481966bceSXin LI #define HPT_IOCTL_INITIALIZE_DATA_BLOCK HPT_CTL_CODE(26) 26581966bceSXin LI #define HPT_IOCTL_ADD_DEDICATED_SPARE HPT_CTL_CODE(27) 26681966bceSXin LI #define HPT_IOCTL_DEVICE_IO_EX HPT_CTL_CODE(28) 26781966bceSXin LI #define HPT_IOCTL_SET_BOOT_MARK HPT_CTL_CODE(29) 26881966bceSXin LI #define HPT_IOCTL_QUERY_REMOVE HPT_CTL_CODE(30) 26981966bceSXin LI #define HPT_IOCTL_REMOVE_DEVICES HPT_CTL_CODE(31) 27081966bceSXin LI #define HPT_IOCTL_CREATE_ARRAY_V2 HPT_CTL_CODE(32) 27181966bceSXin LI #define HPT_IOCTL_GET_DEVICE_INFO_V2 HPT_CTL_CODE(33) 27281966bceSXin LI #define HPT_IOCTL_SET_DEVICE_INFO_V2 HPT_CTL_CODE(34) 27381966bceSXin LI #define HPT_IOCTL_REBUILD_DATA_BLOCK_V2 HPT_CTL_CODE(35) 27481966bceSXin LI #define HPT_IOCTL_VERIFY_DATA_BLOCK_V2 HPT_CTL_CODE(36) 27581966bceSXin LI #define HPT_IOCTL_INITIALIZE_DATA_BLOCK_V2 HPT_CTL_CODE(37) 27681966bceSXin LI #define HPT_IOCTL_LOCK_DEVICE_V2 HPT_CTL_CODE(38) 27781966bceSXin LI #define HPT_IOCTL_DEVICE_IO_V2 HPT_CTL_CODE(39) 27881966bceSXin LI #define HPT_IOCTL_DEVICE_IO_EX_V2 HPT_CTL_CODE(40) 27981966bceSXin LI #define HPT_IOCTL_CREATE_TRANSFORM HPT_CTL_CODE(41) 28081966bceSXin LI #define HPT_IOCTL_STEP_TRANSFORM HPT_CTL_CODE(42) 28181966bceSXin LI #define HPT_IOCTL_SET_VDEV_INFO HPT_CTL_CODE(43) 28281966bceSXin LI #define HPT_IOCTL_CALC_MAX_CAPACITY HPT_CTL_CODE(44) 28381966bceSXin LI #define HPT_IOCTL_INIT_DISKS HPT_CTL_CODE(45) 28481966bceSXin LI #define HPT_IOCTL_GET_DEVICE_INFO_V3 HPT_CTL_CODE(46) 28581966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_INFO_V2 HPT_CTL_CODE(47) 28681966bceSXin LI #define HPT_IOCTL_I2C_TRANSACTION HPT_CTL_CODE(48) 28781966bceSXin LI #define HPT_IOCTL_GET_PARAMETER_LIST HPT_CTL_CODE(49) 28881966bceSXin LI #define HPT_IOCTL_GET_PARAMETER HPT_CTL_CODE(50) 28981966bceSXin LI #define HPT_IOCTL_SET_PARAMETER HPT_CTL_CODE(51) 29081966bceSXin LI #define HPT_IOCTL_GET_DRIVER_CAPABILITIES_V2 HPT_CTL_CODE(52) 29181966bceSXin LI #define HPT_IOCTL_GET_CHANNEL_INFO_V2 HPT_CTL_CODE(53) 29281966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_INFO_V3 HPT_CTL_CODE(54) 29381966bceSXin LI #define HPT_IOCTL_GET_DEVICE_INFO_V4 HPT_CTL_CODE(55) 29481966bceSXin LI #define HPT_IOCTL_CREATE_ARRAY_V3 HPT_CTL_CODE(56) 29581966bceSXin LI #define HPT_IOCTL_CREATE_TRANSFORM_V2 HPT_CTL_CODE(57) 29681966bceSXin LI #define HPT_IOCTL_CALC_MAX_CAPACITY_V2 HPT_CTL_CODE(58) 29781966bceSXin LI #define HPT_IOCTL_SCSI_PASSTHROUGH HPT_CTL_CODE(59) 29881966bceSXin LI #define HPT_IOCTL_GET_PHYSICAL_DEVICES HPT_CTL_CODE(60) 29981966bceSXin LI #define HPT_IOCTL_GET_ENCLOSURE_COUNT HPT_CTL_CODE(61) 30081966bceSXin LI #define HPT_IOCTL_GET_ENCLOSURE_INFO HPT_CTL_CODE(62) 30181966bceSXin LI #define HPT_IOCTL_GET_PERFMON_STATUS HPT_CTL_CODE(63) 30281966bceSXin LI #define HPT_IOCTL_SET_PERFMON_STATUS HPT_CTL_CODE(64) 30381966bceSXin LI #define HPT_IOCTL_GET_PERFMON_DATA HPT_CTL_CODE(65) 30481966bceSXin LI #define HPT_IOCTL_IDE_PASS_THROUGH_V2 HPT_CTL_CODE(66) 30581966bceSXin LI #define HPT_IOCTL_GET_ENCLOSURE_INFO_V2 HPT_CTL_CODE(67) 30681966bceSXin LI #define HPT_IOCTL_GET_ENCLOSURE_INFO_V3 HPT_CTL_CODE(68) 307f29c86f1SXin LI #define HPT_IOCTL_ACCESS_CONFIG_REG HPT_CTL_CODE(69) 308f29c86f1SXin LI 309f29c86f1SXin LI #define HPT_IOCTL_GET_ENCLOSURE_INFO_V4 HPT_CTL_CODE(70) 310f29c86f1SXin LI #define HPT_IOCTL_GET_ENCLOSURE_ELEMENT_INFO HPT_CTL_CODE(71) 311f29c86f1SXin LI #define HPT_IOCTL_DUMP_METADATA HPT_CTL_CODE(72) 312f29c86f1SXin LI #define HPT_IOCTL_GET_CONTROLLER_INFO_V2_EXT HPT_CTL_CODE(73) 313f29c86f1SXin LI 31481966bceSXin LI 31581966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_IDS HPT_CTL_CODE(100) 31681966bceSXin LI #define HPT_IOCTL_GET_DCB HPT_CTL_CODE(101) 31781966bceSXin LI 31881966bceSXin LI #define HPT_IOCTL_EPROM_IO HPT_CTL_CODE(102) 31981966bceSXin LI #define HPT_IOCTL_GET_CONTROLLER_VENID HPT_CTL_CODE(103) 32081966bceSXin LI 321f29c86f1SXin LI 322f29c86f1SXin LI #define HPT_IOCTL_GET_DRIVER_CAPABILITIES_CC HPT_CTL_CODE(200) 323f29c86f1SXin LI #define HPT_IOCTL_GET_CCS_INFO HPT_CTL_CODE(201) 324f29c86f1SXin LI #define HPT_IOCTL_CREATE_CC HPT_CTL_CODE(202) 325f29c86f1SXin LI #define HPT_IOCTL_DELETE_CC HPT_CTL_CODE(203) 326f29c86f1SXin LI #define HPT_IOCTL_REENABLE_ARRAY HPT_CTL_CODE(204) 327f29c86f1SXin LI 32881966bceSXin LI /************************************************************************ 32981966bceSXin LI * shared data structures 33081966bceSXin LI ************************************************************************/ 33181966bceSXin LI 33281966bceSXin LI /* 33381966bceSXin LI * Chip Type 33481966bceSXin LI */ 33581966bceSXin LI #define CHIP_TYPE_HPT366 1 33681966bceSXin LI #define CHIP_TYPE_HPT368 2 33781966bceSXin LI #define CHIP_TYPE_HPT370 3 33881966bceSXin LI #define CHIP_TYPE_HPT370A 4 33981966bceSXin LI #define CHIP_TYPE_HPT370B 5 34081966bceSXin LI #define CHIP_TYPE_HPT374 6 34181966bceSXin LI #define CHIP_TYPE_HPT372 7 34281966bceSXin LI #define CHIP_TYPE_HPT372A 8 34381966bceSXin LI #define CHIP_TYPE_HPT302 9 34481966bceSXin LI #define CHIP_TYPE_HPT371 10 34581966bceSXin LI #define CHIP_TYPE_HPT372N 11 34681966bceSXin LI #define CHIP_TYPE_HPT302N 12 34781966bceSXin LI #define CHIP_TYPE_HPT371N 13 34881966bceSXin LI #define CHIP_TYPE_SI3112A 14 34981966bceSXin LI #define CHIP_TYPE_ICH5 15 35081966bceSXin LI #define CHIP_TYPE_ICH5R 16 35181966bceSXin LI #define CHIP_TYPE_MV50XX 20 35281966bceSXin LI #define CHIP_TYPE_MV60X1 21 35381966bceSXin LI #define CHIP_TYPE_MV60X2 22 35481966bceSXin LI #define CHIP_TYPE_MV70X2 23 35581966bceSXin LI #define CHIP_TYPE_MV5182 24 35681966bceSXin LI #define CHIP_TYPE_IOP331 31 35781966bceSXin LI #define CHIP_TYPE_IOP333 32 35881966bceSXin LI #define CHIP_TYPE_IOP341 33 35981966bceSXin LI #define CHIP_TYPE_IOP348 34 36081966bceSXin LI 36181966bceSXin LI /* 36281966bceSXin LI * Chip Flags 36381966bceSXin LI */ 36481966bceSXin LI #define CHIP_SUPPORT_ULTRA_66 0x20 36581966bceSXin LI #define CHIP_SUPPORT_ULTRA_100 0x40 36681966bceSXin LI #define CHIP_HPT3XX_DPLL_MODE 0x80 36781966bceSXin LI #define CHIP_SUPPORT_ULTRA_133 0x01 36881966bceSXin LI #define CHIP_SUPPORT_ULTRA_150 0x02 36981966bceSXin LI #define CHIP_MASTER 0x04 37081966bceSXin LI #define CHIP_SUPPORT_SATA_300 0x08 37181966bceSXin LI 37281966bceSXin LI #define HPT_SPIN_UP_MODE_NOSUPPORT 0 37381966bceSXin LI #define HPT_SPIN_UP_MODE_FULL 1 37481966bceSXin LI #define HPT_SPIN_UP_MODE_STANDBY 2 37581966bceSXin LI 376f29c86f1SXin LI #define HPT_CAP_DUMP_METADATA 0x1 377f29c86f1SXin LI #define HPT_CAP_DISK_CHECKING 0x2 378f29c86f1SXin LI #define HPT_CAP_REPORT_SECTOR_SIZE 0x10 379f29c86f1SXin LI 38081966bceSXin LI typedef struct _DRIVER_CAPABILITIES { 38181966bceSXin LI HPT_U32 dwSize; 38281966bceSXin LI 38381966bceSXin LI HPT_U8 MaximumControllers; /* maximum controllers the driver can support */ 38481966bceSXin LI HPT_U8 SupportCrossControllerRAID; /* 1-support, 0-not support */ 38581966bceSXin LI HPT_U8 MinimumBlockSizeShift; /* minimum block size shift */ 38681966bceSXin LI HPT_U8 MaximumBlockSizeShift; /* maximum block size shift */ 38781966bceSXin LI 38881966bceSXin LI HPT_U8 SupportDiskModeSetting; 38981966bceSXin LI HPT_U8 SupportSparePool; 39081966bceSXin LI HPT_U8 MaximumArrayNameLength; 39181966bceSXin LI /* only one HPT_U8 left here! */ 39281966bceSXin LI #ifdef __BIG_ENDIAN_BITFIELD 39381966bceSXin LI HPT_U8 reserved: 2; 39481966bceSXin LI HPT_U8 SupportPerformanceMonitor: 1; 39581966bceSXin LI HPT_U8 SupportVariableSectorSize: 1; 39681966bceSXin LI HPT_U8 SupportHotSwap: 1; 39781966bceSXin LI HPT_U8 HighPerformanceRAID1: 1; 39881966bceSXin LI HPT_U8 RebuildProcessInDriver: 1; 39981966bceSXin LI HPT_U8 SupportDedicatedSpare: 1; 40081966bceSXin LI #else 40181966bceSXin LI HPT_U8 SupportDedicatedSpare: 1; /* call hpt_add_dedicated_spare() for dedicated spare. */ 40281966bceSXin LI HPT_U8 RebuildProcessInDriver: 1; /* Windows only. used by mid layer for rebuild control. */ 40381966bceSXin LI HPT_U8 HighPerformanceRAID1: 1; 40481966bceSXin LI HPT_U8 SupportHotSwap: 1; 40581966bceSXin LI HPT_U8 SupportVariableSectorSize: 1; 40681966bceSXin LI HPT_U8 SupportPerformanceMonitor: 1; 40781966bceSXin LI HPT_U8 reserved: 2; 40881966bceSXin LI #endif 40981966bceSXin LI 41081966bceSXin LI 41181966bceSXin LI HPT_U8 SupportedRAIDTypes[16]; 41281966bceSXin LI /* maximum members in an array corresponding to SupportedRAIDTypes */ 41381966bceSXin LI HPT_U8 MaximumArrayMembers[16]; 41481966bceSXin LI } 41581966bceSXin LI DRIVER_CAPABILITIES, *PDRIVER_CAPABILITIES; 41681966bceSXin LI 41781966bceSXin LI typedef struct _DRIVER_CAPABILITIES_V2 { 41881966bceSXin LI DRIVER_CAPABILITIES v1; 41981966bceSXin LI HPT_U8 SupportedCachePolicies[16]; 420f29c86f1SXin LI HPT_U32 ConfigRegSize; /* max sectors */ 421f29c86f1SXin LI HPT_U32 SupportDiskCachePolicy; /* disable/enable disk cache policy */ 422f29c86f1SXin LI HPT_U32 Flags; 423f29c86f1SXin LI HPT_U32 reserved[14]; 42481966bceSXin LI } 42581966bceSXin LI DRIVER_CAPABILITIES_V2, *PDRIVER_CAPABILITIES_V2; 42681966bceSXin LI 42781966bceSXin LI /* 42881966bceSXin LI * Controller information. 42981966bceSXin LI */ 43081966bceSXin LI typedef struct _CONTROLLER_INFO { 43181966bceSXin LI HPT_U8 ChipType; /* chip type */ 43281966bceSXin LI HPT_U8 InterruptLevel; /* IRQ level */ 43381966bceSXin LI HPT_U8 NumBuses; /* bus count */ 43481966bceSXin LI HPT_U8 ChipFlags; 43581966bceSXin LI 43681966bceSXin LI HPT_U8 szProductID[MAX_NAME_LENGTH];/* product name */ 43781966bceSXin LI HPT_U8 szVendorID[MAX_NAME_LENGTH]; /* vender name */ 43881966bceSXin LI 43981966bceSXin LI } CONTROLLER_INFO, *PCONTROLLER_INFO; 44081966bceSXin LI 44181966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 44281966bceSXin LI typedef struct _CONTROLLER_INFO_V2 { 44381966bceSXin LI HPT_U8 ChipType; /* chip type */ 44481966bceSXin LI HPT_U8 InterruptLevel; /* IRQ level */ 44581966bceSXin LI HPT_U8 NumBuses; /* bus count */ 44681966bceSXin LI HPT_U8 ChipFlags; 44781966bceSXin LI 44881966bceSXin LI HPT_U8 szProductID[MAX_NAME_LENGTH];/* product name */ 44981966bceSXin LI HPT_U8 szVendorID[MAX_NAME_LENGTH]; /* vender name */ 45081966bceSXin LI 45181966bceSXin LI HPT_U32 GroupId; /* low 32bit of vbus pointer the controller belongs 45281966bceSXin LI * the master controller has CHIP_MASTER flag set*/ 45381966bceSXin LI HPT_U8 pci_tree; 45481966bceSXin LI HPT_U8 pci_bus; 45581966bceSXin LI HPT_U8 pci_device; 45681966bceSXin LI HPT_U8 pci_function; 45781966bceSXin LI 45881966bceSXin LI HPT_U32 ExFlags; 45981966bceSXin LI } CONTROLLER_INFO_V2, *PCONTROLLER_INFO_V2; 46081966bceSXin LI 461f29c86f1SXin LI typedef struct _CONTROLLER_INFO_V2_EXT { 462f29c86f1SXin LI HPT_U8 MaxWidth; 463f29c86f1SXin LI HPT_U8 CurrentWidth; 464f29c86f1SXin LI HPT_U8 MaxSpeed; 465f29c86f1SXin LI HPT_U8 CurrentSpeed; 466f29c86f1SXin LI HPT_U8 reserve[64]; 467f29c86f1SXin LI } CONTROLLER_INFO_V2_EXT, *PCONTROLLER_INFO_V2_EXT; 468f29c86f1SXin LI 46981966bceSXin LI 47081966bceSXin LI #define CEXF_IOPModel 1 47181966bceSXin LI #define CEXF_SDRAMSize 2 47281966bceSXin LI #define CEXF_BatteryInstalled 4 47381966bceSXin LI #define CEXF_BatteryStatus 8 47481966bceSXin LI #define CEXF_BatteryVoltage 0x10 47581966bceSXin LI #define CEXF_BatteryBackupTime 0x20 47681966bceSXin LI #define CEXF_FirmwareVersion 0x40 47781966bceSXin LI #define CEXF_SerialNumber 0x80 47881966bceSXin LI #define CEXF_BatteryTemperature 0x100 47981966bceSXin LI #define CEXF_Power12v 0x200 48081966bceSXin LI #define CEXF_Power5v 0x400 48181966bceSXin LI #define CEXF_Power3p3v 0x800 48281966bceSXin LI #define CEXF_Power2p5v 0x1000 48381966bceSXin LI #define CEXF_Power1p8v 0x2000 48481966bceSXin LI #define CEXF_Core1p8v 0x4000 48581966bceSXin LI #define CEXF_Core1p2v 0x8000 48681966bceSXin LI #define CEXF_DDR1p8v 0x10000 48781966bceSXin LI #define CEXF_DDR1p8vRef 0x20000 48881966bceSXin LI #define CEXF_CPUTemperature 0x40000 48981966bceSXin LI #define CEXF_BoardTemperature 0x80000 49081966bceSXin LI #define CEXF_FanSpeed 0x100000 49181966bceSXin LI #define CEXF_Core1p0v 0x200000 49281966bceSXin LI #define CEXF_Fan2Speed 0x400000 493f29c86f1SXin LI #define CEXF_Power1p0v 0x800000 494f29c86f1SXin LI #define CEXF_Power1p5v 0x1000000 495f29c86f1SXin LI #define CEXF_SASAddress 0x2000000 49681966bceSXin LI 49781966bceSXin LI typedef struct _CONTROLLER_INFO_V3 { 49881966bceSXin LI HPT_U8 ChipType; 49981966bceSXin LI HPT_U8 InterruptLevel; 50081966bceSXin LI HPT_U8 NumBuses; 50181966bceSXin LI HPT_U8 ChipFlags; 50281966bceSXin LI HPT_U8 szProductID[MAX_NAME_LENGTH]; 50381966bceSXin LI HPT_U8 szVendorID[MAX_NAME_LENGTH]; 50481966bceSXin LI HPT_U32 GroupId; 50581966bceSXin LI HPT_U8 pci_tree; 50681966bceSXin LI HPT_U8 pci_bus; 50781966bceSXin LI HPT_U8 pci_device; 50881966bceSXin LI HPT_U8 pci_function; 50981966bceSXin LI HPT_U32 ExFlags; 51081966bceSXin LI HPT_U8 IOPModel[32]; 51181966bceSXin LI HPT_U32 SDRAMSize; 51281966bceSXin LI HPT_U8 BatteryInstalled; 51381966bceSXin LI HPT_U8 BatteryStatus; 51481966bceSXin LI HPT_U16 BatteryVoltage; 51581966bceSXin LI HPT_U32 BatteryBackupTime; 51681966bceSXin LI HPT_U32 FirmwareVersion; 51781966bceSXin LI HPT_U8 SerialNumber[32]; 51881966bceSXin LI HPT_U8 BatteryMBInstalled; 51981966bceSXin LI HPT_U8 BatteryTemperature; 52081966bceSXin LI signed char CPUTemperature; 52181966bceSXin LI signed char BoardTemperature; 52281966bceSXin LI HPT_U16 FanSpeed; 52381966bceSXin LI HPT_U16 Power12v; 52481966bceSXin LI HPT_U16 Power5v; 52581966bceSXin LI HPT_U16 Power3p3v; 52681966bceSXin LI HPT_U16 Power2p5v; 52781966bceSXin LI HPT_U16 Power1p8v; 52881966bceSXin LI HPT_U16 Core1p8v; 52981966bceSXin LI HPT_U16 Core1p2v; 53081966bceSXin LI HPT_U16 DDR1p8v; 53181966bceSXin LI HPT_U16 DDR1p8vRef; 53281966bceSXin LI HPT_U16 Core1p0v; 53381966bceSXin LI HPT_U16 Fan2Speed; 534f29c86f1SXin LI HPT_U16 Power1p0v; 535f29c86f1SXin LI HPT_U16 Power1p5v; 536f29c86f1SXin LI HPT_U8 SASAddress[8]; 537f29c86f1SXin LI HPT_U8 reserve[48]; 53881966bceSXin LI } 53981966bceSXin LI CONTROLLER_INFO_V3, *PCONTROLLER_INFO_V3; 54081966bceSXin LI typedef char check_CONTROLLER_INFO_V3[sizeof(CONTROLLER_INFO_V3)==256? 1:-1]; 54181966bceSXin LI #endif 54281966bceSXin LI /* 54381966bceSXin LI * Channel information. 54481966bceSXin LI */ 54581966bceSXin LI typedef struct _CHANNEL_INFO { 54681966bceSXin LI HPT_U32 IoPort; /* IDE Base Port Address */ 54781966bceSXin LI HPT_U32 ControlPort; /* IDE Control Port Address */ 54881966bceSXin LI 54981966bceSXin LI DEVICEID Devices[2]; /* device connected to this channel */ 55081966bceSXin LI 55181966bceSXin LI } CHANNEL_INFO, *PCHANNEL_INFO; 55281966bceSXin LI 55381966bceSXin LI typedef struct _CHANNEL_INFO_V2 { 55481966bceSXin LI HPT_U32 IoPort; /* IDE Base Port Address */ 55581966bceSXin LI HPT_U32 ControlPort; /* IDE Control Port Address */ 55681966bceSXin LI 55781966bceSXin LI DEVICEID Devices[2+13]; /* device connected to this channel, PMPort max=15 */ 55881966bceSXin LI } CHANNEL_INFO_V2, *PCHANNEL_INFO_V2; 55981966bceSXin LI 56081966bceSXin LI typedef struct _ENCLOSURE_INFO { 56181966bceSXin LI HPT_U8 EnclosureType; 56281966bceSXin LI HPT_U8 NumberOfPhys; 56381966bceSXin LI HPT_U8 AttachedTo; 56481966bceSXin LI HPT_U8 Status; 56581966bceSXin LI HPT_U8 VendorId[8]; 56681966bceSXin LI HPT_U8 ProductId[16]; 56781966bceSXin LI HPT_U8 ProductRevisionLevel[4]; 56881966bceSXin LI HPT_U32 PortPhyMap; 56981966bceSXin LI HPT_U32 reserve[55]; 57081966bceSXin LI } ENCLOSURE_INFO, *PENCLOSURE_INFO; 57181966bceSXin LI 57281966bceSXin LI 57381966bceSXin LI typedef struct _SES_ELEMENT_STATUS { 57481966bceSXin LI HPT_U8 ElementType; 57581966bceSXin LI HPT_U8 ElementOverallIndex; 57681966bceSXin LI HPT_U8 ElementStatus; 57781966bceSXin LI HPT_U8 Reserved; 57881966bceSXin LI HPT_U32 ElementValue; 57981966bceSXin LI HPT_U8 ElementDescriptor[32]; 58081966bceSXin LI }SES_ELEMENT_STATUS,*PSES_ELEMENT_STATUS; 58181966bceSXin LI 58281966bceSXin LI #define MAX_ELEMENT_COUNT 80 58381966bceSXin LI /* Element Type */ 58481966bceSXin LI #define SES_TYPE_UNSPECIFIED 0x00 58581966bceSXin LI #define SES_TYPE_DEVICE 0x01 58681966bceSXin LI #define SES_TYPE_POWER_SUPPLY 0x02 58781966bceSXin LI #define SES_TYPE_FAN 0x03 58881966bceSXin LI #define SES_TYPE_TEMPERATURE_SENSOR 0x04 58981966bceSXin LI #define SES_TYPE_DOOR_LOCK 0x05 59081966bceSXin LI #define SES_TYPE_SPEAKER 0x06 59181966bceSXin LI #define SES_TYPE_ES_CONTROLLER 0x07 59281966bceSXin LI #define SES_TYPE_SCC_CONTROLLER 0x08 59381966bceSXin LI #define SES_TYPE_NONVOLATILE_CACHE 0x09 59481966bceSXin LI #define SES_TYPE_UPS 0x0B 59581966bceSXin LI #define SES_TYPE_DISPLAY 0x0C 59681966bceSXin LI #define SES_TYPE_KEYPAD 0x0D 59781966bceSXin LI #define SES_TYPE_ENCLOSURE 0x0E 59881966bceSXin LI #define SES_TYPE_SCSI_TRANSCEIVER 0x0F 59981966bceSXin LI #define SES_TYPE_LANGUAGE 0x10 60081966bceSXin LI #define SES_TYPE_COMM_PORT 0x11 60181966bceSXin LI #define SES_TYPE_VOLTAGE_SENSOR 0x12 60281966bceSXin LI #define SES_TYPE_CURRENT_SENSOR 0x13 60381966bceSXin LI #define SES_TYPE_SCSI_TARGET_PORT 0x14 60481966bceSXin LI #define SES_TYPE_SCSI_INITIATOR_PORT 0x15 60581966bceSXin LI #define SES_TYPE_SIMPLE_SUBENCLOSURE 0x16 60681966bceSXin LI #define SES_TYPE_ARRAY_DEVICE 0x17 60781966bceSXin LI #define SES_TYPE_VENDOR_SPECIFIC 0x80 60881966bceSXin LI 60981966bceSXin LI /* Element Status */ 61081966bceSXin LI 61181966bceSXin LI #define SES_STATUS_UNSUPPORTED 0x00 61281966bceSXin LI #define SES_STATUS_OK 0x01 61381966bceSXin LI #define SES_STATUS_CRITICAL 0x02 61481966bceSXin LI #define SES_STATUS_NONCRITICAL 0x03 61581966bceSXin LI #define SES_STATUS_UNRECOVERABLE 0x04 61681966bceSXin LI #define SES_STATUS_NOTINSTALLED 0x05 61781966bceSXin LI #define SES_STATUS_UNKNOWN 0x06 618f29c86f1SXin LI #define SES_STATUS_NOTAVAILABLE 0x07 619f29c86f1SXin LI #define SES_STATUS_RESERVED 0x08 62081966bceSXin LI 62181966bceSXin LI 62281966bceSXin LI typedef struct _ENCLOSURE_INFO_V2 { 62381966bceSXin LI HPT_U8 EnclosureType; 62481966bceSXin LI HPT_U8 NumberOfPhys; 62581966bceSXin LI HPT_U8 AttachedTo; 62681966bceSXin LI HPT_U8 Status; 62781966bceSXin LI HPT_U8 VendorId[8]; 62881966bceSXin LI HPT_U8 ProductId[16]; 62981966bceSXin LI HPT_U8 ProductRevisionLevel[4]; 63081966bceSXin LI HPT_U32 PortPhyMap; 63181966bceSXin LI SES_ELEMENT_STATUS ElementStatus[MAX_ELEMENT_COUNT]; 63281966bceSXin LI } ENCLOSURE_INFO_V2, *PENCLOSURE_INFO_V2; 63381966bceSXin LI 63481966bceSXin LI typedef struct _ENCLOSURE_INFO_V3 { 63581966bceSXin LI HPT_U8 EnclosureType; 63681966bceSXin LI HPT_U8 NumberOfPhys; 63781966bceSXin LI HPT_U8 AttachedTo; 63881966bceSXin LI HPT_U8 Status; 63981966bceSXin LI HPT_U8 VendorId[8]; 64081966bceSXin LI HPT_U8 ProductId[16]; 64181966bceSXin LI HPT_U8 ProductRevisionLevel[4]; 64281966bceSXin LI HPT_U32 PortPhyMap; 64381966bceSXin LI HPT_U32 UnitId; /*272x card has two Cores, unitId is used to distinguish them */ 64481966bceSXin LI HPT_U32 reserved[32]; 64581966bceSXin LI SES_ELEMENT_STATUS ElementStatus[MAX_ELEMENT_COUNT]; 64681966bceSXin LI } ENCLOSURE_INFO_V3, *PENCLOSURE_INFO_V3; 64781966bceSXin LI 648f29c86f1SXin LI typedef struct _ENCLOSURE_INFO_V4 { 649f29c86f1SXin LI HPT_U8 EnclosureType; 650f29c86f1SXin LI HPT_U8 NumberOfPhys; 651f29c86f1SXin LI HPT_U8 AttachedTo; 652f29c86f1SXin LI HPT_U8 Status; 653f29c86f1SXin LI HPT_U8 VendorId[8]; 654f29c86f1SXin LI HPT_U8 ProductId[16]; 655f29c86f1SXin LI HPT_U8 ProductRevisionLevel[4]; 656f29c86f1SXin LI HPT_U32 PortPhyMap; 657f29c86f1SXin LI HPT_U32 UnitId; /*272x card has two Cores, unitId is used to distinguish them */ 658f29c86f1SXin LI HPT_U32 ElementCount; 659f29c86f1SXin LI HPT_U32 reserved[32]; 660f29c86f1SXin LI } ENCLOSURE_INFO_V4, *PENCLOSURE_INFO_V4; 661f29c86f1SXin LI 66281966bceSXin LI #define ENCLOSURE_STATUS_OFFLINE 1 66381966bceSXin LI 66481966bceSXin LI #define ENCLOSURE_TYPE_INTERNAL 0 66581966bceSXin LI #define ENCLOSURE_TYPE_SMP 1 66681966bceSXin LI #define ENCLOSURE_TYPE_PM 2 66781966bceSXin LI 66881966bceSXin LI #ifndef __KERNEL__ 66981966bceSXin LI /* 67081966bceSXin LI * time represented in HPT_U32 format 67181966bceSXin LI */ 67281966bceSXin LI typedef struct _TIME_RECORD { 67381966bceSXin LI HPT_U32 seconds:6; /* 0 - 59 */ 67481966bceSXin LI HPT_U32 minutes:6; /* 0 - 59 */ 67581966bceSXin LI HPT_U32 month:4; /* 1 - 12 */ 67681966bceSXin LI HPT_U32 hours:6; /* 0 - 59 */ 67781966bceSXin LI HPT_U32 day:5; /* 1 - 31 */ 67881966bceSXin LI HPT_U32 year:5; /* 0=2000, 31=2031 */ 67981966bceSXin LI } TIME_RECORD; 68081966bceSXin LI #endif 68181966bceSXin LI 68281966bceSXin LI /* 68381966bceSXin LI * Array information. 68481966bceSXin LI */ 68581966bceSXin LI typedef struct _HPT_ARRAY_INFO { 68681966bceSXin LI HPT_U8 Name[MAX_ARRAYNAME_LEN];/* array name */ 68781966bceSXin LI HPT_U8 Description[64]; /* array description */ 68881966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 68981966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 69081966bceSXin LI 69181966bceSXin LI HPT_U8 ArrayType; /* array type */ 69281966bceSXin LI HPT_U8 BlockSizeShift; /* stripe size */ 69381966bceSXin LI HPT_U8 nDisk; /* member count: Number of ID in Members[] */ 69481966bceSXin LI HPT_U8 SubArrayType; 69581966bceSXin LI 69681966bceSXin LI HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ 69781966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V1]; /* member array/disks */ 69881966bceSXin LI 69981966bceSXin LI /* 70081966bceSXin LI * rebuilding progress, xx.xx% = sprintf(s, "%.2f%%", RebuildingProgress/100.0); 70181966bceSXin LI * only valid if rebuilding is done by driver code. 70281966bceSXin LI * Member Flags will have ARRAY_FLAG_REBUILDING set at this case. 70381966bceSXin LI * Verify operation use same fields below, the only difference is 70481966bceSXin LI * ARRAY_FLAG_VERIFYING is set. 70581966bceSXin LI */ 70681966bceSXin LI HPT_U32 RebuildingProgress; 70781966bceSXin LI HPT_U32 RebuiltSectors; /* rebuilding point (LBA) for single member */ 70881966bceSXin LI 70981966bceSXin LI } HPT_ARRAY_INFO, *PHPT_ARRAY_INFO; 71081966bceSXin LI 71181966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 71281966bceSXin LI typedef struct _HPT_ARRAY_INFO_V2 { 71381966bceSXin LI HPT_U8 Name[MAX_ARRAYNAME_LEN];/* array name */ 71481966bceSXin LI HPT_U8 Description[64]; /* array description */ 71581966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 71681966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 71781966bceSXin LI 71881966bceSXin LI HPT_U8 ArrayType; /* array type */ 71981966bceSXin LI HPT_U8 BlockSizeShift; /* stripe size */ 72081966bceSXin LI HPT_U8 nDisk; /* member count: Number of ID in Members[] */ 72181966bceSXin LI HPT_U8 SubArrayType; 72281966bceSXin LI 72381966bceSXin LI HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ 72481966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V2]; /* member array/disks */ 72581966bceSXin LI 72681966bceSXin LI HPT_U32 RebuildingProgress; 72781966bceSXin LI HPT_U64 RebuiltSectors; /* rebuilding point (LBA) for single member */ 72881966bceSXin LI 72981966bceSXin LI HPT_U32 reserve4[4]; 73081966bceSXin LI } HPT_ARRAY_INFO_V2, *PHPT_ARRAY_INFO_V2; 73181966bceSXin LI #endif 73281966bceSXin LI 73381966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 73481966bceSXin LI typedef struct _HPT_ARRAY_INFO_V3 { 73581966bceSXin LI HPT_U8 Name[MAX_ARRAYNAME_LEN];/* array name */ 73681966bceSXin LI HPT_U8 Description[64]; /* array description */ 73781966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 73881966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 73981966bceSXin LI 74081966bceSXin LI HPT_U8 ArrayType; /* array type */ 74181966bceSXin LI HPT_U8 BlockSizeShift; /* stripe size */ 74281966bceSXin LI HPT_U8 nDisk; /* member count: Number of ID in Members[] */ 74381966bceSXin LI HPT_U8 SubArrayType; 74481966bceSXin LI 74581966bceSXin LI HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ 74681966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V2]; /* member array/disks */ 74781966bceSXin LI 74881966bceSXin LI HPT_U32 RebuildingProgress; 74981966bceSXin LI HPT_U64 RebuiltSectors; /* rebuilding point (LBA) for single member */ 75081966bceSXin LI 75181966bceSXin LI DEVICEID TransformSource; 75281966bceSXin LI DEVICEID TransformTarget; /* destination device ID */ 75381966bceSXin LI HPT_U32 TransformingProgress; 75481966bceSXin LI HPT_U32 Signature; /* persistent identification*/ 75581966bceSXin LI #if MAX_ARRAY_MEMBERS_V2==16 75681966bceSXin LI HPT_U16 Critical_Members; /* bit mask of critical members */ 75781966bceSXin LI HPT_U16 reserve2; 75881966bceSXin LI HPT_U32 reserve; 75981966bceSXin LI #else 76081966bceSXin LI HPT_U32 Critical_Members; 76181966bceSXin LI HPT_U32 reserve; 76281966bceSXin LI #endif 76381966bceSXin LI } HPT_ARRAY_INFO_V3, *PHPT_ARRAY_INFO_V3; 76481966bceSXin LI #endif 76581966bceSXin LI 76681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 76781966bceSXin LI typedef struct _HPT_ARRAY_INFO_V4 { 76881966bceSXin LI HPT_U8 Name[MAX_ARRAYNAME_LEN];/* array name */ 76981966bceSXin LI HPT_U8 Description[64]; /* array description */ 77081966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 77181966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 77281966bceSXin LI 77381966bceSXin LI HPT_U8 ArrayType; /* array type */ 77481966bceSXin LI HPT_U8 BlockSizeShift; /* stripe size */ 77581966bceSXin LI HPT_U8 nDisk; /* member count: Number of ID in Members[] */ 77681966bceSXin LI HPT_U8 SubArrayType; 77781966bceSXin LI 77881966bceSXin LI HPT_U32 Flags; /* working flags, see ARRAY_FLAG_XXX */ 77981966bceSXin LI 78081966bceSXin LI HPT_U32 RebuildingProgress; 78181966bceSXin LI HPT_U64 RebuiltSectors; /* rebuilding point (LBA) for single member */ 78281966bceSXin LI 78381966bceSXin LI DEVICEID TransformSource; 78481966bceSXin LI DEVICEID TransformTarget; /* destination device ID */ 78581966bceSXin LI HPT_U32 TransformingProgress; 78681966bceSXin LI HPT_U32 Signature; /* persistent identification*/ 78781966bceSXin LI HPT_U8 SectorSizeShift; /*sector size = 512B<<SectorSizeShift*/ 78881966bceSXin LI HPT_U8 reserved2[7]; 78981966bceSXin LI HPT_U64 Critical_Members; 79081966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V3]; /* member array/disks */ 79181966bceSXin LI } HPT_ARRAY_INFO_V4, *PHPT_ARRAY_INFO_V4; 79281966bceSXin LI #endif 79381966bceSXin LI 79481966bceSXin LI 79581966bceSXin LI /* 79681966bceSXin LI * ATA/ATAPI Device identify data without the Reserved4. 79781966bceSXin LI */ 79881966bceSXin LI typedef struct _IDENTIFY_DATA2 { 79981966bceSXin LI HPT_U16 GeneralConfiguration; 80081966bceSXin LI HPT_U16 NumberOfCylinders; 80181966bceSXin LI HPT_U16 Reserved1; 80281966bceSXin LI HPT_U16 NumberOfHeads; 80381966bceSXin LI HPT_U16 UnformattedBytesPerTrack; 80481966bceSXin LI HPT_U16 UnformattedBytesPerSector; 80581966bceSXin LI HPT_U8 SasAddress[8]; 80681966bceSXin LI HPT_U16 SerialNumber[10]; 80781966bceSXin LI HPT_U16 BufferType; 80881966bceSXin LI HPT_U16 BufferSectorSize; 80981966bceSXin LI HPT_U16 NumberOfEccBytes; 81081966bceSXin LI HPT_U16 FirmwareRevision[4]; 81181966bceSXin LI HPT_U16 ModelNumber[20]; 81281966bceSXin LI HPT_U8 MaximumBlockTransfer; 81381966bceSXin LI HPT_U8 VendorUnique2; 81481966bceSXin LI HPT_U16 DoubleWordIo; 81581966bceSXin LI HPT_U16 Capabilities; 81681966bceSXin LI HPT_U16 Reserved2; 81781966bceSXin LI HPT_U8 VendorUnique3; 81881966bceSXin LI HPT_U8 PioCycleTimingMode; 81981966bceSXin LI HPT_U8 VendorUnique4; 82081966bceSXin LI HPT_U8 DmaCycleTimingMode; 82181966bceSXin LI HPT_U16 TranslationFieldsValid; 82281966bceSXin LI HPT_U16 NumberOfCurrentCylinders; 82381966bceSXin LI HPT_U16 NumberOfCurrentHeads; 82481966bceSXin LI HPT_U16 CurrentSectorsPerTrack; 825f29c86f1SXin LI HPT_U32 CurrentSectorCapacity; /*word58,59 the value indecate the logical sector size. */ 82681966bceSXin LI HPT_U16 CurrentMultiSectorSetting; 82781966bceSXin LI HPT_U32 UserAddressableSectors; 82881966bceSXin LI HPT_U8 SingleWordDMASupport; 82981966bceSXin LI HPT_U8 SingleWordDMAActive; 83081966bceSXin LI HPT_U8 MultiWordDMASupport; 83181966bceSXin LI HPT_U8 MultiWordDMAActive; 83281966bceSXin LI HPT_U8 AdvancedPIOModes; 83381966bceSXin LI HPT_U8 Reserved4; 83481966bceSXin LI HPT_U16 MinimumMWXferCycleTime; 83581966bceSXin LI HPT_U16 RecommendedMWXferCycleTime; 83681966bceSXin LI HPT_U16 MinimumPIOCycleTime; 83781966bceSXin LI HPT_U16 MinimumPIOCycleTimeIORDY; 83881966bceSXin LI HPT_U16 Reserved5[2]; 83981966bceSXin LI HPT_U16 ReleaseTimeOverlapped; 84081966bceSXin LI HPT_U16 ReleaseTimeServiceCommand; 84181966bceSXin LI HPT_U16 MajorRevision; 84281966bceSXin LI HPT_U16 MinorRevision; 84381966bceSXin LI } __attribute__((packed)) IDENTIFY_DATA2, *PIDENTIFY_DATA2; 84481966bceSXin LI 84581966bceSXin LI /* 84681966bceSXin LI * physical device information. 84781966bceSXin LI * IdentifyData.ModelNumber[] is HPT_U8-swapped from the original identify data. 84881966bceSXin LI */ 84981966bceSXin LI typedef struct _DEVICE_INFO { 85081966bceSXin LI HPT_U8 ControllerId; /* controller id */ 85181966bceSXin LI HPT_U8 PathId; /* bus */ 85281966bceSXin LI HPT_U8 TargetId; /* id */ 85381966bceSXin LI HPT_U8 DeviceModeSetting; /* Current Data Transfer mode: 0-4 PIO 0-4 */ 85481966bceSXin LI /* 5-7 MW DMA0-2, 8-13 UDMA0-5 */ 85581966bceSXin LI HPT_U8 DeviceType; /* device type */ 85681966bceSXin LI HPT_U8 UsableMode; /* highest usable mode */ 85781966bceSXin LI 85881966bceSXin LI #ifdef __BIG_ENDIAN_BITFIELD 85981966bceSXin LI HPT_U8 NCQEnabled: 1; 86081966bceSXin LI HPT_U8 NCQSupported: 1; 86181966bceSXin LI HPT_U8 TCQEnabled: 1; 86281966bceSXin LI HPT_U8 TCQSupported: 1; 86381966bceSXin LI HPT_U8 WriteCacheEnabled: 1; 86481966bceSXin LI HPT_U8 WriteCacheSupported: 1; 86581966bceSXin LI HPT_U8 ReadAheadEnabled: 1; 86681966bceSXin LI HPT_U8 ReadAheadSupported: 1; 86781966bceSXin LI HPT_U8 reserved6: 6; 86881966bceSXin LI HPT_U8 SpinUpMode: 2; 86981966bceSXin LI #else 87081966bceSXin LI HPT_U8 ReadAheadSupported: 1; 87181966bceSXin LI HPT_U8 ReadAheadEnabled: 1; 87281966bceSXin LI HPT_U8 WriteCacheSupported: 1; 87381966bceSXin LI HPT_U8 WriteCacheEnabled: 1; 87481966bceSXin LI HPT_U8 TCQSupported: 1; 87581966bceSXin LI HPT_U8 TCQEnabled: 1; 87681966bceSXin LI HPT_U8 NCQSupported: 1; 87781966bceSXin LI HPT_U8 NCQEnabled: 1; 87881966bceSXin LI HPT_U8 SpinUpMode: 2; 87981966bceSXin LI HPT_U8 reserved6: 6; 88081966bceSXin LI #endif 88181966bceSXin LI 88281966bceSXin LI HPT_U32 Flags; /* working flags, see DEVICE_FLAG_XXX */ 88381966bceSXin LI 88481966bceSXin LI IDENTIFY_DATA2 IdentifyData; /* Identify Data of this device */ 88581966bceSXin LI 88681966bceSXin LI } 88781966bceSXin LI __attribute__((packed)) DEVICE_INFO, *PDEVICE_INFO; 88881966bceSXin LI 88981966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 89081966bceSXin LI #define MAX_PARENTS_PER_DISK 8 89181966bceSXin LI /* 89281966bceSXin LI * physical device information. 89381966bceSXin LI * IdentifyData.ModelNumber[] is HPT_U8-swapped from the original identify data. 89481966bceSXin LI */ 89581966bceSXin LI typedef struct _DEVICE_INFO_V2 { 89681966bceSXin LI HPT_U8 ControllerId; /* controller id */ 89781966bceSXin LI HPT_U8 PathId; /* bus */ 89881966bceSXin LI HPT_U8 TargetId; /* id */ 89981966bceSXin LI HPT_U8 DeviceModeSetting; /* Current Data Transfer mode: 0-4 PIO 0-4 */ 90081966bceSXin LI /* 5-7 MW DMA0-2, 8-13 UDMA0-5 */ 90181966bceSXin LI HPT_U8 DeviceType; /* device type */ 90281966bceSXin LI HPT_U8 UsableMode; /* highest usable mode */ 90381966bceSXin LI 90481966bceSXin LI #ifdef __BIG_ENDIAN_BITFIELD 90581966bceSXin LI HPT_U8 NCQEnabled: 1; 90681966bceSXin LI HPT_U8 NCQSupported: 1; 90781966bceSXin LI HPT_U8 TCQEnabled: 1; 90881966bceSXin LI HPT_U8 TCQSupported: 1; 90981966bceSXin LI HPT_U8 WriteCacheEnabled: 1; 91081966bceSXin LI HPT_U8 WriteCacheSupported: 1; 91181966bceSXin LI HPT_U8 ReadAheadEnabled: 1; 91281966bceSXin LI HPT_U8 ReadAheadSupported: 1; 91381966bceSXin LI HPT_U8 reserved6: 6; 91481966bceSXin LI HPT_U8 SpinUpMode: 2; 91581966bceSXin LI #else 91681966bceSXin LI HPT_U8 ReadAheadSupported: 1; 91781966bceSXin LI HPT_U8 ReadAheadEnabled: 1; 91881966bceSXin LI HPT_U8 WriteCacheSupported: 1; 91981966bceSXin LI HPT_U8 WriteCacheEnabled: 1; 92081966bceSXin LI HPT_U8 TCQSupported: 1; 92181966bceSXin LI HPT_U8 TCQEnabled: 1; 92281966bceSXin LI HPT_U8 NCQSupported: 1; 92381966bceSXin LI HPT_U8 NCQEnabled: 1; 92481966bceSXin LI HPT_U8 SpinUpMode: 2; 92581966bceSXin LI HPT_U8 reserved6: 6; 92681966bceSXin LI #endif 92781966bceSXin LI 92881966bceSXin LI HPT_U32 Flags; /* working flags, see DEVICE_FLAG_XXX */ 92981966bceSXin LI 93081966bceSXin LI IDENTIFY_DATA2 IdentifyData; /* Identify Data of this device */ 93181966bceSXin LI 93281966bceSXin LI HPT_U64 TotalFree; 93381966bceSXin LI HPT_U64 MaxFree; 93481966bceSXin LI HPT_U64 BadSectors; 93581966bceSXin LI DEVICEID ParentArrays[MAX_PARENTS_PER_DISK]; 93681966bceSXin LI 93781966bceSXin LI } 93881966bceSXin LI __attribute__((packed)) DEVICE_INFO_V2, *PDEVICE_INFO_V2, DEVICE_INFO_V3, *PDEVICE_INFO_V3; 93981966bceSXin LI 94081966bceSXin LI /* 94181966bceSXin LI * HPT601 information 94281966bceSXin LI */ 94381966bceSXin LI #endif 94481966bceSXin LI /* 94581966bceSXin LI * HPT601 information 94681966bceSXin LI */ 94781966bceSXin LI #define HPT601_INFO_DEVICEID 1 94881966bceSXin LI #define HPT601_INFO_TEMPERATURE 2 94981966bceSXin LI #define HPT601_INFO_FANSTATUS 4 95081966bceSXin LI #define HPT601_INFO_BEEPERCONTROL 8 95181966bceSXin LI #define HPT601_INFO_LED1CONTROL 0x10 95281966bceSXin LI #define HPT601_INFO_LED2CONTROL 0x20 95381966bceSXin LI #define HPT601_INFO_POWERSTATUS 0x40 95481966bceSXin LI 95581966bceSXin LI typedef struct _HPT601_INFO_ { 95681966bceSXin LI HPT_U16 ValidFields; /* mark valid fields below */ 95781966bceSXin LI HPT_U16 DeviceId; /* 0x5A3E */ 95881966bceSXin LI HPT_U16 Temperature; /* Read: temperature sensor value. Write: temperature limit */ 95981966bceSXin LI HPT_U16 FanStatus; /* Fan status */ 96081966bceSXin LI HPT_U16 BeeperControl; /* bit4: beeper control bit. bit0-3: frequency bits */ 96181966bceSXin LI HPT_U16 LED1Control; /* bit4: twinkling control bit. bit0-3: frequency bits */ 96281966bceSXin LI HPT_U16 LED2Control; /* bit4: twinkling control bit. bit0-3: frequency bits */ 96381966bceSXin LI HPT_U16 PowerStatus; /* 1: has power 2: no power */ 96481966bceSXin LI } HPT601_INFO, *PHPT601_INFO; 96581966bceSXin LI 96681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 96781966bceSXin LI #ifndef __KERNEL__ 96881966bceSXin LI /* cache policy for each vdev, copied from ldm.h */ 96981966bceSXin LI #define CACHE_POLICY_NONE 0 97081966bceSXin LI #define CACHE_POLICY_WRITE_THROUGH 1 97181966bceSXin LI #define CACHE_POLICY_WRITE_BACK 2 97281966bceSXin LI 97381966bceSXin LI #endif 97481966bceSXin LI #endif 97581966bceSXin LI /* 97681966bceSXin LI * Logical device information. 97781966bceSXin LI * Union of ArrayInfo and DeviceInfo. 97881966bceSXin LI * Common properties will be put in logical device information. 97981966bceSXin LI */ 98081966bceSXin LI typedef struct _LOGICAL_DEVICE_INFO { 98181966bceSXin LI HPT_U8 Type; /* LDT_ARRAY or LDT_DEVICE */ 98281966bceSXin LI HPT_U8 reserved[3]; 98381966bceSXin LI 98481966bceSXin LI HPT_U32 Capacity; /* array capacity */ 98581966bceSXin LI DEVICEID ParentArray; 98681966bceSXin LI 98781966bceSXin LI union { 98881966bceSXin LI HPT_ARRAY_INFO array; 98981966bceSXin LI DEVICE_INFO device; 99081966bceSXin LI } __attribute__((packed)) u; 99181966bceSXin LI 99281966bceSXin LI } __attribute__((packed)) LOGICAL_DEVICE_INFO, *PLOGICAL_DEVICE_INFO; 99381966bceSXin LI 99481966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 99581966bceSXin LI typedef struct _LOGICAL_DEVICE_INFO_V2 { 99681966bceSXin LI HPT_U8 Type; /* LDT_ARRAY or LDT_DEVICE */ 99781966bceSXin LI HPT_U8 reserved[3]; 99881966bceSXin LI 99981966bceSXin LI HPT_U64 Capacity; /* array capacity */ 100081966bceSXin LI DEVICEID ParentArray; /* for physical device, Please don't use this field. 100181966bceSXin LI * use ParentArrays field in DEVICE_INFO_V2 100281966bceSXin LI */ 100381966bceSXin LI 100481966bceSXin LI union { 100581966bceSXin LI HPT_ARRAY_INFO_V2 array; 100681966bceSXin LI DEVICE_INFO device; 100781966bceSXin LI } __attribute__((packed)) u; 100881966bceSXin LI 100981966bceSXin LI } __attribute__((packed)) LOGICAL_DEVICE_INFO_V2, *PLOGICAL_DEVICE_INFO_V2; 101081966bceSXin LI #endif 101181966bceSXin LI 101281966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 101381966bceSXin LI #define INVALID_TARGET_ID 0xFF 101481966bceSXin LI #define INVALID_BUS_ID 0xFF 101581966bceSXin LI typedef struct _LOGICAL_DEVICE_INFO_V3 { 101681966bceSXin LI HPT_U8 Type; /* LDT_ARRAY or LDT_DEVICE */ 101781966bceSXin LI HPT_U8 CachePolicy; /* refer to CACHE_POLICY_xxx */ 101881966bceSXin LI HPT_U8 VBusId; /* vbus sequence in vbus_list */ 101981966bceSXin LI HPT_U8 TargetId; /* OS target id. Value 0xFF is invalid */ 102081966bceSXin LI /* OS disk name: HPT DISK $VBusId_$TargetId */ 102181966bceSXin LI HPT_U64 Capacity; /* array capacity */ 102281966bceSXin LI DEVICEID ParentArray; /* for physical device, don't use this field. 102381966bceSXin LI * use ParentArrays field in DEVICE_INFO_V2 instead. 102481966bceSXin LI */ 102581966bceSXin LI HPT_U32 TotalIOs; 102681966bceSXin LI HPT_U32 TobalMBs; 102781966bceSXin LI HPT_U32 IOPerSec; 102881966bceSXin LI HPT_U32 MBPerSec; 102981966bceSXin LI 103081966bceSXin LI union { 103181966bceSXin LI HPT_ARRAY_INFO_V3 array; 103281966bceSXin LI DEVICE_INFO_V2 device; 103381966bceSXin LI } __attribute__((packed)) u; 103481966bceSXin LI 103581966bceSXin LI } 103681966bceSXin LI __attribute__((packed)) LOGICAL_DEVICE_INFO_V3, *PLOGICAL_DEVICE_INFO_V3; 103781966bceSXin LI #endif 103881966bceSXin LI 103981966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 104081966bceSXin LI typedef struct _LOGICAL_DEVICE_INFO_V4 { 104181966bceSXin LI HPT_U32 dwSize; 104281966bceSXin LI HPT_U8 revision; 104381966bceSXin LI HPT_U8 reserved[7]; 104481966bceSXin LI 104581966bceSXin LI HPT_U8 Type; /* LDT_ARRAY or LDT_DEVICE */ 104681966bceSXin LI HPT_U8 CachePolicy; /* refer to CACHE_POLICY_xxx */ 104781966bceSXin LI HPT_U8 VBusId; /* vbus sequence in vbus_list */ 104881966bceSXin LI HPT_U8 TargetId; /* OS target id. Value 0xFF is invalid */ 104981966bceSXin LI /* OS disk name: HPT DISK $VBusId_$TargetId */ 105081966bceSXin LI HPT_U64 Capacity; /* array capacity */ 105181966bceSXin LI DEVICEID ParentArray; /* for physical device, don't use this field. 105281966bceSXin LI * use ParentArrays field in DEVICE_INFO_V2 instead. 105381966bceSXin LI */ 105481966bceSXin LI HPT_U32 TotalIOs; 105581966bceSXin LI HPT_U32 TobalMBs; 105681966bceSXin LI HPT_U32 IOPerSec; 105781966bceSXin LI HPT_U32 MBPerSec; 105881966bceSXin LI 105981966bceSXin LI union { 106081966bceSXin LI HPT_ARRAY_INFO_V4 array; 106181966bceSXin LI DEVICE_INFO_V3 device; 106281966bceSXin LI } __attribute__((packed)) u; 106381966bceSXin LI } 106481966bceSXin LI __attribute__((packed)) LOGICAL_DEVICE_INFO_V4, *PLOGICAL_DEVICE_INFO_V4; 106581966bceSXin LI 106681966bceSXin LI /*LOGICAL_DEVICE_INFO_V4 max revision number*/ 106781966bceSXin LI #define LOGICAL_DEVICE_INFO_V4_REVISION 0 106881966bceSXin LI /*If new revision was defined please check evey revision size*/ 106981966bceSXin LI #define LOGICAL_DEVICE_INFO_V4_R0_SIZE (sizeof(LOGICAL_DEVICE_INFO_V4)) 107081966bceSXin LI #endif 107181966bceSXin LI 107281966bceSXin LI /* 107381966bceSXin LI * ALTERABLE_ARRAY_INFO and ALTERABLE_DEVICE_INFO, used in set_array_info() 107481966bceSXin LI * and set_device_info(). 107581966bceSXin LI * When set_xxx_info() is called, the ValidFields member indicates which 107681966bceSXin LI * fields in the structure are valid. 107781966bceSXin LI */ 107881966bceSXin LI /* field masks */ 107981966bceSXin LI #define AAIF_NAME 1 108081966bceSXin LI #define AAIF_DESCRIPTION 2 108181966bceSXin LI 108281966bceSXin LI #define ADIF_MODE 1 108381966bceSXin LI #define ADIF_TCQ 2 108481966bceSXin LI #define ADIF_NCQ 4 108581966bceSXin LI #define ADIF_WRITE_CACHE 8 108681966bceSXin LI #define ADIF_READ_AHEAD 0x10 108781966bceSXin LI #define ADIF_SPIN_UP_MODE 0x20 1088f29c86f1SXin LI #define ADIF_SET_BAD 0x40 108981966bceSXin LI 109081966bceSXin LI typedef struct _ALTERABLE_ARRAY_INFO { 109181966bceSXin LI HPT_U32 ValidFields; /* mark valid fields below */ 109281966bceSXin LI HPT_U8 Name[MAX_ARRAYNAME_LEN]; /* array name */ 109381966bceSXin LI HPT_U8 Description[64]; /* array description */ 109481966bceSXin LI }__attribute__((packed))ALTERABLE_ARRAY_INFO, *PALTERABLE_ARRAY_INFO; 109581966bceSXin LI 109681966bceSXin LI typedef struct _ALTERABLE_DEVICE_INFO { 109781966bceSXin LI HPT_U32 ValidFields; /* mark valid fields below */ 109881966bceSXin LI HPT_U8 DeviceModeSetting; /* 0-4 PIO 0-4, 5-7 MW DMA0-2, 8-13 UDMA0-5 */ 109981966bceSXin LI }__attribute__((packed))ALTERABLE_DEVICE_INFO, *PALTERABLE_DEVICE_INFO; 110081966bceSXin LI 110181966bceSXin LI typedef struct _ALTERABLE_DEVICE_INFO_V2 { 110281966bceSXin LI HPT_U32 ValidFields; /* mark valid fields below */ 110381966bceSXin LI HPT_U8 DeviceModeSetting; /* 0-4 PIO 0-4, 5-7 MW DMA0-2, 8-13 UDMA0-5 */ 110481966bceSXin LI HPT_U8 TCQEnabled; 110581966bceSXin LI HPT_U8 NCQEnabled; 110681966bceSXin LI HPT_U8 WriteCacheEnabled; 110781966bceSXin LI HPT_U8 ReadAheadEnabled; 110881966bceSXin LI HPT_U8 SpinUpMode; 1109f29c86f1SXin LI HPT_U8 SetBadSector; 1110f29c86f1SXin LI HPT_U8 reserve[1]; 111181966bceSXin LI HPT_U32 reserve2[13]; /* pad to 64 bytes */ 111281966bceSXin LI }__attribute__((packed))ALTERABLE_DEVICE_INFO_V2, *PALTERABLE_DEVICE_INFO_V2; 111381966bceSXin LI 111481966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 111581966bceSXin LI 111681966bceSXin LI #define TARGET_TYPE_DEVICE 0 111781966bceSXin LI #define TARGET_TYPE_ARRAY 1 111881966bceSXin LI 111981966bceSXin LI 112081966bceSXin LI #define AIT_NAME 0 112181966bceSXin LI #define AIT_DESCRIPTION 1 112281966bceSXin LI #define AIT_CACHE_POLICY 2 112381966bceSXin LI 112481966bceSXin LI 112581966bceSXin LI #define DIT_MODE 0 112681966bceSXin LI #define DIT_READ_AHEAD 1 112781966bceSXin LI #define DIT_WRITE_CACHE 2 112881966bceSXin LI #define DIT_TCQ 3 112981966bceSXin LI #define DIT_NCQ 4 113081966bceSXin LI #define DIT_IDENTIFY 5 113181966bceSXin LI 1132f29c86f1SXin LI #define DISK_CACHE_POLICY_UNCHANGE 0 1133f29c86f1SXin LI #define DISK_CACHE_POLICY_ENABLE 1 1134f29c86f1SXin LI #define DISK_CACHE_POLICY_DISABLE 2 1135f29c86f1SXin LI 113681966bceSXin LI /* param type is determined by target_type and info_type*/ 113781966bceSXin LI typedef struct _SET_DEV_INFO 113881966bceSXin LI { 113981966bceSXin LI HPT_U8 target_type; 114081966bceSXin LI HPT_U8 infor_type; 114181966bceSXin LI HPT_U16 param_length; 114281966bceSXin LI #define SET_VDEV_INFO_param(p) ((HPT_U8 *)(p)+sizeof(SET_VDEV_INFO)) 114381966bceSXin LI /* HPT_U8 param[0]; */ 114481966bceSXin LI } SET_VDEV_INFO, * PSET_VDEV_INFO; 114581966bceSXin LI 114681966bceSXin LI typedef HPT_U8 PARAM_ARRAY_NAME[MAX_ARRAYNAME_LEN] ; 114781966bceSXin LI typedef HPT_U8 PARAM_ARRAY_DES[64]; 114881966bceSXin LI typedef HPT_U8 PARAM_DEVICE_MODE, PARAM_TCQ, PARAM_NCQ, PARAM_READ_AHEAD, PARAM_WRITE_CACHE, PARAM_CACHE_POLICY; 114981966bceSXin LI 115081966bceSXin LI #endif 115181966bceSXin LI 115281966bceSXin LI /* 115381966bceSXin LI * CREATE_ARRAY_PARAMS 115481966bceSXin LI * Param structure used to create an array. 115581966bceSXin LI */ 115681966bceSXin LI typedef struct _CREATE_ARRAY_PARAMS { 115781966bceSXin LI HPT_U8 ArrayType; /* 1-level array type */ 115881966bceSXin LI HPT_U8 nDisk; /* number of elements in Members[] array */ 115981966bceSXin LI HPT_U8 BlockSizeShift; /* Stripe size if ArrayType==AT_RAID0 / AT_RAID5 */ 116081966bceSXin LI HPT_U8 CreateFlags; /* See CAF_xxx */ 116181966bceSXin LI 116281966bceSXin LI HPT_U8 ArrayName[MAX_ARRAYNAME_LEN];/* Array name */ 116381966bceSXin LI HPT_U8 Description[64]; /* array description */ 116481966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 116581966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 116681966bceSXin LI 116781966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V1];/* ID of array members, a member can be an array */ 116881966bceSXin LI 116981966bceSXin LI } CREATE_ARRAY_PARAMS, *PCREATE_ARRAY_PARAMS; 117081966bceSXin LI 117181966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 117281966bceSXin LI typedef struct _CREATE_ARRAY_PARAMS_V2 { 117381966bceSXin LI HPT_U8 ArrayType; /* 1-level array type */ 117481966bceSXin LI HPT_U8 nDisk; /* number of elements in Members[] array */ 117581966bceSXin LI HPT_U8 BlockSizeShift; /* Stripe size if ArrayType==AT_RAID0 / AT_RAID5 */ 117681966bceSXin LI HPT_U8 CreateFlags; /* See CAF_xxx */ 117781966bceSXin LI 117881966bceSXin LI HPT_U8 ArrayName[MAX_ARRAYNAME_LEN];/* Array name */ 117981966bceSXin LI HPT_U8 Description[64]; /* array description */ 118081966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 118181966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 118281966bceSXin LI HPT_U64 Capacity; 118381966bceSXin LI 118481966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V2];/* ID of array members, a member can be an array */ 118581966bceSXin LI 118681966bceSXin LI } CREATE_ARRAY_PARAMS_V2, *PCREATE_ARRAY_PARAMS_V2; 118781966bceSXin LI #endif 118881966bceSXin LI 118981966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 119081966bceSXin LI typedef struct _CREATE_ARRAY_PARAMS_V3 { 119181966bceSXin LI HPT_U32 dwSize; 119281966bceSXin LI HPT_U8 revision; /*CREATE_ARRAY_PARAMS_V3_REVISION*/ 1193f29c86f1SXin LI HPT_U8 diskCachePolicy; /*unchange:0 enable:1 disable:2*/ 1194f29c86f1SXin LI HPT_U8 reserved[4]; 119581966bceSXin LI HPT_U8 subDisks; /* RAIDn0 sub array */ 119681966bceSXin LI HPT_U8 SectorSizeShift; /*sector size = 512B<<SectorSizeShift*/ 119781966bceSXin LI HPT_U8 ArrayType; /* 1-level array type */ 119881966bceSXin LI HPT_U8 nDisk; /* number of elements in Members[] array */ 119981966bceSXin LI HPT_U8 BlockSizeShift; /* Stripe size if ArrayType==AT_RAID0 / AT_RAID5 */ 120081966bceSXin LI HPT_U8 CreateFlags; /* See CAF_xxx */ 120181966bceSXin LI 120281966bceSXin LI HPT_U8 ArrayName[MAX_ARRAYNAME_LEN];/* Array name */ 120381966bceSXin LI HPT_U8 Description[64]; /* array description */ 120481966bceSXin LI HPT_U8 CreateManager[16]; /* who created it */ 120581966bceSXin LI TIME_RECORD CreateTime; /* when created it */ 120681966bceSXin LI HPT_U64 Capacity; 120781966bceSXin LI 120881966bceSXin LI HPT_U32 Members[MAX_ARRAY_MEMBERS_V3];/* ID of array members, a member can be an array */ 120981966bceSXin LI } CREATE_ARRAY_PARAMS_V3, *PCREATE_ARRAY_PARAMS_V3; 121081966bceSXin LI 121181966bceSXin LI /*CREATE_ARRAY_PARAMS_V3 current max revision*/ 121281966bceSXin LI #define CREATE_ARRAY_PARAMS_V3_REVISION 0 121381966bceSXin LI /*If new revision defined please check evey revision size*/ 121481966bceSXin LI #define CREATE_ARRAY_PARAMS_V3_R0_SIZE (sizeof(CREATE_ARRAY_PARAMS_V3)) 121581966bceSXin LI #endif 121681966bceSXin LI 121781966bceSXin LI #if HPT_INTERFACE_VERSION < 0x01020000 121881966bceSXin LI /* 121981966bceSXin LI * Flags used for creating an RAID 1 array 122081966bceSXin LI * 122181966bceSXin LI * CAF_CREATE_AND_DUPLICATE 122281966bceSXin LI * Copy source disk contents to target for RAID 1. If user choose "create and duplicate" 122381966bceSXin LI * to create an array, GUI will call CreateArray() with this flag set. Then GUI should 122481966bceSXin LI * call hpt_get_device_info() with the returned array ID and check returned flags to 122581966bceSXin LI * see if ARRAY_FLAG_REBUILDING is set. If not set, driver does not support rebuilding 122681966bceSXin LI * and GUI must do duplication itself. 122781966bceSXin LI * CAF_DUPLICATE_MUST_DONE 122881966bceSXin LI * If the duplication is aborted or fails, do not create the array. 122981966bceSXin LI */ 123081966bceSXin LI #define CAF_CREATE_AND_DUPLICATE 1 123181966bceSXin LI #define CAF_DUPLICATE_MUST_DONE 2 123281966bceSXin LI #define CAF_CREATE_AS_RAID15 4 123381966bceSXin LI /* 123481966bceSXin LI * Flags used for creating an RAID 5 array 123581966bceSXin LI */ 123681966bceSXin LI #define CAF_CREATE_R5_NO_BUILD 1 123781966bceSXin LI #define CAF_CREATE_R5_ZERO_INIT 2 123881966bceSXin LI #define CAF_CREATE_R5_BUILD_PARITY 4 123981966bceSXin LI 124081966bceSXin LI #else 124181966bceSXin LI /* 124281966bceSXin LI * Flags used for creating 124381966bceSXin LI */ 124481966bceSXin LI #define CAF_FOREGROUND_INITIALIZE 1 124581966bceSXin LI #define CAF_BACKGROUND_INITIALIZE 2 124681966bceSXin LI #define CAF_CREATE_R5_WRITE_BACK (CACHE_POLICY_WRITE_BACK<<CAF_CACHE_POLICY_SHIFT) 124781966bceSXin LI 124881966bceSXin LI 124981966bceSXin LI #define CAF_CACHE_POLICY_MASK 0x1C 125081966bceSXin LI #define CAF_CACHE_POLICY_SHIFT 2 125181966bceSXin LI 125281966bceSXin LI #endif 125381966bceSXin LI 125481966bceSXin LI #define CAF_KEEP_DATA_ALWAYS 0x80 125581966bceSXin LI 125681966bceSXin LI /* Flags used for deleting an array 125781966bceSXin LI * 125881966bceSXin LI * DAF_KEEP_DATA_IF_POSSIBLE 125981966bceSXin LI * If this flag is set, deleting a RAID 1 array will not destroy the data on both disks. 126081966bceSXin LI * Deleting a JBOD should keep partitions on first disk ( not implement now ). 126181966bceSXin LI * Deleting a RAID 0/1 should result as two RAID 0 array ( not implement now ). 126281966bceSXin LI */ 126381966bceSXin LI #define DAF_KEEP_DATA_IF_POSSIBLE 1 126481966bceSXin LI #define DAF_KEEP_DATA_ALWAYS 2 126581966bceSXin LI 126681966bceSXin LI /* 126781966bceSXin LI * event types 126881966bceSXin LI */ 126981966bceSXin LI #define ET_DEVICE_REMOVED 1 /* device removed */ 127081966bceSXin LI #define ET_DEVICE_PLUGGED 2 /* device plugged */ 127181966bceSXin LI #define ET_DEVICE_ERROR 3 /* device I/O error */ 127281966bceSXin LI #define ET_REBUILD_STARTED 4 127381966bceSXin LI #define ET_REBUILD_ABORTED 5 127481966bceSXin LI #define ET_REBUILD_FINISHED 6 127581966bceSXin LI #define ET_SPARE_TOOK_OVER 7 127681966bceSXin LI #define ET_REBUILD_FAILED 8 127781966bceSXin LI #define ET_VERIFY_STARTED 9 127881966bceSXin LI #define ET_VERIFY_ABORTED 10 127981966bceSXin LI #define ET_VERIFY_FAILED 11 128081966bceSXin LI #define ET_VERIFY_FINISHED 12 128181966bceSXin LI #define ET_INITIALIZE_STARTED 13 128281966bceSXin LI #define ET_INITIALIZE_ABORTED 14 128381966bceSXin LI #define ET_INITIALIZE_FAILED 15 128481966bceSXin LI #define ET_INITIALIZE_FINISHED 16 128581966bceSXin LI #define ET_VERIFY_DATA_ERROR 17 128681966bceSXin LI #define ET_TRANSFORM_STARTED 18 128781966bceSXin LI #define ET_TRANSFORM_ABORTED 19 128881966bceSXin LI #define ET_TRANSFORM_FAILED 20 128981966bceSXin LI #define ET_TRANSFORM_FINISHED 21 129081966bceSXin LI #define ET_SMART_FAILED 22 129181966bceSXin LI #define ET_SMART_PASSED 23 129281966bceSXin LI #define ET_SECTOR_REPAIR_FAIL 24 129381966bceSXin LI #define ET_SECTOR_REPAIR_SUCCESS 25 129481966bceSXin LI #define ET_ERASE_FAIL 26 129581966bceSXin LI #define ET_ERASE_SUCCESS 27 129681966bceSXin LI #define ET_CONTINUE_REBUILD_ON_ERROR 28 129781966bceSXin LI 129881966bceSXin LI 129981966bceSXin LI /* 130081966bceSXin LI * event structure 130181966bceSXin LI */ 130281966bceSXin LI typedef struct _HPT_EVENT { 130381966bceSXin LI TIME_RECORD Time; 130481966bceSXin LI DEVICEID DeviceID; 130581966bceSXin LI HPT_U8 EventType; 130681966bceSXin LI HPT_U8 reserved[3]; 130781966bceSXin LI 130881966bceSXin LI HPT_U8 Data[32]; /* various data depend on EventType */ 130981966bceSXin LI } HPT_EVENT, *PHPT_EVENT; 131081966bceSXin LI 131181966bceSXin LI /* 131281966bceSXin LI * IDE pass-through command. Use it at your own risk! 131381966bceSXin LI */ 131481966bceSXin LI typedef struct _IDE_PASS_THROUGH_HEADER { 131581966bceSXin LI DEVICEID idDisk; /* disk ID */ 131681966bceSXin LI HPT_U8 bFeaturesReg; /* feature register */ 131781966bceSXin LI HPT_U8 bSectorCountReg; /* IDE sector count register. */ 131881966bceSXin LI HPT_U8 bLbaLowReg; /* IDE LBA low value. */ 131981966bceSXin LI HPT_U8 bLbaMidReg; /* IDE LBA mid register. */ 132081966bceSXin LI HPT_U8 bLbaHighReg; /* IDE LBA high value. */ 132181966bceSXin LI HPT_U8 bDriveHeadReg; /* IDE drive/head register. */ 132281966bceSXin LI HPT_U8 bCommandReg; /* Actual IDE command. Checked for validity by driver. */ 132381966bceSXin LI HPT_U8 nSectors; /* data size in sectors, if the command has data transfer */ 132481966bceSXin LI HPT_U8 protocol; /* IO_COMMAND_(READ,WRITE) or zero for non-DATA */ 132581966bceSXin LI HPT_U8 reserve[3]; 132681966bceSXin LI #define IDE_PASS_THROUGH_buffer(p) ((HPT_U8 *)(p) + sizeof(IDE_PASS_THROUGH_HEADER)) 132781966bceSXin LI /* HPT_U8 DataBuffer[0]; */ 132881966bceSXin LI } 132981966bceSXin LI IDE_PASS_THROUGH_HEADER, *PIDE_PASS_THROUGH_HEADER; 133081966bceSXin LI 133181966bceSXin LI typedef struct _IDE_PASS_THROUGH_HEADER_V2 { 133281966bceSXin LI DEVICEID idDisk; /* disk ID */ 133381966bceSXin LI HPT_U16 bFeaturesReg; /* feature register */ 133481966bceSXin LI HPT_U16 bSectorCountReg; /* IDE sector count register. */ 133581966bceSXin LI HPT_U16 bLbaLowReg; /* IDE LBA low value. */ 133681966bceSXin LI HPT_U16 bLbaMidReg; /* IDE LBA mid register. */ 133781966bceSXin LI HPT_U16 bLbaHighReg; /* IDE LBA high value. */ 133881966bceSXin LI HPT_U8 bDriveHeadReg; /* IDE drive/head register. */ 133981966bceSXin LI HPT_U8 bCommandReg; /* Actual IDE command. Checked for validity by driver. */ 134081966bceSXin LI HPT_U16 nSectors; /* data size in sectors, if the command has data transfer */ 134181966bceSXin LI HPT_U8 protocol; /* IO_COMMAND_(READ,WRITE) or zero for non-DATA */ 134281966bceSXin LI HPT_U8 reserve; 134381966bceSXin LI #define IDE_PASS_THROUGH_V2_buffer(p) ((HPT_U8 *)(p) + sizeof(IDE_PASS_THROUGH_HEADER_V2)) 134481966bceSXin LI /* HPT_U8 DataBuffer[0]; */ 134581966bceSXin LI } 134681966bceSXin LI IDE_PASS_THROUGH_HEADER_V2, *PIDE_PASS_THROUGH_HEADER_V2; 134781966bceSXin LI 134881966bceSXin LI typedef struct _HPT_SCSI_PASSTHROUGH_IN { 134981966bceSXin LI DEVICEID idDisk; 135081966bceSXin LI HPT_U8 protocol; 135181966bceSXin LI HPT_U8 reserve1; 135281966bceSXin LI HPT_U8 reserve2; 135381966bceSXin LI HPT_U8 cdbLength; 135481966bceSXin LI HPT_U8 cdb[16]; 135581966bceSXin LI HPT_U32 dataLength; 135681966bceSXin LI /* data follows, if any */ 135781966bceSXin LI } 135881966bceSXin LI HPT_SCSI_PASSTHROUGH_IN, *PHPT_SCSI_PASSTHROUGH_IN; 135981966bceSXin LI 136081966bceSXin LI typedef struct _HPT_SCSI_PASSTHROUGH_OUT { 136181966bceSXin LI HPT_U8 scsiStatus; 136281966bceSXin LI HPT_U8 reserve1; 136381966bceSXin LI HPT_U8 reserve2; 136481966bceSXin LI HPT_U8 reserve3; 136581966bceSXin LI HPT_U32 dataLength; 136681966bceSXin LI /* data/sense follows if any */ 136781966bceSXin LI } 136881966bceSXin LI HPT_SCSI_PASSTHROUGH_OUT, *PHPT_SCSI_PASSTHROUGH_OUT; 136981966bceSXin LI 137081966bceSXin LI /* 137181966bceSXin LI * device io packet format 137281966bceSXin LI */ 137381966bceSXin LI typedef struct _DEVICE_IO_EX_PARAMS { 137481966bceSXin LI DEVICEID idDisk; 137581966bceSXin LI HPT_U32 Lba; 137681966bceSXin LI HPT_U16 nSectors; 137781966bceSXin LI HPT_U8 Command; /* IO_COMMAD_xxx */ 137881966bceSXin LI HPT_U8 BufferType; /* BUFFER_TYPE_xxx, see below */ 137981966bceSXin LI HPT_U32 BufferPtr; 138081966bceSXin LI } 138181966bceSXin LI DEVICE_IO_EX_PARAMS, *PDEVICE_IO_EX_PARAMS; 138281966bceSXin LI 138381966bceSXin LI #define BUFFER_TYPE_LOGICAL 1 /* logical pointer to buffer */ 138481966bceSXin LI #define BUFFER_TYPE_PHYSICAL 2 /* physical address of buffer */ 138581966bceSXin LI #define BUFFER_TYPE_LOGICAL_LOGICAL_SG 3 /* logical pointer to logical S/G table */ 138681966bceSXin LI #define BUFFER_TYPE_LOGICAL_PHYSICAL_SG 4 /* logical pointer to physical S/G table */ 138781966bceSXin LI #define BUFFER_TYPE_PHYSICAL_LOGICAL_SG 5 /* physical address to logical S/G table */ 138881966bceSXin LI #define BUFFER_TYPE_PHYSICAL_PHYSICAL_SG 6 /* physical address of physical S/G table */ 138981966bceSXin LI #define BUFFER_TYPE_PHYSICAL_PHYSICAL_SG_PIO 7 /* non DMA capable physical address of physical S/G table */ 139081966bceSXin LI 139181966bceSXin LI typedef struct _HPT_DRIVER_PARAMETER { 139281966bceSXin LI char name[32]; 139381966bceSXin LI HPT_U8 value[32]; 139481966bceSXin LI HPT_U8 type; /* HPT_DRIVER_PARAMETER_TYPE_* */ 139581966bceSXin LI HPT_U8 persistent; 139681966bceSXin LI HPT_U8 reserve2[2]; 139781966bceSXin LI HPT_U8 location; /* 0 - system */ 139881966bceSXin LI HPT_U8 controller; 139981966bceSXin LI HPT_U8 bus; 140081966bceSXin LI HPT_U8 reserve1; 140181966bceSXin LI char desc[128]; 140281966bceSXin LI } 140381966bceSXin LI HPT_DRIVER_PARAMETER, *PHPT_DRIVER_PARAMETER; 140481966bceSXin LI 140581966bceSXin LI #define HPT_DRIVER_PARAMETER_TYPE_INT 1 140681966bceSXin LI #define HPT_DRIVER_PARAMETER_TYPE_BOOL 2 140781966bceSXin LI 140881966bceSXin LI typedef struct _HPT_PM_CMDSTAT { 140981966bceSXin LI HPT_U64 timeStamp; 141081966bceSXin LI HPT_U64 lba; 141181966bceSXin LI HPT_U16 sectors; 141281966bceSXin LI HPT_U16 reserved; 141381966bceSXin LI HPT_U32 rspTime; 141481966bceSXin LI } 141581966bceSXin LI HPT_PM_CMDSTAT, *PHPT_PM_CMDSTAT; 141681966bceSXin LI 141781966bceSXin LI #define HIGHEST_RSPTIME_CMD_SAVE 10 141881966bceSXin LI #define RSPTIME_HISTOGRAM_SEGMENT_COUNT 38 141981966bceSXin LI 142081966bceSXin LI typedef struct _HPT_PM_IOSTAT { 142181966bceSXin LI HPT_PM_CMDSTAT highestRspCmdStatData[HIGHEST_RSPTIME_CMD_SAVE]; 142281966bceSXin LI HPT_U32 rspTimeHistogram[RSPTIME_HISTOGRAM_SEGMENT_COUNT]; 142381966bceSXin LI HPT_U16 pendingIo; 142481966bceSXin LI HPT_U16 activeIo; 142581966bceSXin LI HPT_U32 instantKBPs; 142681966bceSXin LI HPT_U32 averageKBPs; 142781966bceSXin LI HPT_U32 instantIOPs; 142881966bceSXin LI HPT_U32 averageIOPs; 142981966bceSXin LI } 143081966bceSXin LI HPT_PM_IOSTAT, *PHPT_PM_IOSTAT; 143181966bceSXin LI 1432f29c86f1SXin LI /* 1433f29c86f1SXin LI * disk config region 1434f29c86f1SXin LI */ 1435f29c86f1SXin LI typedef struct _ACCESS_CONFIG_REG { 1436f29c86f1SXin LI DEVICEID id; 1437f29c86f1SXin LI HPT_U16 start; 1438f29c86f1SXin LI HPT_U8 sectors; 1439f29c86f1SXin LI HPT_U8 read; 1440f29c86f1SXin LI HPT_U32 Reserved; 1441f29c86f1SXin LI #define ACCESS_CONFIG_REG_buffer(p) ((HPT_U8 *)(p) + sizeof(ACCESS_CONFIG_REG_PARAMS)) 1442f29c86f1SXin LI } __attribute__((packed))ACCESS_CONFIG_REG_PARAMS, *PACCESS_CONFIG_REG_PARAMS; 1443f29c86f1SXin LI 1444f29c86f1SXin LI /* 1445f29c86f1SXin LI * dump meta data 1446f29c86f1SXin LI */ 1447f29c86f1SXin LI typedef struct _DUMP_METADATA { 1448f29c86f1SXin LI DEVICEID id; 1449f29c86f1SXin LI HPT_U8 sectors; 1450f29c86f1SXin LI HPT_U8 backsectors; 1451f29c86f1SXin LI HPT_U8 offset; 1452f29c86f1SXin LI HPT_U8 backoffset; 1453f29c86f1SXin LI } __attribute__((packed))DUMP_METADATA_PARAMS, *PDUMP_METADATA_PARAMS; 1454f29c86f1SXin LI 145581966bceSXin LI 145681966bceSXin LI 145781966bceSXin LI /* 145881966bceSXin LI * ioctl structure 145981966bceSXin LI */ 146081966bceSXin LI #define HPT_IOCTL_MAGIC32 0x1A2B3C4D 146181966bceSXin LI #define HPT_IOCTL_MAGIC 0xA1B2C3D4 146281966bceSXin LI 146381966bceSXin LI typedef struct _HPT_IOCTL_PARAM { 146481966bceSXin LI HPT_U32 Magic; /* used to check if it's a valid ioctl packet */ 146581966bceSXin LI HPT_U32 dwIoControlCode; /* operation control code */ 146681966bceSXin LI HPT_PTR lpInBuffer; /* input data buffer */ 146781966bceSXin LI HPT_U32 nInBufferSize; /* size of input data buffer */ 146881966bceSXin LI HPT_PTR lpOutBuffer; /* output data buffer */ 146981966bceSXin LI HPT_U32 nOutBufferSize; /* size of output data buffer */ 147081966bceSXin LI HPT_PTR lpBytesReturned; /* count of HPT_U8s returned */ 147181966bceSXin LI } 147281966bceSXin LI HPT_IOCTL_PARAM, *PHPT_IOCTL_PARAM; 147381966bceSXin LI 147481966bceSXin LI /* for 32-bit app running on 64-bit system */ 147581966bceSXin LI typedef struct _HPT_IOCTL_PARAM32 { 147681966bceSXin LI HPT_U32 Magic; 147781966bceSXin LI HPT_U32 dwIoControlCode; 147881966bceSXin LI HPT_U32 lpInBuffer; 147981966bceSXin LI HPT_U32 nInBufferSize; 148081966bceSXin LI HPT_U32 lpOutBuffer; 148181966bceSXin LI HPT_U32 nOutBufferSize; 148281966bceSXin LI HPT_U32 lpBytesReturned; 148381966bceSXin LI } 148481966bceSXin LI HPT_IOCTL_PARAM32, *PHPT_IOCTL_PARAM32; 148581966bceSXin LI 148681966bceSXin LI #if !defined(__KERNEL__) || defined(SIMULATE) 148781966bceSXin LI /* 148881966bceSXin LI * User-mode ioctl parameter passing conventions: 148981966bceSXin LI * The ioctl function implementation is platform specific, so we don't 149081966bceSXin LI * have forced rules for it. However, it's suggested to use a parameter 149181966bceSXin LI * passing method as below 149281966bceSXin LI * 1) Put all input data continuously in an input buffer. 149381966bceSXin LI * 2) Prepare an output buffer with enough size if needed. 149481966bceSXin LI * 3) Fill a HPT_IOCTL_PARAM structure. 149581966bceSXin LI * 4) Pass the structure to driver through a platform-specific method. 149681966bceSXin LI * This is implemented in the mid-layer user-mode library. The UI 149781966bceSXin LI * programmer needn't care about it. 149881966bceSXin LI */ 149981966bceSXin LI 150081966bceSXin LI /************************************************************************ 150181966bceSXin LI * User mode functions 150281966bceSXin LI ************************************************************************/ 150381966bceSXin LI /* 150481966bceSXin LI * hpt_get_version 150581966bceSXin LI * Version compatibility: all versions 150681966bceSXin LI * Parameters: 150781966bceSXin LI * None 150881966bceSXin LI * Returns: 150981966bceSXin LI * interface version. 0 when fail. 151081966bceSXin LI */ 151181966bceSXin LI HPT_U32 hpt_get_version(void); 151281966bceSXin LI 151381966bceSXin LI /* 151481966bceSXin LI * hpt_get_driver_capabilities 151581966bceSXin LI * Version compatibility: v1.0.0.2 or later 151681966bceSXin LI * Parameters: 151781966bceSXin LI * Pointer to receive a DRIVE_CAPABILITIES structure. The caller must set 151881966bceSXin LI * dwSize member to sizeof(DRIVER_CAPABILITIES). The callee must check this 151981966bceSXin LI * member to see if it's correct. 152081966bceSXin LI * Returns: 152181966bceSXin LI * 0 - Success 152281966bceSXin LI */ 152381966bceSXin LI int hpt_get_driver_capabilities(PDRIVER_CAPABILITIES cap); 152481966bceSXin LI int hpt_get_driver_capabilities_v2(PDRIVER_CAPABILITIES_V2 cap); 152581966bceSXin LI 152681966bceSXin LI /* 152781966bceSXin LI * hpt_get_controller_count 152881966bceSXin LI * Version compatibility: v1.0.0.1 or later 152981966bceSXin LI * Parameters: 153081966bceSXin LI * None 153181966bceSXin LI * Returns: 153281966bceSXin LI * number of controllers 153381966bceSXin LI */ 153481966bceSXin LI int hpt_get_controller_count(void); 153581966bceSXin LI 153681966bceSXin LI /* hpt_get_controller_info 153781966bceSXin LI * Version compatibility: v1.0.0.1 or later 153881966bceSXin LI * Parameters: 153981966bceSXin LI * id Controller id 154081966bceSXin LI * pInfo pointer to CONTROLLER_INFO buffer 154181966bceSXin LI * Returns: 154281966bceSXin LI * 0 Success, controller info is put into (*pInfo ). 154381966bceSXin LI */ 154481966bceSXin LI int hpt_get_controller_info(int id, PCONTROLLER_INFO pInfo); 154581966bceSXin LI 154681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 154781966bceSXin LI /* hpt_get_controller_info_v2 154881966bceSXin LI * Version compatibility: v2.0.0.0 or later 154981966bceSXin LI * Parameters: 155081966bceSXin LI * id Controller id 155181966bceSXin LI * pInfo pointer to CONTROLLER_INFO_V2 buffer 155281966bceSXin LI * Returns: 155381966bceSXin LI * 0 Success, controller info is put into (*pInfo ). 155481966bceSXin LI */ 155581966bceSXin LI int hpt_get_controller_info_v2(int id, PCONTROLLER_INFO_V2 pInfo); 155681966bceSXin LI 1557f29c86f1SXin LI /* hpt_get_controller_info_v2_ext 1558f29c86f1SXin LI * Version compatibility: v2.0.0.0 or later 1559f29c86f1SXin LI * Parameters: 1560f29c86f1SXin LI * id Controller id 1561f29c86f1SXin LI * pInfo pointer to CONTROLLER_INFO_V2_EXT buffer 1562f29c86f1SXin LI * Returns: 1563f29c86f1SXin LI * 0 Success, controller info is put into (*pInfo ). 1564f29c86f1SXin LI */ 1565f29c86f1SXin LI int hpt_get_controller_info_v2_ext(int id, PCONTROLLER_INFO_V2_EXT pInfo); 1566f29c86f1SXin LI 156781966bceSXin LI /* hpt_get_controller_info_v3 156881966bceSXin LI * Version compatibility: v2.0.0.0 or later 156981966bceSXin LI * Parameters: 157081966bceSXin LI * id Controller id 157181966bceSXin LI * pInfo pointer to CONTROLLER_INFO_V3 buffer 157281966bceSXin LI * Returns: 157381966bceSXin LI * 0 Success, controller info is put into (*pInfo ). 157481966bceSXin LI */ 157581966bceSXin LI int hpt_get_controller_info_v3(int id, PCONTROLLER_INFO_V3 pInfo); 157681966bceSXin LI #endif 157781966bceSXin LI 157881966bceSXin LI /* hpt_get_channel_info 157981966bceSXin LI * Version compatibility: v1.0.0.1 or later 158081966bceSXin LI * Parameters: 158181966bceSXin LI * id Controller id 158281966bceSXin LI * bus bus number 158381966bceSXin LI * pInfo pointer to CHANNEL_INFO buffer 158481966bceSXin LI * Returns: 158581966bceSXin LI * 0 Success, channel info is put into (*pInfo ). 158681966bceSXin LI */ 158781966bceSXin LI int hpt_get_channel_info(int id, int bus, PCHANNEL_INFO pInfo); 158881966bceSXin LI 158981966bceSXin LI /* hpt_get_channel_info_v2 159081966bceSXin LI * Version compatibility: v1.0.0.1 or later 159181966bceSXin LI * Parameters: 159281966bceSXin LI * id Controller id 159381966bceSXin LI * bus bus number 159481966bceSXin LI * pInfo pointer to CHANNEL_INFO buffer 159581966bceSXin LI * Returns: 159681966bceSXin LI * 0 Success, channel info is put into (*pInfo ). 159781966bceSXin LI */ 159881966bceSXin LI int hpt_get_channel_info_v2(int id, int bus, PCHANNEL_INFO_V2 pInfo); 159981966bceSXin LI 160081966bceSXin LI /* hpt_get_logical_devices 160181966bceSXin LI * Version compatibility: v1.0.0.1 or later 160281966bceSXin LI * Parameters: 160381966bceSXin LI * pIds pointer to a DEVICEID array 160481966bceSXin LI * nMaxCount array size 160581966bceSXin LI * Returns: 160681966bceSXin LI * Number of ID returned. All logical device IDs are put into pIds array. 160781966bceSXin LI * Note: A spare disk is not a logical device. 160881966bceSXin LI */ 160981966bceSXin LI int hpt_get_logical_devices(DEVICEID * pIds, int nMaxCount); 161081966bceSXin LI 161181966bceSXin LI /* hpt_get_physical_devices 161281966bceSXin LI * Version compatibility: v2.1.0.0 or later 161381966bceSXin LI * Parameters: 161481966bceSXin LI * pIds pointer to a DEVICEID array 161581966bceSXin LI * nMaxCount array size 161681966bceSXin LI * Returns: 161781966bceSXin LI * Number of ID returned. All physical device IDs are put into pIds array. 161881966bceSXin LI */ 161981966bceSXin LI int hpt_get_physical_devices(DEVICEID * pIds, int nMaxCount); 162081966bceSXin LI 162181966bceSXin LI /* hpt_get_device_info 162281966bceSXin LI * Version compatibility: v1.0.0.1 or later 162381966bceSXin LI * Parameters: 162481966bceSXin LI * id logical device id 162581966bceSXin LI * pInfo pointer to LOGICAL_DEVICE_INFO structure 162681966bceSXin LI * Returns: 162781966bceSXin LI * 0 - Success 162881966bceSXin LI */ 162981966bceSXin LI int hpt_get_device_info(DEVICEID id, PLOGICAL_DEVICE_INFO pInfo); 163081966bceSXin LI 163181966bceSXin LI /* hpt_create_array 163281966bceSXin LI * Version compatibility: v1.0.0.1 or later 163381966bceSXin LI * Parameters: 163481966bceSXin LI * pParam pointer to CREATE_ARRAY_PARAMS structure 163581966bceSXin LI * Returns: 163681966bceSXin LI * 0 failed 163781966bceSXin LI * else return array id 163881966bceSXin LI */ 163981966bceSXin LI DEVICEID hpt_create_array(PCREATE_ARRAY_PARAMS pParam); 164081966bceSXin LI 164181966bceSXin LI /* hpt_delete_array 164281966bceSXin LI * Version compatibility: v1.0.0.1 or later 164381966bceSXin LI * Parameters: 164481966bceSXin LI * id array id 164581966bceSXin LI * Returns: 164681966bceSXin LI * 0 Success 164781966bceSXin LI */ 164881966bceSXin LI int hpt_delete_array(DEVICEID id, HPT_U32 options); 164981966bceSXin LI 165081966bceSXin LI /* hpt_device_io 165181966bceSXin LI * Read/write data on array and physcal device. 165281966bceSXin LI * Version compatibility: v1.0.0.1 or later 165381966bceSXin LI * Parameters: 165481966bceSXin LI * id device id. If it's an array ID, IO will be performed on the array. 165581966bceSXin LI * If it's a physical device ID, IO will be performed on the device. 165681966bceSXin LI * cmd IO_COMMAND_READ or IO_COMMAND_WRITE 165781966bceSXin LI * buffer data buffer 165881966bceSXin LI * length data size 165981966bceSXin LI * Returns: 166081966bceSXin LI * 0 Success 166181966bceSXin LI */ 166281966bceSXin LI int hpt_device_io(DEVICEID id, int cmd, HPT_U32 lba, HPT_U32 nSector, void * buffer); 166381966bceSXin LI 166481966bceSXin LI /* hpt_add_disk_to_array 166581966bceSXin LI * Used to dynamicly add a disk to an RAID1, RAID0/1, RAID1/0 or RAID5 array. 166681966bceSXin LI * Auto-rebuild will start. 166781966bceSXin LI * Version compatibility: v1.0.0.1 or later 166881966bceSXin LI * Parameters: 166981966bceSXin LI * idArray array id 167081966bceSXin LI * idDisk disk id 167181966bceSXin LI * Returns: 167281966bceSXin LI * 0 Success 167381966bceSXin LI */ 167481966bceSXin LI int hpt_add_disk_to_array(DEVICEID idArray, DEVICEID idDisk); 167581966bceSXin LI 167681966bceSXin LI /* hpt_add_spare_disk 167781966bceSXin LI * Version compatibility: v1.0.0.1 or later 167881966bceSXin LI * Add a disk to spare pool. 167981966bceSXin LI * Parameters: 168081966bceSXin LI * idDisk disk id 168181966bceSXin LI * Returns: 168281966bceSXin LI * 0 Success 168381966bceSXin LI */ 168481966bceSXin LI int hpt_add_spare_disk(DEVICEID idDisk); 168581966bceSXin LI 168681966bceSXin LI /* hpt_add_dedicated_spare 168781966bceSXin LI * Version compatibility: v1.0.0.3 or later 168881966bceSXin LI * Add a spare disk to an array 168981966bceSXin LI * Parameters: 169081966bceSXin LI * idDisk disk id 169181966bceSXin LI * idArray array id 169281966bceSXin LI * Returns: 169381966bceSXin LI * 0 Success 169481966bceSXin LI */ 169581966bceSXin LI int hpt_add_dedicated_spare(DEVICEID idDisk, DEVICEID idArray); 169681966bceSXin LI 169781966bceSXin LI /* hpt_remove_spare_disk 169881966bceSXin LI * remove a disk from spare pool. 169981966bceSXin LI * Version compatibility: v1.0.0.1 or later 170081966bceSXin LI * Parameters: 170181966bceSXin LI * idDisk disk id 170281966bceSXin LI * Returns: 170381966bceSXin LI * 0 Success 170481966bceSXin LI */ 170581966bceSXin LI int hpt_remove_spare_disk(DEVICEID idDisk); 170681966bceSXin LI 170781966bceSXin LI /* hpt_get_event 170881966bceSXin LI * Used to poll events from driver. 170981966bceSXin LI * Version compatibility: v1.0.0.1 or later 171081966bceSXin LI * Parameters: 171181966bceSXin LI * pEvent pointer to HPT_EVENT structure 171281966bceSXin LI * Returns: 171381966bceSXin LI * 0 Success, event info is filled in *pEvent 171481966bceSXin LI */ 171581966bceSXin LI int hpt_get_event(PHPT_EVENT pEvent); 171681966bceSXin LI 171781966bceSXin LI /* hpt_rebuild_data_block 171881966bceSXin LI * Used to copy data from source disk and mirror disk. 171981966bceSXin LI * Version compatibility: v1.0.0.1 or later 172081966bceSXin LI * Parameters: 172181966bceSXin LI * idArray Array ID (RAID1, 0/1 or RAID5) 172281966bceSXin LI * Lba Start LBA for each array member 172381966bceSXin LI * nSector Number of sectors for each array member (RAID 5 will ignore this parameter) 172481966bceSXin LI * 172581966bceSXin LI * Returns: 172681966bceSXin LI * 0 Success, event info is filled in *pEvent 172781966bceSXin LI */ 172881966bceSXin LI int hpt_rebuild_data_block(DEVICEID idMirror, HPT_U32 Lba, HPT_U8 nSector); 172981966bceSXin LI #define hpt_rebuild_mirror(p1, p2, p3) hpt_rebuild_data_block(p1, p2, p3) 173081966bceSXin LI 173181966bceSXin LI /* hpt_set_array_state 173281966bceSXin LI * set array state. 173381966bceSXin LI * Version compatibility: v1.0.0.1 or later 173481966bceSXin LI * Parameters: 173581966bceSXin LI * idArray Array ID 173681966bceSXin LI * state See above 'array states' constants, possible values are: 173781966bceSXin LI * MIRROR_REBUILD_START 173881966bceSXin LI * Indicate that GUI wants to rebuild a mirror array 173981966bceSXin LI * MIRROR_REBUILD_ABORT 174081966bceSXin LI * GUI wants to abort rebuilding an array 174181966bceSXin LI * MIRROR_REBUILD_COMPLETE 174281966bceSXin LI * GUI finished to rebuild an array. If rebuild is done by driver this 174381966bceSXin LI * state has no use 174481966bceSXin LI * 174581966bceSXin LI * Returns: 174681966bceSXin LI * 0 Success 174781966bceSXin LI */ 174881966bceSXin LI int hpt_set_array_state(DEVICEID idArray, HPT_U32 state); 174981966bceSXin LI 175081966bceSXin LI /* hpt_set_array_info 175181966bceSXin LI * set array info. 175281966bceSXin LI * Version compatibility: v1.0.0.1 or later 175381966bceSXin LI * Parameters: 175481966bceSXin LI * idArray Array ID 175581966bceSXin LI * pInfo pointer to new info 175681966bceSXin LI * 175781966bceSXin LI * Returns: 175881966bceSXin LI * 0 Success 175981966bceSXin LI */ 176081966bceSXin LI int hpt_set_array_info(DEVICEID idArray, PALTERABLE_ARRAY_INFO pInfo); 176181966bceSXin LI 176281966bceSXin LI /* hpt_set_device_info 176381966bceSXin LI * set device info. 176481966bceSXin LI * Version compatibility: v1.0.0.1 or later 176581966bceSXin LI * Parameters: 176681966bceSXin LI * idDisk device ID 176781966bceSXin LI * pInfo pointer to new info 176881966bceSXin LI * 176981966bceSXin LI * Returns: 177081966bceSXin LI * 0 Success 177181966bceSXin LI * Additional notes: 177281966bceSXin LI * If idDisk==0, call to this function will stop buzzer on the adapter 177381966bceSXin LI * (if supported by driver). 177481966bceSXin LI */ 177581966bceSXin LI int hpt_set_device_info(DEVICEID idDisk, PALTERABLE_DEVICE_INFO pInfo); 177681966bceSXin LI 177781966bceSXin LI #if HPT_INTERFACE_VERSION >= 0x01000004 177881966bceSXin LI int hpt_set_device_info_v2(DEVICEID idDisk, PALTERABLE_DEVICE_INFO_V2 pInfo); 177981966bceSXin LI #endif 178081966bceSXin LI 178181966bceSXin LI /* hpt_rescan_devices 178281966bceSXin LI * rescan devices 178381966bceSXin LI * Version compatibility: v1.0.0.1 or later 178481966bceSXin LI * Parameters: 178581966bceSXin LI * None 178681966bceSXin LI * Returns: 178781966bceSXin LI * 0 Success 178881966bceSXin LI */ 178981966bceSXin LI int hpt_rescan_devices(void); 179081966bceSXin LI 179181966bceSXin LI /* hpt_get_601_info 179281966bceSXin LI * Get HPT601 status 179381966bceSXin LI * Version compatibiilty: v1.0.0.3 or later 179481966bceSXin LI * Parameters: 179581966bceSXin LI * idDisk - Disk handle 179681966bceSXin LI * PHPT601_INFO - pointer to HPT601 info buffer 179781966bceSXin LI * Returns: 179881966bceSXin LI * 0 Success 179981966bceSXin LI */ 180081966bceSXin LI int hpt_get_601_info(DEVICEID idDisk, PHPT601_INFO pInfo); 180181966bceSXin LI 180281966bceSXin LI /* hpt_set_601_info 180381966bceSXin LI * HPT601 function control 180481966bceSXin LI * Version compatibiilty: v1.0.0.3 or later 180581966bceSXin LI * Parameters: 180681966bceSXin LI * idDisk - Disk handle 180781966bceSXin LI * PHPT601_INFO - pointer to HPT601 info buffer 180881966bceSXin LI * Returns: 180981966bceSXin LI * 0 Success 181081966bceSXin LI */ 181181966bceSXin LI int hpt_set_601_info(DEVICEID idDisk, PHPT601_INFO pInfo); 181281966bceSXin LI 181381966bceSXin LI /* hpt_lock_device 181481966bceSXin LI * Lock a block on a device (prevent OS accessing it) 181581966bceSXin LI * Version compatibiilty: v1.0.0.3 or later 181681966bceSXin LI * Parameters: 181781966bceSXin LI * idDisk - Disk handle 181881966bceSXin LI * Lba - Start LBA 181981966bceSXin LI * nSectors - number of sectors 182081966bceSXin LI * Returns: 182181966bceSXin LI * 0 Success 182281966bceSXin LI */ 182381966bceSXin LI int hpt_lock_device(DEVICEID idDisk, HPT_U32 Lba, HPT_U8 nSectors); 182481966bceSXin LI 182581966bceSXin LI /* hpt_lock_device 182681966bceSXin LI * Unlock a device 182781966bceSXin LI * Version compatibiilty: v1.0.0.3 or later 182881966bceSXin LI * Parameters: 182981966bceSXin LI * idDisk - Disk handle 183081966bceSXin LI * Returns: 183181966bceSXin LI * 0 Success 183281966bceSXin LI */ 183381966bceSXin LI int hpt_unlock_device(DEVICEID idDisk); 183481966bceSXin LI 183581966bceSXin LI /* hpt_ide_pass_through 183681966bceSXin LI * send a ATA passthrough command to a device. 183781966bceSXin LI * Version compatibility: v1.0.0.3 or later 183881966bceSXin LI * Parameters: 183981966bceSXin LI * p - IDE_PASS_THROUGH header pointer 184081966bceSXin LI * Returns: 184181966bceSXin LI * 0 Success 184281966bceSXin LI */ 184381966bceSXin LI int hpt_ide_pass_through(PIDE_PASS_THROUGH_HEADER p); 184481966bceSXin LI int hpt_ide_pass_through_v2(PIDE_PASS_THROUGH_HEADER_V2 p); 184581966bceSXin LI 184681966bceSXin LI /* hpt_scsi_passthrough 184781966bceSXin LI * send a SCSI passthrough command to a device. 184881966bceSXin LI * Version compatibility: v2.0.0.0 or later 184981966bceSXin LI * Parameters: 185081966bceSXin LI * in - HPT_SCSI_PASSTHROUGH_IN header pointer 185181966bceSXin LI * out - PHPT_SCSI_PASSTHROUGH_OUT header pointer 185281966bceSXin LI * insize, outsize - in/out buffer size 185381966bceSXin LI * Returns: 185481966bceSXin LI * 0 Success 185581966bceSXin LI */ 185681966bceSXin LI int hpt_scsi_passthrough(PHPT_SCSI_PASSTHROUGH_IN in, HPT_U32 insize, 185781966bceSXin LI PHPT_SCSI_PASSTHROUGH_OUT out, HPT_U32 outsize); 185881966bceSXin LI 185981966bceSXin LI /* hpt_verify_data_block 186081966bceSXin LI * verify data block on RAID1 or RAID5. 186181966bceSXin LI * Version compatibility: v1.0.0.3 or later 186281966bceSXin LI * Parameters: 186381966bceSXin LI * idArray - Array ID 186481966bceSXin LI * Lba - block number (on each array member, not logical block!) 186581966bceSXin LI * nSectors - Sectors for each member (RAID 5 will ignore this parameter) 186681966bceSXin LI * Returns: 186781966bceSXin LI * 0 Success 186881966bceSXin LI * 1 Data compare error 186981966bceSXin LI * 2 I/O error 187081966bceSXin LI */ 187181966bceSXin LI int hpt_verify_data_block(DEVICEID idArray, HPT_U32 Lba, HPT_U8 nSectors); 187281966bceSXin LI 187381966bceSXin LI /* hpt_initialize_data_block 187481966bceSXin LI * initialize data block (fill with zero) on RAID5 187581966bceSXin LI * Version compatibility: v1.0.0.3 or later 187681966bceSXin LI * Parameters: 187781966bceSXin LI * idArray - Array ID 187881966bceSXin LI * Lba - block number (on each array member, not logical block!) 187981966bceSXin LI * nSectors - Sectors for each member (RAID 5 will ignore this parameter) 188081966bceSXin LI * Returns: 188181966bceSXin LI * 0 Success 188281966bceSXin LI */ 188381966bceSXin LI int hpt_initialize_data_block(DEVICEID idArray, HPT_U32 Lba, HPT_U8 nSectors); 188481966bceSXin LI 188581966bceSXin LI /* hpt_device_io_ex 188681966bceSXin LI * extended device I/O function 188781966bceSXin LI * Version compatibility: v1.0.0.3 or later 188881966bceSXin LI * Parameters: 188981966bceSXin LI * idArray - Array ID 189081966bceSXin LI * Lba - block number (on each array member, not logical block!) 189181966bceSXin LI * nSectors - Sectors for each member 189281966bceSXin LI * buffer - I/O buffer or s/g address 189381966bceSXin LI * Returns: 189481966bceSXin LI * 0 Success 189581966bceSXin LI */ 189681966bceSXin LI int hpt_device_io_ex(PDEVICE_IO_EX_PARAMS param); 189781966bceSXin LI 189881966bceSXin LI /* hpt_set_boot_mark 189981966bceSXin LI * select boot device 190081966bceSXin LI * Version compatibility: v1.0.0.3 or later 190181966bceSXin LI * Parameters: 190281966bceSXin LI * id - logical device ID. If id is 0 the boot mark will be removed. 190381966bceSXin LI * Returns: 190481966bceSXin LI * 0 Success 190581966bceSXin LI */ 190681966bceSXin LI int hpt_set_boot_mark(DEVICEID id); 190781966bceSXin LI 190881966bceSXin LI /* hpt_query_remove 190981966bceSXin LI * check if device can be removed safely 191081966bceSXin LI * Version compatibility: v1.0.0.4 or later 191181966bceSXin LI * Parameters: 191281966bceSXin LI * ndev - number of devices 191381966bceSXin LI * pIds - device ID list 191481966bceSXin LI * Returns: 191581966bceSXin LI * 0 - Success 191681966bceSXin LI * -1 - unknown error 191781966bceSXin LI * n - the n-th device that can't be removed 191881966bceSXin LI */ 191981966bceSXin LI int hpt_query_remove(HPT_U32 ndev, DEVICEID *pIds); 192081966bceSXin LI 192181966bceSXin LI /* hpt_remove_devices 192281966bceSXin LI * remove a list of devices 192381966bceSXin LI * Version compatibility: v1.0.0.4 or later 192481966bceSXin LI * Parameters: 192581966bceSXin LI * ndev - number of devices 192681966bceSXin LI * pIds - device ID list 192781966bceSXin LI * Returns: 192881966bceSXin LI * 0 - Success 192981966bceSXin LI * -1 - unknown error 193081966bceSXin LI * n - the n-th device that can't be removed 193181966bceSXin LI */ 193281966bceSXin LI int hpt_remove_devices(HPT_U32 ndev, DEVICEID *pIds); 193381966bceSXin LI 193481966bceSXin LI /* hpt_create_array_v2 193581966bceSXin LI * Version compatibility: v1.1.0.0 or later 193681966bceSXin LI * Parameters: 193781966bceSXin LI * pParam pointer to CREATE_ARRAY_PARAMS_V2 structure 193881966bceSXin LI * Returns: 193981966bceSXin LI * 0 failed 194081966bceSXin LI * else return array id 194181966bceSXin LI */ 194281966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 194381966bceSXin LI DEVICEID hpt_create_array_v2(PCREATE_ARRAY_PARAMS_V2 pParam); 194481966bceSXin LI #endif 194581966bceSXin LI 194681966bceSXin LI /* hpt_create_array_v3 194781966bceSXin LI * Version compatibility: v2.0.0.1 or later 194881966bceSXin LI * Parameters: 194981966bceSXin LI * pParam pointer to CREATE_ARRAY_PARAMS_V3 structure 195081966bceSXin LI * Returns: 195181966bceSXin LI * 0 failed 195281966bceSXin LI * else return array id 195381966bceSXin LI */ 195481966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 195581966bceSXin LI DEVICEID hpt_create_array_v3(PCREATE_ARRAY_PARAMS_V3 pParam); 195681966bceSXin LI #endif 195781966bceSXin LI 195881966bceSXin LI /* hpt_get_device_info_v2 195981966bceSXin LI * Version compatibility: v1.1.0.0 or later 196081966bceSXin LI * Parameters: 196181966bceSXin LI * id logical device id 196281966bceSXin LI * pInfo pointer to LOGICAL_DEVICE_INFO_V2 structure 196381966bceSXin LI * Returns: 196481966bceSXin LI * 0 - Success 196581966bceSXin LI */ 196681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 196781966bceSXin LI int hpt_get_device_info_v2(DEVICEID id, PLOGICAL_DEVICE_INFO_V2 pInfo); 196881966bceSXin LI #endif 196981966bceSXin LI 197081966bceSXin LI /* hpt_get_device_info_v3 197181966bceSXin LI * Version compatibility: v1.2.0.0 or later 197281966bceSXin LI * Parameters: 197381966bceSXin LI * id logical device id 197481966bceSXin LI * pInfo pointer to LOGICAL_DEVICE_INFO_V3 structure 197581966bceSXin LI * Returns: 197681966bceSXin LI * 0 - Success 197781966bceSXin LI */ 197881966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 197981966bceSXin LI int hpt_get_device_info_v3(DEVICEID id, PLOGICAL_DEVICE_INFO_V3 pInfo); 198081966bceSXin LI #endif 198181966bceSXin LI 198281966bceSXin LI /* hpt_get_device_info_v4 198381966bceSXin LI * Version compatibility: v2.0.0.1 or later 198481966bceSXin LI * Parameters: 198581966bceSXin LI * id logical device id 198681966bceSXin LI * pInfo pointer to LOGICAL_DEVICE_INFO_V4 structure 198781966bceSXin LI * Returns: 198881966bceSXin LI * 0 - Success 198981966bceSXin LI */ 199081966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 199181966bceSXin LI int hpt_get_device_info_v4(DEVICEID id, PLOGICAL_DEVICE_INFO_V4 pInfo); 199281966bceSXin LI #endif 199381966bceSXin LI 199481966bceSXin LI /* hpt_create_transform 199581966bceSXin LI * create a transform instance. 199681966bceSXin LI * Version compatibility: v2.0.0.0 or later 199781966bceSXin LI * Parameters: 199881966bceSXin LI * idArray - source array 199981966bceSXin LI * destInfo - destination array info 200081966bceSXin LI * Returns: 200181966bceSXin LI * destination array id 200281966bceSXin LI */ 200381966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000000 200481966bceSXin LI DEVICEID hpt_create_transform(DEVICEID idArray, PCREATE_ARRAY_PARAMS_V2 destInfo); 200581966bceSXin LI #endif 200681966bceSXin LI 200781966bceSXin LI /* hpt_create_transform_v2 200881966bceSXin LI * create a transform instance. 200981966bceSXin LI * Version compatibility: v2.0.0.1 or later 201081966bceSXin LI * Parameters: 201181966bceSXin LI * idArray - source array 201281966bceSXin LI * destInfo - destination array info 201381966bceSXin LI * Returns: 201481966bceSXin LI * destination array id 201581966bceSXin LI */ 201681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 201781966bceSXin LI DEVICEID hpt_create_transform_v2(DEVICEID idArray, PCREATE_ARRAY_PARAMS_V3 destInfo); 201881966bceSXin LI #endif 201981966bceSXin LI 202081966bceSXin LI /* hpt_step_transform 202181966bceSXin LI * move a block in a tranform progress. 202281966bceSXin LI * This function is called by mid-layer, not GUI (which uses set_array_state instead). 202381966bceSXin LI * Version compatibility: v2.0.0.0 or later 202481966bceSXin LI * Parameters: 202581966bceSXin LI * idArray - destination array ID 202681966bceSXin LI * the source ID will be invalid when transform complete. 202781966bceSXin LI * Returns: 202881966bceSXin LI * 0 - Success 202981966bceSXin LI */ 203081966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000000 203181966bceSXin LI int hpt_step_transform(DEVICEID idArray); 203281966bceSXin LI #endif 203381966bceSXin LI 203481966bceSXin LI /* hpt_set_vdev_info 203581966bceSXin LI * set information for disk or array 203681966bceSXin LI * Version compatibility: v1.2.0.0 or later 203781966bceSXin LI * Parameters: 203881966bceSXin LI * dev - destination device 203981966bceSXin LI * 204081966bceSXin LI * Returns: 204181966bceSXin LI * 0 - Success 204281966bceSXin LI */ 204381966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 204481966bceSXin LI int hpt_set_vdev_info(DEVICEID dev, PSET_VDEV_INFO pInfo); 204581966bceSXin LI #endif 204681966bceSXin LI 204781966bceSXin LI /* hpt_init_disks 204881966bceSXin LI * initialize disks for use 204981966bceSXin LI * Version compatibility: v2.0.0.0 or later 205081966bceSXin LI * Parameters: 205181966bceSXin LI * ndev - number of disks to initialize 205281966bceSXin LI * pIds - array of DEVICEID 205381966bceSXin LI * 205481966bceSXin LI * Returns: 205581966bceSXin LI * 0 - Success 205681966bceSXin LI */ 205781966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000000 205881966bceSXin LI int hpt_init_disks(HPT_U32 ndev, DEVICEID * pIds); 205981966bceSXin LI #endif 206081966bceSXin LI 206181966bceSXin LI /* hpt_calc_max_array_capacity 206281966bceSXin LI * cap max capacity of the array user want to create or transform 206381966bceSXin LI * Version compatibility: v1.2.0.0 or later 206481966bceSXin LI * Parameters: 206581966bceSXin LI * source - if transform, this is the source array, otherwise, it should be zero 206681966bceSXin LI * destInfo - target array params 206781966bceSXin LI * Returns: 206881966bceSXin LI * 0 - Success 206981966bceSXin LI * cap - max capacity of the target array 207081966bceSXin LI */ 207181966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 207281966bceSXin LI int hpt_calc_max_array_capacity(DEVICEID source, PCREATE_ARRAY_PARAMS_V2 destInfo, HPT_U64 * cap); 207381966bceSXin LI #endif 207481966bceSXin LI 207581966bceSXin LI /* hpt_calc_max_array_capacity_v2 207681966bceSXin LI * cap max capacity of the array user want to create or transform 207781966bceSXin LI * Version compatibility: v2.0.0.1 or later 207881966bceSXin LI * Parameters: 207981966bceSXin LI * source - if transform, this is the source array, otherwise, it should be zero 208081966bceSXin LI * destInfo - target array params 208181966bceSXin LI * Returns: 208281966bceSXin LI * 0 - Success 208381966bceSXin LI * cap - max capacity of the target array 208481966bceSXin LI */ 208581966bceSXin LI #if HPT_INTERFACE_VERSION>=0x02000001 208681966bceSXin LI int hpt_calc_max_array_capacity_v2(DEVICEID source, PCREATE_ARRAY_PARAMS_V3 destInfo, HPT_U64 * cap); 208781966bceSXin LI #endif 208881966bceSXin LI 208981966bceSXin LI /* hpt_rebuild_data_block2 209081966bceSXin LI * Used to copy data from source disk and mirror disk. 209181966bceSXin LI * Version compatibility: v1.1.0.0 or later 209281966bceSXin LI * Parameters: 209381966bceSXin LI * idArray Array ID (RAID1, 0/1 or RAID5) 209481966bceSXin LI * Lba Start LBA for each array member 209581966bceSXin LI * nSector Number of sectors for each array member (RAID 5 will ignore this parameter) 209681966bceSXin LI * 209781966bceSXin LI * Returns: 209881966bceSXin LI * 0 Success, event info is filled in *pEvent 209981966bceSXin LI */ 210081966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 210181966bceSXin LI int hpt_rebuild_data_block_v2(DEVICEID idMirror, HPT_U64 Lba, HPT_U16 nSector); 210281966bceSXin LI #endif 210381966bceSXin LI 210481966bceSXin LI /* hpt_verify_data_block2 210581966bceSXin LI * verify data block on RAID1 or RAID5. 210681966bceSXin LI * Version compatibility: v1.1.0.0 or later 210781966bceSXin LI * Parameters: 210881966bceSXin LI * idArray - Array ID 210981966bceSXin LI * Lba - block number (on each array member, not logical block!) 211081966bceSXin LI * nSectors - Sectors for each member (RAID 5 will ignore this parameter) 211181966bceSXin LI * Returns: 211281966bceSXin LI * 0 Success 211381966bceSXin LI * 1 Data compare error 211481966bceSXin LI * 2 I/O error 211581966bceSXin LI */ 211681966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 211781966bceSXin LI int hpt_verify_data_block_v2(DEVICEID idArray, HPT_U64 Lba, HPT_U16 nSectors); 211881966bceSXin LI #endif 211981966bceSXin LI 212081966bceSXin LI /* hpt_initialize_data_block2 212181966bceSXin LI * initialize data block (fill with zero) on RAID5 212281966bceSXin LI * Version compatibility: v1.1.0.0 or later 212381966bceSXin LI * Parameters: 212481966bceSXin LI * idArray - Array ID 212581966bceSXin LI * Lba - block number (on each array member, not logical block!) 212681966bceSXin LI * nSectors - Sectors for each member (RAID 5 will ignore this parameter) 212781966bceSXin LI * Returns: 212881966bceSXin LI * 0 Success 212981966bceSXin LI */ 213081966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01010000 213181966bceSXin LI int hpt_initialize_data_block_v2(DEVICEID idArray, HPT_U64 Lba, HPT_U16 nSectors); 213281966bceSXin LI #endif 213381966bceSXin LI 213481966bceSXin LI /* hpt_i2c_transaction 213581966bceSXin LI * perform an transaction on i2c bus 213681966bceSXin LI * Version compatibility: v2.0.0.0 or later 213781966bceSXin LI * Parameters: 213881966bceSXin LI * indata[0] - controller ID 213981966bceSXin LI * Returns: 214081966bceSXin LI * 0 Success 214181966bceSXin LI */ 214281966bceSXin LI #if HPT_INTERFACE_VERSION>=0x01020000 214381966bceSXin LI int hpt_i2c_transaction(HPT_U8 *indata, HPT_U32 inlen, HPT_U8 *outdata, HPT_U32 outlen, HPT_U32 *poutlen); 214481966bceSXin LI #endif 214581966bceSXin LI 214681966bceSXin LI /* hpt_get_parameter_list 214781966bceSXin LI * get a list of driver parameters. 214881966bceSXin LI * Version compatibility: v1.0.0.0 or later 214981966bceSXin LI * Parameters: 215081966bceSXin LI * location - parameter location 215181966bceSXin LI * outBuffer - a buffer to hold the output 215281966bceSXin LI * outBufferSize - size of outBuffer 215381966bceSXin LI * Returns: 215481966bceSXin LI * 0 Success 215581966bceSXin LI * put in outBuffer a list of zero terminated parameter names. the whole list 215681966bceSXin LI * is terminated with an additional zero byte. 215781966bceSXin LI */ 215881966bceSXin LI int hpt_get_parameter_list(HPT_U32 location, char *outBuffer, HPT_U32 outBufferSize); 215981966bceSXin LI 216081966bceSXin LI /* hpt_{get,set}_parameter 216181966bceSXin LI * get/set a parameter value. 216281966bceSXin LI * Version compatibility: v1.0.0.0 or later 216381966bceSXin LI * Parameters: 216481966bceSXin LI * pParam - a pointer to HPT_DRIVER_PARAMETER. 216581966bceSXin LI * Returns: 216681966bceSXin LI * 0 Success 216781966bceSXin LI */ 216881966bceSXin LI int hpt_get_parameter(PHPT_DRIVER_PARAMETER pParam); 216981966bceSXin LI int hpt_set_parameter(PHPT_DRIVER_PARAMETER pParam); 217081966bceSXin LI int hpt_reenumerate_device(DEVICEID id); 217181966bceSXin LI 217281966bceSXin LI /* 217381966bceSXin LI * hpt_get_enclosure_count 217481966bceSXin LI * Version compatibility: v2.1.0.0 or later 217581966bceSXin LI * Parameters: 217681966bceSXin LI * controller_id 217781966bceSXin LI * Returns: 217881966bceSXin LI * number of enclosurers 217981966bceSXin LI */ 218081966bceSXin LI int hpt_get_enclosure_count(int ctlr_id); 218181966bceSXin LI 218281966bceSXin LI /* hpt_get_enclosure_info 218381966bceSXin LI * Version compatibility: v2.1.0.0 or later 218481966bceSXin LI * Parameters: 218581966bceSXin LI * id enclosure id 218681966bceSXin LI * pInfo pointer to ENCLOSURE_INFO buffer 218781966bceSXin LI * Returns: 218881966bceSXin LI * 0 Success, enclosure info is put into (*pInfo ). 218981966bceSXin LI */ 219081966bceSXin LI int hpt_get_enclosure_info(int ctlr_id, int enc_id, PENCLOSURE_INFO pInfo); 219181966bceSXin LI 219281966bceSXin LI int hpt_get_enclosure_info_v2(int ctlr_id, int enc_id, PENCLOSURE_INFO_V2 pInfo); 219381966bceSXin LI 219481966bceSXin LI int hpt_get_enclosure_info_v3(int ctlr_id, int enc_id, PENCLOSURE_INFO_V3 pInfo); 219581966bceSXin LI 2196f29c86f1SXin LI int hpt_get_enclosure_info_v4(int ctlr_id, int enc_id, PENCLOSURE_INFO_V4 pInfo); 2197f29c86f1SXin LI int hpt_get_enclosure_element_info(int ctlr_id, int enc_id, int ele_id, PSES_ELEMENT_STATUS pInfo); 2198f29c86f1SXin LI 219981966bceSXin LI /* performance monitor interface 220081966bceSXin LI * Version compatibility: v2.1.0.0 or later 220181966bceSXin LI */ 220281966bceSXin LI int hpt_get_perfmon_status(int ctlr_id, int *p_status); 220381966bceSXin LI int hpt_set_perfmon_status(int ctlr_id, int enable); 220481966bceSXin LI int hpt_get_perfmon_data(DEVICEID id, PHPT_PM_IOSTAT iostat); 220581966bceSXin LI 220681966bceSXin LI /* hpt_get_controller_venid 220781966bceSXin LI * Version compatibility: v1.0.0.0 or later 220881966bceSXin LI */ 220981966bceSXin LI int hpt_get_controller_venid(int ctlr_id, HPT_U32 *venid); 221081966bceSXin LI 2211f29c86f1SXin LI /* hpt_access_config_reg 2212f29c86f1SXin LI * access the reserved config space on disk 2213f29c86f1SXin LI * Parameters: 2214f29c86f1SXin LI * p - ACCESS_CONFIG_REG_PARAMS header pointer 2215f29c86f1SXin LI * Returns: 2216f29c86f1SXin LI * 0 Success 2217f29c86f1SXin LI */ 2218f29c86f1SXin LI int hpt_access_config_reg(PACCESS_CONFIG_REG_PARAMS p); 2219f29c86f1SXin LI 2220f29c86f1SXin LI /* hpt_dump_metadata 2221f29c86f1SXin LI * dump internal metadata 2222f29c86f1SXin LI * Parameters: 2223f29c86f1SXin LI * p - PDUMP_METADATA_PARAMS header pointer 2224f29c86f1SXin LI * Returns: 2225f29c86f1SXin LI * 0 Success 2226f29c86f1SXin LI */ 2227f29c86f1SXin LI int hpt_dump_metadata(PDUMP_METADATA_PARAMS p); 2228f29c86f1SXin LI 222981966bceSXin LI #endif 223081966bceSXin LI 223181966bceSXin LI #pragma pack() 223281966bceSXin LI 223381966bceSXin LI #ifdef __cplusplus 223481966bceSXin LI } 223581966bceSXin LI #endif 223681966bceSXin LI #endif 2237