haiku/headers/private/system/arch/ppc/arch_real_time_data.h
Ingo Weinhold 6b202f4e3d * Introduced new header directory headers/private/system which is supposed
to contain headers shared by kernel and userland (mainly libroot).
* Moved quite a few private kernel headers to the new location. Split
  several kernel headers into a shared part and one that is still kernel
  private. Adjusted all affected Jamfiles and source in the standard x86
  build accordingly. The build for other architectures and for test code
  may be broken.
* Quite a bit of userland code still includes private kernel headers.
  Mostly those are <util/*> headers. The ones that aren't strictly
  kernel-only should be moved to some other place (maybe
  headers/private/shared/util).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25486 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-05-14 03:55:16 +00:00

37 lines
1.3 KiB
C

/*
* Copyright 2006, Ingo Weinhold <bonefish@cs.tu-berlin.de>.
* All rights reserved. Distributed under the terms of the MIT License.
*/
#ifndef _KERNEL_ARCH_REAL_TIME_DATA_H
#define _KERNEL_ARCH_REAL_TIME_DATA_H
#include <StorageDefs.h>
#include <SupportDefs.h>
struct ppc_real_time_data {
vint64 system_time_offset;
};
struct arch_real_time_data {
struct ppc_real_time_data data[2];
vint32 system_time_conversion_factor;
vint32 version;
// Since there're no cheap atomic_{set,get,add}64() on PPC 32 (i.e. one
// that doesn't involve a syscall), we can't have just a single
// system_time_offset and set/get it atomically.
// That's why have our data twice. One set is current (indexed by
// version % 2). When setting the offset, we do that with disabled
// interrupts and protected by a spinlock. We write the new values
// into the other array element and increment the version.
// A reader first reads the version, then the date of interest, and
// finally rechecks the version. If it hasn't changed in the meantime,
// the read value is fine, otherwise it runs the whole procedure again.
//
// system_time_conversion_factor is currently consider constant,
// although that is not necessarily true. We simply don't support
// changing conversion factors at the moment.
};
#endif /* _KERNEL_ARCH_REAL_TIME_DATA_H */