aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-02-21 05:24:36 +0100
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2020-02-28 23:22:11 +0100
commit1fd0e6320fe7b39813238cf3d81258efc730e0d7 (patch)
tree19ad65a669ec473116c02221b8995333a5ee14e2
parent9ff9785a7f48e32f107ca7fb2e298b1320ad4cbc (diff)
downloadhardware_replicant_libsamsung-ipc-patches-todo/modem-abstraction-wip-rebase-2.tar.gz
hardware_replicant_libsamsung-ipc-patches-todo/modem-abstraction-wip-rebase-2.tar.bz2
hardware_replicant_libsamsung-ipc-patches-todo/modem-abstraction-wip-rebase-2.zip
Some xmm626_kernel_smdk4412 functions are present for all devices: - open|close|read|write|poll - fmt/rfs - gprs - power Thses are not +----------+ | galaxys2 | | hci_power | link_control_enable | link_control_active | link_connected_wait | link_get_hostwake_wait | | | i9300 | | hci_power | link_control_enable | link_control_active | link_connected_wait | link_get_hostwake_wait | | | maguro | boot_power | | | | | | status_online_wait | | n5100 | | hci_power | link_control_enable | link_control_active | link_connected_wait | link_get_hostwake_wait | | | n7100 | | hci_power | link_control_enable | link_control_active | link_connected_wait | link_get_hostwake_wait | | | piranha | | | | | | | | +----------+ TODO: also don't add the python script to this commit or clean it up Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r--Android.mk2
-rw-r--r--samsung-ipc/Makefile.am3
-rw-r--r--samsung-ipc/devices/i9300/i9300.c35
-rw-r--r--samsung-ipc/devices/ipc_devices.c4
-rw-r--r--samsung-ipc/devices/ipc_devices.h1
-rw-r--r--samsung-ipc/ipc.c1
-rw-r--r--samsung-ipc/ipc.h36
-rw-r--r--samsung-ipc/modems/modem.c126
-rw-r--r--samsung-ipc/modems/modem.h35
-rw-r--r--samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c27
-rwxr-xr-xsmdk4412_func_usage.py83
11 files changed, 336 insertions, 17 deletions
diff --git a/Android.mk b/Android.mk
index 9fa2c7d..6f70c34 100644
--- a/Android.mk
+++ b/Android.mk
@@ -52,6 +52,7 @@ endif
libsamsung_ipc_local_src_files := \
samsung-ipc/ipc.c \
samsung-ipc/ipc_utils.c \
+ samsung-ipc/modems/modem.c \
samsung-ipc/modems/xmm616/xmm616.c \
samsung-ipc/modems/xmm626/xmm626.c \
samsung-ipc/modems/xmm626/xmm626_hsic.c \
@@ -104,6 +105,7 @@ libsamsung_ipc_local_c_includes := \
$(LOCAL_PATH)/include \
$(LOCAL_PATH)/samsung-ipc \
$(LOCAL_PATH)/samsung-ipc/devices/ \
+ $(LOCAL_PATH)/samsung-ipc/modems/
$(LOCAL_PATH)/samsung-ipc/modems/xmm616/ \
$(LOCAL_PATH)/samsung-ipc/modems/xmm626/ \
external/openssl/include
diff --git a/samsung-ipc/Makefile.am b/samsung-ipc/Makefile.am
index 1b18760..b077ba6 100644
--- a/samsung-ipc/Makefile.am
+++ b/samsung-ipc/Makefile.am
@@ -4,6 +4,7 @@ AM_CFLAGS = \
-I$(top_srcdir)/include \
-I$(top_srcdir)/samsung-ipc \
-I$(top_srcdir)/samsung-ipc/devices \
+ -I$(top_srcdir)/samsung-ipc/modems \
-I$(top_srcdir)/samsung-ipc/modems/xmm616 \
-I$(top_srcdir)/samsung-ipc/modems/xmm626 \
$(OPENSSL_CFLAGS) \
@@ -21,6 +22,8 @@ libsamsung_ipc_la_SOURCES = \
ipc.c \
ipc.h \
ipc_utils.c \
+ modems/modem.c \
+ modems/modem.h \
modems/xmm616/xmm616.c \
modems/xmm616/xmm616.h \
modems/xmm626/xmm626.c \
diff --git a/samsung-ipc/devices/i9300/i9300.c b/samsung-ipc/devices/i9300/i9300.c
index cb14f38..42f6828 100644
--- a/samsung-ipc/devices/i9300/i9300.c
+++ b/samsung-ipc/devices/i9300/i9300.c
@@ -27,6 +27,7 @@
#include <samsung-ipc.h>
#include "i9300.h"
+#include "modem.h"
#include "xmm626.h"
#include "xmm626_hsic.h"
#include "xmm626_kernel_smdk4412.h"
@@ -75,7 +76,7 @@ int i9300_boot(struct ipc_client *client)
}
ipc_client_log(client, "Opened modem link device");
- rc = xmm626_kernel_smdk4412_hci_power(client, 0);
+ rc = modem_bus_power(client, 0);
if (rc < 0) {
ipc_client_log(client, "Turning the modem off failed");
goto error;
@@ -83,7 +84,7 @@ int i9300_boot(struct ipc_client *client)
ipc_client_log(client, "Turned the modem off");
rc = xmm626_kernel_smdk4412_power(client, modem_boot_fd, 1);
- rc |= xmm626_kernel_smdk4412_hci_power(client, 1);
+ rc |= modem_bus_power(client, 1);
if (rc < 0) {
ipc_client_log(client, "Turning the modem on failed");
@@ -91,7 +92,7 @@ int i9300_boot(struct ipc_client *client)
}
ipc_client_log(client, "Turned the modem on");
- rc = xmm626_kernel_smdk4412_link_connected_wait(client, modem_link_fd);
+ rc = modem_link_connected_wait(client, modem_link_fd);
if (rc < 0) {
ipc_client_log(client, "Waiting for link connected failed");
goto error;
@@ -168,37 +169,37 @@ int i9300_boot(struct ipc_client *client)
usleep(300000);
- rc = xmm626_kernel_smdk4412_link_get_hostwake_wait(client, modem_link_fd);
+ rc = modem_link_get_hostwake_wait(client, modem_link_fd);
if (rc < 0) {
ipc_client_log(client, "Waiting for host wake failed");
}
- rc = xmm626_kernel_smdk4412_link_control_enable(client, modem_link_fd, 0);
- rc |= xmm626_kernel_smdk4412_hci_power(client, 0);
- rc |= xmm626_kernel_smdk4412_link_control_active(client, modem_link_fd, 0);
+ rc = modem_link_control_enable(client, modem_link_fd, 0);
+ rc |= modem_bus_power(client, 0);
+ rc |= modem_link_control_active(client, modem_link_fd, 0);
if (rc < 0) {
ipc_client_log(client, "Turning the modem off failed");
goto error;
}
- rc = xmm626_kernel_smdk4412_link_get_hostwake_wait(client, modem_link_fd);
+ rc = modem_link_get_hostwake_wait(client, modem_link_fd);
if (rc < 0) {
ipc_client_log(client, "Waiting for host wake failed");
goto error;
}
ipc_client_log(client, "Waited for host wake");
- rc = xmm626_kernel_smdk4412_link_control_enable(client, modem_link_fd, 1);
- rc |= xmm626_kernel_smdk4412_hci_power(client, 1);
- rc |= xmm626_kernel_smdk4412_link_control_active(client, modem_link_fd, 1);
+ rc = modem_link_control_enable(client, modem_link_fd, 1);
+ rc |= modem_bus_power(client, 1);
+ rc |= modem_link_control_active(client, modem_link_fd, 1);
if (rc < 0) {
ipc_client_log(client, "Turning the modem on failed");
goto error;
}
- rc = xmm626_kernel_smdk4412_link_connected_wait(client, modem_link_fd);
+ rc = modem_link_connected_wait(client, modem_link_fd);
if (rc < 0) {
ipc_client_log(client, "Waiting for link connected failed");
goto error;
@@ -239,7 +240,7 @@ int i9300_open(__attribute__((unused)) struct ipc_client *client, void *data,
transport_data = (struct i9300_transport_data *) data;
- transport_data->fd = xmm626_kernel_smdk4412_open(client, type);
+ transport_data->fd = modem_open(client, type);
if (transport_data->fd < 0)
return -1;
@@ -255,7 +256,7 @@ int i9300_close(__attribute__((unused)) struct ipc_client *client, void *data)
transport_data = (struct i9300_transport_data *) data;
- xmm626_kernel_smdk4412_close(client, transport_data->fd);
+ modem_close(client, transport_data->fd);
transport_data->fd = -1;
return 0;
@@ -272,7 +273,7 @@ int i9300_read(__attribute__((unused)) struct ipc_client *client, void *data,
transport_data = (struct i9300_transport_data *) data;
- rc = xmm626_kernel_smdk4412_read(client, transport_data->fd, buffer, length);
+ rc = modem_read(client, transport_data->fd, buffer, length);
return rc;
}
@@ -288,7 +289,7 @@ int i9300_write(__attribute__((unused)) struct ipc_client *client, void *data,
transport_data = (struct i9300_transport_data *) data;
- rc = xmm626_kernel_smdk4412_write(client, transport_data->fd, buffer, length);
+ rc = modem_write(client, transport_data->fd, buffer, length);
return rc;
}
@@ -304,7 +305,7 @@ int i9300_poll(__attribute__((unused)) struct ipc_client *client, void *data,
transport_data = (struct i9300_transport_data *) data;
- rc = xmm626_kernel_smdk4412_poll(client, transport_data->fd, fds, timeout);
+ rc = modem_poll(client, transport_data->fd, fds, timeout);
return rc;
}
diff --git a/samsung-ipc/devices/ipc_devices.c b/samsung-ipc/devices/ipc_devices.c
index ad7d23c..a226d20 100644
--- a/samsung-ipc/devices/ipc_devices.c
+++ b/samsung-ipc/devices/ipc_devices.c
@@ -22,6 +22,9 @@
#include <samsung-ipc.h>
#include <ipc_devices.h>
+// TODO
+extern struct ipc_client_modem_driver_ops smdk4412_xmm626_modem_driver_ops;
+
struct ipc_device_desc ipc_devices[] = {
{
.name = "crespo",
@@ -132,6 +135,7 @@ struct ipc_device_desc ipc_devices[] = {
.handlers = &i9300_handlers,
.gprs_specs = &i9300_gprs_specs,
.nv_data_specs = &i9300_nv_data_specs,
+ .modem_driver_ops = &smdk4412_xmm626_modem_driver_ops,
},
{
.name = "n7100",
diff --git a/samsung-ipc/devices/ipc_devices.h b/samsung-ipc/devices/ipc_devices.h
index a7a6098..b7d81e4 100644
--- a/samsung-ipc/devices/ipc_devices.h
+++ b/samsung-ipc/devices/ipc_devices.h
@@ -42,6 +42,7 @@ struct ipc_device_desc {
struct ipc_client_handlers *handlers;
struct ipc_client_gprs_specs *gprs_specs;
struct ipc_client_nv_data_specs *nv_data_specs;
+ struct ipc_client_modem_driver_ops *modem_driver_ops;
};
extern struct ipc_device_desc ipc_devices[];
diff --git a/samsung-ipc/ipc.c b/samsung-ipc/ipc.c
index 6f297c4..6adc02e 100644
--- a/samsung-ipc/ipc.c
+++ b/samsung-ipc/ipc.c
@@ -206,6 +206,7 @@ static struct ipc_client *ipc_transport_client_create(int type)
client->gprs_specs = ipc_devices[device_index].gprs_specs;
client->nv_data_specs = ipc_devices[device_index].nv_data_specs;
+ client->modem_driver_ops = ipc_devices[device_index].modem_driver_ops;
/* Handlers can be modified */
client->handlers = (struct ipc_client_handlers *) calloc(1,
diff --git a/samsung-ipc/ipc.h b/samsung-ipc/ipc.h
index 7b30092..7f4f04b 100644
--- a/samsung-ipc/ipc.h
+++ b/samsung-ipc/ipc.h
@@ -77,6 +77,41 @@ struct ipc_client_gprs_specs {
struct ipc_client_gprs_capabilities *capabilities);
};
+struct ipc_client_modem_driver_ops {
+ int (*power)(struct ipc_client *client, int device_fd, int power);
+ // TODO
+ // int (*boot_power)(struct ipc_client *client, int device_fd, int power);
+ int (*bus_power)(struct ipc_client *client, int power);
+ int (*link_control_enable)(struct ipc_client *client, int device_fd,
+ int enable);
+ int (*link_control_active)(struct ipc_client *client, int device_fd,
+ int active);
+ int (*link_connected_wait)(struct ipc_client *client, int device_fd);
+ int (*link_get_hostwake_wait)(struct ipc_client *client, int device_fd);
+ // int (*xmm626_kernel_smdk4412_status_online_wait)(
+ // __attribute__((unused)) struct ipc_client *client,
+ // TODO
+ // int device_fd);
+
+ int (*open)(struct ipc_client *client, int type);
+ int (*close)(struct ipc_client *client, int fd);
+ int (*read)(struct ipc_client *client, int fd, void *buffer, size_t length);
+ int (*write)(struct ipc_client *client, int fd, const void *buffer,
+ size_t length);
+ int (*poll)(struct ipc_client *client, int fd, struct ipc_poll_fds *fds,
+ struct timeval *timeout);
+
+ int (*fmt_send)(struct ipc_client *client, struct ipc_message *message);
+ int (*fmt_recv)(struct ipc_client *client, struct ipc_message *message);
+ int (*rfs_send)(struct ipc_client *client, struct ipc_message *message);
+ int (*rfs_recv)(struct ipc_client *client, struct ipc_message *message);
+
+ char * (*gprs_get_iface)(struct ipc_client *client, unsigned int cid);
+ int (*gprs_get_capabilities)(struct ipc_client *client,
+ struct ipc_client_gprs_capabilities *capabilities);
+};
+
+
struct ipc_client_nv_data_specs {
char *nv_data_path;
char *nv_data_md5_path;
@@ -97,6 +132,7 @@ struct ipc_client {
struct ipc_client_handlers *handlers;
struct ipc_client_gprs_specs *gprs_specs;
struct ipc_client_nv_data_specs *nv_data_specs;
+ struct ipc_client_modem_driver_ops *modem_driver_ops;
};
/*
diff --git a/samsung-ipc/modems/modem.c b/samsung-ipc/modems/modem.c
new file mode 100644
index 0000000..2c6bf3f
--- /dev/null
+++ b/samsung-ipc/modems/modem.c
@@ -0,0 +1,126 @@
+/*
+ * This file is part of libsamsung-ipc.
+ *
+ * Copyright (C) 2020 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
+ *
+ * libsamsung-ipc is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * libsamsung-ipc is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with libsamsung-ipc. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <ipc.h>
+
+// TODO
+// int modem_boot_power(struct ipc_client *client, int device_fd, int power)
+// {
+// return client->modem_driver_ops->boot_power(client, device_fd, power);
+// }
+//
+
+int modem_power(struct ipc_client *client, int device_fd, int power)
+{
+ return client->modem_driver_ops->power(client, device_fd, power);
+}
+
+int modem_bus_power(struct ipc_client *client, int power)
+{
+ return client->modem_driver_ops->bus_power(client, power);
+}
+
+int modem_link_control_enable(struct ipc_client *client, int device_fd,
+ int enable)
+{
+ return client->modem_driver_ops->link_control_enable(client, device_fd,
+ enable);
+}
+
+int modem_link_control_active(struct ipc_client *client, int device_fd,
+ int active)
+{
+ return client->modem_driver_ops->link_control_active(client, device_fd,
+ active);
+}
+
+int modem_link_connected_wait(struct ipc_client *client, int device_fd)
+{
+ return client->modem_driver_ops->link_connected_wait(client, device_fd);
+}
+
+int modem_link_get_hostwake_wait(struct ipc_client *client, int device_fd)
+{
+ return client->modem_driver_ops->link_get_hostwake_wait(client, device_fd);
+}
+
+// TODO
+// int modem_status_online_wait(__attribute__((unused)) struct ipc_client *client,
+// int device_fd)
+// {
+// return client->modem_driver_ops->modem_status_online_wait(client, device_fd);
+// }
+//
+int modem_open(struct ipc_client *client, int type)
+{
+ return client->modem_driver_ops->open(client, type);
+}
+
+int modem_close(struct ipc_client *client, int fd)
+{
+ return client->modem_driver_ops->close(client, fd);
+}
+
+int modem_read(struct ipc_client *client, int fd, void *buffer, size_t length)
+{
+ return client->modem_driver_ops->read(client, fd, buffer, length);
+}
+
+int modem_write(struct ipc_client *client, int fd, const void *buffer,
+ size_t length)
+{
+ return client->modem_driver_ops->write(client, fd, buffer, length);
+}
+
+int modem_poll(struct ipc_client *client, int fd, struct ipc_poll_fds *fds,
+ struct timeval *timeout)
+{
+ return client->modem_driver_ops->poll(client, fd, fds, timeout);
+}
+
+int modem_fmt_send(struct ipc_client *client, struct ipc_message *message)
+{
+ return client->modem_driver_ops->fmt_send(client, message);
+}
+
+int modem_fmt_recv(struct ipc_client *client, struct ipc_message *message)
+{
+ return client->modem_driver_ops->fmt_recv(client, message);
+}
+
+int modem_rfs_send(struct ipc_client *client, struct ipc_message *message)
+{
+ return client->modem_driver_ops->rfs_send(client, message);
+}
+
+int modem_rfs_recv(struct ipc_client *client, struct ipc_message *message)
+{
+ return client->modem_driver_ops->rfs_recv(client, message);
+}
+
+char *modem_gprs_get_iface(struct ipc_client *client, unsigned int cid)
+{
+ return client->modem_driver_ops->gprs_get_iface(client, cid);
+}
+
+int modem_gprs_get_capabilities(struct ipc_client *client,
+ struct ipc_client_gprs_capabilities *capabilities)
+{
+ return client->modem_driver_ops->gprs_get_capabilities(client, capabilities);
+}
diff --git a/samsung-ipc/modems/modem.h b/samsung-ipc/modems/modem.h
new file mode 100644
index 0000000..f62b774
--- /dev/null
+++ b/samsung-ipc/modems/modem.h
@@ -0,0 +1,35 @@
+#ifndef __SAMSUNG_IPC_MODEM_H__
+#define __SAMSUNG_IPC_MODEM_H__
+// Only on maguro:
+// int modem_boot_power(__attribute__((unused)) struct ipc_client *client,
+// int device_fd, int power)
+int modem_power(struct ipc_client *client, int device_fd, int power);
+int modem_bus_power(struct ipc_client *client, int power);
+int modem_link_control_enable(struct ipc_client *client, int device_fd,
+ int enable);
+int modem_link_control_active(struct ipc_client *client, int device_fd,
+ int active);
+int modem_link_connected_wait(struct ipc_client *client, int device_fd);
+int modem_link_get_hostwake_wait(struct ipc_client *client, int device_fd);
+// TODO: only on maguro
+// int xmm626_kernel_smdk4412_status_online_wait(
+// __attribute__((unused)) struct ipc_client *client, int device_fd);
+
+int modem_open(struct ipc_client *client, int type);
+int modem_close(struct ipc_client *client, int fd);
+int modem_read(struct ipc_client *client, int fd, void *buffer, size_t length);
+int modem_write(struct ipc_client *client, int fd, const void *buffer,
+ size_t length);
+int modem_poll(struct ipc_client *client, int fd, struct ipc_poll_fds *fds,
+ struct timeval *timeout);
+
+int modem_fmt_send(struct ipc_client *client, struct ipc_message *message);
+int modem_fmt_recv(struct ipc_client *client, struct ipc_message *message);
+int modem_rfs_send(struct ipc_client *client, struct ipc_message *message);
+int modem_rfs_recv(struct ipc_client *client, struct ipc_message *message);
+
+char *modem_gprs_get_iface(struct ipc_client *client, unsigned int cid);
+int modem_gprs_get_capabilities(struct ipc_client *client,
+ struct ipc_client_gprs_capabilities *capabilities);
+
+#endif /* __SAMSUNG_IPC_MODEM_H__ */
diff --git a/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c b/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c
index 283aa4b..41c6a98 100644
--- a/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c
+++ b/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c
@@ -583,4 +583,31 @@ int xmm626_kernel_smdk4412_gprs_get_capabilities(__attribute__((unused)) struct
return 0;
}
+struct ipc_client_modem_driver_ops smdk4412_xmm626_modem_driver_ops = {
+ // TODO
+ // ._boot_power = xmm626_kernel_smdk4412_boot_power,
+ .power = xmm626_kernel_smdk4412_power,
+ .bus_power = xmm626_kernel_smdk4412_hci_power,
+ .link_control_enable = xmm626_kernel_smdk4412_link_control_enable,
+ .link_control_active = xmm626_kernel_smdk4412_link_control_active,
+ .link_connected_wait = xmm626_kernel_smdk4412_link_connected_wait,
+ .link_get_hostwake_wait = xmm626_kernel_smdk4412_link_get_hostwake_wait,
+ // .status_online_wait = xmm626_kernel_smdk4412_status_online_wait,
+
+ .open = xmm626_kernel_smdk4412_open,
+ .close = xmm626_kernel_smdk4412_close,
+ .read = xmm626_kernel_smdk4412_read,
+ .write = xmm626_kernel_smdk4412_write,
+ .poll = xmm626_kernel_smdk4412_poll,
+
+ .fmt_send = xmm626_kernel_smdk4412_fmt_send,
+ .fmt_recv = xmm626_kernel_smdk4412_fmt_recv,
+ .rfs_send = xmm626_kernel_smdk4412_rfs_send,
+ .rfs_recv = xmm626_kernel_smdk4412_rfs_recv,
+
+ // TODO
+ // .gprs_get_iface = xmm626_kernel_smdk4412_gprs_get_iface,
+ // .modem_gprs_get_capabilities = xmm626_kernel_smdk4412_modem_gprs_get_capabilities,
+};
+
// vim:ts=4:sw=4:expandtab
diff --git a/smdk4412_func_usage.py b/smdk4412_func_usage.py
new file mode 100755
index 0000000..d09d50d
--- /dev/null
+++ b/smdk4412_func_usage.py
@@ -0,0 +1,83 @@
+#!/bin/env python
+
+import os
+import re
+from sh import git
+
+funcs = [
+ 'xmm626_kernel_smdk4412_power',
+ 'xmm626_kernel_smdk4412_boot_power',
+ 'xmm626_kernel_smdk4412_hci_power',
+ 'xmm626_kernel_smdk4412_link_control_enable',
+ 'xmm626_kernel_smdk4412_link_control_active',
+ 'xmm626_kernel_smdk4412_link_connected_wait',
+ 'xmm626_kernel_smdk4412_link_get_hostwake_wait',
+ 'xmm626_kernel_smdk4412_status_online_wait',
+ 'xmm626_kernel_smdk4412_open',
+ 'xmm626_kernel_smdk4412_close',
+ 'xmm626_kernel_smdk4412_read',
+ 'xmm626_kernel_smdk4412_write',
+ 'xmm626_kernel_smdk4412_poll',
+ 'xmm626_kernel_smdk4412_fmt_send',
+ 'xmm626_kernel_smdk4412_fmt_recv',
+ 'xmm626_kernel_smdk4412_rfs_send',
+ 'xmm626_kernel_smdk4412_rfs_recv',
+ 'xmm626_kernel_smdk4412_gprs_get_iface',
+ 'xmm626_kernel_smdk4412_gprs_get_capabilities',
+]
+
+results = {}
+
+def func_usage(func):
+ output = ""
+ try:
+ output = git('--no-pager', 'grep', '--color=never', func)
+ except:
+ pass
+
+ for line in output:
+ filepath = line.split(":")[0]
+ content = line.split(":")[1]
+
+ device = None
+ if re.match('samsung-ipc/devices/.*/*\.c$', filepath):
+ device = re.sub('\.c', '', os.path.basename(filepath))
+ if device not in results:
+ results[device] = {}
+ results[device][func] = True
+
+def print_func_group(device, device_data, device_maxlen, funcs, regex):
+ print ("| {}{} |".format(device, " " * (device_maxlen - len(device))), end='')
+ for func in funcs:
+ if re.search(regex, func):
+ func_name = re.sub('xmm626_kernel_smdk4412_','', func)
+ if func in device_data:
+ print (" {} |".format(func_name), end='')
+ else:
+ print (" {} |".format(" " * len(func_name)), end='')
+ print()
+
+def report_results(results):
+ device_maxlen = 0
+ for key in results.keys():
+ if len(key) > device_maxlen:
+ device_maxlen = len(key)
+
+
+ print ("+{}+".format("-" * (device_maxlen + 2)))
+ for device, device_data in results.items():
+ # All:
+ # print_func_group(device, device_data, device_maxlen, funcs, "open|close|read|write|poll")
+ # print_func_group(device, device_data, device_maxlen, funcs, "fmt|rfs")
+ # print_func_group(device, device_data, device_maxlen, funcs, "gprs")
+
+
+ print_func_group(device, device_data, device_maxlen, funcs, "power|link|status")
+
+ print ("+{}+".format("-" * (device_maxlen + 2)))
+
+
+for func in funcs:
+ func_usage(func)
+
+report_results(results)