diff options
Diffstat (limited to 'samsung-ipc')
-rw-r--r-- | samsung-ipc/devices/generic/generic.c | 176 |
1 files changed, 148 insertions, 28 deletions
diff --git a/samsung-ipc/devices/generic/generic.c b/samsung-ipc/devices/generic/generic.c index cb5f619..3837231 100644 --- a/samsung-ipc/devices/generic/generic.c +++ b/samsung-ipc/devices/generic/generic.c @@ -19,7 +19,7 @@ */ #define _GNU_SOURCE /* See feature_test_macros(7) */ -#define GENERIC_DEBUG 0 +#define GENERIC_DEBUG 1 #include <errno.h> #include <fcntl.h> @@ -45,9 +45,16 @@ int xmm626_kernel_linux_modem_power(__attribute__((unused)) int device_fd, { int rc; + ipc_client_log(client, "ENTER %s", __func__); + rc = sysfs_value_write(XMM626_KERNEL_LINUX_POWER_PATH, !!power); - if (rc == -1) + if (rc == -1) { + ipc_client_log(client, "%s: sysfs_value_write failed with error -1", + __func__); return rc; + } + + ipc_client_log(client, "%s DONE", __func__); return 0; } @@ -56,6 +63,8 @@ int xmm626_kernel_linux_modem_hci_power(struct ipc_client *client, int power) { int ehci_rc, ohci_rc = -1; + ipc_client_log(client, "ENTER %s", __func__); + if (!!power) { ohci_rc = sysfs_value_write( XMM626_KERNEL_LINUX_PDA_ACTIVE_SYSFS, 1); @@ -84,19 +93,25 @@ int xmm626_kernel_linux_modem_hci_power(struct ipc_client *client, int power) } if (ohci_rc < 0) { - ipc_client_log(client, "%s: ohci_rc < 0\n", __func__); + ipc_client_log(client, "%s: ohci_rc < 0", __func__); } - if (ehci_rc < 0 && ohci_rc < 0) + + if (ehci_rc < 0 && ohci_rc < 0) { + ipc_client_log(client, "%s: error: ehci_rc < 0 && ohci_rc < 0", + __func__); + return -1; + } + ipc_client_log(client, "%s: DONE", __func__); return 0; } int xmm626_kernel_linux_modem_link_control_enable( __attribute__((unused)) int device_fd, int enable) { - if (enable) { - } + ipc_client_log(client, "ENTER %s: dummy function", __func__); + return 0; } @@ -105,9 +120,16 @@ int xmm626_kernel_linux_modem_link_control_active( { int rc; + ipc_client_log(client, "ENTER %s", __func__); + rc = sysfs_value_write(XMM626_KERNEL_LINUX_LINK_ACTIVE_PATH, !!active); - if (rc < 0) + if (rc < 0) { + ipc_client_log(client, "%s: sysfs_value_write failed with error -1", + __func__); return -1; + } + + ipc_client_log(client, "%s DONE", __func__); return 0; } @@ -117,12 +139,16 @@ int xmm626_kernel_linux_modem_link_connected_wait( { int i; + ipc_client_log(client, "ENTER %s", __func__); + i = 0; for (i = 0; i < 10; i++) { usleep(50000); } + ipc_client_log(client, "EXIT %s", __func__); + return 0; } @@ -131,12 +157,16 @@ int xmm626_kernel_linux_modem_link_get_hostwake_wait( { int i; + ipc_client_log(client, "ENTER %s", __func__); + i = 0; for (i = 0; i < 10; i++) { /* TODO: read host wake GPIOs */ usleep(500000); } + ipc_client_log(client, "%s DONE", __func__); + return 0; } @@ -146,7 +176,7 @@ int xmm626_kernel_linux_modem_open(struct ipc_client *client, int type) int i = 0; int err = 0; - ipc_client_log(client, "ENTER %s\n", __func__); + ipc_client_log(client, "ENTER %s", __func__); while (fd < 0 && i < 30) { i++; usleep(30000); @@ -161,7 +191,7 @@ int xmm626_kernel_linux_modem_open(struct ipc_client *client, int type) err = errno; ipc_client_log(client, "%s: open(%s, " "O_RDWR | O_NOCTTY | O_NONBLOCK) => " - "%d errno: %d\n", + "%d errno: %d", __func__, XMM626_KERNEL_LINUX_IPC0_DEVICE, fd, err); @@ -176,19 +206,21 @@ int xmm626_kernel_linux_modem_open(struct ipc_client *client, int type) err = errno; ipc_client_log(client, "%s: open(%s, " "O_RDWR | O_NOCTTY | O_NONBLOCK) => " - "%d errno: %d\n", + "%d errno: %d", __func__, XMM626_KERNEL_LINUX_RFS0_DEVICE, fd, err); } break; default: - ipc_client_log(client, "%s: unknown client type %s\n", + ipc_client_log(client, "%s: unknown client type %s", __func__, ipc_client_type_string(type)); return -1; } } + ipc_client_log(client, "EXIT %s", __func__); + return fd; } @@ -196,11 +228,15 @@ int xmm626_kernel_linux_modem_read(int fd, void *buffer, size_t length) { int rc; + ipc_client_log(client, "ENTER %s", __func__); + if (fd < 0 || buffer == NULL || length <= 0) return -1; rc = read(fd, buffer, length); + ipc_client_log(client, "%s DONE", __func__); + return rc; } @@ -208,11 +244,19 @@ int xmm626_kernel_linux_modem_write(int fd, const void *buffer, size_t length) { int rc; - if (fd < 0 || buffer == NULL || length <= 0) + ipc_client_log(client, "ENTER %s", __func__); + + if (fd < 0 || buffer == NULL || length <= 0) { + ipc_client_log(client, "%s: error: fd < 0 || buffer == NULL || length <= 0", + __func__); + return -1; + } rc = write(fd, buffer, length); + ipc_client_log(client, "%s DONE", __func__); + return rc; } @@ -220,11 +264,19 @@ char *xmm626_kernel_linux_modem_gprs_get_iface(unsigned int cid) { char *iface = NULL; - if (cid > XMM626_SEC_MODEM_GPRS_IFACE_COUNT) + ipc_client_log(client, "ENTER %s", __func__); + + if (cid > XMM626_SEC_MODEM_GPRS_IFACE_COUNT) { + ipc_client_log(client, + "%s: error: cid > XMM626_SEC_MODEM_GPRS_IFACE_COUNT", + __func__); return NULL; + } asprintf(&iface, "%s%d", XMM626_SEC_MODEM_GPRS_IFACE_PREFIX, cid - 1); + ipc_client_log(client, "%s DONE", __func__); + return iface; } @@ -232,11 +284,18 @@ int generic_gprs_get_capabilities( __attribute__((unused)) struct ipc_client *client, struct ipc_client_gprs_capabilities *capabilities) { - if (capabilities == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (capabilities == NULL) { + ipc_client_log(client, "%s: error: capabilities == NULL", + __func__); return -1; + } capabilities->cid_count = XMM626_SEC_MODEM_GPRS_IFACE_COUNT; + ipc_client_log(client, "%s DONE", __func__); + return 0; } @@ -251,6 +310,8 @@ int generic_boot(struct ipc_client *client) int rc; int unused = 0; + ipc_client_log(client, "ENTER %s", __func__); + if (client == NULL) return -1; @@ -304,7 +365,7 @@ int generic_boot(struct ipc_client *client) rc = xmm626_kernel_linux_modem_power(unused, 1); ipc_client_log(client, - "%s: xmm626_kernel_linux_modem_power(NULL, 1) = %d\n", + "%s: xmm626_kernel_linux_modem_power(NULL, 1) = %d", __func__, rc); if (rc < 0) { ipc_client_log(client, @@ -315,7 +376,7 @@ int generic_boot(struct ipc_client *client) rc = xmm626_kernel_linux_modem_hci_power(client, 1); ipc_client_log(client, - "%s: xmm626_kernel_linux_modem_hci_power(client, 1) = %d\n", + "%s: xmm626_kernel_linux_modem_hci_power(client, 1) = %d", __func__, rc); if (rc < 0) { ipc_client_log(client, @@ -472,6 +533,9 @@ complete: if (modem_link_fd >= 0) close(modem_link_fd); + if (rc != -1) + ipc_client_log(client, "%s DONE", __func__); + return rc; } @@ -479,14 +543,23 @@ int generic_open(struct ipc_client *client, void *data, int type) { struct generic_transport_data *transport_data; - if (data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + if (data == NULL) { + ipc_client_log(client, "%s: error: data == NULL", + __func__); return -1; + } transport_data = (struct generic_transport_data *) data; transport_data->fd = xmm626_kernel_linux_modem_open(client, type); - if (transport_data->fd < 0) + if (transport_data->fd < 0) { + ipc_client_log(client, "%s: transport_data->fd < 0", + __func__); return -1; + } + + ipc_client_log(client, "%s DONE", __func__); return 0; } @@ -495,14 +568,22 @@ int generic_close(__attribute__((unused)) struct ipc_client *client, void *data) { struct generic_transport_data *transport_data; - if (data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (data == NULL){ + ipc_client_log(client, "%s: error: data == NULL", + __func__); + return -1; + } transport_data = (struct generic_transport_data *) data; xmm626_kernel_smdk4412_close(client, transport_data->fd); transport_data->fd = -1; + ipc_client_log(client, "%s DONE", __func__); + return 0; } @@ -512,13 +593,21 @@ int generic_read(__attribute__((unused)) struct ipc_client *client, struct generic_transport_data *transport_data; int rc; - if (data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (data == NULL) { + ipc_client_log(client, "%s: error: data == NULL", + __func__); + return -1; + } transport_data = (struct generic_transport_data *) data; rc = xmm626_kernel_linux_modem_read(transport_data->fd, buffer, length); + ipc_client_log(client, "%s DONE", __func__); + return rc; } @@ -528,14 +617,19 @@ int generic_write(__attribute__((unused)) struct ipc_client *client, struct generic_transport_data *transport_data; int rc; - if (data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (data == NULL) { + ipc_client_log(client, "%s: error: data == NULL", __func__); return -1; + } transport_data = (struct generic_transport_data *) data; rc = xmm626_kernel_linux_modem_write(transport_data->fd, buffer, length); + ipc_client_log(client, "%s DONE", __func__); return rc; } @@ -558,9 +652,9 @@ int generic_poll(__attribute__((unused)) struct ipc_client *client, fd.fd = transport_data->fd; fd.events = POLLRDNORM | POLLIN; -#if GENERIC_DEBUG - ipc_client_log(client, "%s: transport_data->fd: %d", __func__, transport_data->fd); -#endif +//#if GENERIC_DEBUG +// ipc_client_log(client, "%s: transport_data->fd: %d", __func__, transport_data->fd); +//#endif rc = poll(&fd, 1, -1); if (rc == -1) { rc = errno; @@ -594,13 +688,16 @@ int generic_smdk_poll(__attribute__((unused)) struct ipc_client *client, void *d rc = xmm626_kernel_smdk4412_poll(client, transport_data->fd, fds, timeout); - ipc_client_log(client, "%s: poll: %d", __func__, rc); + ipc_client_log(client, "%s DONE: poll: %d", __func__, rc); + return rc; } int generic_power_on(__attribute__((unused)) struct ipc_client *client, __attribute__((unused)) void *data) { + ipc_client_log(client, "ENTER %s: dummy function", __func__); + return 0; } @@ -610,6 +707,8 @@ int generic_power_off(__attribute__((unused)) struct ipc_client *client, int fd; int rc; + ipc_client_log(client, "ENTER %s", __func__); + fd = open(XMM626_KERNEL_LINUX_BOOT0_DEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); if (fd < 0) @@ -619,9 +718,13 @@ int generic_power_off(__attribute__((unused)) struct ipc_client *client, close(fd); - if (rc < 0) + if (rc < 0) { + ipc_client_log(client, "%s: xmm626_kernel_linux_modem_power failed with error %d", + __func__, rc); return -1; + } + ipc_client_log(client, "%s DONE", __func__); return 0; } @@ -629,6 +732,8 @@ int generic_gprs_activate(__attribute__((unused)) struct ipc_client *client, __attribute__((unused)) void *data, __attribute__((unused)) unsigned int cid) { + ipc_client_log(client, "ENTER %s: dummy function", __func__); + return 0; } @@ -636,6 +741,8 @@ int generic_gprs_deactivate(__attribute__((unused)) struct ipc_client *client, __attribute__((unused)) void *data, __attribute__((unused)) unsigned int cid) { + ipc_client_log(client, "ENTER %s: dummy function", __func__); + return 0; } @@ -644,11 +751,17 @@ int generic_data_create(__attribute__((unused)) struct ipc_client *client, __attribute__((unused)) void **power_data, __attribute__((unused)) void **gprs_data) { - if (transport_data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (transport_data == NULL) { + ipc_client_log(client, "%s: error: transport_data == NULL", + __func__); return -1; + } *transport_data = calloc(1, sizeof(struct generic_transport_data)); + ipc_client_log(client, "%s DONE", __func__); return 0; } @@ -657,11 +770,18 @@ int generic_data_destroy(__attribute__((unused)) struct ipc_client *client, __attribute__((unused)) void *power_data, __attribute__((unused)) void *gprs_data) { - if (transport_data == NULL) + ipc_client_log(client, "ENTER %s", __func__); + + if (transport_data == NULL) { + ipc_client_log(client, "%s: error: transport_data == NULL", + __func__); return -1; + } free(transport_data); + ipc_client_log(client, "%s DONE", __func__); + return 0; } |