aboutsummaryrefslogtreecommitdiffstats
path: root/samsung-ipc
diff options
context:
space:
mode:
Diffstat (limited to 'samsung-ipc')
-rw-r--r--samsung-ipc/Makefile.am12
-rw-r--r--samsung-ipc/devices/galaxys2/galaxys2.c2
-rw-r--r--samsung-ipc/devices/i9300/i9300.c2
-rw-r--r--samsung-ipc/devices/ipc_devices.h1
-rw-r--r--samsung-ipc/devices/maguro/maguro.c2
-rw-r--r--samsung-ipc/devices/n5100/n5100.c2
-rw-r--r--samsung-ipc/devices/n7100/n7100.c2
-rw-r--r--samsung-ipc/devices/piranha/piranha.c2
-rw-r--r--samsung-ipc/ipc.c1
-rw-r--r--samsung-ipc/ipc.h44
-rw-r--r--samsung-ipc/modems/modem.c194
-rw-r--r--samsung-ipc/modems/modem.h35
-rw-r--r--samsung-ipc/modems/xmm626/hsic/hsic.c (renamed from samsung-ipc/modems/xmm626/xmm626_hsic.c)42
-rw-r--r--samsung-ipc/modems/xmm626/hsic/hsic.h (renamed from samsung-ipc/modems/xmm626/xmm626_hsic.h)3
-rw-r--r--samsung-ipc/modems/xmm626/hsic/xmm626_modem_link_device_hsic.h (renamed from samsung-ipc/modems/xmm626/xmm626_modem_link_device_hsic.h)0
-rw-r--r--samsung-ipc/modems/xmm626/kernel_smdk4412.c (renamed from samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c)3
-rw-r--r--samsung-ipc/modems/xmm626/mipi/mipi.c (renamed from samsung-ipc/modems/xmm626/xmm626_mipi.c)40
-rw-r--r--samsung-ipc/modems/xmm626/mipi/xmm626_mipi.h (renamed from samsung-ipc/modems/xmm626/xmm626_mipi.h)2
18 files changed, 366 insertions, 23 deletions
diff --git a/samsung-ipc/Makefile.am b/samsung-ipc/Makefile.am
index f71e396..2b89bc0 100644
--- a/samsung-ipc/Makefile.am
+++ b/samsung-ipc/Makefile.am
@@ -18,16 +18,18 @@ 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 \
modems/xmm626/xmm626.h \
- modems/xmm626/xmm626_hsic.c \
- modems/xmm626/xmm626_hsic.h \
- modems/xmm626/xmm626_kernel_smdk4412.c \
+ modems/xmm626/hsic/hsic.c \
+ modems/xmm626/hsic/xmm626_hsic.h \
+ modems/xmm626/kernel_smdk4412.c \
modems/xmm626/xmm626_kernel_smdk4412.h \
- modems/xmm626/xmm626_mipi.c \
- modems/xmm626/xmm626_mipi.h \
+ modems/xmm626/mipi/mipi.c \
+ modems/xmm626/mipi/xmm626_mipi.h \
modems/xmm626/xmm626_modem.h \
modems/xmm626/xmm626_modem_link_device_hsic.h \
modems/xmm626/xmm626_modem_prj.h \
diff --git a/samsung-ipc/devices/galaxys2/galaxys2.c b/samsung-ipc/devices/galaxys2/galaxys2.c
index cdfe20c..296feac 100644
--- a/samsung-ipc/devices/galaxys2/galaxys2.c
+++ b/samsung-ipc/devices/galaxys2/galaxys2.c
@@ -28,7 +28,7 @@
#include "ipc.h"
#include "devices/galaxys2/galaxys2.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_hsic.h"
+#include "modems/xmm626/hsic/hsic.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
int galaxys2_boot(struct ipc_client *client)
diff --git a/samsung-ipc/devices/i9300/i9300.c b/samsung-ipc/devices/i9300/i9300.c
index 85709a8..355ff62 100644
--- a/samsung-ipc/devices/i9300/i9300.c
+++ b/samsung-ipc/devices/i9300/i9300.c
@@ -28,7 +28,7 @@
#include "ipc.h"
#include "devices/i9300/i9300.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_hsic.h"
+#include "modems/xmm626/hsic/hsic.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
int i9300_boot(struct ipc_client *client)
diff --git a/samsung-ipc/devices/ipc_devices.h b/samsung-ipc/devices/ipc_devices.h
index 176607c..17a40b8 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/devices/maguro/maguro.c b/samsung-ipc/devices/maguro/maguro.c
index a2db5fc..e6cd191 100644
--- a/samsung-ipc/devices/maguro/maguro.c
+++ b/samsung-ipc/devices/maguro/maguro.c
@@ -30,7 +30,7 @@
#include "devices/maguro/maguro.h"
#include "modems/xmm626/xmm626.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
-#include "modems/xmm626/xmm626_mipi.h"
+#include "modems/xmm626/mipi/xmm626_mipi.h"
int maguro_boot(struct ipc_client *client)
{
diff --git a/samsung-ipc/devices/n5100/n5100.c b/samsung-ipc/devices/n5100/n5100.c
index 0abe896..5489fb6 100644
--- a/samsung-ipc/devices/n5100/n5100.c
+++ b/samsung-ipc/devices/n5100/n5100.c
@@ -29,7 +29,7 @@
#include "ipc.h"
#include "devices/n5100/n5100.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_hsic.h"
+#include "modems/xmm626/hsic/hsic.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
int n5100_boot(struct ipc_client *client)
diff --git a/samsung-ipc/devices/n7100/n7100.c b/samsung-ipc/devices/n7100/n7100.c
index d5091a2..4713e00 100644
--- a/samsung-ipc/devices/n7100/n7100.c
+++ b/samsung-ipc/devices/n7100/n7100.c
@@ -28,7 +28,7 @@
#include "ipc.h"
#include "devices/n7100/n7100.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_hsic.h"
+#include "modems/xmm626/hsic/hsic.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
int n7100_boot(struct ipc_client *client)
diff --git a/samsung-ipc/devices/piranha/piranha.c b/samsung-ipc/devices/piranha/piranha.c
index 839b3ce..a98e1cb 100644
--- a/samsung-ipc/devices/piranha/piranha.c
+++ b/samsung-ipc/devices/piranha/piranha.c
@@ -29,7 +29,7 @@
#include "devices/piranha/piranha.h"
#include "modems/xmm626/xmm626.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
-#include "modems/xmm626/xmm626_mipi.h"
+#include "modems/xmm626/mipi/xmm626_mipi.h"
int piranha_boot(struct ipc_client *client)
{
diff --git a/samsung-ipc/ipc.c b/samsung-ipc/ipc.c
index c116fbb..efdd5d2 100644
--- a/samsung-ipc/ipc.c
+++ b/samsung-ipc/ipc.c
@@ -214,6 +214,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(
diff --git a/samsung-ipc/ipc.h b/samsung-ipc/ipc.h
index 1cfa757..dfeea11 100644
--- a/samsung-ipc/ipc.h
+++ b/samsung-ipc/ipc.h
@@ -78,6 +78,49 @@ 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);
+ int (*download_enable)(struct ipc_client *client, int device_fd,
+ int enable);
+ 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 (*wait_status_online)(
+ __attribute__((unused)) struct ipc_client *client,
+ 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);
+ //TODO: find a better name not to conflict with fmt/rfs send
+ // like block-data send (used for firmware)
+ // what about firmware->MAIN
+ // and data_send firmware_send
+ // or send_partition
+ // or send_block
+ int (*data_send)(struct ipc_client *client, int device_fd, const void *data,
+ size_t size, int address);
+
+ 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;
@@ -98,6 +141,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..82a6ca7
--- /dev/null
+++ b/samsung-ipc/modems/modem.c
@@ -0,0 +1,194 @@
+/*
+ * 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>
+
+/* Set the modem into download mode */
+int modem_download_enable(struct ipc_client *client, int device_fd, int enable)
+{
+ return client->modem_driver_ops->download_enable(client, device_fd,
+ enable);
+}
+
+/* Power on/off the modem */
+int modem_power(struct ipc_client *client, int device_fd, int power)
+{
+ return client->modem_driver_ops->power(client, device_fd, power);
+}
+
+/* Power on/off the modem bus (HSIC, MIPI, etc) */
+int modem_bus_power(struct ipc_client *client, int power)
+{
+ return client->modem_driver_ops->bus_power(client, power);
+}
+
+// TODO
+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);
+}
+
+//TODO
+//0: HSIC is low power
+//1: HSIC is back
+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);
+}
+
+//TODO:
+int modem_link_connected_wait(struct ipc_client *client, int device_fd)
+{
+ return client->modem_driver_ops->link_connected_wait(client, device_fd);
+}
+
+// TODO
+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);
+}
+
+/* Wait for the modem driver to report the ONLINE status */
+int modem_wait_status_online(__attribute__((unused)) struct ipc_client *client,
+ int device_fd)
+{
+ return client->modem_driver_ops->wait_status_online(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);
+}
+
+// TODO
+char *modem_gprs_get_iface(struct ipc_client *client, unsigned int cid)
+{
+ return client->modem_driver_ops->gprs_get_iface(client, cid);
+}
+
+// TODO
+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);
+}
+
+// TODO: make it more generic:
+// - get rid of device_fd
+// - we have many <modem>_<firmware_partition>_send
+// functions for partitions:
+// | Function | Partition |
+// | psi | PSIRAM |
+// | ebl | EBL |
+// | firmware | MAIN |
+// | sec_start | SECPACK |
+// | device specific | NV |
+
+// int modem_psi_send(struct ipc_client *client, int serial_fd,
+// const void *psi_data, unsigned short psi_size);
+// {
+// /* TODO: get rid of serial_fd */
+// return client->modem_driver_ops->psi_send(client, serial_fd, psi_data,
+// psi_size);
+// }
+//
+// int modem_firmware_send(struct ipc_client *client, int device_fd,
+// void *device_address, const void *firmware_data,
+// size_t firmware_size)
+// {
+// /* TODO: get rid of device_fd */
+// return client->modem_driver_ops->firmware_send(client, device_fd,
+// device_address,
+// firmware_data,
+// firmware_size);
+// }
+//
+// int modem_nv_data_send(struct ipc_client *client, int device_fd,
+// void *device_address)
+// {
+// /* TODO: get rid of device_fd */
+// return client->modem_driver_ops->firmware_send(client, device_fd,
+// device_address);
+// }
+//
+//
+// int modem_psi_send(struct ipc_client *client, int serial_fd,
+// const void *psi_data, unsigned short psi_size);
+// {
+// /* TODO: get rid of serial_fd */
+// return client->modem_driver_ops->psi_send(client, serial_fd, psi_data,
+// psi_size);
+// }
+//
+
+// TODO: find a better name like block data (used for fimrware partitions)
+int modem_data_send(struct ipc_client *client, int device_fd, const void *data,
+ size_t size, int address)
+{
+ return client->modem_driver_ops->data_send(client, device_fd, data,
+ size, address);
+}
diff --git a/samsung-ipc/modems/modem.h b/samsung-ipc/modems/modem.h
new file mode 100644
index 0000000..9935df6
--- /dev/null
+++ b/samsung-ipc/modems/modem.h
@@ -0,0 +1,35 @@
+#ifndef __SAMSUNG_IPC_MODEM_H__
+#define __SAMSUNG_IPC_MODEM_H__
+int modem_download_enable(__attribute__((unused)) struct ipc_client *client,
+ int device_fd, int enable);
+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);
+int modem_wait_status(_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);
+// TODO: find a better name like block data (used for fimrware partitions)
+int modem_data_send(struct ipc_client *client, int device_fd, const void *data,
+ size_t size, int address);
+
+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_hsic.c b/samsung-ipc/modems/xmm626/hsic/hsic.c
index 6e7126c..e1e2883 100644
--- a/samsung-ipc/modems/xmm626/xmm626_hsic.c
+++ b/samsung-ipc/modems/xmm626/hsic/hsic.c
@@ -29,8 +29,10 @@
#include <samsung-ipc.h>
+#include "ipc.h"
+#include "modems/xmm626/xmm626_kernel_smdk4412.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_hsic.h"
+#include "modems/xmm626/hsic/hsic.h"
int xmm626_hsic_ack_read(int device_fd, unsigned short ack)
{
@@ -391,8 +393,8 @@ complete:
return rc;
}
-int xmm626_hsic_modem_data_send(int device_fd, const void *data, size_t size,
- int address)
+int xmm626_hsic_modem_data_send(struct ipc_client *client, int device_fd,
+ const void *data, size_t size, int address)
{
size_t chunk;
size_t count;
@@ -543,7 +545,7 @@ int xmm626_hsic_firmware_send(struct ipc_client *client, int device_fd,
return -1;
}
- rc = xmm626_hsic_modem_data_send(device_fd, firmware_data,
+ rc = xmm626_hsic_modem_data_send(client, device_fd, firmware_data,
firmware_size,
XMM626_FIRMWARE_ADDRESS);
if (rc < 0)
@@ -572,7 +574,7 @@ int xmm626_hsic_nv_data_send(struct ipc_client *client, int device_fd)
}
ipc_client_log(client, "Loaded nv_data");
- rc = xmm626_hsic_modem_data_send(device_fd, nv_data, nv_size,
+ rc = xmm626_hsic_modem_data_send(client, device_fd, nv_data, nv_size,
XMM626_NV_DATA_ADDRESS);
if (rc < 0)
goto error;
@@ -610,3 +612,33 @@ int xmm626_hsic_hw_reset_send(struct ipc_client *client, int device_fd)
return 0;
}
+
+struct ipc_client_modem_driver_ops smdk4412_xmm626_hsic_modem_driver_ops = {
+ .download_enable = 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,
+ .wait_status_online = 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: find a better name for data_send
+ .data_send = xmm626_hsic_modem_data_send,
+
+ // TODO
+ // .gprs_get_iface = xmm626_kernel_smdk4412_gprs_get_iface,
+ // .modem_gprs_get_capabilities = xmm626_kernel_smdk4412_modem_gprs_get_capabilities,
+};
+
diff --git a/samsung-ipc/modems/xmm626/xmm626_hsic.h b/samsung-ipc/modems/xmm626/hsic/hsic.h
index 6385cdc..fc172d5 100644
--- a/samsung-ipc/modems/xmm626/xmm626_hsic.h
+++ b/samsung-ipc/modems/xmm626/hsic/hsic.h
@@ -63,5 +63,8 @@ int xmm626_hsic_firmware_send(struct ipc_client *client, int device_fd,
const void *firmware_data, size_t firmware_size);
int xmm626_hsic_nv_data_send(struct ipc_client *client, int device_fd);
int xmm626_hsic_hw_reset_send(struct ipc_client *client, int device_fd);
+int xmm626_hsic_modem_data_send(struct ipc_client *client, int device_fd,
+ const void *data, size_t size, int address);
+
#endif /* __XMM626_HSIC_H__ */
diff --git a/samsung-ipc/modems/xmm626/xmm626_modem_link_device_hsic.h b/samsung-ipc/modems/xmm626/hsic/xmm626_modem_link_device_hsic.h
index f2421e0..f2421e0 100644
--- a/samsung-ipc/modems/xmm626/xmm626_modem_link_device_hsic.h
+++ b/samsung-ipc/modems/xmm626/hsic/xmm626_modem_link_device_hsic.h
diff --git a/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c b/samsung-ipc/modems/xmm626/kernel_smdk4412.c
index c6b1578..d9c7620 100644
--- a/samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c
+++ b/samsung-ipc/modems/xmm626/kernel_smdk4412.c
@@ -32,7 +32,7 @@
#include "ipc.h"
#include "modems/xmm626/xmm626.h"
#include "modems/xmm626/xmm626_kernel_smdk4412.h"
-#include "modems/xmm626/xmm626_modem_link_device_hsic.h"
+#include "modems/xmm626/hsic/xmm626_modem_link_device_hsic.h"
#include "modems/xmm626/xmm626_modem_prj.h"
int xmm626_kernel_smdk4412_power(
@@ -602,3 +602,4 @@ int xmm626_kernel_smdk4412_gprs_get_capabilities(
return 0;
}
+
diff --git a/samsung-ipc/modems/xmm626/xmm626_mipi.c b/samsung-ipc/modems/xmm626/mipi/mipi.c
index 375ded0..e95d2a1 100644
--- a/samsung-ipc/modems/xmm626/xmm626_mipi.c
+++ b/samsung-ipc/modems/xmm626/mipi/mipi.c
@@ -29,8 +29,10 @@
#include <samsung-ipc.h>
+#include "ipc.h"
#include "modems/xmm626/xmm626.h"
-#include "modems/xmm626/xmm626_mipi.h"
+#include "modems/xmm626/xmm626_kernel_smdk4412.h"
+#include "modems/xmm626/mipi/xmm626_mipi.h"
int xmm626_mipi_crc_calculate(const void *data, size_t size)
{
@@ -419,8 +421,8 @@ complete:
return rc;
}
-int xmm626_mipi_modem_data_send(int device_fd, const void *data, size_t size,
- int address)
+int xmm626_mipi_modem_data_send(struct ipc_client *client, int device_fd,
+ const void *data, size_t size, int address)
{
size_t chunk;
size_t count;
@@ -588,7 +590,7 @@ int xmm626_mipi_firmware_send(struct ipc_client *client, int device_fd,
return -1;
}
- rc = xmm626_mipi_modem_data_send(device_fd, firmware_data,
+ rc = xmm626_mipi_modem_data_send(client, device_fd, firmware_data,
firmware_size,
XMM626_FIRMWARE_ADDRESS);
if (rc < 0)
@@ -617,7 +619,7 @@ int xmm626_mipi_nv_data_send(struct ipc_client *client, int device_fd)
}
ipc_client_log(client, "Loaded nv_data");
- rc = xmm626_mipi_modem_data_send(device_fd, nv_data, nv_size,
+ rc = xmm626_mipi_modem_data_send(client, device_fd, nv_data, nv_size,
XMM626_NV_DATA_ADDRESS);
if (rc < 0)
goto error;
@@ -645,7 +647,7 @@ int xmm626_mipi_mps_data_send(struct ipc_client *client, int device_fd,
return -1;
}
- rc = xmm626_mipi_modem_data_send(device_fd, mps_data, mps_size,
+ rc = xmm626_mipi_modem_data_send(client, device_fd, mps_data, mps_size,
XMM626_MPS_DATA_ADDRESS);
if (rc < 0)
return -1;
@@ -672,3 +674,29 @@ int xmm626_mipi_hw_reset_send(struct ipc_client *client, int device_fd)
return 0;
}
+
+struct ipc_client_modem_driver_ops smdk4412_xmm626_mipi_modem_driver_ops = {
+ .download_enable = xmm626_kernel_smdk4412_boot_power, //TODO
+ .power = xmm626_kernel_smdk4412_power, //TODO
+ .bus_power = xmm626_kernel_smdk4412_hci_power, //TODO
+ .link_control_enable = xmm626_kernel_smdk4412_link_control_enable, //TODO
+ .link_control_active = xmm626_kernel_smdk4412_link_control_active, //TODO
+ .link_connected_wait = xmm626_kernel_smdk4412_link_connected_wait, //TODO
+ .link_get_hostwake_wait = xmm626_kernel_smdk4412_link_get_hostwake_wait, //TODO
+ .wait_status_online = xmm626_kernel_smdk4412_status_online_wait, //TODO
+
+ .open = xmm626_kernel_smdk4412_open, //TODO
+ .close = xmm626_kernel_smdk4412_close, //TODO
+ .read = xmm626_kernel_smdk4412_read, //TODO
+ .write = xmm626_kernel_smdk4412_write, //TODO
+ .poll = xmm626_kernel_smdk4412_poll, //TODO
+
+ .fmt_send = xmm626_kernel_smdk4412_fmt_send, //TODO
+ .fmt_recv = xmm626_kernel_smdk4412_fmt_recv, //TODO
+ .rfs_send = xmm626_kernel_smdk4412_rfs_send, //TODO
+ .rfs_recv = xmm626_kernel_smdk4412_rfs_recv, //TODO
+ .data_send = xmm626_mipi_modem_data_send,
+
+ // .gprs_get_iface = xmm626_kernel_smdk4412_gprs_get_iface,
+ // .modem_gprs_get_capabilities = xmm626_kernel_smdk4412_modem_gprs_get_capabilities,
+};
diff --git a/samsung-ipc/modems/xmm626/xmm626_mipi.h b/samsung-ipc/modems/xmm626/mipi/xmm626_mipi.h
index 1545a3e..67b35ba 100644
--- a/samsung-ipc/modems/xmm626/xmm626_mipi.h
+++ b/samsung-ipc/modems/xmm626/mipi/xmm626_mipi.h
@@ -67,5 +67,7 @@ int xmm626_mipi_nv_data_send(struct ipc_client *client, int device_fd);
int xmm626_mipi_mps_data_send(struct ipc_client *client, int device_fd,
const void *mps_data, size_t mps_size);
int xmm626_mipi_hw_reset_send(struct ipc_client *client, int device_fd);
+int xmm626_mipi_modem_data_send(struct ipc_client *client, int device_fd,
+ const void *data, size_t size, int address);
#endif /* __XMM626_MIPI_H__ */