diff options
-rw-r--r-- | Android.mk | 3 | ||||
-rw-r--r-- | samsung-ipc/Makefile.am | 1 | ||||
-rw-r--r-- | samsung-ipc/devices/herolte/herolte.c | 33 | ||||
-rw-r--r-- | samsung-ipc/partitions/Makefile.am | 4 | ||||
-rw-r--r-- | samsung-ipc/partitions/toc/toc.c | 44 | ||||
-rw-r--r-- | samsung-ipc/partitions/toc/toc.h | 41 |
6 files changed, 93 insertions, 33 deletions
@@ -80,7 +80,8 @@ libsamsung_ipc_local_src_files := \ samsung-ipc/modems/xmm626/xmm626.c \ samsung-ipc/modems/xmm626/xmm626_hsic.c \ samsung-ipc/modems/xmm626/xmm626_kernel_smdk4412.c \ - samsung-ipc/modems/xmm626/xmm626_mipi.c + samsung-ipc/modems/xmm626/xmm626_mipi.c \ + samsung-ipc/partitions/toc/toc.c libsamsung_ipc_local_export_headers := \ include/call.h \ diff --git a/samsung-ipc/Makefile.am b/samsung-ipc/Makefile.am index cd3fcf4..ed6331f 100644 --- a/samsung-ipc/Makefile.am +++ b/samsung-ipc/Makefile.am @@ -32,6 +32,7 @@ libsamsung_ipc_la_SOURCES = \ include devices/Makefile.am include modems/Makefile.am +include partitions/Makefile.am libsamsung_ipc_la_LIBADD = \ $(OPENSSL_LIBS) \ diff --git a/samsung-ipc/devices/herolte/herolte.c b/samsung-ipc/devices/herolte/herolte.c index 509c3b1..c02557f 100644 --- a/samsung-ipc/devices/herolte/herolte.c +++ b/samsung-ipc/devices/herolte/herolte.c @@ -35,15 +35,7 @@ #include "modems/xmm626/xmm626.h" #include "modems/xmm626/xmm626_kernel_smdk4412.h" #include "modems/xmm626/xmm626_modem_prj.h" - -struct __attribute__((__packed__)) firmware_toc_entry { - char name[12]; - uint32_t offset; /* offset within firmware file/partition */ - uint32_t loadaddr; /* target memory address for this blob */ - uint32_t size; /* size of this blob in bytes */ - uint32_t crc; - uint32_t entryid; -}; +#include "partitions/toc/toc.h" struct __attribute__((__packed__)) security_req { uint32_t mode; @@ -63,29 +55,6 @@ struct __attribute__((__packed__)) modem_firmware_partition_data { #define IOCTL_SECURITY_REQ _IO('o', 0x53) -#define N_TOC_ENTRIES (512 / sizeof(struct firmware_toc_entry)) - -static struct firmware_toc_entry const *find_toc_entry( - char const *name, - struct firmware_toc_entry const *toc) -{ - unsigned int index; - - /* We don't know all the details of the TOC format yet; for now, we - * assume two things: - * 1. reading 512 bytes of TOC is enough, and - * 2. the first entry with an empty name field ends the list. - */ - for (index = 0; index < N_TOC_ENTRIES; index++) { - if (toc[index].name[0] == '\0') - break; - if (strncmp(toc[index].name, name, - sizeof(toc[index].name)) == 0) - return &toc[index]; - } - return NULL; -} - #define MAX_CHUNK_LEN (62 * 1024) /* This is just what cbd uses. * Perhaps a larger value would also work. */ diff --git a/samsung-ipc/partitions/Makefile.am b/samsung-ipc/partitions/Makefile.am new file mode 100644 index 0000000..c3c6197 --- /dev/null +++ b/samsung-ipc/partitions/Makefile.am @@ -0,0 +1,4 @@ +libsamsung_ipc_la_SOURCES += \ + partitions/toc/toc.c \ + partitions/toc/toc.h \ + $(NULL) diff --git a/samsung-ipc/partitions/toc/toc.c b/samsung-ipc/partitions/toc/toc.c new file mode 100644 index 0000000..ec62ea9 --- /dev/null +++ b/samsung-ipc/partitions/toc/toc.c @@ -0,0 +1,44 @@ +/* + * This file is part of libsamsung-ipc. + * + * Copyright (C) 2020 Tony Garnock-Jones <tonyg@leastfixedpoint.com> + * + * 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 <stddef.h> +#include <string.h> + +#include "toc.h" + +struct firmware_toc_entry const *find_toc_entry( + char const *name, + struct firmware_toc_entry const *toc) +{ + unsigned int index; + + /* We don't know all the details of the TOC format yet; for now, we + * assume two things: + * 1. reading 512 bytes of TOC is enough, and + * 2. the first entry with an empty name field ends the list. + */ + for (index = 0; index < N_TOC_ENTRIES; index++) { + if (toc[index].name[0] == '\0') + break; + if (strncmp(toc[index].name, name, + sizeof(toc[index].name)) == 0) + return &toc[index]; + } + return NULL; +} diff --git a/samsung-ipc/partitions/toc/toc.h b/samsung-ipc/partitions/toc/toc.h new file mode 100644 index 0000000..416a45f --- /dev/null +++ b/samsung-ipc/partitions/toc/toc.h @@ -0,0 +1,41 @@ +/* + * This file is part of libsamsung-ipc. + * + * Copyright (C) 2020 Tony Garnock-Jones <tonyg@leastfixedpoint.com> + * Copyright (C) 2021 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/>. + */ + +#ifndef __TOC_PARTITION_TABLE_H__ +#define __TOC_PARTITION_TABLE_H__ + +#include <stdint.h> + +struct __attribute__((__packed__)) firmware_toc_entry { + char name[12]; + uint32_t offset; /* offset within firmware file/partition */ + uint32_t loadaddr; /* target memory address for this blob */ + uint32_t size; /* size of this blob in bytes */ + uint32_t crc; + uint32_t entryid; +}; + +#define N_TOC_ENTRIES (512 / sizeof(struct firmware_toc_entry)) + +struct firmware_toc_entry const *find_toc_entry( + char const *name, + struct firmware_toc_entry const *toc); + +#endif /* __TOC_PARTITION_TABLE_H__ */ |