diff options
Diffstat (limited to 'samsung-ipc/devices/xmm6260')
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260.c | 10 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260.h | 4 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_hsic.c | 91 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_hsic.h | 10 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_mipi.c | 130 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_mipi.h | 12 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_sec_modem.c | 130 | ||||
-rw-r--r-- | samsung-ipc/devices/xmm6260/xmm6260_sec_modem.h | 32 |
8 files changed, 209 insertions, 210 deletions
diff --git a/samsung-ipc/devices/xmm6260/xmm6260.c b/samsung-ipc/devices/xmm6260/xmm6260.c index 416f6c2..2711caf 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260.c +++ b/samsung-ipc/devices/xmm6260/xmm6260.c @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -23,18 +23,18 @@ #include "xmm6260.h" -unsigned char xmm6260_crc_calculate(void *buffer, int length) +unsigned char xmm6260_crc_calculate(const void *data, size_t size) { unsigned char crc; unsigned char *p; - if (buffer == NULL || length <= 0) + if (data == NULL || size == 0) return 0; - p = (unsigned char *) buffer; + p = (unsigned char *) data; crc = 0; - while (length--) + while (size--) crc ^= *p++; return crc; diff --git a/samsung-ipc/devices/xmm6260/xmm6260.h b/samsung-ipc/devices/xmm6260/xmm6260.h index c116ede..bc55a44 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260.h +++ b/samsung-ipc/devices/xmm6260/xmm6260.h @@ -1,7 +1,7 @@ /* * This file is part of libsamsung-ipc. * - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -46,7 +46,7 @@ #define XMM6260_NV_DATA_SIZE 0x200000 #define XMM6260_NV_DATA_CHUNK_SIZE 0x1000 -unsigned char xmm6260_crc_calculate(void *buffer, int length); +unsigned char xmm6260_crc_calculate(const void *data, size_t size); #endif diff --git a/samsung-ipc/devices/xmm6260/xmm6260_hsic.c b/samsung-ipc/devices/xmm6260/xmm6260_hsic.c index 747ebd1..24b6567 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_hsic.c +++ b/samsung-ipc/devices/xmm6260/xmm6260_hsic.c @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * Based on the incomplete C++ implementation which is: * Copyright (C) 2012 Sergey Gridasov <grindars@gmail.com> @@ -37,7 +37,6 @@ int xmm6260_hsic_ack_read(int device_fd, unsigned short ack) { struct timeval timeout; fd_set fds; - unsigned short value; int rc; int i; @@ -66,20 +65,18 @@ int xmm6260_hsic_ack_read(int device_fd, unsigned short ack) } int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, - void *psi_data, unsigned short psi_size) + const void *psi_data, unsigned short psi_size) { struct xmm6260_hsic_psi_header psi_header; char at[] = XMM6260_AT; unsigned char psi_ack; unsigned char chip_id; unsigned char psi_crc; - struct timeval timeout; fd_set fds; - int wc; - + size_t wc; + size_t length; unsigned char *p; - int length; int rc; int i; @@ -98,7 +95,7 @@ int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, timeout.tv_usec = 100000; rc = write(device_fd, at, length); - if (rc < length) { + if (rc < (int) length) { ipc_client_log(client, "Writing ATAT in ASCII failed"); goto error; } @@ -129,7 +126,7 @@ int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, psi_ack = 0; rc = read(device_fd, &psi_ack, sizeof(psi_ack)); - if (rc < 0 || psi_ack != XMM6260_HSIC_BOOT0_ACK) { + if (rc <= 0 || psi_ack != XMM6260_HSIC_BOOT0_ACK) { ipc_client_log(client, "Reading boot ACK failed"); goto error; } @@ -142,7 +139,7 @@ int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, chip_id = 0; rc = read(device_fd, &chip_id, sizeof(chip_id)); - if (rc < 0) { + if (rc <= 0) { ipc_client_log(client, "Reading chip id failed"); goto error; } @@ -164,7 +161,7 @@ int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, wc = 0; while (wc < psi_size) { rc = write(device_fd, (void *) p, psi_size - wc); - if (rc < 0) { + if (rc <= 0) { ipc_client_log(client, "Writing PSI failed"); goto error; } @@ -234,25 +231,23 @@ complete: } int xmm6260_hsic_ebl_send(struct ipc_client *client, int device_fd, - void *ebl_data, int ebl_size) + const void *ebl_data, size_t ebl_size) { unsigned char ebl_crc; - - int chunk; - int count; - int wc; - + size_t chunk; + size_t count; + size_t wc; + size_t size; unsigned char *p; - int length; int rc; - if (client == NULL || device_fd < 0 || ebl_data == NULL || ebl_size <= 0) + if (client == NULL || device_fd < 0 || ebl_data == NULL || ebl_size == 0) return -1; - length = sizeof(ebl_size); + size = sizeof(ebl_size); - rc = write(device_fd, &ebl_size, length); - if (rc < length) { + rc = write(device_fd, &ebl_size, size); + if (rc < (int) size) { ipc_client_log(client, "Writing EBL size failed"); goto error; } @@ -272,7 +267,7 @@ int xmm6260_hsic_ebl_send(struct ipc_client *client, int device_fd, count = chunk < ebl_size - wc ? chunk : ebl_size - wc; rc = write(device_fd, (void *) p, count); - if (rc < 0) { + if (rc <= 0) { ipc_client_log(client, "Writing EBL failed"); goto error; } @@ -309,20 +304,18 @@ complete: } int xmm6260_hsic_command_send(int device_fd, unsigned short code, - void *data, int size, int command_data_size, int ack) + const void *data, size_t size, size_t command_data_size, int ack) { struct xmm6260_hsic_command_header header; void *buffer = NULL; - int length; - + size_t length; struct timeval timeout; fd_set fds; - unsigned char *p; int rc; int i; - if (device_fd < 0 || data == NULL || size <= 0 || command_data_size < size) + if (device_fd < 0 || data == NULL || size == 0 || command_data_size == 0 || command_data_size < size) return -1; header.checksum = (size & 0xffff) + code; @@ -331,11 +324,11 @@ int xmm6260_hsic_command_send(int device_fd, unsigned short code, p = (unsigned char *) data; - for (i = 0; i < size; i++) + for (i = 0; i < (int) size; i++) header.checksum += *p++; length = command_data_size + sizeof(header); - buffer = malloc(length); + buffer = calloc(1, length); memset(buffer, 0, length); p = (unsigned char *) buffer; @@ -344,7 +337,7 @@ int xmm6260_hsic_command_send(int device_fd, unsigned short code, memcpy(p, data, size); rc = write(device_fd, buffer, length); - if (rc < length) + if (rc < (int) length) goto error; if (!ack) { @@ -373,7 +366,7 @@ int xmm6260_hsic_command_send(int device_fd, unsigned short code, goto error; rc = read(device_fd, buffer, command_data_size); - if (rc < command_data_size) + if (rc < (int) command_data_size) goto error; if (header.code != code) @@ -392,16 +385,16 @@ complete: return rc; } -int xmm6260_hsic_modem_data_send(int device_fd, void *data, int size, int address) +int xmm6260_hsic_modem_data_send(int device_fd, const void *data, size_t size, + int address) { - int chunk; - int count; - int c; - + size_t chunk; + size_t count; + size_t c; unsigned char *p; int rc; - if (device_fd < 0 || data == NULL || size <= 0) + if (device_fd < 0 || data == NULL || size == 0) return -1; rc = xmm6260_hsic_command_send(device_fd, XMM6260_COMMAND_FLASH_SET_ADDRESS, &address, sizeof(address), XMM6260_HSIC_FLASH_SET_ADDRESS_SIZE, 1); @@ -436,11 +429,9 @@ complete: int xmm6260_hsic_port_config_send(struct ipc_client *client, int device_fd) { void *buffer = NULL; - int length; - + size_t length; struct timeval timeout; fd_set fds; - int rc; if (client == NULL || device_fd < 0) @@ -457,14 +448,14 @@ int xmm6260_hsic_port_config_send(struct ipc_client *client, int device_fd) goto error; length = XMM6260_HSIC_PORT_CONFIG_SIZE; - buffer = malloc(length); + buffer = calloc(1, length); rc = select(device_fd + 1, &fds, NULL, NULL, &timeout); if (rc <= 0) goto error; rc = read(device_fd, buffer, length); - if (rc < length) { + if (rc < (int) length) { ipc_client_log(client, "Reading port config failed"); goto error; } @@ -490,11 +481,11 @@ complete: } int xmm6260_hsic_sec_start_send(struct ipc_client *client, int device_fd, - void *sec_data, int sec_size) + const void *sec_data, size_t sec_size) { int rc; - if (client == NULL || device_fd < 0 || sec_data == NULL || sec_size <= 0) + if (client == NULL || device_fd < 0 || sec_data == NULL || sec_size == 0) return -1; rc = xmm6260_hsic_command_send(device_fd, XMM6260_COMMAND_SEC_START, sec_data, sec_size, XMM6260_HSIC_SEC_START_SIZE, 1); @@ -507,7 +498,7 @@ int xmm6260_hsic_sec_start_send(struct ipc_client *client, int device_fd, int xmm6260_hsic_sec_end_send(struct ipc_client *client, int device_fd) { unsigned short sec_data; - int sec_size; + size_t sec_size; int rc; if (client == NULL || device_fd < 0) @@ -524,11 +515,11 @@ int xmm6260_hsic_sec_end_send(struct ipc_client *client, int device_fd) } int xmm6260_hsic_firmware_send(struct ipc_client *client, int device_fd, - void *firmware_data, int firmware_size) + const void *firmware_data, size_t firmware_size) { int rc; - if (client == NULL || device_fd < 0 || firmware_data == NULL || firmware_size <= 0) + if (client == NULL || device_fd < 0 || firmware_data == NULL || firmware_size == 0) return -1; rc = xmm6260_hsic_modem_data_send(device_fd, firmware_data, firmware_size, XMM6260_FIRMWARE_ADDRESS); @@ -541,13 +532,15 @@ int xmm6260_hsic_firmware_send(struct ipc_client *client, int device_fd, int xmm6260_hsic_nv_data_send(struct ipc_client *client, int device_fd) { void *nv_data = NULL; - int nv_size; + size_t nv_size; int rc; if (client == NULL || device_fd < 0) return -1; nv_size = ipc_client_nv_data_size(client); + if (nv_size == 0) + return -1; nv_data = ipc_nv_data_load(client); if (nv_data == NULL) { diff --git a/samsung-ipc/devices/xmm6260/xmm6260_hsic.h b/samsung-ipc/devices/xmm6260/xmm6260_hsic.h index 4e25bce..1728a4c 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_hsic.h +++ b/samsung-ipc/devices/xmm6260/xmm6260_hsic.h @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -51,16 +51,16 @@ struct xmm6260_hsic_command_header { } __attribute__((packed)); int xmm6260_hsic_psi_send(struct ipc_client *client, int device_fd, - void *psi_data, unsigned short psi_size); + const void *psi_data, unsigned short psi_size); int xmm6260_hsic_ebl_send(struct ipc_client *client, int device_fd, - void *ebl_data, int ebl_size); + const void *ebl_data, size_t ebl_size); int xmm6260_hsic_port_config_send(struct ipc_client *client, int device_fd); int xmm6260_hsic_sec_start_send(struct ipc_client *client, int device_fd, - void *sec_data, int sec_size); + const void *sec_data, size_t sec_size); int xmm6260_hsic_sec_end_send(struct ipc_client *client, int device_fd); int xmm6260_hsic_firmware_send(struct ipc_client *client, int device_fd, - void *firmware_data, int firmware_size); + const void *firmware_data, size_t firmware_size); int xmm6260_hsic_nv_data_send(struct ipc_client *client, int device_fd); int xmm6260_hsic_hw_reset_send(struct ipc_client *client, int device_fd); diff --git a/samsung-ipc/devices/xmm6260/xmm6260_mipi.c b/samsung-ipc/devices/xmm6260/xmm6260_mipi.c index a14fd20..dd2a560 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_mipi.c +++ b/samsung-ipc/devices/xmm6260/xmm6260_mipi.c @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * Based on the incomplete C++ implementation which is: * Copyright (C) 2012 Sergey Gridasov <grindars@gmail.com> @@ -33,12 +33,12 @@ #include "xmm6260.h" #include "xmm6260_mipi.h" -int xmm6260_mipi_crc_calculate(void *buffer, int length) +int xmm6260_mipi_crc_calculate(const void *data, size_t size) { unsigned char crc; int mipi_crc; - crc = xmm6260_crc_calculate(buffer, length); + crc = xmm6260_crc_calculate(data, size); mipi_crc = (crc << 24) | 0xffffff; return mipi_crc; @@ -48,7 +48,6 @@ int xmm6260_mipi_ack_read(int device_fd, unsigned short ack) { struct timeval timeout; fd_set fds; - unsigned int value; int rc; int i; @@ -77,18 +76,16 @@ int xmm6260_mipi_ack_read(int device_fd, unsigned short ack) } int xmm6260_mipi_psi_send(struct ipc_client *client, int device_fd, - void *psi_data, unsigned short psi_size) + const void *psi_data, unsigned short psi_size) { struct xmm6260_mipi_psi_header psi_header; char at[] = XMM6260_AT; int psi_crc; - struct timeval timeout; fd_set fds; - int wc; - + size_t wc; + size_t length; unsigned char *p; - int length; int rc; int i; @@ -107,7 +104,7 @@ int xmm6260_mipi_psi_send(struct ipc_client *client, int device_fd, timeout.tv_usec = 100000; rc = write(device_fd, at, length); - if (rc < length) { + if (rc < (int) length) { ipc_client_log(client, "Writing ATAT in ASCII failed"); goto error; } @@ -147,7 +144,7 @@ int xmm6260_mipi_psi_send(struct ipc_client *client, int device_fd, wc = 0; while (wc < psi_size) { rc = write(device_fd, (void *) p, psi_size - wc); - if (rc < 0) { + if (rc <= 0) { ipc_client_log(client, "Writing PSI failed"); goto error; } @@ -184,20 +181,19 @@ complete: } int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, - void *ebl_data, int ebl_size) + const void *ebl_data, size_t ebl_size) { unsigned short boot_magic[4]; unsigned char ebl_crc; - - int chunk; - int count; - int wc; - + size_t chunk; + size_t count; + size_t wc; + size_t size; + size_t length; unsigned char *p; - int length; int rc; - if (client == NULL || device_fd < 0 || ebl_data == NULL || ebl_size <= 0) + if (client == NULL || device_fd < 0 || ebl_data == NULL || ebl_size == 0) return -1; boot_magic[0] = 0; @@ -214,7 +210,7 @@ int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, } rc = write(device_fd, &boot_magic, length); - if (rc < length) { + if (rc < (int) length) { ipc_client_log(client, "Writing boot magic failed"); goto error; } @@ -226,16 +222,16 @@ int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, goto error; } - length = sizeof(ebl_size); + size = sizeof(ebl_size); - rc = write(device_fd, &length, sizeof(length)); - if (rc < (int) sizeof(length)) { + rc = write(device_fd, &size, sizeof(size)); + if (rc < (int) sizeof(size)) { ipc_client_log(client, "Writing EBL size length failed"); goto error; } - rc = write(device_fd, &ebl_size, length); - if (rc < length) { + rc = write(device_fd, &ebl_size, size); + if (rc < (int) size) { ipc_client_log(client, "Writing EBL size failed"); goto error; } @@ -249,8 +245,8 @@ int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, ebl_size++; - rc = write(device_fd, &ebl_size, length); - if (rc < length) { + rc = write(device_fd, &ebl_size, size); + if (rc < (int) size) { ipc_client_log(client, "Writing EBL size failed"); goto error; } @@ -265,7 +261,7 @@ int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, count = chunk < ebl_size - wc ? chunk : ebl_size - wc; rc = write(device_fd, (void *) p, count); - if (rc < 0) { + if (rc <= 0) { ipc_client_log(client, "Writing EBL failed"); goto error; } @@ -302,19 +298,17 @@ complete: } int xmm6260_mipi_command_send(int device_fd, unsigned short code, - void *data, int size, int ack, int short_footer) + const void *data, size_t size, int ack, int short_footer) { struct xmm6260_mipi_command_header header; struct xmm6260_mipi_command_footer footer; - int footer_size; void *buffer = NULL; - int length; - + size_t length; + size_t footer_length; struct timeval timeout; fd_set fds; - int chunk; - int c; - + size_t chunk; + size_t c; unsigned char *p; int rc; int i; @@ -333,25 +327,25 @@ int xmm6260_mipi_command_send(int device_fd, unsigned short code, p = (unsigned char *) data; - for (i = 0; i < size; i++) + for (i = 0; i < (int) size; i++) footer.checksum += *p++; - footer_size = sizeof(footer); + footer_length = sizeof(footer); if (short_footer) - footer_size -= sizeof(short); + footer_length -= sizeof(short); - length = sizeof(header) + size + footer_size; - buffer = malloc(length); + length = sizeof(header) + size + footer_length; + buffer = calloc(1, length); p = (unsigned char *) buffer; memcpy(p, &header, sizeof(header)); p += sizeof(header); memcpy(p, data, size); p += size; - memcpy(p, &footer, footer_size); + memcpy(p, &footer, footer_length); rc = write(device_fd, buffer, length); - if (rc < length) + if (rc < (int) length) goto error; free(buffer); @@ -383,7 +377,7 @@ int xmm6260_mipi_command_send(int device_fd, unsigned short code, if (length < (int) sizeof(buffer)) goto error; - buffer = malloc(length); + buffer = calloc(1, length); p = (unsigned char *) buffer; memcpy(p, &length, sizeof(length)); @@ -397,7 +391,7 @@ int xmm6260_mipi_command_send(int device_fd, unsigned short code, goto error; rc = read(device_fd, (void *) p, chunk); - if (rc < chunk) + if (rc < (int) chunk) goto error; p += rc; @@ -421,16 +415,16 @@ complete: return rc; } -int xmm6260_mipi_modem_data_send(int device_fd, void *data, int size, int address) +int xmm6260_mipi_modem_data_send(int device_fd, const void *data, size_t size, + int address) { - int chunk; - int count; - int c; - + size_t chunk; + size_t count; + size_t c; unsigned char *p; int rc; - if (device_fd < 0 || data == NULL || size <= 0) + if (device_fd < 0 || data == NULL || size == 0) return -1; rc = xmm6260_mipi_command_send(device_fd, XMM6260_COMMAND_FLASH_SET_ADDRESS, &address, sizeof(address), 1, 0); @@ -465,14 +459,12 @@ complete: int xmm6260_mipi_port_config_send(struct ipc_client *client, int device_fd) { void *buffer = NULL; - int length; - + size_t length; struct timeval timeout; fd_set fds; - int chunk; - int count; - int c; - + size_t chunk; + size_t count; + size_t c; unsigned char *p; int rc; @@ -490,13 +482,13 @@ int xmm6260_mipi_port_config_send(struct ipc_client *client, int device_fd) goto error; rc = read(device_fd, &length, sizeof(length)); - if (rc < (int) sizeof(length) || length <= 0) { + if (rc < (int) sizeof(length) || length == 0) { ipc_client_log(client, "Reading port config length failed"); goto error; } ipc_client_log(client, "Read port config length (0x%x)", length); - buffer = malloc(length); + buffer = calloc(1, length); p = (unsigned char *) buffer; @@ -510,7 +502,7 @@ int xmm6260_mipi_port_config_send(struct ipc_client *client, int device_fd) goto error; rc = read(device_fd, p, count); - if (rc < count) { + if (rc < (int) count) { ipc_client_log(client, "Reading port config failed"); goto error; } @@ -540,11 +532,11 @@ complete: } int xmm6260_mipi_sec_start_send(struct ipc_client *client, int device_fd, - void *sec_data, int sec_size) + const void *sec_data, size_t sec_size) { int rc; - if (client == NULL || device_fd < 0 || sec_data == NULL || sec_size <= 0) + if (client == NULL || device_fd < 0 || sec_data == NULL || sec_size == 0) return -1; rc = xmm6260_mipi_command_send(device_fd, XMM6260_COMMAND_SEC_START, sec_data, sec_size, 1, 0); @@ -557,7 +549,7 @@ int xmm6260_mipi_sec_start_send(struct ipc_client *client, int device_fd, int xmm6260_mipi_sec_end_send(struct ipc_client *client, int device_fd) { unsigned short sec_data; - int sec_size; + size_t sec_size; int rc; if (client == NULL || device_fd < 0) @@ -574,11 +566,11 @@ int xmm6260_mipi_sec_end_send(struct ipc_client *client, int device_fd) } int xmm6260_mipi_firmware_send(struct ipc_client *client, int device_fd, - void *firmware_data, int firmware_size) + const void *firmware_data, size_t firmware_size) { int rc; - if (client == NULL || device_fd < 0 || firmware_data == NULL || firmware_size <= 0) + if (client == NULL || device_fd < 0 || firmware_data == NULL || firmware_size == 0) return -1; rc = xmm6260_mipi_modem_data_send(device_fd, firmware_data, firmware_size, XMM6260_FIRMWARE_ADDRESS); @@ -591,13 +583,15 @@ int xmm6260_mipi_firmware_send(struct ipc_client *client, int device_fd, int xmm6260_mipi_nv_data_send(struct ipc_client *client, int device_fd) { void *nv_data = NULL; - int nv_size; + size_t nv_size; int rc; if (client == NULL || device_fd < 0) return -1; nv_size = ipc_client_nv_data_size(client); + if (nv_size == 0) + return -1; nv_data = ipc_nv_data_load(client); if (nv_data == NULL) { @@ -624,11 +618,11 @@ complete: } int xmm6260_mipi_mps_data_send(struct ipc_client *client, int device_fd, - void *mps_data, int mps_size) + const void *mps_data, size_t mps_size) { int rc; - if (client == NULL || device_fd < 0 || mps_data == NULL || mps_size <= 0) + if (client == NULL || device_fd < 0 || mps_data == NULL || mps_size == 0) return -1; rc = xmm6260_mipi_modem_data_send(device_fd, mps_data, mps_size, XMM6260_MPS_DATA_ADDRESS); @@ -641,7 +635,7 @@ int xmm6260_mipi_mps_data_send(struct ipc_client *client, int device_fd, int xmm6260_mipi_hw_reset_send(struct ipc_client *client, int device_fd) { unsigned int hw_reset_data; - int hw_reset_size; + size_t hw_reset_size; int rc; if (client == NULL || device_fd < 0) diff --git a/samsung-ipc/devices/xmm6260/xmm6260_mipi.h b/samsung-ipc/devices/xmm6260/xmm6260_mipi.h index 4c9d7d2..4744369 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_mipi.h +++ b/samsung-ipc/devices/xmm6260/xmm6260_mipi.h @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -53,19 +53,19 @@ struct xmm6260_mipi_command_footer { } __attribute__((packed)); int xmm6260_mipi_psi_send(struct ipc_client *client, int device_fd, - void *psi_data, unsigned short psi_size); + const void *psi_data, unsigned short psi_size); int xmm6260_mipi_ebl_send(struct ipc_client *client, int device_fd, - void *ebl_data, int ebl_size); + const void *ebl_data, size_t ebl_size); int xmm6260_mipi_port_config_send(struct ipc_client *client, int device_fd); int xmm6260_mipi_sec_start_send(struct ipc_client *client, int device_fd, - void *sec_data, int sec_size); + const void *sec_data, size_t sec_size); int xmm6260_mipi_sec_end_send(struct ipc_client *client, int device_fd); int xmm6260_mipi_firmware_send(struct ipc_client *client, int device_fd, - void *firmware_data, int firmware_size); + const void *firmware_data, size_t firmware_size); int xmm6260_mipi_nv_data_send(struct ipc_client *client, int device_fd); int xmm6260_mipi_mps_data_send(struct ipc_client *client, int device_fd, - void *mps_data, int mps_size); + const void *mps_data, size_t mps_size); int xmm6260_mipi_hw_reset_send(struct ipc_client *client, int device_fd); #endif diff --git a/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.c b/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.c index e7b89b3..06731a7 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.c +++ b/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.c @@ -2,7 +2,7 @@ * This file is part of libsamsung-ipc. * * Copyright (C) 2012 Alexander Tarasikov <alexander.tarasikov@gmail.com> - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -171,34 +171,37 @@ int xmm6260_sec_modem_link_get_hostwake_wait(int device_fd) return -1; } -int xmm6260_sec_modem_ipc_fmt_send(struct ipc_client *client, struct ipc_message_info *request) +int xmm6260_sec_modem_fmt_send(struct ipc_client *client, + struct ipc_message *message) { struct ipc_fmt_header header; void *buffer; + size_t length; + size_t count; unsigned char *p; - int count; int rc; - if (client == NULL || client->handlers == NULL || client->handlers->write == NULL || request == NULL) + if (client == NULL || client->handlers == NULL || client->handlers->write == NULL || message == NULL) return -1; - ipc_fmt_header_fill(&header, request); + ipc_fmt_header_setup(&header, message); - buffer = malloc(header.length); + length = header.length; + buffer = calloc(1, length); memcpy(buffer, &header, sizeof(struct ipc_fmt_header)); - if (request->data != NULL && request->length > 0) - memcpy((void *) ((unsigned char *) buffer + sizeof(struct ipc_fmt_header)), request->data, request->length); + if (message->data != NULL && message->size > 0) + memcpy((void *) ((unsigned char *) buffer + sizeof(struct ipc_fmt_header)), message->data, message->size); - ipc_client_log_send(client, request, __func__); + ipc_client_log_send(client, message, __func__); p = (unsigned char *) buffer; count = 0; - while (count < header.length) { - rc = client->handlers->write(client->handlers->transport_data, p, header.length - count); + while (count < length) { + rc = client->handlers->write(client->handlers->transport_data, p, length - count); if (rc <= 0) { - ipc_client_log(client, "Writing FMT data to the modem failed"); + ipc_client_log(client, "Writing FMT data failed"); goto error; } @@ -219,36 +222,37 @@ complete: return rc; } -int xmm6260_sec_modem_ipc_fmt_recv(struct ipc_client *client, struct ipc_message_info *response) +int xmm6260_sec_modem_fmt_recv(struct ipc_client *client, + struct ipc_message *message) { struct ipc_fmt_header *header; void *buffer = NULL; + size_t length; + size_t count; unsigned char *p; - int length; - int count; int rc; - if (client == NULL || client->handlers == NULL || client->handlers->read == NULL || response == NULL) + if (client == NULL || client->handlers == NULL || client->handlers->read == NULL || message == NULL) return -1; length = XMM6260_DATA_SIZE; - buffer = malloc(length); + buffer = calloc(1, length); rc = client->handlers->read(client->handlers->transport_data, buffer, length); if (rc < (int) sizeof(struct ipc_fmt_header)) { - ipc_client_log(client, "Reading FMT header from the modem failed"); + ipc_client_log(client, "Reading FMT header failed"); goto error; } header = (struct ipc_fmt_header *) buffer; - ipc_fmt_message_fill(header, response); + ipc_fmt_message_setup(header, message); if (header->length > sizeof(struct ipc_fmt_header)) { - response->length = header->length - sizeof(struct ipc_fmt_header); - response->data = malloc(response->length); + message->size = header->length - sizeof(struct ipc_fmt_header); + message->data = calloc(1, message->size); - p = (unsigned char *) response->data; + p = (unsigned char *) message->data; count = rc - sizeof(struct ipc_fmt_header); if (count > 0) { @@ -256,10 +260,10 @@ int xmm6260_sec_modem_ipc_fmt_recv(struct ipc_client *client, struct ipc_message p += count; } - while (count < (int) response->length) { - rc = client->handlers->read(client->handlers->transport_data, p, response->length - count); + while (count < message->size) { + rc = client->handlers->read(client->handlers->transport_data, p, message->size - count); if (rc <= 0) { - ipc_client_log(client, "Reading FMT data from the modem failed"); + ipc_client_log(client, "Reading FMT data failed"); goto error; } @@ -268,7 +272,7 @@ int xmm6260_sec_modem_ipc_fmt_recv(struct ipc_client *client, struct ipc_message } } - ipc_client_log_recv(client, response, __func__); + ipc_client_log_recv(client, message, __func__); rc = 0; goto complete; @@ -283,35 +287,37 @@ complete: return rc; } -int xmm6260_sec_modem_ipc_rfs_send(struct ipc_client *client, struct ipc_message_info *request) +int xmm6260_sec_modem_rfs_send(struct ipc_client *client, + struct ipc_message *message) { struct ipc_rfs_header header; void *buffer; + size_t length; + size_t count; unsigned char *p; - int count; int rc; - - if (client == NULL || client->handlers == NULL || client->handlers->write == NULL || request == NULL) + if (client == NULL || client->handlers == NULL || client->handlers->write == NULL || message == NULL) return -1; - ipc_rfs_header_fill(&header, request); + ipc_rfs_header_setup(&header, message); - buffer = malloc(header.length); + length = header.length; + buffer = calloc(1, length); memcpy(buffer, &header, sizeof(struct ipc_rfs_header)); - if (request->data != NULL && request->length > 0) - memcpy((void *) ((unsigned char *) buffer + sizeof(struct ipc_rfs_header)), request->data, request->length); + if (message->data != NULL && message->size > 0) + memcpy((void *) ((unsigned char *) buffer + sizeof(struct ipc_rfs_header)), message->data, message->size); - ipc_client_log_send(client, request, __func__); + ipc_client_log_send(client, message, __func__); p = (unsigned char *) buffer; count = 0; - while (count < (int) header.length) { - rc = client->handlers->write(client->handlers->transport_data, p, header.length - count); + while (count < length) { + rc = client->handlers->write(client->handlers->transport_data, p, length - count); if (rc <= 0) { - ipc_client_log(client, "Writing RFS data to the modem failed"); + ipc_client_log(client, "Writing RFS data failed"); goto error; } @@ -332,36 +338,37 @@ complete: return rc; } -int xmm6260_sec_modem_ipc_rfs_recv(struct ipc_client *client, struct ipc_message_info *response) +int xmm6260_sec_modem_rfs_recv(struct ipc_client *client, + struct ipc_message *message) { struct ipc_rfs_header *header; void *buffer = NULL; + size_t length; + size_t count; unsigned char *p; - int length; - int count; int rc; - if (client == NULL || client->handlers == NULL || client->handlers->read == NULL || response == NULL) + if (client == NULL || client->handlers == NULL || client->handlers->read == NULL || message == NULL) return -1; length = XMM6260_DATA_SIZE; - buffer = malloc(length); + buffer = calloc(1, length); rc = client->handlers->read(client->handlers->transport_data, buffer, length); if (rc < (int) sizeof(struct ipc_rfs_header)) { - ipc_client_log(client, "Reading RFS header from the modem failed"); + ipc_client_log(client, "Reading RFS header failed"); goto error; } header = (struct ipc_rfs_header *) buffer; - ipc_rfs_message_fill(header, response); + ipc_rfs_message_setup(header, message); if (header->length > sizeof(struct ipc_rfs_header)) { - response->length = header->length - sizeof(struct ipc_rfs_header); - response->data = malloc(response->length); + message->size = header->length - sizeof(struct ipc_rfs_header); + message->data = calloc(1, message->size); - p = (unsigned char *) response->data; + p = (unsigned char *) message->data; count = rc - sizeof(struct ipc_rfs_header); if (count > 0) { @@ -369,10 +376,10 @@ int xmm6260_sec_modem_ipc_rfs_recv(struct ipc_client *client, struct ipc_message p += count; } - while (count < (int) response->length) { - rc = client->handlers->read(client->handlers->transport_data, p, response->length - count); + while (count < message->size) { + rc = client->handlers->read(client->handlers->transport_data, p, message->size - count); if (rc <= 0) { - ipc_client_log(client, "Reading RFS data from the modem failed"); + ipc_client_log(client, "Reading RFS data failed"); goto error; } @@ -381,7 +388,7 @@ int xmm6260_sec_modem_ipc_rfs_recv(struct ipc_client *client, struct ipc_message } } - ipc_client_log_recv(client, response, __func__); + ipc_client_log_recv(client, message, __func__); rc = 0; goto complete; @@ -396,7 +403,7 @@ complete: return rc; } -int xmm6260_sec_modem_ipc_open(int type) +int xmm6260_sec_modem_open(int type) { int fd; @@ -414,7 +421,7 @@ int xmm6260_sec_modem_ipc_open(int type) return fd; } -int xmm6260_sec_modem_ipc_close(int fd) +int xmm6260_sec_modem_close(int fd) { if (fd < 0) return -1; @@ -424,7 +431,7 @@ int xmm6260_sec_modem_ipc_close(int fd) return 0; } -int xmm6260_sec_modem_ipc_read(int fd, void *buffer, unsigned int length) +int xmm6260_sec_modem_read(int fd, void *buffer, size_t length) { int rc; @@ -432,10 +439,11 @@ int xmm6260_sec_modem_ipc_read(int fd, void *buffer, unsigned int length) return -1; rc = read(fd, buffer, length); + return rc; } -int xmm6260_sec_modem_ipc_write(int fd, void *buffer, unsigned int length) +int xmm6260_sec_modem_write(int fd, const void *buffer, size_t length) { int rc; @@ -443,10 +451,11 @@ int xmm6260_sec_modem_ipc_write(int fd, void *buffer, unsigned int length) return -1; rc = write(fd, buffer, length); + return rc; } -int xmm6260_sec_modem_ipc_poll(int fd, struct timeval *timeout) +int xmm6260_sec_modem_poll(int fd, struct timeval *timeout) { fd_set fds; int rc; @@ -468,7 +477,7 @@ int xmm6260_sec_modem_ipc_poll(int fd, struct timeval *timeout) return rc; } -char *xmm6260_sec_modem_ipc_gprs_get_iface(int cid) +char *xmm6260_sec_modem_gprs_get_iface(int cid) { char *iface = NULL; @@ -480,13 +489,12 @@ char *xmm6260_sec_modem_ipc_gprs_get_iface(int cid) return iface; } -int xmm6260_sec_modem_ipc_gprs_get_capabilities(struct ipc_client_gprs_capabilities *capabilities) +int xmm6260_sec_modem_gprs_get_capabilities(struct ipc_client_gprs_capabilities *capabilities) { if (capabilities == NULL) return -1; - capabilities->port_list = 0; - capabilities->cid_max = XMM6260_SEC_MODEM_GPRS_IFACE_COUNT; + capabilities->cid_count = XMM6260_SEC_MODEM_GPRS_IFACE_COUNT; return 0; } diff --git a/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.h b/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.h index 8895fbb..d1c6fe6 100644 --- a/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.h +++ b/samsung-ipc/devices/xmm6260/xmm6260_sec_modem.h @@ -1,7 +1,7 @@ /* * This file is part of libsamsung-ipc. * - * Copyright (C) 2013 Paul Kocialkowski <contact@paulk.fr> + * Copyright (C) 2013-2014 Paul Kocialkowski <contact@paulk.fr> * * 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 @@ -40,19 +40,23 @@ int xmm6260_sec_modem_link_control_active(int device_fd, int active); int xmm6260_sec_modem_link_connected_wait(int device_fd); int xmm6260_sec_modem_link_get_hostwake_wait(int device_fd); -int xmm6260_sec_modem_ipc_fmt_send(struct ipc_client *client, struct ipc_message_info *request); -int xmm6260_sec_modem_ipc_fmt_recv(struct ipc_client *client, struct ipc_message_info *response); -int xmm6260_sec_modem_ipc_rfs_send(struct ipc_client *client, struct ipc_message_info *request); -int xmm6260_sec_modem_ipc_rfs_recv(struct ipc_client *client, struct ipc_message_info *response); - -int xmm6260_sec_modem_ipc_open(int type); -int xmm6260_sec_modem_ipc_close(int fd); -int xmm6260_sec_modem_ipc_read(int fd, void *buffer, unsigned int length); -int xmm6260_sec_modem_ipc_write(int fd, void *buffer, unsigned int length); -int xmm6260_sec_modem_ipc_poll(int fd, struct timeval *timeout); - -char *xmm6260_sec_modem_ipc_gprs_get_iface(int cid); -int xmm6260_sec_modem_ipc_gprs_get_capabilities(struct ipc_client_gprs_capabilities *capabilities); +int xmm6260_sec_modem_fmt_send(struct ipc_client *client, + struct ipc_message *message); +int xmm6260_sec_modem_fmt_recv(struct ipc_client *client, + struct ipc_message *message); +int xmm6260_sec_modem_rfs_send(struct ipc_client *client, + struct ipc_message *message); +int xmm6260_sec_modem_rfs_recv(struct ipc_client *client, + struct ipc_message *message); + +int xmm6260_sec_modem_open(int type); +int xmm6260_sec_modem_close(int fd); +int xmm6260_sec_modem_read(int fd, void *buffer, size_t length); +int xmm6260_sec_modem_write(int fd, const void *buffer, size_t length); +int xmm6260_sec_modem_poll(int fd, struct timeval *timeout); + +char *xmm6260_sec_modem_gprs_get_iface(int cid); +int xmm6260_sec_modem_gprs_get_capabilities(struct ipc_client_gprs_capabilities *capabilities); #endif |