platform_hardware_libhardware/modules/local_time/local_time_hw.c

113 lines
3 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.
*/
#define LOG_TAG "local_time_hw_default"
//#define LOG_NDEBUG 0
#include <errno.h>
#include <malloc.h>
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
#include <stdint.h>
#include <string.h>
#include <time.h>
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
#include <log/log.h>
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
#include <hardware/hardware.h>
#include <hardware/local_time_hal.h>
// We only support gcc and clang, both of which support this attribute.
#define UNUSED_ARGUMENT __attribute((unused))
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 stub_local_time_device {
struct local_time_hw_device device;
};
static int64_t ltdev_get_local_time(struct local_time_hw_device* dev)
{
struct timespec ts;
uint64_t now;
int ret;
ret = clock_gettime(CLOCK_MONOTONIC, &ts);
if (ret < 0) {
ALOGW("%s failed to fetch CLOCK_MONOTONIC value! (res = %d)",
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
dev->common.module->name, ret);
return 0;
}
now = (((uint64_t)ts.tv_sec) * 1000000000ull) +
((uint64_t)ts.tv_nsec);
return (int64_t)now;
}
static uint64_t ltdev_get_local_freq(
struct local_time_hw_device* dev UNUSED_ARGUMENT)
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
{
// For better or worse, linux clock_gettime routines normalize all clock
// frequencies to 1GHz
return 1000000000ull;
}
static int ltdev_close(hw_device_t *device)
{
free(device);
return 0;
}
static int ltdev_open(const hw_module_t* module, const char* name,
hw_device_t** device)
{
struct stub_local_time_device *ltdev;
if (strcmp(name, LOCAL_TIME_HARDWARE_INTERFACE) != 0)
return -EINVAL;
ltdev = calloc(1, sizeof(struct stub_local_time_device));
if (!ltdev)
return -ENOMEM;
ltdev->device.common.tag = HARDWARE_DEVICE_TAG;
ltdev->device.common.version = 0;
ltdev->device.common.module = (struct hw_module_t *) module;
ltdev->device.common.close = ltdev_close;
ltdev->device.get_local_time = ltdev_get_local_time;
ltdev->device.get_local_freq = ltdev_get_local_freq;
ltdev->device.set_local_slew = NULL;
ltdev->device.get_debug_log = NULL;
*device = &ltdev->device.common;
return 0;
}
static struct hw_module_methods_t hal_module_methods = {
.open = ltdev_open,
};
struct local_time_module HAL_MODULE_INFO_SYM = {
.common = {
.tag = HARDWARE_MODULE_TAG,
.version_major = 1,
.version_minor = 0,
.id = LOCAL_TIME_HARDWARE_MODULE_ID,
.name = "Default local_time HW HAL",
.author = "The Android Open Source Project",
.methods = &hal_module_methods,
},
};