platform_hardware_libhardware/include/hardware/local_time_hal.h

124 lines
3.8 KiB
C
Raw Normal View History

Add a HAL representing a system-wide local time counter. This is a squashed merge of the following changes: commit 9def1ae65f6b4d6a8fdec147fdcd34f22f08174a Author: John Grossman <johngro@google.com> Date: Fri Aug 12 11:47:20 2011 -0700 Change the signature of set_local_slew. Changed the definition of the slew function in the local time HAL to take an int16 instead of an int32 and to use the full range of the int instead of attempting to imply any particular PPM range. Change-Id: Ia67f50e77f1fe674a63ec69460e830d1191ef5a0 commit afab51327453d1bfc7423f8ce7a28933d8fc49b2 Author: John Grossman <johngro@google.com> Date: Mon Jun 27 17:29:07 2011 -0700 Remove "primary" from the local_time HAL. Interface instances are a pattern which should only be used by audio. Remove its use from the local_time HAL. Change-Id: If4c458cf16a02d9dc63c04185111ae793fc57801 commit 1c26e59a66e75ccb31027f42183aaa32bde6e456 Author: John Grossman <johngro@google.com> Date: Fri Jun 17 14:19:24 2011 -0700 Refactor the local/common clock services. This change is one of a set of 5 changes made to different repositories. Look for this comment in all of them. Refactor the local/common clock services to match android best practice. Notable changes include + The kernel no longer knows anything about common time. Common time has been moved completely up into user land. This has an impact on the accuracy of the timesync debugging code, and the netfilter assisted approach to network based timesync is going to have to be modified. + The timesync driver used by A@H is now just local time driver. + The kernel no longer needs access to the linear transform math code, and it has been removed. + A new HAL has been introduced to expose the concept of local time to the system. + A non-slewable stub implementation of the local time HAL based on CLOCK_MONOTONIC has been added. + The old library has been eliminated. Its functionality has been distributed among the common time binder service, the local time hal and the linear transform utility code. + All clients of the old library have been changed to be clients of the binder service, the hal and the utility code. + The reset_tt utilities have been removed, they no longer have a purpose in the system. Change-Id: I39843b94f9b6d13f63b22145a2edcafe4ca87349 Change-Id: Ib264c992d564b99ef7c7847a788e4fa7f5e101b4 Signed-off-by: Mike J. Chen <mjchen@google.com> Signed-off-by: John Grossman <johngro@google.com> Conflicts: modules/Android.mk
2011-08-15 20:59:47 +02:00
/*
* Copyright (C) 2011 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef ANDROID_LOCAL_TIME_HAL_INTERFACE_H
#define ANDROID_LOCAL_TIME_HAL_INTERFACE_H
#include <stdint.h>
#include <hardware/hardware.h>
__BEGIN_DECLS
/**
* The id of this module
*/
#define LOCAL_TIME_HARDWARE_MODULE_ID "local_time"
/**
* Name of the local time devices to open
*/
#define LOCAL_TIME_HARDWARE_INTERFACE "local_time_hw_if"
/**********************************************************************/
/**
* A structure used to collect low level sync data in a lab environment. Most
* HAL implementations will never need this structure.
*/
struct local_time_debug_event {
int64_t local_timesync_event_id;
int64_t local_time;
};
/**
* Every hardware module must have a data structure named HAL_MODULE_INFO_SYM
* and the fields of this data structure must begin with hw_module_t
* followed by module specific information.
*/
struct local_time_module {
struct hw_module_t common;
};
struct local_time_hw_device {
/**
* Common methods of the local time hardware device. This *must* be the first member of
* local_time_hw_device as users of this structure will cast a hw_device_t to
* local_time_hw_device pointer in contexts where it's known the hw_device_t references a
* local_time_hw_device.
*/
Add a HAL representing a system-wide local time counter. This is a squashed merge of the following changes: commit 9def1ae65f6b4d6a8fdec147fdcd34f22f08174a Author: John Grossman <johngro@google.com> Date: Fri Aug 12 11:47:20 2011 -0700 Change the signature of set_local_slew. Changed the definition of the slew function in the local time HAL to take an int16 instead of an int32 and to use the full range of the int instead of attempting to imply any particular PPM range. Change-Id: Ia67f50e77f1fe674a63ec69460e830d1191ef5a0 commit afab51327453d1bfc7423f8ce7a28933d8fc49b2 Author: John Grossman <johngro@google.com> Date: Mon Jun 27 17:29:07 2011 -0700 Remove "primary" from the local_time HAL. Interface instances are a pattern which should only be used by audio. Remove its use from the local_time HAL. Change-Id: If4c458cf16a02d9dc63c04185111ae793fc57801 commit 1c26e59a66e75ccb31027f42183aaa32bde6e456 Author: John Grossman <johngro@google.com> Date: Fri Jun 17 14:19:24 2011 -0700 Refactor the local/common clock services. This change is one of a set of 5 changes made to different repositories. Look for this comment in all of them. Refactor the local/common clock services to match android best practice. Notable changes include + The kernel no longer knows anything about common time. Common time has been moved completely up into user land. This has an impact on the accuracy of the timesync debugging code, and the netfilter assisted approach to network based timesync is going to have to be modified. + The timesync driver used by A@H is now just local time driver. + The kernel no longer needs access to the linear transform math code, and it has been removed. + A new HAL has been introduced to expose the concept of local time to the system. + A non-slewable stub implementation of the local time HAL based on CLOCK_MONOTONIC has been added. + The old library has been eliminated. Its functionality has been distributed among the common time binder service, the local time hal and the linear transform utility code. + All clients of the old library have been changed to be clients of the binder service, the hal and the utility code. + The reset_tt utilities have been removed, they no longer have a purpose in the system. Change-Id: I39843b94f9b6d13f63b22145a2edcafe4ca87349 Change-Id: Ib264c992d564b99ef7c7847a788e4fa7f5e101b4 Signed-off-by: Mike J. Chen <mjchen@google.com> Signed-off-by: John Grossman <johngro@google.com> Conflicts: modules/Android.mk
2011-08-15 20:59:47 +02:00
struct hw_device_t common;
/**
*
* Returns the current value of the system wide local time counter
*/
int64_t (*get_local_time)(struct local_time_hw_device* dev);
/**
*
* Returns the nominal frequency (in hertz) of the system wide local time
* counter
*/
uint64_t (*get_local_freq)(struct local_time_hw_device* dev);
/**
*
* Sets the HW slew rate of oscillator which drives the system wide local
* time counter. On success, platforms should return 0. Platforms which
* do not support HW slew should leave this method set to NULL.
*
* Valid values for rate range from MIN_INT16 to MAX_INT16. Platform
* implementations should attempt map this range linearly to the min/max
* slew rate of their hardware.
*/
int (*set_local_slew)(struct local_time_hw_device* dev, int16_t rate);
/**
*
* A method used to collect low level sync data in a lab environments.
* Most HAL implementations will simply set this member to NULL, or return
* -EINVAL to indicate that this functionality is not supported.
* Production HALs should never support this method.
*/
int (*get_debug_log)(struct local_time_hw_device* dev,
struct local_time_debug_event* records,
int max_records);
};
typedef struct local_time_hw_device local_time_hw_device_t;
/** convenience API for opening and closing a supported device */
static inline int local_time_hw_device_open(
const struct hw_module_t* module,
struct local_time_hw_device** device)
{
return module->methods->open(module, LOCAL_TIME_HARDWARE_INTERFACE,
TO_HW_DEVICE_T_OPEN(device));
Add a HAL representing a system-wide local time counter. This is a squashed merge of the following changes: commit 9def1ae65f6b4d6a8fdec147fdcd34f22f08174a Author: John Grossman <johngro@google.com> Date: Fri Aug 12 11:47:20 2011 -0700 Change the signature of set_local_slew. Changed the definition of the slew function in the local time HAL to take an int16 instead of an int32 and to use the full range of the int instead of attempting to imply any particular PPM range. Change-Id: Ia67f50e77f1fe674a63ec69460e830d1191ef5a0 commit afab51327453d1bfc7423f8ce7a28933d8fc49b2 Author: John Grossman <johngro@google.com> Date: Mon Jun 27 17:29:07 2011 -0700 Remove "primary" from the local_time HAL. Interface instances are a pattern which should only be used by audio. Remove its use from the local_time HAL. Change-Id: If4c458cf16a02d9dc63c04185111ae793fc57801 commit 1c26e59a66e75ccb31027f42183aaa32bde6e456 Author: John Grossman <johngro@google.com> Date: Fri Jun 17 14:19:24 2011 -0700 Refactor the local/common clock services. This change is one of a set of 5 changes made to different repositories. Look for this comment in all of them. Refactor the local/common clock services to match android best practice. Notable changes include + The kernel no longer knows anything about common time. Common time has been moved completely up into user land. This has an impact on the accuracy of the timesync debugging code, and the netfilter assisted approach to network based timesync is going to have to be modified. + The timesync driver used by A@H is now just local time driver. + The kernel no longer needs access to the linear transform math code, and it has been removed. + A new HAL has been introduced to expose the concept of local time to the system. + A non-slewable stub implementation of the local time HAL based on CLOCK_MONOTONIC has been added. + The old library has been eliminated. Its functionality has been distributed among the common time binder service, the local time hal and the linear transform utility code. + All clients of the old library have been changed to be clients of the binder service, the hal and the utility code. + The reset_tt utilities have been removed, they no longer have a purpose in the system. Change-Id: I39843b94f9b6d13f63b22145a2edcafe4ca87349 Change-Id: Ib264c992d564b99ef7c7847a788e4fa7f5e101b4 Signed-off-by: Mike J. Chen <mjchen@google.com> Signed-off-by: John Grossman <johngro@google.com> Conflicts: modules/Android.mk
2011-08-15 20:59:47 +02:00
}
static inline int local_time_hw_device_close(struct local_time_hw_device* device)
{
return device->common.close(&device->common);
}
__END_DECLS
#endif // ANDROID_LOCAL_TIME_INTERFACE_H