merge cupcake into donut
diff --git a/liblog/logd_write.c b/liblog/logd_write.c
index 80867d1..96da38b 100644
--- a/liblog/logd_write.c
+++ b/liblog/logd_write.c
@@ -143,12 +143,16 @@
/* XXX: This needs to go! */
if (!strcmp(tag, "HTC_RIL") ||
!strcmp(tag, "RILJ") ||
+ !strcmp(tag, "RILB") ||
!strcmp(tag, "RILC") ||
!strcmp(tag, "RILD") ||
!strcmp(tag, "RIL") ||
!strcmp(tag, "AT") ||
!strcmp(tag, "GSM") ||
- !strcmp(tag, "STK"))
+ !strcmp(tag, "STK") ||
+ !strcmp(tag, "CDMA") ||
+ !strcmp(tag, "PHONE") ||
+ !strcmp(tag, "SMS"))
log_id = LOG_ID_RADIO;
vec[0].iov_base = (unsigned char *) &prio;
diff --git a/rootdir/init.rc b/rootdir/init.rc
index bcabecb..e1f1e8a 100644
--- a/rootdir/init.rc
+++ b/rootdir/init.rc
@@ -34,6 +34,24 @@
write /proc/sys/kernel/sched_latency_ns 10000000
write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
+# Create cgroup mount points for process groups
+ mkdir /dev/cpuctl
+ mount cgroup none /dev/cpuctl cpu
+ chown sytem system /dev/cpuctl
+ chown system system /dev/cpuctl/tasks
+ chmod 0777 /dev/cpuctl/tasks
+ write /dev/cpuctl/cpu.shares 1024
+
+ mkdir /dev/cpuctl/fg_boost
+ chown system system /dev/cpuctl/fg_boost/tasks
+ chmod 0777 /dev/cpuctl/fg_boost/tasks
+ write /dev/cpuctl/fg_boost/cpu.shares 1024
+
+ mkdir /dev/cpuctl/bg_non_interactive
+ chown system system /dev/cpuctl/bg_non_interactive/tasks
+ chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
+ write /dev/cpuctl/bg_non_interactive/cpu.shares 1024
+
# mount mtd partitions
# Mount /system rw first to give the filesystem a chance to save a checkpoint
mount yaffs2 mtd@system /system
diff --git a/toolbox/getevent.c b/toolbox/getevent.c
index 14372cb..256720d 100644
--- a/toolbox/getevent.c
+++ b/toolbox/getevent.c
@@ -28,6 +28,7 @@
{
uint8_t *bits = NULL;
ssize_t bits_size = 0;
+ const char* label;
int i, j, k;
int res, res2;
@@ -45,21 +46,48 @@
return 1;
}
}
+ res2 = 0;
switch(i) {
+ case EV_SYN:
+ label = "SYN";
+ break;
case EV_KEY:
res2 = ioctl(fd, EVIOCGKEY(res), bits + bits_size);
+ label = "KEY";
+ break;
+ case EV_REL:
+ label = "REL";
+ break;
+ case EV_ABS:
+ label = "ABS";
+ break;
+ case EV_MSC:
+ label = "MSC";
break;
case EV_LED:
res2 = ioctl(fd, EVIOCGLED(res), bits + bits_size);
+ label = "LED";
break;
case EV_SND:
res2 = ioctl(fd, EVIOCGSND(res), bits + bits_size);
+ label = "SND";
break;
case EV_SW:
res2 = ioctl(fd, EVIOCGSW(bits_size), bits + bits_size);
+ label = "SW ";
+ break;
+ case EV_REP:
+ label = "REP";
+ break;
+ case EV_FF:
+ label = "FF ";
+ break;
+ case EV_PWR:
+ label = "PWR";
break;
default:
res2 = 0;
+ label = "???";
}
for(j = 0; j < res; j++) {
for(k = 0; k < 8; k++)
@@ -70,9 +98,9 @@
else
down = ' ';
if(count == 0)
- printf(" type %04x:", i);
+ printf(" %s (%04x):", label, i);
else if((count & 0x7) == 0 || i == EV_ABS)
- printf("\n ");
+ printf("\n ");
printf(" %04x%c", j * 8 + k, down);
if(i == EV_ABS) {
struct input_absinfo abs;
@@ -264,7 +292,16 @@
static void usage(int argc, char *argv[])
{
- fprintf(stderr, "Usage: %s [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-q] [-c count] [-r] [device]\n", argv[0]);
+ fprintf(stderr, "Usage: %s [-t] [-n] [-s switchmask] [-S] [-v [mask]] [-p] [-q] [-c count] [-r] [device]\n", argv[0]);
+ fprintf(stderr, " -t: show time stamps\n");
+ fprintf(stderr, " -n: don't print newlines\n");
+ fprintf(stderr, " -s: print switch states for given bits\n");
+ fprintf(stderr, " -S: print all switch states\n");
+ fprintf(stderr, " -v: verbosity mask (errs=1, dev=2, name=4, info=8, vers=16, pos. events=32)\n");
+ fprintf(stderr, " -p: show possible events (errs, dev, name, pos. events)\n");
+ fprintf(stderr, " -q: quiet (clear verbosity mask)\n");
+ fprintf(stderr, " -c: print given number of events then exit\n");
+ fprintf(stderr, " -r: print rate events are received\n");
}
int getevent_main(int argc, char *argv[])
@@ -290,7 +327,7 @@
opterr = 0;
do {
- c = getopt(argc, argv, "tns:Sv::qc:rh");
+ c = getopt(argc, argv, "tns:Sv::pqc:rh");
if (c == EOF)
break;
switch (c) {
@@ -317,6 +354,12 @@
print_flags |= PRINT_DEVICE | PRINT_DEVICE_NAME | PRINT_DEVICE_INFO | PRINT_VERSION;
print_flags_set = 1;
break;
+ case 'p':
+ print_flags = PRINT_DEVICE_ERRORS | PRINT_DEVICE | PRINT_DEVICE_NAME | PRINT_POSSIBLE_EVENTS;
+ print_flags_set = 1;
+ if(dont_block == -1)
+ dont_block = 1;
+ break;
case 'q':
print_flags = 0;
print_flags_set = 1;
diff --git a/toolbox/route.c b/toolbox/route.c
index adf5c69..86fc35b 100644
--- a/toolbox/route.c
+++ b/toolbox/route.c
@@ -2,6 +2,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
+#include <stdarg.h>
#include <errno.h>
#include <string.h>
@@ -14,9 +15,14 @@
#include <arpa/inet.h>
#include <linux/route.h>
-static void die(const char *s)
+static void die(const char *fmt, ...)
{
- fprintf(stderr,"error: %s (%s)\n", s, strerror(errno));
+ va_list p;
+
+ va_start(p, fmt);
+ fprintf(stderr,"error(%s): ", strerror(errno));
+ fprintf(stderr, fmt, p);
+ va_end(p);
exit(-1);
}
@@ -36,9 +42,10 @@
} \
} while(0)
-/* current support two kinds of usage */
+/* current support the following routing entries */
/* route add default dev wlan0 */
/* route add default gw 192.168.20.1 dev wlan0 */
+/* route add net 192.168.1.1 netmask 255.255.255.0 gw 172.24.192.10 */
int route_main(int argc, char *argv[])
{
@@ -68,7 +75,7 @@
EXPECT_NEXT(argc, argv);
rt.rt_flags = RTF_UP | RTF_HOST;
rt.rt_dev = argv[0];
- if (ioctl(s, SIOCADDRT, &rt) < 0) die("SIOCADDRT");
+ if (ioctl(s, SIOCADDRT, &rt) < 0) die("SIOCADDRT\n");
}else if(!strcmp(argv[0], "gw")) {
EXPECT_NEXT(argc, argv);
rt.rt_flags = RTF_UP | RTF_GATEWAY;
@@ -76,22 +83,44 @@
if(isdigit(argv[0][0])){
init_sockaddr_in((struct sockaddr_in *)&(rt.rt_gateway), argv[0]);
}else{
- die("expecting an IP address for parameter \"gw\"");
+ die("expecting an IP address for parameter \"gw\"\n");
}
EXPECT_NEXT(argc, argv);
if(!strcmp(argv[0], "dev")) {
EXPECT_NEXT(argc, argv);
rt.rt_dev = argv[0];
if (ioctl(s, SIOCADDRT, &rt) < 0){
- die("SIOCADDRT");
+ die("SIOCADDRT\n");
}
}
}
- }
+ } else {
+ char keywords[3][5] = { "net", "mask", "gw" };
+ struct sockaddr_in *paddr[3] = { &rt.rt_dst, &rt.rt_genmask, &rt.rt_gateway };
+ int k = 0;
+
+ memset((char *) &rt, 0, sizeof(struct rtentry));
+ rt.rt_flags = RTF_UP | RTF_GATEWAY;
+ do {
+ if(!strcmp(argv[0], keywords[k])) {
+ EXPECT_NEXT(argc, argv);
+ if(isdigit(argv[0][0])) {
+ init_sockaddr_in(paddr[k], argv[0]);
+ } else {
+ die("expecting an IP/MASK address for parameter %s\n", keywords[k]);
+ }
+ if(k < 2) EXPECT_NEXT(argc, argv);
+ } else {
+ die("expecting keyword(s)\n");
+ }
+ } while(++k < 3);
+ if(ioctl(s, SIOCADDRT, &rt) < 0) {
+ die("SIOCADDRT\n");
+ }
+ }
}
ADVANCE(argc, argv);
}
return 0;
}
-