a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync/* $Id$ */
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync/** @file
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * Virtual SCSI driver: Inline helpers
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync */
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync/*
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync * Copyright (C) 2006-2010 Oracle Corporation
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync *
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * available from http://www.virtualbox.org. This file is free software;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * General Public License (GPL) as published by the Free Software
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync */
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync#ifndef ___VSCSIInline_h
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync#define ___VSCSIInline_h
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync#include <iprt/stdint.h>
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(void) vscsiH2BEU16(uint8_t *pbBuf, uint16_t val)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[0] = val >> 8;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[1] = val;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(void) vscsiH2BEU24(uint8_t *pbBuf, uint32_t val)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[0] = val >> 16;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[1] = val >> 8;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[2] = val;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(void) vscsiH2BEU32(uint8_t *pbBuf, uint32_t val)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[0] = val >> 24;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[1] = val >> 16;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[2] = val >> 8;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[3] = val;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(void) vscsiH2BEU64(uint8_t *pbBuf, uint64_t val)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[0] = val >> 56;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[1] = val >> 48;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[2] = val >> 40;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[3] = val >> 32;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[4] = val >> 24;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[5] = val >> 16;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[6] = val >> 8;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbBuf[7] = val;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(uint16_t) vscsiBE2HU16(const uint8_t *pbBuf)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync return (pbBuf[0] << 8) | pbBuf[1];
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(uint32_t) vscsiBE2HU24(const uint8_t *pbBuf)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync return (pbBuf[0] << 16) | (pbBuf[1] << 8) | pbBuf[2];
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(uint32_t) vscsiBE2HU32(const uint8_t *pbBuf)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync return (pbBuf[0] << 24) | (pbBuf[1] << 16) | (pbBuf[2] << 8) | pbBuf[3];
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(uint64_t) vscsiBE2HU64(const uint8_t *pbBuf)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync return ((uint64_t)pbBuf[0] << 56)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[1] << 48)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[2] << 40)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[3] << 32)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[4] << 24)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[5] << 16)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | ((uint64_t)pbBuf[6] << 8)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync | (uint64_t)pbBuf[7];
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsyncDECLINLINE(void) vscsiPadStr(int8_t *pbDst, const char *pbSrc, uint32_t cbSize)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync{
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync for (uint32_t i = 0; i < cbSize; i++)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync {
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync if (*pbSrc)
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbDst[i] = *pbSrc++;
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync else
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync pbDst[i] = ' ';
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync }
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync}
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync#endif /* ___VSCSIInline_h */
a4ba1fc5788b1fb4c078587d5f55936e1b83098dvboxsync