14c87aefeSPatrick Mooney /* $FreeBSD$ */ 24c87aefeSPatrick Mooney /* 34c87aefeSPatrick Mooney * Copyright (c) 2008 Hans Petter Selasky. All rights reserved. 44c87aefeSPatrick Mooney * 54c87aefeSPatrick Mooney * Redistribution and use in source and binary forms, with or without 64c87aefeSPatrick Mooney * modification, are permitted provided that the following conditions 74c87aefeSPatrick Mooney * are met: 84c87aefeSPatrick Mooney * 1. Redistributions of source code must retain the above copyright 94c87aefeSPatrick Mooney * notice, this list of conditions and the following disclaimer. 104c87aefeSPatrick Mooney * 2. Redistributions in binary form must reproduce the above copyright 114c87aefeSPatrick Mooney * notice, this list of conditions and the following disclaimer in the 124c87aefeSPatrick Mooney * documentation and/or other materials provided with the distribution. 134c87aefeSPatrick Mooney * 144c87aefeSPatrick Mooney * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 154c87aefeSPatrick Mooney * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 164c87aefeSPatrick Mooney * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 174c87aefeSPatrick Mooney * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 184c87aefeSPatrick Mooney * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 194c87aefeSPatrick Mooney * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 204c87aefeSPatrick Mooney * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 214c87aefeSPatrick Mooney * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 224c87aefeSPatrick Mooney * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 234c87aefeSPatrick Mooney * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 244c87aefeSPatrick Mooney * SUCH DAMAGE. 254c87aefeSPatrick Mooney */ 264c87aefeSPatrick Mooney 274c87aefeSPatrick Mooney #ifndef _USB_ENDIAN_H_ 284c87aefeSPatrick Mooney #define _USB_ENDIAN_H_ 294c87aefeSPatrick Mooney 304c87aefeSPatrick Mooney #ifndef USB_GLOBAL_INCLUDE_FILE 314c87aefeSPatrick Mooney #include <sys/stdint.h> 324c87aefeSPatrick Mooney #include <sys/endian.h> 334c87aefeSPatrick Mooney #endif 344c87aefeSPatrick Mooney 354c87aefeSPatrick Mooney /* 364c87aefeSPatrick Mooney * Declare the basic USB record types. USB records have an alignment 374c87aefeSPatrick Mooney * of 1 byte and are always packed. 384c87aefeSPatrick Mooney */ 394c87aefeSPatrick Mooney typedef uint8_t uByte; 404c87aefeSPatrick Mooney typedef uint8_t uWord[2]; 414c87aefeSPatrick Mooney typedef uint8_t uDWord[4]; 424c87aefeSPatrick Mooney typedef uint8_t uQWord[8]; 434c87aefeSPatrick Mooney 444c87aefeSPatrick Mooney /* 454c87aefeSPatrick Mooney * Define a set of macros that can get and set data independent of 464c87aefeSPatrick Mooney * CPU endianness and CPU alignment requirements: 474c87aefeSPatrick Mooney */ 484c87aefeSPatrick Mooney #define UGETB(w) \ 494c87aefeSPatrick Mooney ((w)[0]) 504c87aefeSPatrick Mooney 514c87aefeSPatrick Mooney #define UGETW(w) \ 524c87aefeSPatrick Mooney ((w)[0] | \ 534c87aefeSPatrick Mooney (((uint16_t)((w)[1])) << 8)) 544c87aefeSPatrick Mooney 554c87aefeSPatrick Mooney #define UGETDW(w) \ 564c87aefeSPatrick Mooney ((w)[0] | \ 574c87aefeSPatrick Mooney (((uint16_t)((w)[1])) << 8) | \ 584c87aefeSPatrick Mooney (((uint32_t)((w)[2])) << 16) | \ 594c87aefeSPatrick Mooney (((uint32_t)((w)[3])) << 24)) 604c87aefeSPatrick Mooney 614c87aefeSPatrick Mooney #define UGETQW(w) \ 624c87aefeSPatrick Mooney ((w)[0] | \ 634c87aefeSPatrick Mooney (((uint16_t)((w)[1])) << 8) | \ 644c87aefeSPatrick Mooney (((uint32_t)((w)[2])) << 16) | \ 654c87aefeSPatrick Mooney (((uint32_t)((w)[3])) << 24) | \ 664c87aefeSPatrick Mooney (((uint64_t)((w)[4])) << 32) | \ 674c87aefeSPatrick Mooney (((uint64_t)((w)[5])) << 40) | \ 684c87aefeSPatrick Mooney (((uint64_t)((w)[6])) << 48) | \ 694c87aefeSPatrick Mooney (((uint64_t)((w)[7])) << 56)) 704c87aefeSPatrick Mooney 714c87aefeSPatrick Mooney #define USETB(w,v) do { \ 724c87aefeSPatrick Mooney (w)[0] = (uint8_t)(v); \ 734c87aefeSPatrick Mooney } while (0) 744c87aefeSPatrick Mooney 754c87aefeSPatrick Mooney #define USETW(w,v) do { \ 764c87aefeSPatrick Mooney (w)[0] = (uint8_t)(v); \ 774c87aefeSPatrick Mooney (w)[1] = (uint8_t)((v) >> 8); \ 784c87aefeSPatrick Mooney } while (0) 794c87aefeSPatrick Mooney 804c87aefeSPatrick Mooney #define USETDW(w,v) do { \ 814c87aefeSPatrick Mooney (w)[0] = (uint8_t)(v); \ 824c87aefeSPatrick Mooney (w)[1] = (uint8_t)((v) >> 8); \ 834c87aefeSPatrick Mooney (w)[2] = (uint8_t)((v) >> 16); \ 844c87aefeSPatrick Mooney (w)[3] = (uint8_t)((v) >> 24); \ 854c87aefeSPatrick Mooney } while (0) 864c87aefeSPatrick Mooney 874c87aefeSPatrick Mooney #define USETQW(w,v) do { \ 884c87aefeSPatrick Mooney (w)[0] = (uint8_t)(v); \ 894c87aefeSPatrick Mooney (w)[1] = (uint8_t)((v) >> 8); \ 904c87aefeSPatrick Mooney (w)[2] = (uint8_t)((v) >> 16); \ 914c87aefeSPatrick Mooney (w)[3] = (uint8_t)((v) >> 24); \ 924c87aefeSPatrick Mooney (w)[4] = (uint8_t)((v) >> 32); \ 934c87aefeSPatrick Mooney (w)[5] = (uint8_t)((v) >> 40); \ 944c87aefeSPatrick Mooney (w)[6] = (uint8_t)((v) >> 48); \ 954c87aefeSPatrick Mooney (w)[7] = (uint8_t)((v) >> 56); \ 964c87aefeSPatrick Mooney } while (0) 974c87aefeSPatrick Mooney 984c87aefeSPatrick Mooney #define USETW2(w,b1,b0) do { \ 994c87aefeSPatrick Mooney (w)[0] = (uint8_t)(b0); \ 1004c87aefeSPatrick Mooney (w)[1] = (uint8_t)(b1); \ 1014c87aefeSPatrick Mooney } while (0) 1024c87aefeSPatrick Mooney 1034c87aefeSPatrick Mooney #define USETW4(w,b3,b2,b1,b0) do { \ 1044c87aefeSPatrick Mooney (w)[0] = (uint8_t)(b0); \ 1054c87aefeSPatrick Mooney (w)[1] = (uint8_t)(b1); \ 1064c87aefeSPatrick Mooney (w)[2] = (uint8_t)(b2); \ 1074c87aefeSPatrick Mooney (w)[3] = (uint8_t)(b3); \ 1084c87aefeSPatrick Mooney } while (0) 1094c87aefeSPatrick Mooney 1104c87aefeSPatrick Mooney #define USETW8(w,b7,b6,b5,b4,b3,b2,b1,b0) do { \ 1114c87aefeSPatrick Mooney (w)[0] = (uint8_t)(b0); \ 1124c87aefeSPatrick Mooney (w)[1] = (uint8_t)(b1); \ 1134c87aefeSPatrick Mooney (w)[2] = (uint8_t)(b2); \ 1144c87aefeSPatrick Mooney (w)[3] = (uint8_t)(b3); \ 1154c87aefeSPatrick Mooney (w)[4] = (uint8_t)(b4); \ 1164c87aefeSPatrick Mooney (w)[5] = (uint8_t)(b5); \ 1174c87aefeSPatrick Mooney (w)[6] = (uint8_t)(b6); \ 1184c87aefeSPatrick Mooney (w)[7] = (uint8_t)(b7); \ 1194c87aefeSPatrick Mooney } while (0) 1204c87aefeSPatrick Mooney 1214c87aefeSPatrick Mooney #endif /* _USB_ENDIAN_H_ */ 122