soc: qcom: Add infrastructure to test service locator
Add debugfs node based infrastructure to test service locator Change-Id: I37cb319638ce5b6285b2f2ff4386fd92cbda83fd Signed-off-by: Pushkar Joshi <pushkarj@codeaurora.org>
This commit is contained in:
parent
97718559ad
commit
15a734e879
1 changed files with 66 additions and 3 deletions
|
@ -24,6 +24,7 @@
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/debugfs.h>
|
||||||
|
|
||||||
#include <soc/qcom/msm_qmi_interface.h>
|
#include <soc/qcom/msm_qmi_interface.h>
|
||||||
#include <soc/qcom/service-locator.h>
|
#include <soc/qcom/service-locator.h>
|
||||||
|
@ -447,15 +448,77 @@ int find_subsys(const char *pd_path, char *subsys)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(find_subsys);
|
EXPORT_SYMBOL(find_subsys);
|
||||||
|
|
||||||
static int service_locator_init(void)
|
static struct pd_qmi_client_data test_data;
|
||||||
|
|
||||||
|
static ssize_t show_servloc(struct seq_file *f, void *unused)
|
||||||
{
|
{
|
||||||
class_register(&service_locator_class);
|
int rc = 0, i = 0;
|
||||||
|
char subsys[QMI_SERVREG_LOC_NAME_LENGTH_V01];
|
||||||
|
|
||||||
|
rc = get_service_location(&test_data);
|
||||||
|
if (rc) {
|
||||||
|
seq_printf(f, "Failed to get process domain!, rc = %d\n", rc);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
|
seq_printf(f, "Service Name: %s\tTotal Domains: %d\n",
|
||||||
|
test_data.service_name, test_data.total_domains);
|
||||||
|
for (i = 0; i < test_data.total_domains; i++) {
|
||||||
|
seq_printf(f, "Instance ID: %d\t ",
|
||||||
|
test_data.domain_list[i].instance_id);
|
||||||
|
seq_printf(f, "Domain Name: %s\n",
|
||||||
|
test_data.domain_list[i].name);
|
||||||
|
rc = find_subsys(test_data.domain_list[i].name, subsys);
|
||||||
|
if (rc < 0)
|
||||||
|
seq_printf(f, "No valid subsys found for %s!\n",
|
||||||
|
test_data.domain_list[i].name);
|
||||||
|
else
|
||||||
|
seq_printf(f, "Subsys: %s\n", subsys);
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void service_locator_exit(void)
|
static ssize_t store_servloc(struct file *fp, const char __user *buf,
|
||||||
|
size_t count, loff_t *unused)
|
||||||
|
{
|
||||||
|
if (!buf)
|
||||||
|
return -EIO;
|
||||||
|
snprintf(test_data.service_name, sizeof(test_data.service_name),
|
||||||
|
"%.*s", (int) min((size_t)count - 1,
|
||||||
|
(sizeof(test_data.service_name) - 1)), buf);
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int servloc_open(struct inode *inode, struct file *file)
|
||||||
|
{
|
||||||
|
return single_open(file, (void *)show_servloc, inode->i_private);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct file_operations servloc_fops = {
|
||||||
|
.open = servloc_open,
|
||||||
|
.read = seq_read,
|
||||||
|
.write = store_servloc,
|
||||||
|
.llseek = seq_lseek,
|
||||||
|
.release = seq_release,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct dentry *test_servloc_file;
|
||||||
|
|
||||||
|
static int __init service_locator_init(void)
|
||||||
|
{
|
||||||
|
class_register(&service_locator_class);
|
||||||
|
test_servloc_file = debugfs_create_file("test_servloc",
|
||||||
|
S_IRUGO | S_IWUSR, NULL, NULL,
|
||||||
|
&servloc_fops);
|
||||||
|
if (!test_servloc_file)
|
||||||
|
pr_err("Could not create test_servloc debugfs entry!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit service_locator_exit(void)
|
||||||
{
|
{
|
||||||
class_unregister(&service_locator_class);
|
class_unregister(&service_locator_class);
|
||||||
|
debugfs_remove(test_servloc_file);
|
||||||
}
|
}
|
||||||
|
|
||||||
module_init(service_locator_init);
|
module_init(service_locator_init);
|
||||||
|
|
Loading…
Add table
Reference in a new issue