65697a26b524640b83828b715160c798c43a0424vboxsync/* $Id$ */
65697a26b524640b83828b715160c798c43a0424vboxsync/** @file
65697a26b524640b83828b715160c798c43a0424vboxsync * Virtual SCSI driver: Definitions for VPD pages.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync/*
65697a26b524640b83828b715160c798c43a0424vboxsync * Copyright (C) 2011 Oracle Corporation
65697a26b524640b83828b715160c798c43a0424vboxsync *
65697a26b524640b83828b715160c798c43a0424vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
65697a26b524640b83828b715160c798c43a0424vboxsync * available from http://www.virtualbox.org. This file is free software;
65697a26b524640b83828b715160c798c43a0424vboxsync * you can redistribute it and/or modify it under the terms of the GNU
65697a26b524640b83828b715160c798c43a0424vboxsync * General Public License (GPL) as published by the Free Software
65697a26b524640b83828b715160c798c43a0424vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
65697a26b524640b83828b715160c798c43a0424vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
65697a26b524640b83828b715160c798c43a0424vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync#ifndef ___VSCSIVpdPages_h
65697a26b524640b83828b715160c798c43a0424vboxsync#define ___VSCSIVpdPages_h
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync#include <iprt/stdint.h>
65697a26b524640b83828b715160c798c43a0424vboxsync
f6730083a05505932de66e90f05e72af05b5d077vboxsync/** VPD device identification page number. */
f6730083a05505932de66e90f05e72af05b5d077vboxsync#define VSCSI_VPD_DEVID_NUMBER 0x83
f6730083a05505932de66e90f05e72af05b5d077vboxsync/** VPD device identification size. */
f6730083a05505932de66e90f05e72af05b5d077vboxsync#define VSCSI_VPD_DEVID_SIZE 4
f6730083a05505932de66e90f05e72af05b5d077vboxsync/**
f6730083a05505932de66e90f05e72af05b5d077vboxsync * Device identification VPD page data.
f6730083a05505932de66e90f05e72af05b5d077vboxsync */
f6730083a05505932de66e90f05e72af05b5d077vboxsync#pragma pack(1)
f6730083a05505932de66e90f05e72af05b5d077vboxsynctypedef struct VSCSIVPDPAGEDEVID
f6730083a05505932de66e90f05e72af05b5d077vboxsync{
f6730083a05505932de66e90f05e72af05b5d077vboxsync /** Device type. */
f6730083a05505932de66e90f05e72af05b5d077vboxsync unsigned u5PeripheralDeviceType : 5; /**< 0x00 / 00 */
f6730083a05505932de66e90f05e72af05b5d077vboxsync /** Qualifier. */
f6730083a05505932de66e90f05e72af05b5d077vboxsync unsigned u3PeripheralQualifier : 3;
f6730083a05505932de66e90f05e72af05b5d077vboxsync /** Page number. */
f6730083a05505932de66e90f05e72af05b5d077vboxsync unsigned u8PageCode : 8;
f6730083a05505932de66e90f05e72af05b5d077vboxsync /** Page size (Big endian) */
f6730083a05505932de66e90f05e72af05b5d077vboxsync unsigned u16PageLength : 16;
f6730083a05505932de66e90f05e72af05b5d077vboxsync} VSCSIVPDPAGEDEVID;
f6730083a05505932de66e90f05e72af05b5d077vboxsync#pragma pack()
f6730083a05505932de66e90f05e72af05b5d077vboxsyncAssertCompileSize(VSCSIVPDPAGEDEVID, VSCSI_VPD_DEVID_SIZE);
f6730083a05505932de66e90f05e72af05b5d077vboxsynctypedef VSCSIVPDPAGEDEVID *PVSCSIVPDPAGEDEVID;
f6730083a05505932de66e90f05e72af05b5d077vboxsynctypedef const VSCSIVPDPAGEDEVID *PCVSCSIVPDPAGEDEVID;
f6730083a05505932de66e90f05e72af05b5d077vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD supported VPD pages page number. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_SUPPORTED_PAGES_NUMBER 0x00
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD supported VPD pages size. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_SUPPORTED_PAGES_SIZE 4
65697a26b524640b83828b715160c798c43a0424vboxsync/**
65697a26b524640b83828b715160c798c43a0424vboxsync * Block limits VPD page data.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack(1)
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef struct VSCSIVPDPAGESUPPORTEDPAGES
65697a26b524640b83828b715160c798c43a0424vboxsync{
65697a26b524640b83828b715160c798c43a0424vboxsync /** Device type. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u5PeripheralDeviceType : 5; /**< 0x00 / 00 */
65697a26b524640b83828b715160c798c43a0424vboxsync /** Qualifier. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u3PeripheralQualifier : 3;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page number. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8PageCode : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page size (Big endian) */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u16PageLength : 16;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Supported pages array - variable. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint8_t abVpdPages[1];
65697a26b524640b83828b715160c798c43a0424vboxsync} VSCSIVPDPAGESUPPORTEDPAGES;
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack()
65697a26b524640b83828b715160c798c43a0424vboxsyncAssertCompileSize(VSCSIVPDPAGESUPPORTEDPAGES, VSCSI_VPD_SUPPORTED_PAGES_SIZE+1);
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef VSCSIVPDPAGESUPPORTEDPAGES *PVSCSIVPDPAGESUPPORTEDPAGES;
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef const VSCSIVPDPAGESUPPORTEDPAGES *PCVSCSIVPDPAGESUPPORTEDPAGES;
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block characteristics page number. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_CHARACTERISTICS_NUMBER 0xb1
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block characteristics size. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_CHARACTERISTICS_SIZE 64
65697a26b524640b83828b715160c798c43a0424vboxsync/**
65697a26b524640b83828b715160c798c43a0424vboxsync * Block limits VPD page data.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack(1)
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef struct VSCSIVPDPAGEBLOCKCHARACTERISTICS
65697a26b524640b83828b715160c798c43a0424vboxsync{
65697a26b524640b83828b715160c798c43a0424vboxsync /** Device type. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u5PeripheralDeviceType : 5; /**< 0x00 / 00 */
65697a26b524640b83828b715160c798c43a0424vboxsync /** Qualifier. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u3PeripheralQualifier : 3;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page number. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8PageCode : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page size (Big endian) */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u16PageLength : 16;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Medium rotation rate. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u16MediumRotationRate : 16;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8Reserved : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Nominal form factor. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u4NominalFormFactor : 4;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u4Reserved : 4;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint8_t abReserved[56];
65697a26b524640b83828b715160c798c43a0424vboxsync} VSCSIVPDPAGEBLOCKCHARACTERISTICS;
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack()
65697a26b524640b83828b715160c798c43a0424vboxsyncAssertCompileSize(VSCSIVPDPAGEBLOCKCHARACTERISTICS, VSCSI_VPD_BLOCK_CHARACTERISTICS_SIZE);
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef VSCSIVPDPAGEBLOCKCHARACTERISTICS *PVSCSIVPDPAGEBLOCKCHARACTERISTICS;
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef const VSCSIVPDPAGEBLOCKCHARACTERISTICS *PCVSCSIVPDPAGEBLOCKCHARACTERISTICS;
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_CHARACT_MEDIUM_ROTATION_RATE_NOT_REPORTED UINT16_C(0x0000)
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_CHARACT_MEDIUM_ROTATION_RATE_NON_ROTATING UINT16_C(0x0001)
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block limits page number. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_LIMITS_NUMBER 0xb0
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block limits size. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_LIMITS_SIZE 64
65697a26b524640b83828b715160c798c43a0424vboxsync/**
65697a26b524640b83828b715160c798c43a0424vboxsync * Block limits VPD page data.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack(1)
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef struct VSCSIVPDPAGEBLOCKLIMITS
65697a26b524640b83828b715160c798c43a0424vboxsync{
65697a26b524640b83828b715160c798c43a0424vboxsync /** Device type. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u5PeripheralDeviceType : 5; /**< 0x00 / 00 */
65697a26b524640b83828b715160c798c43a0424vboxsync /** Qualifier. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u3PeripheralQualifier : 3;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page number. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8PageCode : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page size (Big endian) */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u16PageLength : 16;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint8_t u8Reserved;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Maximum compare and write length. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint8_t u8MaxCmpWriteLength;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Optimal transfer length granularity. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint16_t u16OptTrfLengthGran;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Maximum transfer length. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32MaxTrfLength;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Optimal transfer length. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32OptTrfLength;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Maximum PREFETCH, XDREAD and XDWRITE transfer length. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32MaxPreXdTrfLength;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Maximum UNMAP LBA count. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32MaxUnmapLbaCount;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Maximum UNMAP block descriptor count. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32MaxUnmapBlkDescCount;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Optimal UNMAP granularity. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32OptUnmapGranularity;
65697a26b524640b83828b715160c798c43a0424vboxsync /** UNMAP granularity alignment. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint32_t u32UnmapGranularityAlignment;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
65697a26b524640b83828b715160c798c43a0424vboxsync uint8_t abReserved[28];
65697a26b524640b83828b715160c798c43a0424vboxsync} VSCSIVPDPAGEBLOCKLIMITS;
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack()
65697a26b524640b83828b715160c798c43a0424vboxsyncAssertCompileSize(VSCSIVPDPAGEBLOCKLIMITS, VSCSI_VPD_BLOCK_LIMITS_SIZE);
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef VSCSIVPDPAGEBLOCKLIMITS *PVSCSIVPDPAGEBLOCKLIMITS;
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef const VSCSIVPDPAGEBLOCKLIMITS *PCVSCSIVPDPAGEBLOCKLIMITS;
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block provisioning page number. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_PROV_NUMBER 0xb2
65697a26b524640b83828b715160c798c43a0424vboxsync/** VPD block provisioning size. */
65697a26b524640b83828b715160c798c43a0424vboxsync#define VSCSI_VPD_BLOCK_PROV_SIZE 8
65697a26b524640b83828b715160c798c43a0424vboxsync/**
65697a26b524640b83828b715160c798c43a0424vboxsync * Block provisioning VPD page data.
65697a26b524640b83828b715160c798c43a0424vboxsync */
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack(1)
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef struct VSCSIVPDPAGEBLOCKPROV
65697a26b524640b83828b715160c798c43a0424vboxsync{
65697a26b524640b83828b715160c798c43a0424vboxsync /** Device type. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u5PeripheralDeviceType : 5; /**< 0x00 / 00 */
65697a26b524640b83828b715160c798c43a0424vboxsync /** Qualifier. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u3PeripheralQualifier : 3;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page number. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8PageCode : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Page size (Big endian) */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u16PageLength : 16;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Threshold exponent. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8ThresholdExponent : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Descriptor present. */
09cf4b12d98d7d6261d16cca257d29da2a111e07vboxsync unsigned fDP : 1;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Anchored LBAs supported. */
09cf4b12d98d7d6261d16cca257d29da2a111e07vboxsync unsigned fAncSup : 1;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u4Reserved : 4;
65697a26b524640b83828b715160c798c43a0424vboxsync /** WRITE SAME command supported. */
09cf4b12d98d7d6261d16cca257d29da2a111e07vboxsync unsigned fLBPWS : 1;
65697a26b524640b83828b715160c798c43a0424vboxsync /** UNMAP command supported. */
09cf4b12d98d7d6261d16cca257d29da2a111e07vboxsync unsigned fLBPU : 1;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Provisioning type. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u3ProvType : 3;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
65697a26b524640b83828b715160c798c43a0424vboxsync unsigned u5Reserved : 5;
65697a26b524640b83828b715160c798c43a0424vboxsync /** Reserved. */
ec2c18baf60b8407529ba6453f3bf8c36574ee7cvboxsync unsigned u8Reserved : 8;
65697a26b524640b83828b715160c798c43a0424vboxsync} VSCSIVPDPAGEBLOCKPROV;
65697a26b524640b83828b715160c798c43a0424vboxsync#pragma pack()
65697a26b524640b83828b715160c798c43a0424vboxsyncAssertCompileSize(VSCSIVPDPAGEBLOCKPROV, VSCSI_VPD_BLOCK_PROV_SIZE);
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef VSCSIVPDPAGEBLOCKPROV *PVSCSIVPDPAGEBLOCKPROV;
65697a26b524640b83828b715160c798c43a0424vboxsynctypedef const VSCSIVPDPAGEBLOCKPROV *PCVSCSIVPDPAGEBLOCKPROVS;
65697a26b524640b83828b715160c798c43a0424vboxsync
65697a26b524640b83828b715160c798c43a0424vboxsync#endif /* ___VSCSIVpdPages_h */
65697a26b524640b83828b715160c798c43a0424vboxsync