aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2019-09-07 05:54:42 +0200
committerDenis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>2019-09-12 17:48:11 +0200
commit61560a66a1d3424fef4a11c4136c47d1212bc5e6 (patch)
treef811f8bfe66b4d6899e42484919a51cda3ded91f
parent2fa0310ba8f93fb019308246ce87f5d170c2ba7b (diff)
downloadhardware_replicant_libsamsung-ipc-61560a66a1d3424fef4a11c4136c47d1212bc5e6.tar.gz
hardware_replicant_libsamsung-ipc-61560a66a1d3424fef4a11c4136c47d1212bc5e6.tar.bz2
hardware_replicant_libsamsung-ipc-61560a66a1d3424fef4a11c4136c47d1212bc5e6.zip
Many debugging later
Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-rw-r--r--samsung-ipc/devices/generic/generic.c54
-rw-r--r--samsung-ipc/ipc.c27
-rw-r--r--samsung-ipc/modems/xmm626/xmm626_sec_modem.c22
-rw-r--r--tools/ipc-test.c29
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);