diff options
author | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2019-09-07 05:54:42 +0200 |
---|---|---|
committer | Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org> | 2019-09-12 17:24:26 +0200 |
commit | fba219255e114f59ef212ef7d87ab97a6cfb1b2a (patch) | |
tree | f811f8bfe66b4d6899e42484919a51cda3ded91f | |
parent | 3076f572e7564b530829aec0c4f94f6446616b11 (diff) | |
download | hardware_replicant_libsamsung-ipc-fba219255e114f59ef212ef7d87ab97a6cfb1b2a.tar.gz hardware_replicant_libsamsung-ipc-fba219255e114f59ef212ef7d87ab97a6cfb1b2a.tar.bz2 hardware_replicant_libsamsung-ipc-fba219255e114f59ef212ef7d87ab97a6cfb1b2a.zip |
Many debugging later
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r-- | samsung-ipc/devices/generic/generic.c | 54 | ||||
-rw-r--r-- | samsung-ipc/ipc.c | 27 | ||||
-rw-r--r-- | samsung-ipc/modems/xmm626/xmm626_sec_modem.c | 22 | ||||
-rw-r--r-- | tools/ipc-test.c | 29 |
4 files changed, 89 insertions, 43 deletions
diff --git a/samsung-ipc/devices/generic/generic.c b/samsung-ipc/devices/generic/generic.c index b8571a8..97cf831 100644 --- a/samsung-ipc/devices/generic/generic.c +++ b/samsung-ipc/devices/generic/generic.c @@ -41,6 +41,7 @@ int generic_boot(struct ipc_client *client) int modem_link_fd = -1; unsigned char *p; int rc; + int unused = 0; if (client == NULL) return -1; @@ -61,14 +62,7 @@ int generic_boot(struct ipc_client *client) } ipc_client_log(client, "Mapped modem image data to memory"); - /* modem_link_fd = open(XMM626_SEC_MODEM_LINK_PM_DEVICE, O_RDWR); - if (modem_link_fd < 0) { - ipc_client_log(client, "Opening modem link device failed"); - goto error; - } - ipc_client_log(client, "Opened modem link device"); -*/ - rc = xmm626_sec_modem_power(modem_boot_fd, 0); + rc = xmm626_sec_modem_power(unused, 0); if (rc < 0) { ipc_client_log(client, "xmm626_sec_modem_power: Turning the modem off failed with error %d", rc); goto error; @@ -80,13 +74,16 @@ int generic_boot(struct ipc_client *client) } ipc_client_log(client, "Turned the modem off"); - rc = xmm626_sec_modem_power(modem_boot_fd, 1); - printf("%d\n", rc); - rc |= xmm626_sec_modem_hci_power(1); - printf("%d\n", rc); + rc = xmm626_sec_modem_power(unused, 1); + printf("%s: xmm626_sec_modem_power(NULL, 1) = %d\n", __FUNCTION__, rc); + if (rc < 0) { + ipc_client_log(client, "xmm626_sec_modem_power failed with error %d", rc); + } + rc = xmm626_sec_modem_hci_power(1); + printf("%s: xmm626_sec_modem_hci_power(1) = %d\n", __FUNCTION__, rc); if (rc < 0) { - ipc_client_log(client, "Turning the modem on failed"); + ipc_client_log(client, "xmm626_sec_modem_hci_power on failed"); goto error; } ipc_client_log(client, "Turned the modem on"); @@ -106,14 +103,6 @@ int generic_boot(struct ipc_client *client) } ipc_client_log(client, "Opened modem boot device"); - - /* rc = xmm626_sec_modem_link_connected_wait(modem_link_fd); - if (rc < 0) { - ipc_client_log(client, "Waiting for link connected failed"); - goto error; - } - ipc_client_log(client, "Waited for link connected"); -*/ p = (unsigned char *) modem_image_data + GENERIC_PSI_OFFSET; rc = xmm626_hsic_psi_send(client, modem_boot_fd, (void *) p, GENERIC_PSI_SIZE); @@ -185,9 +174,7 @@ int generic_boot(struct ipc_client *client) ipc_client_log(client, "Waiting for host wake failed"); } - rc = xmm626_sec_modem_link_control_enable(modem_link_fd, 0); - rc |= xmm626_sec_modem_hci_power(0); - rc |= xmm626_sec_modem_link_control_active(modem_link_fd, 0); + rc = xmm626_sec_modem_hci_power(0); if (rc < 0) { ipc_client_log(client, "Turning the modem off failed"); @@ -200,22 +187,13 @@ int generic_boot(struct ipc_client *client) } ipc_client_log(client, "Waited for host wake"); - rc = xmm626_sec_modem_link_control_enable(modem_link_fd, 1); - rc |= xmm626_sec_modem_hci_power(1); - rc |= xmm626_sec_modem_link_control_active(modem_link_fd, 1); + rc = xmm626_sec_modem_hci_power(1); if (rc < 0) { ipc_client_log(client, "Turning the modem on failed"); goto error; } - /* rc = xmm626_sec_modem_link_connected_wait(modem_link_fd); - if (rc < 0) { - ipc_client_log(client, "Waiting for link connected failed"); - goto error; - }*/ - ipc_client_log(client, "Waited for link connected"); - usleep(300000); rc = 0; @@ -244,15 +222,21 @@ int generic_open(void *data, int type) { struct generic_transport_data *transport_data; + printf("%s: data: %p, type: %p\n", __FUNCTION__, + data, type); if (data == NULL) return -1; transport_data = (struct generic_transport_data *) data; transport_data->fd = xmm626_sec_modem_open(type); - if (transport_data->fd < 0) + if (transport_data->fd < 0) { + printf("%s: transport_data->fd: %d\n", + __FUNCTION__, transport_data->fd); return -1; + } + printf("%s: return 0;\n", __FUNCTION__); return 0; } diff --git a/samsung-ipc/ipc.c b/samsung-ipc/ipc.c index 3a6e376..3abb24e 100644 --- a/samsung-ipc/ipc.c +++ b/samsung-ipc/ipc.c @@ -159,16 +159,24 @@ struct ipc_client *ipc_client_create(int type) unsigned int device_index; int rc; - if (type < 0 || type > IPC_CLIENT_TYPE_RFS) + printf("ENTER %s\n", __FUNCTION__); + + if (type < 0 || type > IPC_CLIENT_TYPE_RFS) { + printf("%s: return NULL\n", __FUNCTION__); return NULL; + } rc = ipc_device_detect(); - if (rc < 0) + if (rc < 0) { + printf("%s: ipc_device_detect failed with error %d\n", __FUNCTION__, rc); goto error; + } device_index = (unsigned int) rc; - if (device_index > ipc_devices_count) + if (device_index > ipc_devices_count) { + printf("%s: idevice_index failed with error %d\n", __FUNCTION__, device_index); goto error; + } client = (struct ipc_client *) calloc(1, sizeof(struct ipc_client)); client->type = type; @@ -176,9 +184,11 @@ struct ipc_client *ipc_client_create(int type) switch (type) { case IPC_CLIENT_TYPE_RFS: client->ops = ipc_devices[device_index].rfs_ops; + printf("%s: IPC_CLIENT_TYPE_RFS\n", __FUNCTION__); break; case IPC_CLIENT_TYPE_FMT: client->ops = ipc_devices[device_index].fmt_ops; + printf("%s: IPC_CLIENT_TYPE_FMT\n", __FUNCTION__); break; default: goto error; @@ -193,6 +203,7 @@ struct ipc_client *ipc_client_create(int type) if (ipc_devices[device_index].handlers != NULL) memcpy(client->handlers, ipc_devices[device_index].handlers, sizeof(struct ipc_client_handlers)); + printf("%s: complete\n", __FUNCTION__); goto complete; error: @@ -202,6 +213,7 @@ error: } complete: + printf("%s: return client\n", __FUNCTION__); return client; } @@ -344,6 +356,10 @@ int ipc_client_recv(struct ipc_client *client, struct ipc_message *message) int ipc_client_open(struct ipc_client *client) { if (client == NULL || client->handlers == NULL || client->handlers->open == NULL) { + if (client == NULL) { + printf("%s: client is NULL\n", __FUNCTION__); + } + if (client->handlers == NULL) { ipc_client_log(client, "%s: client->handlers is NULL", __FUNCTION__); } @@ -351,8 +367,13 @@ int ipc_client_open(struct ipc_client *client) ipc_client_log(client, "%s: Failed: client->handlers->open is NULL", __FUNCTION__); } return -1; + } else { + ipc_client_log(client, "%s: client: %p client->handlers: %p client->handlers->open: %p", + __FUNCTION__, client, client->handlers, client->handlers->open); } + ipc_client_log(client, "%s: ->open(client->handlers->transport_data:%p, client->type:%p", + __FUNCTION__, client->handlers->transport_data, client->type); return client->handlers->open(client->handlers->transport_data, client->type); } diff --git a/samsung-ipc/modems/xmm626/xmm626_sec_modem.c b/samsung-ipc/modems/xmm626/xmm626_sec_modem.c index 5ca0ea6..737db3f 100644 --- a/samsung-ipc/modems/xmm626/xmm626_sec_modem.c +++ b/samsung-ipc/modems/xmm626/xmm626_sec_modem.c @@ -414,23 +414,37 @@ complete: int xmm626_sec_modem_open(int type) { - int fd = -1; + int fd = -2; int i = 0; + int err = 0; + printf("ENTER %s\n", __FUNCTION__); while (fd < 0 && i < 30) { i++; usleep(30000); + printf("%s: type: %d\n", __FUNCTION__, type); switch (type) { case IPC_CLIENT_TYPE_FMT: - printf("%s: %d %d\n", XMM626_SEC_MODEM_IPC0_DEVICE, fd, errno); + err = 0; fd = open(XMM626_SEC_MODEM_IPC0_DEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); + if (fd < 0) { + err = errno; + printf("%s: open(%s, O_RDWR | O_NOCTTY | O_NONBLOCK) => %d errno: %d\n", + __FUNCTION__, XMM626_SEC_MODEM_IPC0_DEVICE, fd, err); + } + break; case IPC_CLIENT_TYPE_RFS: + err = 0; fd = open(XMM626_SEC_MODEM_RFS0_DEVICE, O_RDWR | O_NOCTTY | O_NONBLOCK); - printf("%s: %d %d\n", XMM626_SEC_MODEM_RFS0_DEVICE, fd, errno); + if (fd < 0) { + err = errno; + printf("%s: open(%s, O_RDWR | O_NOCTTY | O_NONBLOCK) => %d errno: %d\n", + __FUNCTION__, XMM626_SEC_MODEM_RFS0_DEVICE, fd, err); + } break; default: - printf("unknown type\n"); + printf("%s: unknown type\n", __FUNCTION__); return -1; } } diff --git a/tools/ipc-test.c b/tools/ipc-test.c index cc8548f..95c0b55 100644 --- a/tools/ipc-test.c +++ b/tools/ipc-test.c @@ -22,6 +22,7 @@ #include <string.h> #include <samsung-ipc.h> +#include "../samsung-ipc/ipc.h" void log_callback(__attribute__((unused)) void *data, const char *message) @@ -61,18 +62,30 @@ int main(__attribute__((unused)) int args, printf("Creating client failed\n"); goto error; } + printf("%s: ipc_client_create(IPC_CLIENT_TYPE_FMT) => %d\n", __FUNCTION__, rc); + +// printf("%s: ipc_client_create done => client->type: %d %s\n", +// __FUNCTION__, (int)(client->type), +// (client->type == IPC_CLIENT_TYPE_FMT) ? "IPC_CLIENT_TYPE_FMT" : "OTHER"); rc = ipc_client_log_callback_register(client, log_callback, NULL); if (rc < 0) { printf("Registering log callback failed\n"); goto error; } + printf("%s: ipc_client_log_callback_register(client, log_callback, NULL) => %d\n", __FUNCTION__, rc); + +// printf("%s: client->type: %d @ vim %s +%d\n", __FUNCTION__, client->type, __FILE__, __LINE__); rc = ipc_client_data_create(client); if (rc < 0) { printf("Creating data failed\n"); goto error; } +// printf("%s: client->type: %d @ vim %s +%d\n", __FUNCTION__, client->type, __FILE__, __LINE__); + printf("%s: ipc_client_data_create(client) => %d\n", __FUNCTION__, rc); + + system("/usr/bin/lsusb"); rc = ipc_client_boot(client); if (rc < 0) { @@ -80,17 +93,31 @@ int main(__attribute__((unused)) int args, goto error; } + system("/usr/bin/lsusb"); + + return 0; + + printf("%s: ipc_client_boot(client) => %d\n", __FUNCTION__, rc); +// printf("%s: client->type: %d @ vim %s +%d\n", __FUNCTION__, client->type, __FILE__, __LINE__); + + /* Does nothing */ rc = ipc_client_power_on(client); if (rc < 0) { printf("Powering on failed\n"); goto error; } + printf("%s: ipc_client_power_on(client) => %d\n", __FUNCTION__, rc); + + // printf("%s: client->type: %d @ vim %s +%d\n", __FUNCTION__, client->type, __FILE__, __LINE__); rc = ipc_client_open(client); if (rc < 0) { - printf("Opening failed\n"); + printf("ipc_client_open failed with error %d\n", rc); goto error; } + printf("%s: ipc_client_open(client) => %d\n", __FUNCTION__, rc); + +// printf("%s: client->type: %d @ vim %s +%d\n", __FUNCTION__, client->type, __FILE__, __LINE__); for (i = 0; i < 5; i++) { rc = ipc_client_poll(client, NULL, NULL); |