/* * $Id$ * * Copyright (C) 2003-2015 JNode.org * * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as published * by the Free Software Foundation; either version 2.1 of the License, or * (at your option) any later version. * * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public * License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this library; If not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.jnode.driver.bus.smbus; import org.jnode.driver.Device; /** * SMBus device extension. * <p/> * <p> * Title: * </p> * <p> * Description: * </p> * <p> * Licence: GNU LGPL * </p> * <p> * </p> * * @author Francois-Frederic Ozog * @version 1.0 */ public class SMBusDevice extends Device { int address; /** * 8 bits value bits assignment 7-6 AddressType 5-1 reserved 0 PEC supported */ int capabilities; // 8 bits public static final int ADDRESS_FIXED_ADDRESS = 0; // bit [7-6] 00 Fixed Address devices are // identified first. public static final int ADDRESS_DYNAMIC_PERSISTENT = 1; // bit [7-6] 01 Dynamic and Persistent // Address devices are identified next. public static final int ADDRESS_DYNAMIC_VOLATILE = 2; // bit [7-6] 10 Dynamic and Volatile // Address devices are identified next. public static final int ADDRESS_RANDOM = 3; // bit [7-6] 11 Dynamic and Volatile Address // devices are identified next. /** * 8 bits bits assignment 7-6 reserved 5-3 version (001 for SMBus 2.0) 2-0 silicon version */ int version; // 8 bits public static final int VERSION_MASK = 0x38; public static final int VERSION_V10 = 0; public static final int VERSION_V11 = 0; public static final int VERSION_V20 = 1; int vendorid; // 16 bits int deviceid; // 16 bits /** * 16 bits bits assignment 15-4 supported protocols bit 15 Reserved for future definition under * the SMBus specifications. bit 14 Reserved for future definition under the SMBus * specifications. bit 13 Reserved for future definition under the SMBus specifications. bit 12 * Reserved for future definition under the SMBus specifications. bit 11 Reserved for future * definition under the SMBus specifications. bit 10 Reserved for future definition under the * SMBus specifications. bit 9 Reserved for future definition under the SMBus specifications. * bit 8 Reserved for future definition under the SMBus specifications. bit 7 Reserved for * future definition under the SMBus specifications. bit 6 IPMI Device supports additional * interface access and capabilities per IPMI specifications bit 5 ASF Device supports * additional interface access and capabilities per ASF specifications bit 4 OEM Device * supports vendor-specific access and capabilities per the Subsystem Vendor ID and Subsystem * Device ID fields returned by discoverable SMBus devices. The Subsystem Vendor ID identifies * the vendor or defining body that has specified the behavior of the device. The Subsystem * Device ID is used in conjunction with the System Vendor ID to specify a particular level of * functional equivalence for the device. 3-0 SMBus version */ int interfaceid; // 16 bits public static final int VERSION_1_0 = 0; // 0000 do not use in ARP tables public static final int VERSION_1_1 = 1; // 0001 do not use in ARP tables public static final int VERSION_2_0 = 4; // 0100 (0010 and 0011 are reserved) int subsystemvendorid; // 16 bits int subsystemdeviceid; // 16 bits int vendorspecificid; // 16 bits public SMBusDevice(SMBus bus, String name, int version, int vendorid, int deviceid, int interfaceid, int subsystemvendorid, int subsystemdeviceid, int vendorspecificid) { super(bus, name); this.version = version; this.vendorid = vendorid; this.deviceid = deviceid; this.interfaceid = interfaceid; this.subsystemvendorid = subsystemvendorid; this.subsystemdeviceid = subsystemdeviceid; this.vendorspecificid = vendorspecificid; } public SMBusDevice(SMBus bus, String name, int version) { this(bus, name, version, 0, 0, 0, 0, 0, 0); } public int getAddressType() { if (getVersion() < VERSION_V20) return -1; return capabilities & 0xc0 >> 6; } public boolean isPECSupported() { if (getVersion() < VERSION_V20) return false; return (capabilities & 0x01) > 0; } public int getVersion() { int version = ((this.version & VERSION_MASK) >> 3) & 0xff; return version; } public int getSiliconVersion() { if (getVersion() < VERSION_V20) return -1; return version & 0x7; } public boolean isIPMIInterface() { if (getVersion() < VERSION_V20) return false; return (interfaceid & 0x40) > 0; } public boolean isASFInterface() { if (getVersion() < VERSION_V20) return false; return (interfaceid & 0x20) > 0; } public boolean isOEMInterface() { if (getVersion() < VERSION_V20) return false; return (interfaceid & 0x10) > 0; } }