aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/radio.h2
-rw-r--r--samsung-ipc/device/aries/aries_ipc.c18
-rw-r--r--samsung-ipc/device/aries/aries_ipc.h3
-rw-r--r--samsung-ipc/device/crespo/crespo_ipc.c4
-rw-r--r--samsung-ipc/device/crespo/crespo_ipc.h2
-rw-r--r--samsung-ipc/device/xmm6260/xmm6260_ipc.c12
-rw-r--r--samsung-ipc/device/xmm6260/xmm6260_ipc.h7
-rw-r--r--samsung-ipc/ipc.c4
-rw-r--r--samsung-ipc/ipc_private.h2
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);
};