|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 2000 Apple Computer, Inc. All rights reserved. ! 3: * ! 4: * @APPLE_LICENSE_HEADER_START@ ! 5: * ! 6: * The contents of this file constitute Original Code as defined in and ! 7: * are subject to the Apple Public Source License Version 1.1 (the ! 8: * "License"). You may not use this file except in compliance with the ! 9: * License. Please obtain a copy of the License at ! 10: * http://www.apple.com/publicsource and read it before using this file. ! 11: * ! 12: * This Original Code and all software distributed under the License are ! 13: * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER ! 14: * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, ! 15: * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, ! 16: * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the ! 17: * License for the specific language governing rights and limitations ! 18: * under the License. ! 19: * ! 20: * @APPLE_LICENSE_HEADER_END@ ! 21: */ ! 22: /* ! 23: * @OSF_COPYRIGHT@ ! 24: * ! 25: */ ! 26: ! 27: #ifndef _MACHINE_ENDIAN_H_ ! 28: #define _MACHINE_ENDIAN_H_ ! 29: ! 30: /* ! 31: * Definitions for byte order, ! 32: * according to byte significance from low address to high. ! 33: */ ! 34: #define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */ ! 35: #define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ ! 36: #define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */ ! 37: ! 38: #if _BIG_ENDIAN /* Predefined by compiler */ ! 39: #define BYTE_ORDER BIG_ENDIAN /* byte order we use on ppc */ ! 40: #define ENDIAN BIG ! 41: #else ! 42: #error code has not been ported to little endian targets yet ! 43: #endif ! 44: ! 45: /* ! 46: * Macros for network/external number representation conversion. ! 47: */ ! 48: #if BYTE_ORDER == BIG_ENDIAN && !defined(lint) ! 49: #define ntohl(x) (x) ! 50: #define ntohs(x) (x) ! 51: #define htonl(x) (x) ! 52: #define htons(x) (x) ! 53: ! 54: static __inline__ unsigned int byte_reverse_word(unsigned int word); ! 55: static __inline__ unsigned int byte_reverse_word(unsigned int word) { ! 56: unsigned int result; ! 57: __asm__ volatile("lwbrx %0, 0, %1" : "=r" (result) : "r" (&word)); ! 58: return result; ! 59: } ! 60: ! 61: /* The above function is commutative, so we can use it for ! 62: * translations in both directions (to/from little endianness) ! 63: * Note that htolx and ltohx are probably identical, they are ! 64: * included for completeness. ! 65: */ ! 66: #define htoll(x) byte_reverse_word(x) ! 67: #define htols(x) (byte_reverse_word(x) >> 16) ! 68: #define ltohl(x) htoll(x) ! 69: #define ltohs(x) htols(x) ! 70: ! 71: #define htobl(x) (x) ! 72: #define htobs(x) (x) ! 73: #define btohl(x) (x) ! 74: #define btohs(x) (x) ! 75: ! 76: #else ! 77: unsigned short ntohs(), htons(); ! 78: unsigned long ntohl(), htonl(); ! 79: #endif ! 80: ! 81: /* This defines the order of elements in a bitfield, ! 82: * it is principally used by the SCSI subsystem in ! 83: * the definitions of mapped registers ! 84: */ ! 85: #define BYTE_MSF 1 ! 86: ! 87: #endif /* _MACHINE_ENDIAN_H_ */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.