X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=knowndrives.h;h=7d2a8cc18a1ba0f866431293f03989ff58295d34;hb=d2cd5c38d67969917569ea37c271c02e70768531;hp=d669071bcbabfa5fe66e5acb9585912aaabfd608;hpb=4d59bff95ed91fcc3384ef45b1b23f4d08bf7e0a;p=mirror_smartmontools-debian.git diff --git a/knowndrives.h b/knowndrives.h index d669071..7d2a8cc 100644 --- a/knowndrives.h +++ b/knowndrives.h @@ -4,7 +4,8 @@ * Home page of code is: http://smartmontools.sourceforge.net * Address of support mailing list: smartmontools-support@lists.sourceforge.net * - * Copyright (C) 2003-6 Philip Williams, Bruce Allen + * Copyright (C) 2003-11 Philip Williams, Bruce Allen + * Copyright (C) 2008-12 Christian Franke * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -12,77 +13,67 @@ * any later version. * * You should have received a copy of the GNU General Public License - * (for example COPYING); if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * (for example COPYING); If not, see . * */ #ifndef KNOWNDRIVES_H_ #define KNOWNDRIVES_H_ -#define KNOWNDRIVES_H_CVSID "$Id: knowndrives.h,v 1.17 2006/08/09 20:40:19 chrfranke Exp $\n" +#define KNOWNDRIVES_H_CVSID "$Id: knowndrives.h 3597 2012-09-04 21:10:37Z chrfranke $\n" -/* Structure used to store settings for specific drives in knowndrives[]. The - * elements are used in the following ways: - * - * modelfamily Informal string about the model family/series of a - * device. Set to NULL if no info (apart from device id) - * known. - * modelregexp POSIX regular expression to match the model of a device. - * This should never be NULL (except to terminate the - * knowndrives array). - * firmwareregexp POSIX regular expression to match a devices's firmware - * version. This is optional and should be NULL if it is not - * to be used. If it is non-NULL then it will be used to - * narrow the set of devices matched by modelregexp. - * warningmsg A message that may be displayed for matching drives. For - * example, to inform the user that they may need to apply a - * firmware patch. - * vendoropts Pointer to first element of an array of vendor-specific - * option attribute/value pairs that should be set for a - * matching device unless the user has requested otherwise. - * The user's own settings override these. The array should - * be terminated with the entry {0,0}. - * specialpurpose Pointer to a function that defines some additional action - * that may be taken for matching devices. - * functiondesc A description of the effect of the specialpurpose - * function. Used by showpresets() and showallpresets() to - * make the output more informative. - */ -typedef struct drivesettings_s { +// Structure to store drive database entries, see drivedb.h for a description. +struct drive_settings { const char * modelfamily; const char * modelregexp; const char * firmwareregexp; const char * warningmsg; - const unsigned char (* vendoropts)[2]; - void (* specialpurpose)(smartmonctrl *); - const char * functiondesc; -} drivesettings; + const char * presets; +}; -/* Table of settings for known drives. Defined in knowndrives.c. */ -extern const drivesettings knowndrives[]; +// info returned by lookup_usb_device() +struct usb_dev_info +{ + std::string usb_device; // Device name, empty if unknown + std::string usb_bridge; // USB bridge name, empty if unknown + std::string usb_type; // Type string ('-d' option). +}; -// Searches knowndrives[] for a drive with the given model number and firmware -// string. -int lookupdrive(const char *model, const char *firmware); +// Search drivedb for USB device with vendor:product ID. +int lookup_usb_device(int vendor_id, int product_id, int bcd_device, + usb_dev_info & info, usb_dev_info & info2); // Shows the presets (if any) that are available for the given drive. -void showpresets(const struct ata_identify_device *drive); +void show_presets(const ata_identify_device * drive); // Shows all presets for drives in knowndrives[]. -// Returns <0 on syntax error in regular expressions. -int showallpresets(void); +// Returns #syntax errors. +int showallpresets(); // Shows all matching presets for a drive in knowndrives[]. // Returns # matching entries. int showmatchingpresets(const char *model, const char *firmware); -// Sets preset vendor attribute options in opts by finding the entry -// (if any) for the given drive in knowndrives[]. Values that have -// already been set in opts will not be changed. Also sets options in -// con. Returns <0 if drive not recognized else index of drive in -// database. -int applypresets(const struct ata_identify_device *drive, unsigned char **opts, - smartmonctrl *con); +// Searches drive database and sets preset vendor attribute +// options in defs and firmwarebugs. +// Values that have already been set will not be changed. +// Returns pointer to database entry or nullptr if none found. +const drive_settings * lookup_drive_apply_presets( + const ata_identify_device * drive, ata_vendor_attr_defs & defs, + firmwarebug_defs & firmwarebugs); + +// Get path for additional database file +const char * get_drivedb_path_add(); + +#ifdef SMARTMONTOOLS_DRIVEDBDIR +// Get path for default database file +const char * get_drivedb_path_default(); +#endif + +// Read drive database from file. +bool read_drive_database(const char * path); + +// Read drive databases from standard places. +bool read_default_drive_databases(); #endif