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