diff options
-rw-r--r-- | include/radio.h | 2 | ||||
-rw-r--r-- | samsung-ipc/device/aries/aries_ipc.c | 18 | ||||
-rw-r--r-- | samsung-ipc/device/aries/aries_ipc.h | 3 | ||||
-rw-r--r-- | samsung-ipc/device/crespo/crespo_ipc.c | 4 | ||||
-rw-r--r-- | samsung-ipc/device/crespo/crespo_ipc.h | 2 | ||||
-rw-r--r-- | samsung-ipc/device/xmm6260/xmm6260_ipc.c | 12 | ||||
-rw-r--r-- | samsung-ipc/device/xmm6260/xmm6260_ipc.h | 7 | ||||
-rw-r--r-- | samsung-ipc/ipc.c | 4 | ||||
-rw-r--r-- | samsung-ipc/ipc_private.h | 2 |
9 files changed, 32 insertions, 22 deletions
diff --git a/include/radio.h b/include/radio.h index 1e58d5b..399cdf2 100644 --- a/include/radio.h +++ b/include/radio.h @@ -86,7 +86,7 @@ int ipc_client_power_off(struct ipc_client *client); int ipc_client_gprs_handlers_available(struct ipc_client *client); int ipc_client_gprs_activate(struct ipc_client *client); int ipc_client_gprs_deactivate(struct ipc_client *client); -int ipc_client_gprs_get_iface(struct ipc_client *client, char **iface); +int ipc_client_gprs_get_iface(struct ipc_client *client, char **iface, int cid); int ipc_client_gprs_get_capabilities(struct ipc_client *client, struct ipc_client_gprs_capabilities *cap); int ipc_client_recv(struct ipc_client *client, struct ipc_message_info *response); diff --git a/samsung-ipc/device/aries/aries_ipc.c b/samsung-ipc/device/aries/aries_ipc.c index f49754c..ee61c5f 100644 --- a/samsung-ipc/device/aries/aries_ipc.c +++ b/samsung-ipc/device/aries/aries_ipc.c @@ -831,7 +831,7 @@ int aries_ipc_gprs_deactivate(void *data) return 0; } -int aries_ipc_gprs_get_iface(char **iface) +int aries_ipc_gprs_get_iface(char **iface, int cid) { struct ifreq ifr; int fd; @@ -842,18 +842,20 @@ int aries_ipc_gprs_get_iface(char **iface) fd = socket(AF_PHONET, SOCK_DGRAM, 0); - for(i=0 ; i < 3 ; i++) { - sprintf(ifr.ifr_name, "pdp%d", i); + for(i=GPRS_IFACE_COUNT-1 ; i >= 0 ; i--) { + sprintf(ifr.ifr_name, "%s%d", GPRS_IFACE_PREFIX, i); rc = ioctl(fd, SIOCGIFFLAGS, &ifr); - if(rc >= 0) { - *iface=malloc(strlen(ifr.ifr_name) + 1); - memcpy((void *) *iface, ifr.ifr_name, strlen(ifr.ifr_name) + 1); + if(rc < 0 || ifr.ifr_flags & IFF_UP) { + continue; + } else { + asprintf(iface, "%s%d", GPRS_IFACE_PREFIX, i); return 0; } - } + *iface = NULL; + return -1; } @@ -863,7 +865,7 @@ int aries_ipc_gprs_get_capabilities(struct ipc_client_gprs_capabilities *cap) return -1; cap->port_list = 1; - cap->cid_max = 3; + cap->cid_max = GPRS_IFACE_COUNT; return 0; } diff --git a/samsung-ipc/device/aries/aries_ipc.h b/samsung-ipc/device/aries/aries_ipc.h index 82c7286..7f1420e 100644 --- a/samsung-ipc/device/aries/aries_ipc.h +++ b/samsung-ipc/device/aries/aries_ipc.h @@ -41,6 +41,9 @@ #define MAX_MODEM_DATA_SIZE 0x1000 +#define GPRS_IFACE_PREFIX "pdp" +#define GPRS_IFACE_COUNT 3 + int phonet_iface_ifdown(void); int phonet_iface_ifup(void); diff --git a/samsung-ipc/device/crespo/crespo_ipc.c b/samsung-ipc/device/crespo/crespo_ipc.c index 502da21..561909d 100644 --- a/samsung-ipc/device/crespo/crespo_ipc.c +++ b/samsung-ipc/device/crespo/crespo_ipc.c @@ -585,9 +585,9 @@ int crespo_ipc_power_off(void *io_data) return 0; } -int crespo_ipc_gprs_get_iface(char **iface) +int crespo_ipc_gprs_get_iface(char **iface, int cid) { - asprintf(iface, GPRS_IFACE); + asprintf(iface, "%s%d", GPRS_IFACE_PREFIX, 0); return 0; } diff --git a/samsung-ipc/device/crespo/crespo_ipc.h b/samsung-ipc/device/crespo/crespo_ipc.h index 9f286e9..2cc6ef3 100644 --- a/samsung-ipc/device/crespo/crespo_ipc.h +++ b/samsung-ipc/device/crespo/crespo_ipc.h @@ -28,7 +28,7 @@ #define MAX_MODEM_DATA_SIZE 0x50000 -#define GPRS_IFACE "rmnet0" +#define GPRS_IFACE_PREFIX "rmnet" int wake_lock(char *lock_name, int len); int wake_unlock(char *lock_name, int len); diff --git a/samsung-ipc/device/xmm6260/xmm6260_ipc.c b/samsung-ipc/device/xmm6260/xmm6260_ipc.c index f4de617..4b089c8 100644 --- a/samsung-ipc/device/xmm6260/xmm6260_ipc.c +++ b/samsung-ipc/device/xmm6260/xmm6260_ipc.c @@ -314,10 +314,14 @@ int xmm6260_ipc_power_off(void *io_data) return 0; } -int xmm6260_ipc_gprs_get_iface(char **iface) +int xmm6260_ipc_gprs_get_iface(char **iface, int cid) { - // TODO: depends on CID - asprintf(iface, GPRS_IFACE); + if(cid > GPRS_IFACE_COUNT) { + *iface = NULL; + return -1; + } + + asprintf(iface, "%s%d", GPRS_IFACE_PREFIX, cid - 1); return 0; } @@ -328,7 +332,7 @@ int xmm6260_ipc_gprs_get_capabilities(struct ipc_client_gprs_capabilities *cap) return -1; cap->port_list = 1; - cap->cid_max = 3; + cap->cid_max = GPRS_IFACE_COUNT; return 0; } diff --git a/samsung-ipc/device/xmm6260/xmm6260_ipc.h b/samsung-ipc/device/xmm6260/xmm6260_ipc.h index 14a0cfb..5850991 100644 --- a/samsung-ipc/device/xmm6260/xmm6260_ipc.h +++ b/samsung-ipc/device/xmm6260/xmm6260_ipc.h @@ -26,8 +26,9 @@ #ifndef __XMM6260_IPC_H__ #define __XMM6260_IPC_H__ -#define IPC_MAX_XFER 4096 -#define GPRS_IFACE "rmnet0" +#define IPC_MAX_XFER 4096 +#define GPRS_IFACE_PREFIX "rmnet" +#define GPRS_IFACE_COUNT 3 struct rfs_hdr { uint32_t size; @@ -45,7 +46,7 @@ int xmm6260_ipc_read(void *data, unsigned int size, void *io_data); int xmm6260_ipc_write(void *data, unsigned int size, void *io_data); int xmm6260_ipc_power_on(void *io_data); int xmm6260_ipc_power_off(void *io_data); -int xmm6260_ipc_gprs_get_iface(char **iface); +int xmm6260_ipc_gprs_get_iface(char **iface, int cid); int xmm6260_ipc_gprs_get_capabilities(struct ipc_client_gprs_capabilities *cap); void *xmm6260_ipc_common_data_create(void); int xmm6260_ipc_common_data_destroy(void *io_data); diff --git a/samsung-ipc/ipc.c b/samsung-ipc/ipc.c index c1139ec..9149705 100644 --- a/samsung-ipc/ipc.c +++ b/samsung-ipc/ipc.c @@ -397,14 +397,14 @@ int ipc_client_gprs_deactivate(struct ipc_client *client) return client->handlers->gprs_deactivate(client->handlers->gprs_deactivate_data); } -int ipc_client_gprs_get_iface(struct ipc_client *client, char **iface) +int ipc_client_gprs_get_iface(struct ipc_client *client, char **iface, int cid) { if (client == NULL || client->gprs_specs == NULL || client->gprs_specs->gprs_get_iface == NULL) return -1; - return client->gprs_specs->gprs_get_iface(iface); + return client->gprs_specs->gprs_get_iface(iface, cid); } int ipc_client_gprs_get_capabilities(struct ipc_client *client, struct ipc_client_gprs_capabilities *cap) diff --git a/samsung-ipc/ipc_private.h b/samsung-ipc/ipc_private.h index 6db8df3..d97cbd0 100644 --- a/samsung-ipc/ipc_private.h +++ b/samsung-ipc/ipc_private.h @@ -62,7 +62,7 @@ struct ipc_handlers { }; struct ipc_gprs_specs { - int (*gprs_get_iface)(char **iface); + int (*gprs_get_iface)(char **iface, int cid); int (*gprs_get_capabilities)(struct ipc_client_gprs_capabilities *cap); }; |