VSCSIInline.h revision a4ba1fc5788b1fb4c078587d5f55936e1b83098d
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync/* $Id$ */
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync/** @file
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * Virtual SCSI driver: Inline helpers
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync */
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync/*
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * Copyright (C) 2006-2010 Sun Microsystems, Inc.
e64031e20c39650a7bc902a3e1aba613b9415deevboxsync *
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * available from http://www.virtualbox.org. This file is free software;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * you can redistribute it and/or modify it under the terms of the GNU
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * General Public License (GPL) as published by the Free Software
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync *
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync * additional information or have any questions.
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync */
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync#ifndef ___VSCSIInline_h
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync#define ___VSCSIInline_h
4ca78a9695174cccd2dc4c0f26da066622ed9d42vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync#include <iprt/stdint.h>
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(void) vscsiH2BEU16(uint8_t *pbBuf, uint16_t val)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[0] = val >> 8;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[1] = val;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(void) vscsiH2BEU24(uint8_t *pbBuf, uint32_t val)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[0] = val >> 16;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[1] = val >> 8;
73b1c18a52f0fc96342349987f5aa1b64b774053vboxsync pbBuf[2] = val;
73b1c18a52f0fc96342349987f5aa1b64b774053vboxsync}
73b1c18a52f0fc96342349987f5aa1b64b774053vboxsync
73b1c18a52f0fc96342349987f5aa1b64b774053vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(void) vscsiH2BEU32(uint8_t *pbBuf, uint32_t val)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[0] = val >> 24;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[1] = val >> 16;
240f7d7012a5f64bcde850bcf048531a710d81cfvboxsync pbBuf[2] = val >> 8;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[3] = val;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(void) vscsiH2BEU64(uint8_t *pbBuf, uint64_t val)
73b1c18a52f0fc96342349987f5aa1b64b774053vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[0] = val >> 56;
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync pbBuf[1] = val >> 48;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[2] = val >> 40;
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync pbBuf[3] = val >> 32;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbBuf[4] = val >> 24;
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync pbBuf[5] = val >> 16;
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync pbBuf[6] = val >> 8;
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync pbBuf[7] = val;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(uint16_t) vscsiBE2HU16(const uint8_t *pbBuf)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync return (pbBuf[0] << 8) | pbBuf[1];
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(uint32_t) vscsiBE2HU24(const uint8_t *pbBuf)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
27d3ddfa1e7a81a48bbc408711763cc7d9afd9bbvboxsync return (pbBuf[0] << 16) | (pbBuf[1] << 8) | pbBuf[2];
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(uint32_t) vscsiBE2HU32(const uint8_t *pbBuf)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync return (pbBuf[0] << 24) | (pbBuf[1] << 16) | (pbBuf[2] << 8) | pbBuf[3];
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(uint64_t) vscsiBE2HU64(const uint8_t *pbBuf)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync return ((uint64_t)pbBuf[0] << 56)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[1] << 48)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[2] << 40)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[3] << 32)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[4] << 24)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[5] << 16)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | ((uint64_t)pbBuf[6] << 8)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync | (uint64_t)pbBuf[7];
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
e62cb87bae732e9968199a3ad153cc94004b7182vboxsyncDECLINLINE(void) vscsiPadStr(int8_t *pbDst, const char *pbSrc, uint32_t cbSize)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync{
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync for (uint32_t i = 0; i < cbSize; i++)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync {
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync if (*pbSrc)
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbDst[i] = *pbSrc++;
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync else
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync pbDst[i] = ' ';
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync }
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync}
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync#endif /* ___VSCSIInline_h */
e62cb87bae732e9968199a3ad153cc94004b7182vboxsync
61e014c7370649a36da3a1ad85efda5d04e9fa3cvboxsync