1 /*
   2  * Copyright (c) 2001 - 2012 Apple Inc. All rights reserved.
   3  *
   4  * @APPLE_LICENSE_HEADER_START@
   5  *
   6  * This file contains Original Code and/or Modifications of Original Code
   7  * as defined in and that are subject to the Apple Public Source License
   8  * Version 2.0 (the 'License'). You may not use this file except in
   9  * compliance with the License. Please obtain a copy of the License at
  10  * http://www.opensource.apple.com/apsl/ and read it before using this
  11  * file.
  12  *
  13  * The Original Code and all software distributed under the License are
  14  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  15  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  16  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  17  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
  18  * Please see the License for the specific language governing rights and
  19  * limitations under the License.
  20  *
  21  * @APPLE_LICENSE_HEADER_END@
  22  */
  23 
  24 /*
  25  * Code corresponding to smb_apple.h
  26  */
  27 
  28 #ifndef _NETSMB_SMB_OSDEP_H_
  29 #define _NETSMB_SMB_OSDEP_H_
  30 
  31 #ifndef PRIVSYM
  32 #define PRIVSYM
  33 #endif
  34 
  35 #ifndef min
  36 #define min(a, b)       (((a) < (b)) ? (a) : (b))
  37 #endif
  38 
  39 #define CAST_DOWN(type, addr)  (((type)((uintptr_t)(addr))))
  40 #define USER_ADDR_NULL  ((user_addr_t)0)
  41 #define CAST_USER_ADDR_T(a_ptr)   ((user_addr_t)(a_ptr))
  42 
  43 /*
  44  * flags to (BSD) malloc
  45  */
  46 #define M_WAITOK        0x0000
  47 #define M_NOWAIT        0x0001
  48 #define M_ZERO          0x0004          /* bzero the allocation */
  49 
  50 /* Iconv stuff */
  51 
  52 /*
  53  * Some UTF Related stuff. Will be deleting this once compiled and using
  54  * ienup's code.
  55  */
  56 /*
  57  * UTF-8 encode/decode flags
  58  */
  59 #define UTF_REVERSE_ENDIAN      0x01    /* reverse UCS-2 byte order */
  60 #define UTF_NO_NULL_TERM        0x02    /* do not add null termination */
  61 #define UTF_DECOMPOSED          0x04    /* generate fully decomposed UCS-2 */
  62 #define UTF_PRECOMPOSED         0x08    /* generate precomposed UCS-2 */
  63 
  64 /*
  65  * These are actually included in sunddi.h. I am getting compilation
  66  * errors right now. Adding the induvidual defines here again from sunddi.h
  67  * Unicode encoding conversion functions and their macros.
  68  */
  69 #define UCONV_IN_BIG_ENDIAN             0x0001
  70 #define UCONV_OUT_BIG_ENDIAN            0x0002
  71 #define UCONV_IN_SYSTEM_ENDIAN          0x0004
  72 #define UCONV_OUT_SYSTEM_ENDIAN         0x0008
  73 #define UCONV_IN_LITTLE_ENDIAN          0x0010
  74 #define UCONV_OUT_LITTLE_ENDIAN         0x0020
  75 #define UCONV_IGNORE_NULL               0x0040
  76 #define UCONV_IN_ACCEPT_BOM             0x0080
  77 #define UCONV_OUT_EMIT_BOM              0x0100
  78 
  79 extern int uconv_u8tou16(const uchar_t *, size_t *, uint16_t *, size_t *, int);
  80 
  81 /* Legacy type names for Solaris. */
  82 typedef uint64_t u_int64_t;
  83 typedef uint32_t u_int32_t;
  84 typedef uint16_t u_int16_t;
  85 typedef uint8_t u_int8_t;
  86 
  87 typedef const char *c_caddr_t;
  88 typedef uint64_t        user_addr_t;
  89 typedef ssize_t         user_ssize_t;
  90 typedef size_t          user_size_t;
  91 
  92 #ifdef _FAKE_KERNEL
  93 #define ddi_get_cred()  CRED()
  94 #endif
  95 
  96 /*
  97  * Time related calls.
  98  */
  99 
 100 /* BEGIN CSTYLED */
 101 #define timespeccmp(tvp, uvp, cmp)                                      \
 102         (((tvp)->tv_sec == (uvp)->tv_sec) ?                             \
 103         ((tvp)->tv_nsec cmp (uvp)->tv_nsec) :                             \
 104         ((tvp)->tv_sec cmp (uvp)->tv_sec))
 105 /* END CSTYLED */
 106 
 107 #define timespecadd(vvp, uvp)                                           \
 108         {                                                               \
 109                 (vvp)->tv_sec += (uvp)->tv_sec;                           \
 110                 (vvp)->tv_nsec += (uvp)->tv_nsec;                 \
 111                 if ((vvp)->tv_nsec >= 1000000000) {                       \
 112                         (vvp)->tv_sec++;                             \
 113                         (vvp)->tv_nsec -= 1000000000;                        \
 114                 }                                                       \
 115         }
 116 
 117 #define timespecsub(vvp, uvp)                                           \
 118         {                                                               \
 119                 (vvp)->tv_sec -= (uvp)->tv_sec;                           \
 120                 (vvp)->tv_nsec -= (uvp)->tv_nsec;                 \
 121                 if ((vvp)->tv_nsec < 0) {                         \
 122                         (vvp)->tv_sec--;                             \
 123                         (vvp)->tv_nsec += 1000000000;                        \
 124                 }                                                       \
 125         }
 126 
 127 #endif /* _NETSMB_SMB_OSDEP_H_ */