1 /* 2 * Copyright (C) IBM Corp. 2003 3 * 4 * This program is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #pragma once 19 20 #define MAX_PATH_LEN 512 21 22 /* 23 * MAX_ATTR_LEN: maximum length of the result of reading a sysfs 24 * attribute. 25 */ 26 #define MAX_ATTR_LEN 256 27 28 /* 29 * MAX_SERIAL_LEN: the maximum length of the serial number, including 30 * added prefixes such as vendor and product (model) strings. 31 */ 32 #define MAX_SERIAL_LEN 256 33 34 /* 35 * MAX_BUFFER_LEN: maximum buffer size and line length used while reading 36 * the config file. 37 */ 38 #define MAX_BUFFER_LEN 256 39 40 struct scsi_id_device { 41 char vendor[9]; 42 char model[17]; 43 char revision[5]; 44 char type[33]; 45 char kernel[64]; 46 char serial[MAX_SERIAL_LEN]; 47 char serial_short[MAX_SERIAL_LEN]; 48 int use_sg; 49 50 /* Always from page 0x80 e.g. 'B3G1P8500RWT' - may not be unique */ 51 char unit_serial_number[MAX_SERIAL_LEN]; 52 53 /* NULs if not set - otherwise hex encoding using lower-case e.g. '50014ee0016eb572' */ 54 char wwn[17]; 55 56 /* NULs if not set - otherwise hex encoding using lower-case e.g. '0xe00000d80000' */ 57 char wwn_vendor_extension[17]; 58 59 /* NULs if not set - otherwise decimal number */ 60 char tgpt_group[8]; 61 }; 62 63 int scsi_std_inquiry(struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname); 64 int scsi_get_serial(struct udev *udev, struct scsi_id_device *dev_scsi, const char *devname, 65 int page_code, int len); 66 67 /* 68 * Page code values. 69 */ 70 enum page_code { 71 PAGE_83_PRE_SPC3 = -0x83, 72 PAGE_UNSPECIFIED = 0x00, 73 PAGE_80 = 0x80, 74 PAGE_83 = 0x83, 75 }; 76