]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/simple_lock.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / osfmk / kern / simple_lock.h
index d791567b0004072aa31198312bc6c6c6ddd34467..7d08bea4b71f522ea91bc836866c4b4c7d3175e6 100644 (file)
 #include <kern/lock_group.h>
 #include <machine/simple_lock.h>
 
-#ifdef  MACH_KERNEL_PRIVATE
+#ifdef XNU_KERNEL_PRIVATE
+
+#if MACH_KERNEL_PRIVATE
 #include <machine/atomic.h>
 #include <mach_ldebug.h>
+#endif
+
+__BEGIN_DECLS
 
+#pragma GCC visibility push(hidden)
+
+#ifdef MACH_KERNEL_PRIVATE
 extern void                     hw_lock_init(
        hw_lock_t);
 
@@ -97,6 +105,11 @@ extern unsigned int             hw_lock_to(
        uint64_t,
        lck_grp_t*);
 
+extern unsigned int             hw_lock_to_nopreempt(
+       hw_lock_t,
+       uint64_t,
+       lck_grp_t*);
+
 extern unsigned int             hw_lock_try(
        hw_lock_t,
        lck_grp_t*);
@@ -109,27 +122,36 @@ extern unsigned int             hw_lock_try_nopreempt(
 
 extern void                     hw_lock_lock(
        hw_lock_t);
-
-#define hw_lock_lock(lck, grp) hw_lock_lock(lck)
+#define hw_lock_lock(lck, grp) \
+       hw_lock_lock(lck)
 
 extern void                     hw_lock_lock_nopreempt(
        hw_lock_t);
-#define hw_lock_lock_nopreempt(lck, grp) hw_lock_lock_nopreempt(lck)
+#define hw_lock_lock_nopreempt(lck, grp) \
+       hw_lock_lock_nopreempt(lck)
 
 extern unsigned int             hw_lock_to(
        hw_lock_t,
        uint64_t);
-#define hw_lock_to(lck, timeout, grp) hw_lock_to(lck, timeout)
+#define hw_lock_to(lck, timeout, grp) \
+       hw_lock_to(lck, timeout)
+
+extern unsigned int             hw_lock_to_nopreempt(
+       hw_lock_t,
+       uint64_t);
+#define hw_lock_to_nopreempt(lck, timeout, grp) \
+       hw_lock_to_nopreempt(lck, timeout)
 
 
 extern unsigned int             hw_lock_try(
        hw_lock_t);
-#define hw_lock_try(lck, grp) hw_lock_try(lck)
+#define hw_lock_try(lck, grp) \
+       hw_lock_try(lck)
 
 extern unsigned int             hw_lock_try_nopreempt(
        hw_lock_t);
-#define hw_lock_try_nopreempt(lck, grp) hw_lock_try_nopreempt(lck)
-
+#define hw_lock_try_nopreempt(lck, grp) \
+       hw_lock_try_nopreempt(lck)
 
 #endif /* LOCK_STATS */
 
@@ -142,10 +164,32 @@ extern void                     hw_lock_unlock_nopreempt(
 extern unsigned int             hw_lock_held(
        hw_lock_t);
 
-extern boolean_t hw_atomic_test_and_set32(uint32_t *target, uint32_t test_mask, uint32_t set_mask, enum memory_order ord, boolean_t wait);
-#endif  /* MACH_KERNEL_PRIVATE */
+extern boolean_t                hw_atomic_test_and_set32(
+       uint32_t *target,
+       uint32_t test_mask,
+       uint32_t set_mask,
+       enum memory_order ord,
+       boolean_t wait);
 
-__BEGIN_DECLS
+extern void                     usimple_unlock_nopreempt(
+       usimple_lock_t);
+
+#endif /* MACH_KERNEL_PRIVATE */
+
+struct usimple_lock_startup_spec {
+       usimple_lock_t  lck;
+       unsigned short  lck_init_arg;
+};
+
+extern void                     usimple_lock_startup_init(
+       struct usimple_lock_startup_spec *spec);
+
+#define SIMPLE_LOCK_DECLARE(var, arg) \
+       decl_simple_lock_data(, var); \
+       static __startup_data struct usimple_lock_startup_spec \
+       __startup_usimple_lock_spec_ ## var = { &var, arg }; \
+       STARTUP_ARG(LOCKS_EARLY, STARTUP_RANK_FOURTH, usimple_lock_startup_init, \
+           &__startup_usimple_lock_spec_ ## var)
 
 extern void *                   hw_wait_while_equals(
        void    **address,
@@ -179,32 +223,35 @@ extern unsigned int     usimple_lock_try_lock_mp_signal_safe_loop_duration(
        uint64_t,
        lck_grp_t*);
 #endif
-
 #else
 extern void                     usimple_lock(
        usimple_lock_t);
-#define usimple_lock(lck, grp) usimple_lock(lck)
+#define usimple_lock(lck, grp) \
+       usimple_lock(lck)
 
 
 extern unsigned int             usimple_lock_try(
        usimple_lock_t);
-
-#define usimple_lock_try(lck, grp) usimple_lock_try(lck)
+#define usimple_lock_try(lck, grp) \
+       usimple_lock_try(lck)
 
 extern void             usimple_lock_try_lock_loop(
        usimple_lock_t);
-#define usimple_lock_try_lock_loop(lck, grp) usimple_lock_try_lock_loop(lck)
+#define usimple_lock_try_lock_loop(lck, grp) \
+       usimple_lock_try_lock_loop(lck)
 
 #if defined(__x86_64__)
 extern unsigned int     usimple_lock_try_lock_mp_signal_safe_loop_deadline(
        usimple_lock_t,
        uint64_t);
-#define usimple_lock_try_lock_mp_signal_safe_loop_deadline(lck, ddl, grp) usimple_lock_try_lock_mp_signal_safe_loop_deadline(lck, ddl)
+#define usimple_lock_try_lock_mp_signal_safe_loop_deadline(lck, ddl, grp) \
+       usimple_lock_try_lock_mp_signal_safe_loop_deadline(lck, ddl)
 
 extern unsigned int     usimple_lock_try_lock_mp_signal_safe_loop_duration(
        usimple_lock_t,
        uint64_t);
-#define usimple_lock_try_lock_mp_signal_safe_loop_duration(lck, dur, grp) usimple_lock_try_lock_mp_signal_safe_loop_duration(lck, dur)
+#define usimple_lock_try_lock_mp_signal_safe_loop_duration(lck, dur, grp) \
+       usimple_lock_try_lock_mp_signal_safe_loop_duration(lck, dur)
 #endif
 
 #endif /* LOCK_STATS */
@@ -213,24 +260,21 @@ extern void                     usimple_unlock(
        usimple_lock_t);
 
 
-__END_DECLS
-
-#define ETAP_NO_TRACE   0
-#define ETAP_IO_AHA             0
-
 /*
  * If we got to here and we still don't have simple_lock_init
  * defined, then we must either be outside the osfmk component,
  * running on a true SMP, or need debug.
  */
 #if !defined(simple_lock_init)
-#define simple_lock_init(l, t)   usimple_lock_init(l,t)
-#define simple_lock(l, grp)          usimple_lock(l, grp)
-#define simple_unlock(l)        usimple_unlock(l)
-#define simple_lock_try(l, grp)      usimple_lock_try(l, grp)
+#define simple_lock_init(l, t)               usimple_lock_init(l,t)
+#define simple_lock(l, grp)                  usimple_lock(l, grp)
+#define simple_unlock(l)                     usimple_unlock(l)
+#define simple_lock_try(l, grp)              usimple_lock_try(l, grp)
 #define simple_lock_try_lock_loop(l, grp)    usimple_lock_try_lock_loop(l, grp)
-#define simple_lock_try_lock_mp_signal_safe_loop_deadline(l, ddl, grp)    usimple_lock_try_lock_mp_signal_safe_loop_deadline(l, ddl, grp)
-#define simple_lock_try_lock_mp_signal_safe_loop_duration(l, dur, grp)    usimple_lock_try_lock_mp_signal_safe_loop_duration(l, dur, grp)
+#define simple_lock_try_lock_mp_signal_safe_loop_deadline(l, ddl, grp) \
+       usimple_lock_try_lock_mp_signal_safe_loop_deadline(l, ddl, grp)
+#define simple_lock_try_lock_mp_signal_safe_loop_duration(l, dur, grp) \
+       usimple_lock_try_lock_mp_signal_safe_loop_duration(l, dur, grp)
 #define simple_lock_addr(l)     (&(l))
 #endif /* !defined(simple_lock_init) */
 
@@ -264,23 +308,27 @@ extern unsigned int hw_lock_bit_to(
 extern void     hw_lock_bit(
        hw_lock_bit_t *,
        unsigned int);
-#define hw_lock_bit(lck, bit, grp) hw_lock_bit(lck, bit)
+#define hw_lock_bit(lck, bit, grp) \
+       hw_lock_bit(lck, bit)
 
 extern void     hw_lock_bit_nopreempt(
        hw_lock_bit_t *,
        unsigned int);
-#define hw_lock_bit_nopreempt(lck, bit, grp) hw_lock_bit_nopreempt(lck, bit)
+#define hw_lock_bit_nopreempt(lck, bit, grp) \
+       hw_lock_bit_nopreempt(lck, bit)
 
 extern unsigned int hw_lock_bit_try(
        hw_lock_bit_t *,
        unsigned int);
-#define hw_lock_bit_try(lck, bit, grp) hw_lock_bit_try(lck, bit)
+#define hw_lock_bit_try(lck, bit, grp) \
+       hw_lock_bit_try(lck, bit)
 
 extern unsigned int hw_lock_bit_to(
        hw_lock_bit_t *,
        unsigned int,
        uint32_t);
-#define hw_lock_bit_to(lck, bit, timeout, grp) hw_lock_bit_to(lck, bit, timeout)
+#define hw_lock_bit_to(lck, bit, timeout, grp) \
+       hw_lock_bit_to(lck, bit, timeout)
 
 #endif /* LOCK_STATS */
 
@@ -292,10 +340,16 @@ extern void     hw_unlock_bit_nopreempt(
        hw_lock_bit_t *,
        unsigned int);
 
-#define hw_lock_bit_held(l, b) (((*(l))&(1<<b))!=0)
+#define hw_lock_bit_held(l, b) \
+       (((*(l)) & (1 << (b))) != 0)
 
 #endif  /* MACH_KERNEL_PRIVATE */
 
+__END_DECLS
+
+#pragma GCC visibility pop
+
+#endif /* XNU_KERNEL_PRIVATE */
 #endif /*!_KERN_SIMPLE_LOCK_H_*/
 
 #endif  /* KERNEL_PRIVATE */