--- embedaddon/smartmontools/dev_interface.h 2012/10/09 09:36:45 1.1.1.2 +++ embedaddon/smartmontools/dev_interface.h 2013/07/22 01:17:35 1.1.1.3 @@ -18,7 +18,7 @@ #ifndef DEV_INTERFACE_H #define DEV_INTERFACE_H -#define DEV_INTERFACE_H_CVSID "$Id: dev_interface.h,v 1.1.1.2 2012/10/09 09:36:45 misho Exp $\n" +#define DEV_INTERFACE_H_CVSID "$Id: dev_interface.h,v 1.1.1.3 2013/07/22 01:17:35 misho Exp $\n" #include "utility.h" @@ -506,12 +506,35 @@ class ata_device (public) virtual bool ata_identify_is_cached() const; protected: + /// Flags for ata_cmd_is_supported(). + enum { + supports_data_out = 0x01, // PIO DATA OUT + supports_smart_status = 0x02, // read output registers for SMART STATUS only + supports_output_regs = 0x04, // read output registers for all commands + supports_multi_sector = 0x08, // more than one sector (1 DRQ/sector variant) + supports_48bit_hi_null = 0x10, // 48-bit commands with null high bytes only + supports_48bit = 0x20, // all 48-bit commands + }; + /// Check command input parameters. + /// Return false if required features are not implemented. /// Calls set_err(...) accordingly. + bool ata_cmd_is_supported(const ata_cmd_in & in, unsigned flags, + const char * type = 0); + + /// Check command input parameters (old version). + // TODO: Remove if no longer used. bool ata_cmd_is_ok(const ata_cmd_in & in, bool data_out_support = false, bool multi_sector_support = false, - bool ata_48bit_support = false); + bool ata_48bit_support = false) + { + return ata_cmd_is_supported(in, + (data_out_support ? supports_data_out : 0) | + supports_output_regs | + (multi_sector_support ? supports_multi_sector : 0) | + (ata_48bit_support ? supports_48bit : 0)); + } /// Hide/unhide ATA interface. void hide_ata(bool hide = true)