~ubuntu-branches/ubuntu/trusty/virtualbox/trusty-proposed

« back to all changes in this revision

Viewing changes to src/VBox/Devices/Storage/VSCSI/VSCSISense.cpp

  • Committer: Package Import Robot
  • Author(s): Felix Geyer
  • Date: 2013-03-07 16:38:36 UTC
  • mfrom: (1.1.13) (3.1.20 experimental)
  • Revision ID: package-import@ubuntu.com-20130307163836-p93jpbgx39tp3gb4
Tags: 4.2.8-dfsg-0ubuntu1
* New upstream release. (Closes: #691148)
  - Fixes compatibility with kernel 3.8. (Closes: #700823; LP: #1101867)
* Switch to my @debian.org email address.
* Move package to contrib as virtualbox 4.2 needs a non-free compiler to
  build the BIOS.
* Build-depend on libdevmapper-dev.
* Refresh patches.
  - Drop 36-fix-ftbfs-xserver-112.patch, cve-2012-3221.patch,
    CVE-2013-0420.patch 37-kcompat-3.6.patch and 38-kcompat-3.7.patch.
* Drop all virtualbox-ose transitional packages.
* Drop the virtualbox-fuse package as vdfuse fails to build with
  virtualbox 4.2.
* Update install files and VBox.sh.
* Bump required kbuild version to 0.1.9998svn2577.
* Fix path to VBoxCreateUSBNode.sh in virtualbox.postinst. (Closes: #700479)
* Add an init script to virtuabox-guest-x11 which loads the vboxvideo
  kernel module. The X Server 1.13 doesn't load it anymore. (Closes: #686994)
* Update man pages. (Closes: #680053)
* Add 36-python-multiarch.patch from Rico Tzschichholz to fix detection of
  python in multiarch paths using pkg-config.

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 */
5
5
 
6
6
/*
7
 
 * Copyright (C) 2006-2010 Oracle Corporation
 
7
 * Copyright (C) 2006-2011 Oracle Corporation
8
8
 *
9
9
 * This file is part of VirtualBox Open Source Edition (OSE), as
10
10
 * available from http://www.virtualbox.org. This file is free software;
21
21
 
22
22
#include "VSCSIInternal.h"
23
23
 
24
 
int vscsiReqSenseOkSet(PVSCSIREQINT pVScsiReq)
25
 
{
26
 
    if (pVScsiReq->cbSense < 14)
27
 
        return SCSI_STATUS_OK;
28
 
 
29
 
    AssertMsgReturn(pVScsiReq->pbSense, ("Sense buffer pointer is NULL\n"), SCSI_STATUS_OK);
30
 
    memset(pVScsiReq->pbSense, 0, pVScsiReq->cbSense);
31
 
 
32
 
    pVScsiReq->pbSense[0]  = (1 << 7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED; /* Fixed format */
33
 
    pVScsiReq->pbSense[2]  = SCSI_SENSE_NONE;
34
 
    pVScsiReq->pbSense[7]  = 10;
35
 
    pVScsiReq->pbSense[12] = SCSI_ASC_NONE;
36
 
    pVScsiReq->pbSense[13] = SCSI_ASC_NONE; /* Should be ASCQ but it has the same value for success. */
 
24
void vscsiSenseInit(PVSCSISENSE pVScsiSense)
 
25
{
 
26
    memset(pVScsiSense->abSenseBuf, 0, sizeof(pVScsiSense->abSenseBuf));
 
27
}
 
28
 
 
29
int vscsiReqSenseOkSet(PVSCSISENSE pVScsiSense, PVSCSIREQINT pVScsiReq)
 
30
{
 
31
    memset(pVScsiSense->abSenseBuf, 0, sizeof(pVScsiSense->abSenseBuf));
 
32
 
 
33
    pVScsiSense->abSenseBuf[0]  = (1 << 7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED; /* Fixed format */
 
34
    pVScsiSense->abSenseBuf[2]  = SCSI_SENSE_NONE;
 
35
    pVScsiSense->abSenseBuf[7]  = 10;
 
36
    pVScsiSense->abSenseBuf[12] = SCSI_ASC_NONE;
 
37
    pVScsiSense->abSenseBuf[13] = SCSI_ASC_NONE; /* Should be ASCQ but it has the same value for success. */
 
38
 
 
39
    if (pVScsiReq->pbSense && pVScsiReq->cbSense)
 
40
        memcpy(pVScsiReq->pbSense, pVScsiSense->abSenseBuf, RT_MIN(sizeof(pVScsiSense->abSenseBuf), pVScsiReq->cbSense));
37
41
 
38
42
    return SCSI_STATUS_OK;
39
43
}
40
44
 
41
 
int vscsiReqSenseErrorSet(PVSCSIREQINT pVScsiReq, uint8_t uSCSISenseKey, uint8_t uSCSIASC)
 
45
int vscsiReqSenseErrorSet(PVSCSISENSE pVScsiSense, PVSCSIREQINT pVScsiReq, uint8_t uSCSISenseKey, uint8_t uSCSIASC, uint8_t uSCSIASCQ)
42
46
{
43
 
    AssertMsgReturn(pVScsiReq->cbSense >= 18, ("Sense buffer is not big enough\n"), SCSI_STATUS_OK);
44
 
    AssertMsgReturn(pVScsiReq->pbSense, ("Sense buffer pointer is NULL\n"), SCSI_STATUS_OK);
45
 
    memset(pVScsiReq->pbSense, 0, pVScsiReq->cbSense);
46
 
    pVScsiReq->pbSense[0] = (1 << 7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED; /* Fixed format */
47
 
    pVScsiReq->pbSense[2] = uSCSISenseKey;
48
 
    pVScsiReq->pbSense[7]  = 10;
49
 
    pVScsiReq->pbSense[12] = uSCSIASC;
50
 
    pVScsiReq->pbSense[13] = 0x00; /** @todo: Provide more info. */
 
47
    memset(pVScsiSense->abSenseBuf, 0, sizeof(pVScsiSense->abSenseBuf));
 
48
    pVScsiSense->abSenseBuf[0] = (1 << 7) | SCSI_SENSE_RESPONSE_CODE_CURR_FIXED; /* Fixed format */
 
49
    pVScsiSense->abSenseBuf[2] = uSCSISenseKey;
 
50
    pVScsiSense->abSenseBuf[7]  = 10;
 
51
    pVScsiSense->abSenseBuf[12] = uSCSIASC;
 
52
    pVScsiSense->abSenseBuf[13] = uSCSIASCQ;
 
53
 
 
54
    if (pVScsiReq->pbSense && pVScsiReq->cbSense)
 
55
        memcpy(pVScsiReq->pbSense, pVScsiSense->abSenseBuf, RT_MIN(sizeof(pVScsiSense->abSenseBuf), pVScsiReq->cbSense));
 
56
 
51
57
    return SCSI_STATUS_CHECK_CONDITION;
52
58
}
53
59
 
 
60
int vscsiReqSenseCmd(PVSCSISENSE pVScsiSense, PVSCSIREQINT pVScsiReq)
 
61
{
 
62
    /* Copy the current sense data to the buffer. */
 
63
    RTSgBufCopyFromBuf(&pVScsiReq->SgBuf, pVScsiSense->abSenseBuf, sizeof(pVScsiSense->abSenseBuf));
 
64
    return vscsiReqSenseOkSet(pVScsiSense, pVScsiReq);
 
65
}
 
66