[PATCH 141/641] Staging: HTC Dream: add rpcrouter driver

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Greg Kroah-Hartman
Date: Tuesday, September 15, 2009 - 12:06 pm

From: Brian Swetland <swetland@google.com>

rpcrouter code is neccessarry for communication with QDSP and thus
many hardware components on HTC Dream, including camera hardware.


Cc: Brian Swetland <swetland@google.com>
Cc: Iliyan Malchev <ibm@android.com>
Cc: San Mehat <san@android.com>
Signed-off-by: Pavel Machek <pavel@ucw.cz>
---
 drivers/staging/dream/smd/Kconfig                  |   25 +
 drivers/staging/dream/smd/Makefile                 |    6 +
 .../staging/dream/smd/rpc_server_dog_keepalive.c   |   68 ++
 drivers/staging/dream/smd/rpc_server_time_remote.c |   77 ++
 drivers/staging/dream/smd/smd_rpcrouter.c          | 1274 ++++++++++++++++++++
 drivers/staging/dream/smd/smd_rpcrouter.h          |  195 +++
 drivers/staging/dream/smd/smd_rpcrouter_device.c   |  376 ++++++
 drivers/staging/dream/smd/smd_rpcrouter_servers.c  |  229 ++++
 8 files changed, 2250 insertions(+), 0 deletions(-)
 create mode 100644 drivers/staging/dream/smd/Kconfig
 create mode 100644 drivers/staging/dream/smd/Makefile
 create mode 100644 drivers/staging/dream/smd/rpc_server_dog_keepalive.c
 create mode 100644 drivers/staging/dream/smd/rpc_server_time_remote.c
 create mode 100644 drivers/staging/dream/smd/smd_rpcrouter.c
 create mode 100644 drivers/staging/dream/smd/smd_rpcrouter.h
 create mode 100644 drivers/staging/dream/smd/smd_rpcrouter_device.c
 create mode 100644 drivers/staging/dream/smd/smd_rpcrouter_servers.c

diff --git a/drivers/staging/dream/smd/Kconfig b/drivers/staging/dream/smd/Kconfig
new file mode 100644
index 0000000..3c1db3c
--- /dev/null
+++ b/drivers/staging/dream/smd/Kconfig
@@ -0,0 +1,25 @@
+config MSM_SMD
+	default y
+	bool "MSM Shared Memory Driver (SMD)"
+	help
+	  Support for the shared memory interface between the apps
+	  processor and the baseband processor.  Provides access to
+	  the "shared heap", as well as virtual serial channels
+	  used to communicate with various services on the baseband
+	  processor.
+
+config MSM_ONCRPCROUTER
+	depends on MSM_SMD
+	default y
+	bool "MSM ONCRPC router support"
+	help
+	  Support for the MSM ONCRPC router for communication between
+	  the ARM9 and ARM11
+
+config MSM_RPCSERVERS
+	depends on MSM_ONCRPCROUTER
+	default y
+	bool "Kernel side RPC server bundle"
+	help
+	  none
+
diff --git a/drivers/staging/dream/smd/Makefile b/drivers/staging/dream/smd/Makefile
new file mode 100644
index 0000000..892c741
--- /dev/null
+++ b/drivers/staging/dream/smd/Makefile
@@ -0,0 +1,6 @@
+obj-$(CONFIG_MSM_SMD) += smd.o smd_tty.o smd_qmi.o
+obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter.o
+obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_device.o
+obj-$(CONFIG_MSM_ONCRPCROUTER) += smd_rpcrouter_servers.o
+obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_dog_keepalive.o
+obj-$(CONFIG_MSM_RPCSERVERS) += rpc_server_time_remote.o
diff --git a/drivers/staging/dream/smd/rpc_server_dog_keepalive.c b/drivers/staging/dream/smd/rpc_server_dog_keepalive.c
new file mode 100644
index 0000000..b23fccf
--- /dev/null
+++ b/drivers/staging/dream/smd/rpc_server_dog_keepalive.c
@@ -0,0 +1,68 @@
+/* arch/arm/mach-msm/rpc_server_dog_keepalive.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Author: Iliyan Malchev <ibm@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <mach/msm_rpcrouter.h>
+
+/* dog_keepalive server definitions */
+
+#define DOG_KEEPALIVE_PROG 0x30000015
+#if CONFIG_MSM_AMSS_VERSION==6210
+#define DOG_KEEPALIVE_VERS 0
+#define RPC_DOG_KEEPALIVE_BEACON 1
+#elif (CONFIG_MSM_AMSS_VERSION==6220) || (CONFIG_MSM_AMSS_VERSION==6225)
+#define DOG_KEEPALIVE_VERS 0x731fa727
+#define RPC_DOG_KEEPALIVE_BEACON 2
+#elif CONFIG_MSM_AMSS_VERSION==6350
+#define DOG_KEEPALIVE_VERS 0x00010000
+#define RPC_DOG_KEEPALIVE_BEACON 2
+#else
+#error "Unsupported AMSS version"
+#endif
+#define RPC_DOG_KEEPALIVE_NULL 0
+
+
+/* TODO: Remove server registration with _VERS when modem is upated with _COMP*/
+
+static int handle_rpc_call(struct msm_rpc_server *server,
+			   struct rpc_request_hdr *req, unsigned len)
+{
+	switch (req->procedure) {
+	case RPC_DOG_KEEPALIVE_NULL:
+		return 0;
+	case RPC_DOG_KEEPALIVE_BEACON:
+		printk(KERN_INFO "DOG KEEPALIVE PING\n");
+		return 0;
+	default:
+		return -ENODEV;
+	}
+}
+
+static struct msm_rpc_server rpc_server = {
+	.prog = DOG_KEEPALIVE_PROG,
+	.vers = DOG_KEEPALIVE_VERS,
+	.rpc_call = handle_rpc_call,
+};
+
+static int __init rpc_server_init(void)
+{
+	/* Dual server registration to support backwards compatibility vers */
+	return msm_rpc_create_server(&rpc_server);
+}
+
+
+module_init(rpc_server_init);
diff --git a/drivers/staging/dream/smd/rpc_server_time_remote.c b/drivers/staging/dream/smd/rpc_server_time_remote.c
new file mode 100644
index 0000000..2f90fc8
--- /dev/null
+++ b/drivers/staging/dream/smd/rpc_server_time_remote.c
@@ -0,0 +1,77 @@
+/* arch/arm/mach-msm/rpc_server_time_remote.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Author: Iliyan Malchev <ibm@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <mach/msm_rpcrouter.h>
+
+/* time_remote_mtoa server definitions. */
+
+#define TIME_REMOTE_MTOA_PROG 0x3000005d
+#if CONFIG_MSM_AMSS_VERSION==6210
+#define TIME_REMOTE_MTOA_VERS 0
+#elif (CONFIG_MSM_AMSS_VERSION==6220) || (CONFIG_MSM_AMSS_VERSION==6225)
+#define TIME_REMOTE_MTOA_VERS 0x9202a8e4
+#elif CONFIG_MSM_AMSS_VERSION==6350
+#define TIME_REMOTE_MTOA_VERS 0x00010000
+#else
+#error "Unknown AMSS version"
+#endif
+#define RPC_TIME_REMOTE_MTOA_NULL   0
+#define RPC_TIME_TOD_SET_APPS_BASES 2
+
+struct rpc_time_tod_set_apps_bases_args {
+	uint32_t tick;
+	uint64_t stamp;
+};
+
+static int handle_rpc_call(struct msm_rpc_server *server,
+			   struct rpc_request_hdr *req, unsigned len)
+{
+	switch (req->procedure) {
+	case RPC_TIME_REMOTE_MTOA_NULL:
+		return 0;
+
+	case RPC_TIME_TOD_SET_APPS_BASES: {
+		struct rpc_time_tod_set_apps_bases_args *args;
+		args = (struct rpc_time_tod_set_apps_bases_args *)(req + 1);
+		args->tick = be32_to_cpu(args->tick);
+		args->stamp = be64_to_cpu(args->stamp);
+		printk(KERN_INFO "RPC_TIME_TOD_SET_APPS_BASES:\n"
+		       "\ttick = %d\n"
+		       "\tstamp = %lld\n",
+		       args->tick, args->stamp);
+		return 0;
+	}
+	default:
+		return -ENODEV;
+	}
+}
+
+static struct msm_rpc_server rpc_server = {
+	.prog = TIME_REMOTE_MTOA_PROG,
+	.vers = TIME_REMOTE_MTOA_VERS,
+	.rpc_call = handle_rpc_call,
+};
+
+static int __init rpc_server_init(void)
+{
+	/* Dual server registration to support backwards compatibility vers */
+	return msm_rpc_create_server(&rpc_server);
+}
+
+
+module_init(rpc_server_init);
diff --git a/drivers/staging/dream/smd/smd_rpcrouter.c b/drivers/staging/dream/smd/smd_rpcrouter.c
new file mode 100644
index 0000000..56557b8
--- /dev/null
+++ b/drivers/staging/dream/smd/smd_rpcrouter.c
@@ -0,0 +1,1274 @@
+/* arch/arm/mach-msm/smd_rpcrouter.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Copyright (c) 2007-2009 QUALCOMM Incorporated.
+ * Author: San Mehat <san@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+
+/* TODO: handle cases where smd_write() will tempfail due to full fifo */
+/* TODO: thread priority? schedule a work to bump it? */
+/* TODO: maybe make server_list_lock a mutex */
+/* TODO: pool fragments to avoid kmalloc/kfree churn */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/cdev.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/types.h>
+#include <linux/delay.h>
+#include <linux/fs.h>
+#include <linux/err.h>
+#include <linux/sched.h>
+#include <linux/poll.h>
+#include <linux/wakelock.h>
+#include <asm/uaccess.h>
+#include <asm/byteorder.h>
+#include <linux/platform_device.h>
+#include <linux/uaccess.h>
+
+#include <asm/byteorder.h>
+
+#include <mach/msm_smd.h>
+#include "smd_rpcrouter.h"
+
+#define TRACE_R2R_MSG 0
+#define TRACE_R2R_RAW 0
+#define TRACE_RPC_MSG 0
+#define TRACE_NOTIFY_MSG 0
+
+#define MSM_RPCROUTER_DEBUG 0
+#define MSM_RPCROUTER_DEBUG_PKT 0
+#define MSM_RPCROUTER_R2R_DEBUG 0
+#define DUMP_ALL_RECEIVED_HEADERS 0
+
+#define DIAG(x...) printk("[RR] ERROR " x)
+
+#if MSM_RPCROUTER_DEBUG
+#define D(x...) printk(x)
+#else
+#define D(x...) do {} while (0)
+#endif
+
+#if TRACE_R2R_MSG
+#define RR(x...) printk("[RR] "x)
+#else
+#define RR(x...) do {} while (0)
+#endif
+
+#if TRACE_RPC_MSG
+#define IO(x...) printk("[RPC] "x)
+#else
+#define IO(x...) do {} while (0)
+#endif
+
+#if TRACE_NOTIFY_MSG
+#define NTFY(x...) printk(KERN_ERR "[NOTIFY] "x)
+#else
+#define NTFY(x...) do {} while (0)
+#endif
+
+static LIST_HEAD(local_endpoints);
+static LIST_HEAD(remote_endpoints);
+
+static LIST_HEAD(server_list);
+
+static smd_channel_t *smd_channel;
+static int initialized;
+static wait_queue_head_t newserver_wait;
+static wait_queue_head_t smd_wait;
+
+static DEFINE_SPINLOCK(local_endpoints_lock);
+static DEFINE_SPINLOCK(remote_endpoints_lock);
+static DEFINE_SPINLOCK(server_list_lock);
+static DEFINE_SPINLOCK(smd_lock);
+
+static struct workqueue_struct *rpcrouter_workqueue;
+static struct wake_lock rpcrouter_wake_lock;
+static int rpcrouter_need_len;
+
+static atomic_t next_xid = ATOMIC_INIT(1);
+static uint8_t next_pacmarkid;
+
+static void do_read_data(struct work_struct *work);
+static void do_create_pdevs(struct work_struct *work);
+static void do_create_rpcrouter_pdev(struct work_struct *work);
+
+static DECLARE_WORK(work_read_data, do_read_data);
+static DECLARE_WORK(work_create_pdevs, do_create_pdevs);
+static DECLARE_WORK(work_create_rpcrouter_pdev, do_create_rpcrouter_pdev);
+
+#define RR_STATE_IDLE    0
+#define RR_STATE_HEADER  1
+#define RR_STATE_BODY    2
+#define RR_STATE_ERROR   3
+
+struct rr_context {
+	struct rr_packet *pkt;
+	uint8_t *ptr;
+	uint32_t state; /* current assembly state */
+	uint32_t count; /* bytes needed in this state */
+};
+
+struct rr_context the_rr_context;
+
+static struct platform_device rpcrouter_pdev = {
+	.name		= "oncrpc_router",
+	.id		= -1,
+};
+
+
+static int rpcrouter_send_control_msg(union rr_control_msg *msg)
+{
+	struct rr_header hdr;
+	unsigned long flags;
+	int need;
+
+	if (!(msg->cmd == RPCROUTER_CTRL_CMD_HELLO) && !initialized) {
+		printk(KERN_ERR "rpcrouter_send_control_msg(): Warning, "
+		       "router not initialized\n");
+		return -EINVAL;
+	}
+
+	hdr.version = RPCROUTER_VERSION;
+	hdr.type = msg->cmd;
+	hdr.src_pid = RPCROUTER_PID_LOCAL;
+	hdr.src_cid = RPCROUTER_ROUTER_ADDRESS;
+	hdr.confirm_rx = 0;
+	hdr.size = sizeof(*msg);
+	hdr.dst_pid = 0;
+	hdr.dst_cid = RPCROUTER_ROUTER_ADDRESS;
+
+	/* TODO: what if channel is full? */
+
+	need = sizeof(hdr) + hdr.size;
+	spin_lock_irqsave(&smd_lock, flags);
+	while (smd_write_avail(smd_channel) < need) {
+		spin_unlock_irqrestore(&smd_lock, flags);
+		msleep(250);
+		spin_lock_irqsave(&smd_lock, flags);
+	}
+	smd_write(smd_channel, &hdr, sizeof(hdr));
+	smd_write(smd_channel, msg, hdr.size);
+	spin_unlock_irqrestore(&smd_lock, flags);
+	return 0;
+}
+
+static struct rr_server *rpcrouter_create_server(uint32_t pid,
+							uint32_t cid,
+							uint32_t prog,
+							uint32_t ver)
+{
+	struct rr_server *server;
+	unsigned long flags;
+	int rc;
+
+	server = kmalloc(sizeof(struct rr_server), GFP_KERNEL);
+	if (!server)
+		return ERR_PTR(-ENOMEM);
+
+	memset(server, 0, sizeof(struct rr_server));
+	server->pid = pid;
+	server->cid = cid;
+	server->prog = prog;
+	server->vers = ver;
+
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_add_tail(&server->list, &server_list);
+	spin_unlock_irqrestore(&server_list_lock, flags);
+
+	if (pid == RPCROUTER_PID_REMOTE) {
+		rc = msm_rpcrouter_create_server_cdev(server);
+		if (rc < 0)
+			goto out_fail;
+	}
+	return server;
+out_fail:
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_del(&server->list);
+	spin_unlock_irqrestore(&server_list_lock, flags);
+	kfree(server);
+	return ERR_PTR(rc);
+}
+
+static void rpcrouter_destroy_server(struct rr_server *server)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_del(&server->list);
+	spin_unlock_irqrestore(&server_list_lock, flags);
+	device_destroy(msm_rpcrouter_class, server->device_number);
+	kfree(server);
+}
+
+static struct rr_server *rpcrouter_lookup_server(uint32_t prog, uint32_t ver)
+{
+	struct rr_server *server;
+	unsigned long flags;
+
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_for_each_entry(server, &server_list, list) {
+		if (server->prog == prog
+		 && server->vers == ver) {
+			spin_unlock_irqrestore(&server_list_lock, flags);
+			return server;
+		}
+	}
+	spin_unlock_irqrestore(&server_list_lock, flags);
+	return NULL;
+}
+
+static struct rr_server *rpcrouter_lookup_server_by_dev(dev_t dev)
+{
+	struct rr_server *server;
+	unsigned long flags;
+
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_for_each_entry(server, &server_list, list) {
+		if (server->device_number == dev) {
+			spin_unlock_irqrestore(&server_list_lock, flags);
+			return server;
+		}
+	}
+	spin_unlock_irqrestore(&server_list_lock, flags);
+	return NULL;
+}
+
+struct msm_rpc_endpoint *msm_rpcrouter_create_local_endpoint(dev_t dev)
+{
+	struct msm_rpc_endpoint *ept;
+	unsigned long flags;
+
+	ept = kmalloc(sizeof(struct msm_rpc_endpoint), GFP_KERNEL);
+	if (!ept)
+		return NULL;
+	memset(ept, 0, sizeof(struct msm_rpc_endpoint));
+
+	/* mark no reply outstanding */
+	ept->reply_pid = 0xffffffff;
+
+	ept->cid = (uint32_t) ept;
+	ept->pid = RPCROUTER_PID_LOCAL;
+	ept->dev = dev;
+
+	if ((dev != msm_rpcrouter_devno) && (dev != MKDEV(0, 0))) {
+		struct rr_server *srv;
+		/*
+		 * This is a userspace client which opened
+		 * a program/ver devicenode. Bind the client
+		 * to that destination
+		 */
+		srv = rpcrouter_lookup_server_by_dev(dev);
+		/* TODO: bug? really? */
+		BUG_ON(!srv);
+
+		ept->dst_pid = srv->pid;
+		ept->dst_cid = srv->cid;
+		ept->dst_prog = cpu_to_be32(srv->prog);
+		ept->dst_vers = cpu_to_be32(srv->vers);
+
+		D("Creating local ept %p @ %08x:%08x\n", ept, srv->prog, srv->vers);
+	} else {
+		/* mark not connected */
+		ept->dst_pid = 0xffffffff;
+		D("Creating a master local ept %p\n", ept);
+	}
+
+	init_waitqueue_head(&ept->wait_q);
+	INIT_LIST_HEAD(&ept->read_q);
+	spin_lock_init(&ept->read_q_lock);
+	wake_lock_init(&ept->read_q_wake_lock, WAKE_LOCK_SUSPEND, "rpc_read");
+	INIT_LIST_HEAD(&ept->incomplete);
+
+	spin_lock_irqsave(&local_endpoints_lock, flags);
+	list_add_tail(&ept->list, &local_endpoints);
+	spin_unlock_irqrestore(&local_endpoints_lock, flags);
+	return ept;
+}
+
+int msm_rpcrouter_destroy_local_endpoint(struct msm_rpc_endpoint *ept)
+{
+	int rc;
+	union rr_control_msg msg;
+
+	msg.cmd = RPCROUTER_CTRL_CMD_REMOVE_CLIENT;
+	msg.cli.pid = ept->pid;
+	msg.cli.cid = ept->cid;
+
+	RR("x REMOVE_CLIENT id=%d:%08x\n", ept->pid, ept->cid);
+	rc = rpcrouter_send_control_msg(&msg);
+	if (rc < 0)
+		return rc;
+
+	wake_lock_destroy(&ept->read_q_wake_lock);
+	list_del(&ept->list);
+	kfree(ept);
+	return 0;
+}
+
+static int rpcrouter_create_remote_endpoint(uint32_t cid)
+{
+	struct rr_remote_endpoint *new_c;
+	unsigned long flags;
+
+	new_c = kmalloc(sizeof(struct rr_remote_endpoint), GFP_KERNEL);
+	if (!new_c)
+		return -ENOMEM;
+	memset(new_c, 0, sizeof(struct rr_remote_endpoint));
+
+	new_c->cid = cid;
+	new_c->pid = RPCROUTER_PID_REMOTE;
+	init_waitqueue_head(&new_c->quota_wait);
+	spin_lock_init(&new_c->quota_lock);
+
+	spin_lock_irqsave(&remote_endpoints_lock, flags);
+	list_add_tail(&new_c->list, &remote_endpoints);
+	spin_unlock_irqrestore(&remote_endpoints_lock, flags);
+	return 0;
+}
+
+static struct msm_rpc_endpoint *rpcrouter_lookup_local_endpoint(uint32_t cid)
+{
+	struct msm_rpc_endpoint *ept;
+	unsigned long flags;
+
+	spin_lock_irqsave(&local_endpoints_lock, flags);
+	list_for_each_entry(ept, &local_endpoints, list) {
+		if (ept->cid == cid) {
+			spin_unlock_irqrestore(&local_endpoints_lock, flags);
+			return ept;
+		}
+	}
+	spin_unlock_irqrestore(&local_endpoints_lock, flags);
+	return NULL;
+}
+
+static struct rr_remote_endpoint *rpcrouter_lookup_remote_endpoint(uint32_t cid)
+{
+	struct rr_remote_endpoint *ept;
+	unsigned long flags;
+
+	spin_lock_irqsave(&remote_endpoints_lock, flags);
+	list_for_each_entry(ept, &remote_endpoints, list) {
+		if (ept->cid == cid) {
+			spin_unlock_irqrestore(&remote_endpoints_lock, flags);
+			return ept;
+		}
+	}
+	spin_unlock_irqrestore(&remote_endpoints_lock, flags);
+	return NULL;
+}
+
+static int process_control_msg(union rr_control_msg *msg, int len)
+{
+	union rr_control_msg ctl;
+	struct rr_server *server;
+	struct rr_remote_endpoint *r_ept;
+	int rc = 0;
+	unsigned long flags;
+
+	if (len != sizeof(*msg)) {
+		printk(KERN_ERR "rpcrouter: r2r msg size %d != %d\n",
+		       len, sizeof(*msg));
+		return -EINVAL;
+	}
+
+	switch (msg->cmd) {
+	case RPCROUTER_CTRL_CMD_HELLO:
+		RR("o HELLO\n");
+
+		RR("x HELLO\n");
+		memset(&ctl, 0, sizeof(ctl));
+		ctl.cmd = RPCROUTER_CTRL_CMD_HELLO;
+		rpcrouter_send_control_msg(&ctl);
+
+		initialized = 1;
+
+		/* Send list of servers one at a time */
+		ctl.cmd = RPCROUTER_CTRL_CMD_NEW_SERVER;
+
+		/* TODO: long time to hold a spinlock... */
+		spin_lock_irqsave(&server_list_lock, flags);
+		list_for_each_entry(server, &server_list, list) {
+			ctl.srv.pid = server->pid;
+			ctl.srv.cid = server->cid;
+			ctl.srv.prog = server->prog;
+			ctl.srv.vers = server->vers;
+
+			RR("x NEW_SERVER id=%d:%08x prog=%08x:%08x\n",
+			   server->pid, server->cid,
+			   server->prog, server->vers);
+
+			rpcrouter_send_control_msg(&ctl);
+		}
+		spin_unlock_irqrestore(&server_list_lock, flags);
+
+		queue_work(rpcrouter_workqueue, &work_create_rpcrouter_pdev);
+		break;
+
+	case RPCROUTER_CTRL_CMD_RESUME_TX:
+		RR("o RESUME_TX id=%d:%08x\n", msg->cli.pid, msg->cli.cid);
+
+		r_ept = rpcrouter_lookup_remote_endpoint(msg->cli.cid);
+		if (!r_ept) {
+			printk(KERN_ERR
+			       "rpcrouter: Unable to resume client\n");
+			break;
+		}
+		spin_lock_irqsave(&r_ept->quota_lock, flags);
+		r_ept->tx_quota_cntr = 0;
+		spin_unlock_irqrestore(&r_ept->quota_lock, flags);
+		wake_up(&r_ept->quota_wait);
+		break;
+
+	case RPCROUTER_CTRL_CMD_NEW_SERVER:
+		RR("o NEW_SERVER id=%d:%08x prog=%08x:%08x\n",
+		   msg->srv.pid, msg->srv.cid, msg->srv.prog, msg->srv.vers);
+
+		server = rpcrouter_lookup_server(msg->srv.prog, msg->srv.vers);
+
+		if (!server) {
+			server = rpcrouter_create_server(
+				msg->srv.pid, msg->srv.cid,
+				msg->srv.prog, msg->srv.vers);
+			if (!server)
+				return -ENOMEM;
+			/*
+			 * XXX: Verify that its okay to add the
+			 * client to our remote client list
+			 * if we get a NEW_SERVER notification
+			 */
+			if (!rpcrouter_lookup_remote_endpoint(msg->srv.cid)) {
+				rc = rpcrouter_create_remote_endpoint(
+					msg->srv.cid);
+				if (rc < 0)
+					printk(KERN_ERR
+						"rpcrouter:Client create"
+						"error (%d)\n", rc);
+			}
+			schedule_work(&work_create_pdevs);
+			wake_up(&newserver_wait);
+		} else {
+			if ((server->pid == msg->srv.pid) &&
+			    (server->cid == msg->srv.cid)) {
+				printk(KERN_ERR "rpcrouter: Duplicate svr\n");
+			} else {
+				server->pid = msg->srv.pid;
+				server->cid = msg->srv.cid;
+			}
+		}
+		break;
+
+	case RPCROUTER_CTRL_CMD_REMOVE_SERVER:
+		RR("o REMOVE_SERVER prog=%08x:%d\n",
+		   msg->srv.prog, msg->srv.vers);
+		server = rpcrouter_lookup_server(msg->srv.prog, msg->srv.vers);
+		if (server)
+			rpcrouter_destroy_server(server);
+		break;
+
+	case RPCROUTER_CTRL_CMD_REMOVE_CLIENT:
+		RR("o REMOVE_CLIENT id=%d:%08x\n", msg->cli.pid, msg->cli.cid);
+		if (msg->cli.pid != RPCROUTER_PID_REMOTE) {
+			printk(KERN_ERR
+			       "rpcrouter: Denying remote removal of "
+			       "local client\n");
+			break;
+		}
+		r_ept = rpcrouter_lookup_remote_endpoint(msg->cli.cid);
+		if (r_ept) {
+			spin_lock_irqsave(&remote_endpoints_lock, flags);
+			list_del(&r_ept->list);
+			spin_unlock_irqrestore(&remote_endpoints_lock, flags);
+			kfree(r_ept);
+		}
+
+		/* Notify local clients of this event */
+		printk(KERN_ERR "rpcrouter: LOCAL NOTIFICATION NOT IMP\n");
+		rc = -ENOSYS;
+
+		break;
+	default:
+		RR("o UNKNOWN(%08x)\n", msg->cmd);
+		rc = -ENOSYS;
+	}
+
+	return rc;
+}
+
+static void do_create_rpcrouter_pdev(struct work_struct *work)
+{
+	platform_device_register(&rpcrouter_pdev);
+}
+
+static void do_create_pdevs(struct work_struct *work)
+{
+	unsigned long flags;
+	struct rr_server *server;
+
+	/* TODO: race if destroyed while being registered */
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_for_each_entry(server, &server_list, list) {
+		if (server->pid == RPCROUTER_PID_REMOTE) {
+			if (server->pdev_name[0] == 0) {
+				spin_unlock_irqrestore(&server_list_lock,
+						       flags);
+				msm_rpcrouter_create_server_pdev(server);
+				schedule_work(&work_create_pdevs);
+				return;
+			}
+		}
+	}
+	spin_unlock_irqrestore(&server_list_lock, flags);
+}
+
+static void rpcrouter_smdnotify(void *_dev, unsigned event)
+{
+	if (event != SMD_EVENT_DATA)
+		return;
+
+	if (smd_read_avail(smd_channel) >= rpcrouter_need_len)
+		wake_lock(&rpcrouter_wake_lock);
+	wake_up(&smd_wait);
+}
+
+static void *rr_malloc(unsigned sz)
+{
+	void *ptr = kmalloc(sz, GFP_KERNEL);
+	if (ptr)
+		return ptr;
+
+	printk(KERN_ERR "rpcrouter: kmalloc of %d failed, retrying...\n", sz);
+	do {
+		ptr = kmalloc(sz, GFP_KERNEL);
+	} while (!ptr);
+
+	return ptr;
+}
+
+/* TODO: deal with channel teardown / restore */
+static int rr_read(void *data, int len)
+{
+	int rc;
+	unsigned long flags;
+//	printk("rr_read() %d\n", len);
+	for(;;) {
+		spin_lock_irqsave(&smd_lock, flags);
+		if (smd_read_avail(smd_channel) >= len) {
+			rc = smd_read(smd_channel, data, len);
+			spin_unlock_irqrestore(&smd_lock, flags);
+			if (rc == len)
+				return 0;
+			else
+				return -EIO;
+		}
+		rpcrouter_need_len = len;
+		wake_unlock(&rpcrouter_wake_lock);
+		spin_unlock_irqrestore(&smd_lock, flags);
+
+//		printk("rr_read: waiting (%d)\n", len);
+		wait_event(smd_wait, smd_read_avail(smd_channel) >= len);
+	}
+	return 0;
+}
+
+static uint32_t r2r_buf[RPCROUTER_MSGSIZE_MAX];
+
+static void do_read_data(struct work_struct *work)
+{
+	struct rr_header hdr;
+	struct rr_packet *pkt;
+	struct rr_fragment *frag;
+	struct msm_rpc_endpoint *ept;
+	uint32_t pm, mid;
+	unsigned long flags;
+
+	if (rr_read(&hdr, sizeof(hdr)))
+		goto fail_io;
+
+#if TRACE_R2R_RAW
+	RR("- ver=%d type=%d src=%d:%08x crx=%d siz=%d dst=%d:%08x\n",
+	   hdr.version, hdr.type, hdr.src_pid, hdr.src_cid,
+	   hdr.confirm_rx, hdr.size, hdr.dst_pid, hdr.dst_cid);
+#endif
+
+	if (hdr.version != RPCROUTER_VERSION) {
+		DIAG("version %d != %d\n", hdr.version, RPCROUTER_VERSION);
+		goto fail_data;
+	}
+	if (hdr.size > RPCROUTER_MSGSIZE_MAX) {
+		DIAG("msg size %d > max %d\n", hdr.size, RPCROUTER_MSGSIZE_MAX);
+		goto fail_data;
+	}
+
+	if (hdr.dst_cid == RPCROUTER_ROUTER_ADDRESS) {
+		if (rr_read(r2r_buf, hdr.size))
+			goto fail_io;
+		process_control_msg((void*) r2r_buf, hdr.size);
+		goto done;
+	}
+
+	if (hdr.size < sizeof(pm)) {
+		DIAG("runt packet (no pacmark)\n");
+		goto fail_data;
+	}
+	if (rr_read(&pm, sizeof(pm)))
+		goto fail_io;
+
+	hdr.size -= sizeof(pm);
+
+	frag = rr_malloc(hdr.size + sizeof(*frag));
+	frag->next = NULL;
+	frag->length = hdr.size;
+	if (rr_read(frag->data, hdr.size))
+		goto fail_io;
+
+	ept = rpcrouter_lookup_local_endpoint(hdr.dst_cid);
+	if (!ept) {
+		DIAG("no local ept for cid %08x\n", hdr.dst_cid);
+		kfree(frag);
+		goto done;
+	}
+
+	/* See if there is already a partial packet that matches our mid
+	 * and if so, append this fragment to that packet.
+	 */
+	mid = PACMARK_MID(pm);
+	list_for_each_entry(pkt, &ept->incomplete, list) {
+		if (pkt->mid == mid) {
+			pkt->last->next = frag;
+			pkt->last = frag;
+			pkt->length += frag->length;
+			if (PACMARK_LAST(pm)) {
+				list_del(&pkt->list);
+				goto packet_complete;
+			}
+			goto done;
+		}
+	}
+	/* This mid is new -- create a packet for it, and put it on
+	 * the incomplete list if this fragment is not a last fragment,
+	 * otherwise put it on the read queue.
+	 */
+	pkt = rr_malloc(sizeof(struct rr_packet));
+	pkt->first = frag;
+	pkt->last = frag;
+	memcpy(&pkt->hdr, &hdr, sizeof(hdr));
+	pkt->mid = mid;
+	pkt->length = frag->length;
+	if (!PACMARK_LAST(pm)) {
+		list_add_tail(&pkt->list, &ept->incomplete);
+		goto done;
+	}
+
+packet_complete:
+	spin_lock_irqsave(&ept->read_q_lock, flags);
+	wake_lock(&ept->read_q_wake_lock);
+	list_add_tail(&pkt->list, &ept->read_q);
+	wake_up(&ept->wait_q);
+	spin_unlock_irqrestore(&ept->read_q_lock, flags);
+done:
+
+	if (hdr.confirm_rx) {
+		union rr_control_msg msg;
+
+		msg.cmd = RPCROUTER_CTRL_CMD_RESUME_TX;
+		msg.cli.pid = hdr.dst_pid;
+		msg.cli.cid = hdr.dst_cid;
+
+		RR("x RESUME_TX id=%d:%08x\n", msg.cli.pid, msg.cli.cid);
+		rpcrouter_send_control_msg(&msg);
+	}
+
+	queue_work(rpcrouter_workqueue, &work_read_data);
+	return;
+
+fail_io:
+fail_data:
+	printk(KERN_ERR "rpc_router has died\n");
+	wake_unlock(&rpcrouter_wake_lock);
+}
+
+void msm_rpc_setup_req(struct rpc_request_hdr *hdr, uint32_t prog,
+		       uint32_t vers, uint32_t proc)
+{
+	memset(hdr, 0, sizeof(struct rpc_request_hdr));
+	hdr->xid = cpu_to_be32(atomic_add_return(1, &next_xid));
+	hdr->rpc_vers = cpu_to_be32(2);
+	hdr->prog = cpu_to_be32(prog);
+	hdr->vers = cpu_to_be32(vers);
+	hdr->procedure = cpu_to_be32(proc);
+}
+
+struct msm_rpc_endpoint *msm_rpc_open(void)
+{
+	struct msm_rpc_endpoint *ept;
+
+	ept = msm_rpcrouter_create_local_endpoint(MKDEV(0, 0));
+	if (ept == NULL)
+		return ERR_PTR(-ENOMEM);
+
+	return ept;
+}
+
+int msm_rpc_close(struct msm_rpc_endpoint *ept)
+{
+	return msm_rpcrouter_destroy_local_endpoint(ept);
+}
+EXPORT_SYMBOL(msm_rpc_close);
+
+int msm_rpc_write(struct msm_rpc_endpoint *ept, void *buffer, int count)
+{
+	struct rr_header hdr;
+	uint32_t pacmark;
+	struct rpc_request_hdr *rq = buffer;
+	struct rr_remote_endpoint *r_ept;
+	unsigned long flags;
+	int needed;
+	DEFINE_WAIT(__wait);
+
+	/* TODO: fragmentation for large outbound packets */
+	if (count > (RPCROUTER_MSGSIZE_MAX - sizeof(uint32_t)) || !count)
+		return -EINVAL;
+
+	/* snoop the RPC packet and enforce permissions */
+
+	/* has to have at least the xid and type fields */
+	if (count < (sizeof(uint32_t) * 2)) {
+		printk(KERN_ERR "rr_write: rejecting runt packet\n");
+		return -EINVAL;
+	}
+
+	if (rq->type == 0) {
+		/* RPC CALL */
+		if (count < (sizeof(uint32_t) * 6)) {
+			printk(KERN_ERR
+			       "rr_write: rejecting runt call packet\n");
+			return -EINVAL;
+		}
+		if (ept->dst_pid == 0xffffffff) {
+			printk(KERN_ERR "rr_write: not connected\n");
+			return -ENOTCONN;
+		}
+
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+		if ((ept->dst_prog != rq->prog) ||
+			!msm_rpc_is_compatible_version(
+					be32_to_cpu(ept->dst_vers),
+					be32_to_cpu(rq->vers))) {
+#else
+		if (ept->dst_prog != rq->prog || ept->dst_vers != rq->vers) {
+#endif
+			printk(KERN_ERR
+			       "rr_write: cannot write to %08x:%d "
+			       "(bound to %08x:%d)\n",
+			       be32_to_cpu(rq->prog), be32_to_cpu(rq->vers),
+			       be32_to_cpu(ept->dst_prog),
+			       be32_to_cpu(ept->dst_vers));
+			return -EINVAL;
+		}
+		hdr.dst_pid = ept->dst_pid;
+		hdr.dst_cid = ept->dst_cid;
+		IO("CALL on ept %p to %08x:%08x @ %d:%08x (%d bytes) (xid %x proc %x)\n",
+		   ept,
+		   be32_to_cpu(rq->prog), be32_to_cpu(rq->vers),
+		   ept->dst_pid, ept->dst_cid, count,
+		   be32_to_cpu(rq->xid), be32_to_cpu(rq->procedure));
+	} else {
+		/* RPC REPLY */
+		/* TODO: locking */
+		if (ept->reply_pid == 0xffffffff) {
+			printk(KERN_ERR
+			       "rr_write: rejecting unexpected reply\n");
+			return -EINVAL;
+		}
+		if (ept->reply_xid != rq->xid) {
+			printk(KERN_ERR
+			       "rr_write: rejecting packet w/ bad xid\n");
+			return -EINVAL;
+		}
+
+		hdr.dst_pid = ept->reply_pid;
+		hdr.dst_cid = ept->reply_cid;
+
+		/* consume this reply */
+		ept->reply_pid = 0xffffffff;
+
+		IO("REPLY on ept %p to xid=%d @ %d:%08x (%d bytes)\n",
+		   ept,
+		   be32_to_cpu(rq->xid), hdr.dst_pid, hdr.dst_cid, count);
+	}
+
+	r_ept = rpcrouter_lookup_remote_endpoint(hdr.dst_cid);
+
+	if (!r_ept) {
+		printk(KERN_ERR
+			"msm_rpc_write(): No route to ept "
+			"[PID %x CID %x]\n", hdr.dst_pid, hdr.dst_cid);
+		return -EHOSTUNREACH;
+	}
+
+	/* Create routing header */
+	hdr.type = RPCROUTER_CTRL_CMD_DATA;
+	hdr.version = RPCROUTER_VERSION;
+	hdr.src_pid = ept->pid;
+	hdr.src_cid = ept->cid;
+	hdr.confirm_rx = 0;
+	hdr.size = count + sizeof(uint32_t);
+
+	for (;;) {
+		prepare_to_wait(&r_ept->quota_wait, &__wait,
+				TASK_INTERRUPTIBLE);
+		spin_lock_irqsave(&r_ept->quota_lock, flags);
+		if (r_ept->tx_quota_cntr < RPCROUTER_DEFAULT_RX_QUOTA)
+			break;
+		if (signal_pending(current) &&
+		    (!(ept->flags & MSM_RPC_UNINTERRUPTIBLE)))
+			break;
+		spin_unlock_irqrestore(&r_ept->quota_lock, flags);
+		schedule();
+	}
+	finish_wait(&r_ept->quota_wait, &__wait);
+
+	if (signal_pending(current) &&
+	    (!(ept->flags & MSM_RPC_UNINTERRUPTIBLE))) {
+		spin_unlock_irqrestore(&r_ept->quota_lock, flags);
+		return -ERESTARTSYS;
+	}
+	r_ept->tx_quota_cntr++;
+	if (r_ept->tx_quota_cntr == RPCROUTER_DEFAULT_RX_QUOTA)
+		hdr.confirm_rx = 1;
+
+	/* bump pacmark while interrupts disabled to avoid race
+	 * probably should be atomic op instead
+	 */
+	pacmark = PACMARK(count, ++next_pacmarkid, 0, 1);
+
+	spin_unlock_irqrestore(&r_ept->quota_lock, flags);
+
+	spin_lock_irqsave(&smd_lock, flags);
+
+	needed = sizeof(hdr) + hdr.size;
+	while (smd_write_avail(smd_channel) < needed) {
+		spin_unlock_irqrestore(&smd_lock, flags);
+		msleep(250);
+		spin_lock_irqsave(&smd_lock, flags);
+	}
+
+	/* TODO: deal with full fifo */
+	smd_write(smd_channel, &hdr, sizeof(hdr));
+	smd_write(smd_channel, &pacmark, sizeof(pacmark));
+	smd_write(smd_channel, buffer, count);
+
+	spin_unlock_irqrestore(&smd_lock, flags);
+
+	return count;
+}
+EXPORT_SYMBOL(msm_rpc_write);
+
+/*
+ * NOTE: It is the responsibility of the caller to kfree buffer
+ */
+int msm_rpc_read(struct msm_rpc_endpoint *ept, void **buffer,
+		 unsigned user_len, long timeout)
+{
+	struct rr_fragment *frag, *next;
+	char *buf;
+	int rc;
+
+	rc = __msm_rpc_read(ept, &frag, user_len, timeout);
+	if (rc <= 0)
+		return rc;
+
+	/* single-fragment messages conveniently can be
+	 * returned as-is (the buffer is at the front)
+	 */
+	if (frag->next == 0) {
+		*buffer = (void*) frag;
+		return rc;
+	}
+
+	/* multi-fragment messages, we have to do it the
+	 * hard way, which is rather disgusting right now
+	 */
+	buf = rr_malloc(rc);
+	*buffer = buf;
+
+	while (frag != NULL) {
+		memcpy(buf, frag->data, frag->length);
+		next = frag->next;
+		buf += frag->length;
+		kfree(frag);
+		frag = next;
+	}
+
+	return rc;
+}
+
+int msm_rpc_call(struct msm_rpc_endpoint *ept, uint32_t proc,
+		 void *_request, int request_size,
+		 long timeout)
+{
+	return msm_rpc_call_reply(ept, proc,
+				  _request, request_size,
+				  NULL, 0, timeout);
+}
+EXPORT_SYMBOL(msm_rpc_call);
+
+int msm_rpc_call_reply(struct msm_rpc_endpoint *ept, uint32_t proc,
+		       void *_request, int request_size,
+		       void *_reply, int reply_size,
+		       long timeout)
+{
+	struct rpc_request_hdr *req = _request;
+	struct rpc_reply_hdr *reply;
+	int rc;
+
+	if (request_size < sizeof(*req))
+		return -ETOOSMALL;
+
+	if (ept->dst_pid == 0xffffffff)
+		return -ENOTCONN;
+
+	/* We can't use msm_rpc_setup_req() here, because dst_prog and
+	 * dst_vers here are already in BE.
+	 */
+	memset(req, 0, sizeof(*req));
+	req->xid = cpu_to_be32(atomic_add_return(1, &next_xid));
+	req->rpc_vers = cpu_to_be32(2);
+	req->prog = ept->dst_prog;
+	req->vers = ept->dst_vers;
+	req->procedure = cpu_to_be32(proc);
+
+	rc = msm_rpc_write(ept, req, request_size);
+	if (rc < 0)
+		return rc;
+
+	for (;;) {
+		rc = msm_rpc_read(ept, (void*) &reply, -1, timeout);
+		if (rc < 0)
+			return rc;
+		if (rc < (3 * sizeof(uint32_t))) {
+			rc = -EIO;
+			break;
+		}
+		/* we should not get CALL packets -- ignore them */
+		if (reply->type == 0) {
+			kfree(reply);
+			continue;
+		}
+		/* If an earlier call timed out, we could get the (no
+		 * longer wanted) reply for it.  Ignore replies that
+		 * we don't expect.
+		 */
+		if (reply->xid != req->xid) {
+			kfree(reply);
+			continue;
+		}
+		if (reply->reply_stat != 0) {
+			rc = -EPERM;
+			break;
+		}
+		if (reply->data.acc_hdr.accept_stat != 0) {
+			rc = -EINVAL;
+			break;
+		}
+		if (_reply == NULL) {
+			rc = 0;
+			break;
+		}
+		if (rc > reply_size) {
+			rc = -ENOMEM;
+		} else {
+			memcpy(_reply, reply, rc);
+		}
+		break;
+	}
+	kfree(reply);
+	return rc;
+}
+EXPORT_SYMBOL(msm_rpc_call_reply);
+
+
+static inline int ept_packet_available(struct msm_rpc_endpoint *ept)
+{
+	unsigned long flags;
+	int ret;
+	spin_lock_irqsave(&ept->read_q_lock, flags);
+	ret = !list_empty(&ept->read_q);
+	spin_unlock_irqrestore(&ept->read_q_lock, flags);
+	return ret;
+}
+
+int __msm_rpc_read(struct msm_rpc_endpoint *ept,
+		   struct rr_fragment **frag_ret,
+		   unsigned len, long timeout)
+{
+	struct rr_packet *pkt;
+	struct rpc_request_hdr *rq;
+	DEFINE_WAIT(__wait);
+	unsigned long flags;
+	int rc;
+
+	IO("READ on ept %p\n", ept);
+
+	if (ept->flags & MSM_RPC_UNINTERRUPTIBLE) {
+		if (timeout < 0) {
+			wait_event(ept->wait_q, ept_packet_available(ept));
+		} else {
+			rc = wait_event_timeout(
+				ept->wait_q, ept_packet_available(ept),
+				timeout);
+			if (rc == 0)
+				return -ETIMEDOUT;
+		}
+	} else {
+		if (timeout < 0) {
+			rc = wait_event_interruptible(
+				ept->wait_q, ept_packet_available(ept));
+			if (rc < 0)
+				return rc;
+		} else {
+			rc = wait_event_interruptible_timeout(
+				ept->wait_q, ept_packet_available(ept),
+				timeout);
+			if (rc == 0)
+				return -ETIMEDOUT;
+		}
+	}
+
+	spin_lock_irqsave(&ept->read_q_lock, flags);
+	if (list_empty(&ept->read_q)) {
+		spin_unlock_irqrestore(&ept->read_q_lock, flags);
+		return -EAGAIN;
+	}
+	pkt = list_first_entry(&ept->read_q, struct rr_packet, list);
+	if (pkt->length > len) {
+		spin_unlock_irqrestore(&ept->read_q_lock, flags);
+		return -ETOOSMALL;
+	}
+	list_del(&pkt->list);
+	if (list_empty(&ept->read_q))
+		wake_unlock(&ept->read_q_wake_lock);
+	spin_unlock_irqrestore(&ept->read_q_lock, flags);
+
+	rc = pkt->length;
+
+	*frag_ret = pkt->first;
+	rq = (void*) pkt->first->data;
+	if ((rc >= (sizeof(uint32_t) * 3)) && (rq->type == 0)) {
+		IO("READ on ept %p is a CALL on %08x:%08x proc %d xid %d\n",
+			ept, be32_to_cpu(rq->prog), be32_to_cpu(rq->vers),
+			be32_to_cpu(rq->procedure),
+			be32_to_cpu(rq->xid));
+		/* RPC CALL */
+		if (ept->reply_pid != 0xffffffff) {
+			printk(KERN_WARNING
+			       "rr_read: lost previous reply xid...\n");
+		}
+		/* TODO: locking? */
+		ept->reply_pid = pkt->hdr.src_pid;
+		ept->reply_cid = pkt->hdr.src_cid;
+		ept->reply_xid = rq->xid;
+	}
+#if TRACE_RPC_MSG
+	else if ((rc >= (sizeof(uint32_t) * 3)) && (rq->type == 1))
+		IO("READ on ept %p is a REPLY\n", ept);
+	else IO("READ on ept %p (%d bytes)\n", ept, rc);
+#endif
+
+	kfree(pkt);
+	return rc;
+}
+
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+int msm_rpc_is_compatible_version(uint32_t server_version,
+				  uint32_t client_version)
+{
+	if ((server_version & RPC_VERSION_MODE_MASK) !=
+	    (client_version & RPC_VERSION_MODE_MASK))
+		return 0;
+
+	if (server_version & RPC_VERSION_MODE_MASK)
+		return server_version == client_version;
+
+	return ((server_version & RPC_VERSION_MAJOR_MASK) ==
+		(client_version & RPC_VERSION_MAJOR_MASK)) &&
+		((server_version & RPC_VERSION_MINOR_MASK) >=
+		(client_version & RPC_VERSION_MINOR_MASK));
+}
+EXPORT_SYMBOL(msm_rpc_is_compatible_version);
+
+static int msm_rpc_get_compatible_server(uint32_t prog,
+					uint32_t ver,
+					uint32_t *found_vers)
+{
+	struct rr_server *server;
+	unsigned long     flags;
+	if (found_vers == NULL)
+		return 0;
+
+	spin_lock_irqsave(&server_list_lock, flags);
+	list_for_each_entry(server, &server_list, list) {
+		if ((server->prog == prog) &&
+		    msm_rpc_is_compatible_version(server->vers, ver)) {
+			*found_vers = server->vers;
+			spin_unlock_irqrestore(&server_list_lock, flags);
+			return 0;
+		}
+	}
+	spin_unlock_irqrestore(&server_list_lock, flags);
+	return -1;
+}
+#endif
+
+struct msm_rpc_endpoint *msm_rpc_connect(uint32_t prog, uint32_t vers, unsigned flags)
+{
+	struct msm_rpc_endpoint *ept;
+	struct rr_server *server;
+
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+	if (!(vers & RPC_VERSION_MODE_MASK)) {
+		uint32_t found_vers;
+		if (msm_rpc_get_compatible_server(prog, vers, &found_vers) < 0)
+			return ERR_PTR(-EHOSTUNREACH);
+		if (found_vers != vers) {
+			D("RPC using new version %08x:{%08x --> %08x}\n",
+			 	prog, vers, found_vers);
+			vers = found_vers;
+		}
+	}
+#endif
+
+	server = rpcrouter_lookup_server(prog, vers);
+	if (!server)
+		return ERR_PTR(-EHOSTUNREACH);
+
+	ept = msm_rpc_open();
+	if (IS_ERR(ept))
+		return ept;
+
+	ept->flags = flags;
+	ept->dst_pid = server->pid;
+	ept->dst_cid = server->cid;
+	ept->dst_prog = cpu_to_be32(prog);
+	ept->dst_vers = cpu_to_be32(vers);
+
+	return ept;
+}
+EXPORT_SYMBOL(msm_rpc_connect);
+
+uint32_t msm_rpc_get_vers(struct msm_rpc_endpoint *ept)
+{
+	return be32_to_cpu(ept->dst_vers);
+}
+EXPORT_SYMBOL(msm_rpc_get_vers);
+
+/* TODO: permission check? */
+int msm_rpc_register_server(struct msm_rpc_endpoint *ept,
+			    uint32_t prog, uint32_t vers)
+{
+	int rc;
+	union rr_control_msg msg;
+	struct rr_server *server;
+
+	server = rpcrouter_create_server(ept->pid, ept->cid,
+					 prog, vers);
+	if (!server)
+		return -ENODEV;
+
+	msg.srv.cmd = RPCROUTER_CTRL_CMD_NEW_SERVER;
+	msg.srv.pid = ept->pid;
+	msg.srv.cid = ept->cid;
+	msg.srv.prog = prog;
+	msg.srv.vers = vers;
+
+	RR("x NEW_SERVER id=%d:%08x prog=%08x:%08x\n",
+	   ept->pid, ept->cid, prog, vers);
+
+	rc = rpcrouter_send_control_msg(&msg);
+	if (rc < 0)
+		return rc;
+
+	return 0;
+}
+
+/* TODO: permission check -- disallow unreg of somebody else's server */
+int msm_rpc_unregister_server(struct msm_rpc_endpoint *ept,
+			      uint32_t prog, uint32_t vers)
+{
+	struct rr_server *server;
+	server = rpcrouter_lookup_server(prog, vers);
+
+	if (!server)
+		return -ENOENT;
+	rpcrouter_destroy_server(server);
+	return 0;
+}
+
+static int msm_rpcrouter_probe(struct platform_device *pdev)
+{
+	int rc;
+
+	/* Initialize what we need to start processing */
+	INIT_LIST_HEAD(&local_endpoints);
+	INIT_LIST_HEAD(&remote_endpoints);
+
+	init_waitqueue_head(&newserver_wait);
+	init_waitqueue_head(&smd_wait);
+	wake_lock_init(&rpcrouter_wake_lock, WAKE_LOCK_SUSPEND, "SMD_RPCCALL");
+
+	rpcrouter_workqueue = create_singlethread_workqueue("rpcrouter");
+	if (!rpcrouter_workqueue)
+		return -ENOMEM;
+
+	rc = msm_rpcrouter_init_devices();
+	if (rc < 0)
+		goto fail_destroy_workqueue;
+
+	/* Open up SMD channel 2 */
+	initialized = 0;
+	rc = smd_open("SMD_RPCCALL", &smd_channel, NULL, rpcrouter_smdnotify);
+	if (rc < 0)
+		goto fail_remove_devices;
+
+	queue_work(rpcrouter_workqueue, &work_read_data);
+	return 0;
+
+ fail_remove_devices:
+	msm_rpcrouter_exit_devices();
+ fail_destroy_workqueue:
+	destroy_workqueue(rpcrouter_workqueue);
+	return rc;
+}
+
+static struct platform_driver msm_smd_channel2_driver = {
+	.probe		= msm_rpcrouter_probe,
+	.driver		= {
+			.name	= "SMD_RPCCALL",
+			.owner	= THIS_MODULE,
+	},
+};
+
+static int __init rpcrouter_init(void)
+{
+	return platform_driver_register(&msm_smd_channel2_driver);
+}
+
+module_init(rpcrouter_init);
+MODULE_DESCRIPTION("MSM RPC Router");
+MODULE_AUTHOR("San Mehat <san@android.com>");
+MODULE_LICENSE("GPL");
diff --git a/drivers/staging/dream/smd/smd_rpcrouter.h b/drivers/staging/dream/smd/smd_rpcrouter.h
new file mode 100644
index 0000000..a7416a2
--- /dev/null
+++ b/drivers/staging/dream/smd/smd_rpcrouter.h
@@ -0,0 +1,195 @@
+/** arch/arm/mach-msm/smd_rpcrouter.h
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Copyright (c) 2007-2008 QUALCOMM Incorporated.
+ * Author: San Mehat <san@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+
+#ifndef _ARCH_ARM_MACH_MSM_SMD_RPCROUTER_H
+#define _ARCH_ARM_MACH_MSM_SMD_RPCROUTER_H
+
+#include <linux/types.h>
+#include <linux/list.h>
+#include <linux/cdev.h>
+#include <linux/platform_device.h>
+#include <linux/wakelock.h>
+
+#include <mach/msm_smd.h>
+#include <mach/msm_rpcrouter.h>
+
+/* definitions for the R2R wire protcol */
+
+#define RPCROUTER_VERSION			1
+#define RPCROUTER_PROCESSORS_MAX		4
+#define RPCROUTER_MSGSIZE_MAX			512
+
+#define RPCROUTER_CLIENT_BCAST_ID		0xffffffff
+#define RPCROUTER_ROUTER_ADDRESS		0xfffffffe
+
+#define RPCROUTER_PID_LOCAL			1
+#define RPCROUTER_PID_REMOTE			0
+
+#define RPCROUTER_CTRL_CMD_DATA			1
+#define RPCROUTER_CTRL_CMD_HELLO		2
+#define RPCROUTER_CTRL_CMD_BYE			3
+#define RPCROUTER_CTRL_CMD_NEW_SERVER		4
+#define RPCROUTER_CTRL_CMD_REMOVE_SERVER	5
+#define RPCROUTER_CTRL_CMD_REMOVE_CLIENT	6
+#define RPCROUTER_CTRL_CMD_RESUME_TX		7
+#define RPCROUTER_CTRL_CMD_EXIT			8
+
+#define RPCROUTER_DEFAULT_RX_QUOTA	5
+
+union rr_control_msg {
+	uint32_t cmd;
+	struct {
+		uint32_t cmd;
+		uint32_t prog;
+		uint32_t vers;
+		uint32_t pid;
+		uint32_t cid;
+	} srv;
+	struct {
+		uint32_t cmd;
+		uint32_t pid;
+		uint32_t cid;
+	} cli;
+};
+
+struct rr_header {
+	uint32_t version;
+	uint32_t type;
+	uint32_t src_pid;
+	uint32_t src_cid;
+	uint32_t confirm_rx;
+	uint32_t size;
+	uint32_t dst_pid;
+	uint32_t dst_cid;
+};
+
+/* internals */
+
+#define RPCROUTER_MAX_REMOTE_SERVERS		100
+
+struct rr_fragment {
+	unsigned char data[RPCROUTER_MSGSIZE_MAX];
+	uint32_t length;
+	struct rr_fragment *next;
+};
+
+struct rr_packet {
+	struct list_head list;
+	struct rr_fragment *first;
+	struct rr_fragment *last;
+	struct rr_header hdr;
+	uint32_t mid;
+	uint32_t length;
+};
+
+#define PACMARK_LAST(n) ((n) & 0x80000000)
+#define PACMARK_MID(n)  (((n) >> 16) & 0xFF)
+#define PACMARK_LEN(n)  ((n) & 0xFFFF)
+
+static inline uint32_t PACMARK(uint32_t len, uint32_t mid, uint32_t first,
+			       uint32_t last)
+{
+	return (len & 0xFFFF) |
+	  ((mid & 0xFF) << 16) |
+	  ((!!first) << 30) |
+	  ((!!last) << 31);
+}
+
+struct rr_server {
+	struct list_head list;
+
+	uint32_t pid;
+	uint32_t cid;
+	uint32_t prog;
+	uint32_t vers;
+
+	dev_t device_number;
+	struct cdev cdev;
+	struct device *device;
+	struct rpcsvr_platform_device p_device;
+	char pdev_name[32];
+};
+
+struct rr_remote_endpoint {
+	uint32_t pid;
+	uint32_t cid;
+
+	int tx_quota_cntr;
+	spinlock_t quota_lock;
+	wait_queue_head_t quota_wait;
+
+	struct list_head list;
+};
+
+struct msm_rpc_endpoint {
+	struct list_head list;
+
+	/* incomplete packets waiting for assembly */
+	struct list_head incomplete;
+
+	/* complete packets waiting to be read */
+	struct list_head read_q;
+	spinlock_t read_q_lock;
+	struct wake_lock read_q_wake_lock;
+	wait_queue_head_t wait_q;
+	unsigned flags;
+
+	/* endpoint address */
+	uint32_t pid;
+	uint32_t cid;
+
+	/* bound remote address
+	 * if not connected (dst_pid == 0xffffffff) RPC_CALL writes fail
+	 * RPC_CALLs must be to the prog/vers below or they will fail
+	 */
+	uint32_t dst_pid;
+	uint32_t dst_cid;
+	uint32_t dst_prog; /* be32 */
+	uint32_t dst_vers; /* be32 */
+
+	/* reply remote address
+	 * if reply_pid == 0xffffffff, none available
+	 * RPC_REPLY writes may only go to the pid/cid/xid of the
+	 * last RPC_CALL we received.
+	 */
+	uint32_t reply_pid;
+	uint32_t reply_cid;
+	uint32_t reply_xid; /* be32 */
+	uint32_t next_pm;   /* Pacmark sequence */
+
+	/* device node if this endpoint is accessed via userspace */
+	dev_t dev;
+};
+
+/* shared between smd_rpcrouter*.c */
+
+int __msm_rpc_read(struct msm_rpc_endpoint *ept,
+		   struct rr_fragment **frag,
+		   unsigned len, long timeout);
+
+struct msm_rpc_endpoint *msm_rpcrouter_create_local_endpoint(dev_t dev);
+int msm_rpcrouter_destroy_local_endpoint(struct msm_rpc_endpoint *ept);
+
+int msm_rpcrouter_create_server_cdev(struct rr_server *server);
+int msm_rpcrouter_create_server_pdev(struct rr_server *server);
+
+int msm_rpcrouter_init_devices(void);
+void msm_rpcrouter_exit_devices(void);
+
+extern dev_t msm_rpcrouter_devno;
+extern struct class *msm_rpcrouter_class;
+#endif
diff --git a/drivers/staging/dream/smd/smd_rpcrouter_device.c b/drivers/staging/dream/smd/smd_rpcrouter_device.c
new file mode 100644
index 0000000..cd3910b
--- /dev/null
+++ b/drivers/staging/dream/smd/smd_rpcrouter_device.c
@@ -0,0 +1,376 @@
+/* arch/arm/mach-msm/smd_rpcrouter_device.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Copyright (c) 2007-2009 QUALCOMM Incorporated.
+ * Author: San Mehat <san@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/cdev.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/types.h>
+#include <linux/delay.h>
+#include <linux/fs.h>
+#include <linux/err.h>
+#include <linux/sched.h>
+#include <linux/poll.h>
+#include <linux/platform_device.h>
+#include <linux/msm_rpcrouter.h>
+
+#include <asm/uaccess.h>
+#include <asm/byteorder.h>
+
+#include "smd_rpcrouter.h"
+
+#define SAFETY_MEM_SIZE 65536
+
+/* Next minor # available for a remote server */
+static int next_minor = 1;
+
+struct class *msm_rpcrouter_class;
+dev_t msm_rpcrouter_devno;
+
+static struct cdev rpcrouter_cdev;
+static struct device *rpcrouter_device;
+
+static int rpcrouter_open(struct inode *inode, struct file *filp)
+{
+	int rc;
+	struct msm_rpc_endpoint *ept;
+
+	rc = nonseekable_open(inode, filp);
+	if (rc < 0)
+		return rc;
+
+	ept = msm_rpcrouter_create_local_endpoint(inode->i_rdev);
+	if (!ept)
+		return -ENOMEM;
+
+	filp->private_data = ept;
+	return 0;
+}
+
+static int rpcrouter_release(struct inode *inode, struct file *filp)
+{
+	struct msm_rpc_endpoint *ept;
+	ept = (struct msm_rpc_endpoint *) filp->private_data;
+
+	return msm_rpcrouter_destroy_local_endpoint(ept);
+}
+
+static ssize_t rpcrouter_read(struct file *filp, char __user *buf,
+			      size_t count, loff_t *ppos)
+{
+	struct msm_rpc_endpoint *ept;
+	struct rr_fragment *frag, *next;
+	int rc;
+
+	ept = (struct msm_rpc_endpoint *) filp->private_data;
+
+	rc = __msm_rpc_read(ept, &frag, count, -1);
+	if (rc < 0)
+		return rc;
+
+	count = rc;
+
+	while (frag != NULL) {
+		if (copy_to_user(buf, frag->data, frag->length)) {
+			printk(KERN_ERR
+			       "rpcrouter: could not copy all read data to user!\n");
+			rc = -EFAULT;
+		}
+		buf += frag->length;
+		next = frag->next;
+		kfree(frag);
+		frag = next;
+	}
+
+	return rc;
+}
+
+static ssize_t rpcrouter_write(struct file *filp, const char __user *buf,
+				size_t count, loff_t *ppos)
+{
+	struct msm_rpc_endpoint	*ept;
+	int rc = 0;
+	void *k_buffer;
+
+	ept = (struct msm_rpc_endpoint *) filp->private_data;
+
+	/* A check for safety, this seems non-standard */
+	if (count > SAFETY_MEM_SIZE)
+		return -EINVAL;
+
+	k_buffer = kmalloc(count, GFP_KERNEL);
+	if (!k_buffer)
+		return -ENOMEM;
+
+	if (copy_from_user(k_buffer, buf, count)) {
+		rc = -EFAULT;
+		goto write_out_free;
+	}
+
+	rc = msm_rpc_write(ept, k_buffer, count);
+	if (rc < 0)
+		goto write_out_free;
+
+	rc = count;
+write_out_free:
+	kfree(k_buffer);
+	return rc;
+}
+
+static unsigned int rpcrouter_poll(struct file *filp,
+				   struct poll_table_struct *wait)
+{
+	struct msm_rpc_endpoint *ept;
+	unsigned mask = 0;
+	ept = (struct msm_rpc_endpoint *) filp->private_data;
+
+	/* If there's data already in the read queue, return POLLIN.
+	 * Else, wait for the requested amount of time, and check again.
+	 */
+
+	if (!list_empty(&ept->read_q))
+		mask |= POLLIN;
+
+	if (!mask) {
+		poll_wait(filp, &ept->wait_q, wait);
+		if (!list_empty(&ept->read_q))
+			mask |= POLLIN;
+	}
+
+	return mask;
+}
+
+static long rpcrouter_ioctl(struct file *filp, unsigned int cmd,
+			    unsigned long arg)
+{
+	struct msm_rpc_endpoint *ept;
+	struct rpcrouter_ioctl_server_args server_args;
+	int rc = 0;
+	uint32_t n;
+
+	ept = (struct msm_rpc_endpoint *) filp->private_data;
+	switch (cmd) {
+
+	case RPC_ROUTER_IOCTL_GET_VERSION:
+		n = RPC_ROUTER_VERSION_V1;
+		rc = put_user(n, (unsigned int *) arg);
+		break;
+
+	case RPC_ROUTER_IOCTL_GET_MTU:
+		/* the pacmark word reduces the actual payload
+		 * possible per message
+		 */
+		n = RPCROUTER_MSGSIZE_MAX - sizeof(uint32_t);
+		rc = put_user(n, (unsigned int *) arg);
+		break;
+
+	case RPC_ROUTER_IOCTL_REGISTER_SERVER:
+		rc = copy_from_user(&server_args, (void *) arg,
+				    sizeof(server_args));
+		if (rc < 0)
+			break;
+		msm_rpc_register_server(ept,
+					server_args.prog,
+					server_args.vers);
+		break;
+
+	case RPC_ROUTER_IOCTL_UNREGISTER_SERVER:
+		rc = copy_from_user(&server_args, (void *) arg,
+				    sizeof(server_args));
+		if (rc < 0)
+			break;
+
+		msm_rpc_unregister_server(ept,
+					  server_args.prog,
+					  server_args.vers);
+		break;
+
+	case RPC_ROUTER_IOCTL_GET_MINOR_VERSION:
+		n = MSM_RPC_GET_MINOR(msm_rpc_get_vers(ept));
+		rc = put_user(n, (unsigned int *)arg);
+		break;
+
+	default:
+		rc = -EINVAL;
+		break;
+	}
+
+	return rc;
+}
+
+static struct file_operations rpcrouter_server_fops = {
+	.owner	 = THIS_MODULE,
+	.open	 = rpcrouter_open,
+	.release = rpcrouter_release,
+	.read	 = rpcrouter_read,
+	.write	 = rpcrouter_write,
+	.poll    = rpcrouter_poll,
+	.unlocked_ioctl	 = rpcrouter_ioctl,
+};
+
+static struct file_operations rpcrouter_router_fops = {
+	.owner	 = THIS_MODULE,
+	.open	 = rpcrouter_open,
+	.release = rpcrouter_release,
+	.read	 = rpcrouter_read,
+	.write	 = rpcrouter_write,
+	.poll    = rpcrouter_poll,
+	.unlocked_ioctl = rpcrouter_ioctl,
+};
+
+int msm_rpcrouter_create_server_cdev(struct rr_server *server)
+{
+	int rc;
+	uint32_t dev_vers;
+
+	if (next_minor == RPCROUTER_MAX_REMOTE_SERVERS) {
+		printk(KERN_ERR
+		       "rpcrouter: Minor numbers exhausted - Increase "
+		       "RPCROUTER_MAX_REMOTE_SERVERS\n");
+		return -ENOBUFS;
+	}
+
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+	/* Servers with bit 31 set are remote msm servers with hashkey version.
+	 * Servers with bit 31 not set are remote msm servers with
+	 * backwards compatible version type in which case the minor number
+	 * (lower 16 bits) is set to zero.
+	 *
+	 */
+	if ((server->vers & RPC_VERSION_MODE_MASK))
+		dev_vers = server->vers;
+	else
+		dev_vers = server->vers & RPC_VERSION_MAJOR_MASK;
+#else
+	dev_vers = server->vers;
+#endif
+
+	server->device_number =
+		MKDEV(MAJOR(msm_rpcrouter_devno), next_minor++);
+
+	server->device =
+		device_create(msm_rpcrouter_class, rpcrouter_device,
+			      server->device_number, NULL, "%.8x:%.8x",
+			      server->prog, dev_vers);
+	if (IS_ERR(server->device)) {
+		printk(KERN_ERR
+		       "rpcrouter: Unable to create device (%ld)\n",
+		       PTR_ERR(server->device));
+		return PTR_ERR(server->device);;
+	}
+
+	cdev_init(&server->cdev, &rpcrouter_server_fops);
+	server->cdev.owner = THIS_MODULE;
+
+	rc = cdev_add(&server->cdev, server->device_number, 1);
+	if (rc < 0) {
+		printk(KERN_ERR
+		       "rpcrouter: Unable to add chrdev (%d)\n", rc);
+		device_destroy(msm_rpcrouter_class, server->device_number);
+		return rc;
+	}
+	return 0;
+}
+
+/* for backward compatible version type (31st bit cleared)
+ * clearing minor number (lower 16 bits) in device name
+ * is neccessary for driver binding
+ */
+int msm_rpcrouter_create_server_pdev(struct rr_server *server)
+{
+	sprintf(server->pdev_name, "rs%.8x:%.8x",
+		server->prog,
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+		(server->vers & RPC_VERSION_MODE_MASK) ? server->vers :
+		(server->vers & RPC_VERSION_MAJOR_MASK));
+#else
+		server->vers);
+#endif
+
+	server->p_device.base.id = -1;
+	server->p_device.base.name = server->pdev_name;
+
+	server->p_device.prog = server->prog;
+	server->p_device.vers = server->vers;
+
+	platform_device_register(&server->p_device.base);
+	return 0;
+}
+
+int msm_rpcrouter_init_devices(void)
+{
+	int rc;
+	int major;
+
+	/* Create the device nodes */
+	msm_rpcrouter_class = class_create(THIS_MODULE, "oncrpc");
+	if (IS_ERR(msm_rpcrouter_class)) {
+		rc = -ENOMEM;
+		printk(KERN_ERR
+		       "rpcrouter: failed to create oncrpc class\n");
+		goto fail;
+	}
+
+	rc = alloc_chrdev_region(&msm_rpcrouter_devno, 0,
+				 RPCROUTER_MAX_REMOTE_SERVERS + 1,
+				 "oncrpc");
+	if (rc < 0) {
+		printk(KERN_ERR
+		       "rpcrouter: Failed to alloc chardev region (%d)\n", rc);
+		goto fail_destroy_class;
+	}
+
+	major = MAJOR(msm_rpcrouter_devno);
+	rpcrouter_device = device_create(msm_rpcrouter_class, NULL,
+					 msm_rpcrouter_devno, NULL, "%.8x:%d",
+					 0, 0);
+	if (IS_ERR(rpcrouter_device)) {
+		rc = -ENOMEM;
+		goto fail_unregister_cdev_region;
+	}
+
+	cdev_init(&rpcrouter_cdev, &rpcrouter_router_fops);
+	rpcrouter_cdev.owner = THIS_MODULE;
+
+	rc = cdev_add(&rpcrouter_cdev, msm_rpcrouter_devno, 1);
+	if (rc < 0)
+		goto fail_destroy_device;
+
+	return 0;
+
+fail_destroy_device:
+	device_destroy(msm_rpcrouter_class, msm_rpcrouter_devno);
+fail_unregister_cdev_region:
+	unregister_chrdev_region(msm_rpcrouter_devno,
+				 RPCROUTER_MAX_REMOTE_SERVERS + 1);
+fail_destroy_class:
+	class_destroy(msm_rpcrouter_class);
+fail:
+	return rc;
+}
+
+void msm_rpcrouter_exit_devices(void)
+{
+	cdev_del(&rpcrouter_cdev);
+	device_destroy(msm_rpcrouter_class, msm_rpcrouter_devno);
+	unregister_chrdev_region(msm_rpcrouter_devno,
+				 RPCROUTER_MAX_REMOTE_SERVERS + 1);
+	class_destroy(msm_rpcrouter_class);
+}
+
diff --git a/drivers/staging/dream/smd/smd_rpcrouter_servers.c b/drivers/staging/dream/smd/smd_rpcrouter_servers.c
new file mode 100644
index 0000000..2597bbb
--- /dev/null
+++ b/drivers/staging/dream/smd/smd_rpcrouter_servers.c
@@ -0,0 +1,229 @@
+/* arch/arm/mach-msm/rpc_servers.c
+ *
+ * Copyright (C) 2007 Google, Inc.
+ * Author: Iliyan Malchev <ibm@android.com>
+ *
+ * This software is licensed under the terms of the GNU General Public
+ * License version 2, as published by the Free Software Foundation, and
+ * may be copied, distributed, and modified under those terms.
+ *
+ * This program 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.
+ *
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/string.h>
+#include <linux/errno.h>
+#include <linux/cdev.h>
+#include <linux/init.h>
+#include <linux/device.h>
+#include <linux/types.h>
+#include <linux/fs.h>
+#include <linux/kthread.h>
+#include <linux/delay.h>
+#include <linux/platform_device.h>
+#include <linux/wakelock.h>
+
+#include <linux/msm_rpcrouter.h>
+#include <linux/uaccess.h>
+
+#include <mach/msm_rpcrouter.h>
+#include "smd_rpcrouter.h"
+
+static struct msm_rpc_endpoint *endpoint;
+
+#define FLAG_REGISTERED 0x0001
+
+static LIST_HEAD(rpc_server_list);
+static DEFINE_MUTEX(rpc_server_list_lock);
+static int rpc_servers_active;
+static struct wake_lock rpc_servers_wake_lock;
+
+static void rpc_server_register(struct msm_rpc_server *server)
+{
+	int rc;
+	rc = msm_rpc_register_server(endpoint, server->prog, server->vers);
+	if (rc < 0)
+		printk(KERN_ERR "[rpcserver] error registering %p @ %08x:%d\n",
+		       server, server->prog, server->vers);
+}
+
+static struct msm_rpc_server *rpc_server_find(uint32_t prog, uint32_t vers)
+{
+	struct msm_rpc_server *server;
+
+	mutex_lock(&rpc_server_list_lock);
+	list_for_each_entry(server, &rpc_server_list, list) {
+		if ((server->prog == prog) &&
+#if CONFIG_MSM_AMSS_VERSION >= 6350
+		    msm_rpc_is_compatible_version(server->vers, vers)) {
+#else
+		    server->vers == vers) {
+#endif
+			mutex_unlock(&rpc_server_list_lock);
+			return server;
+		}
+	}
+	mutex_unlock(&rpc_server_list_lock);
+	return NULL;
+}
+
+static void rpc_server_register_all(void)
+{
+	struct msm_rpc_server *server;
+
+	mutex_lock(&rpc_server_list_lock);
+	list_for_each_entry(server, &rpc_server_list, list) {
+		if (!(server->flags & FLAG_REGISTERED)) {
+			rpc_server_register(server);
+			server->flags |= FLAG_REGISTERED;
+		}
+	}
+	mutex_unlock(&rpc_server_list_lock);
+}
+
+int msm_rpc_create_server(struct msm_rpc_server *server)
+{
+	/* make sure we're in a sane state first */
+	server->flags = 0;
+	INIT_LIST_HEAD(&server->list);
+
+	mutex_lock(&rpc_server_list_lock);
+	list_add(&server->list, &rpc_server_list);
+	if (rpc_servers_active) {
+		rpc_server_register(server);
+		server->flags |= FLAG_REGISTERED;
+	}
+	mutex_unlock(&rpc_server_list_lock);
+
+	return 0;
+}
+
+static int rpc_send_accepted_void_reply(struct msm_rpc_endpoint *client,
+					uint32_t xid, uint32_t accept_status)
+{
+	int rc = 0;
+	uint8_t reply_buf[sizeof(struct rpc_reply_hdr)];
+	struct rpc_reply_hdr *reply = (struct rpc_reply_hdr *)reply_buf;
+
+	reply->xid = cpu_to_be32(xid);
+	reply->type = cpu_to_be32(1); /* reply */
+	reply->reply_stat = cpu_to_be32(RPCMSG_REPLYSTAT_ACCEPTED);
+
+	reply->data.acc_hdr.accept_stat = cpu_to_be32(accept_status);
+	reply->data.acc_hdr.verf_flavor = 0;
+	reply->data.acc_hdr.verf_length = 0;
+
+	rc = msm_rpc_write(client, reply_buf, sizeof(reply_buf));
+	if (rc < 0)
+		printk(KERN_ERR
+		       "%s: could not write response: %d\n",
+		       __FUNCTION__, rc);
+
+	return rc;
+}
+
+static int rpc_servers_thread(void *data)
+{
+	void *buffer;
+	struct rpc_request_hdr *req;
+	struct msm_rpc_server *server;
+	int rc;
+
+	for (;;) {
+		wake_unlock(&rpc_servers_wake_lock);
+		rc = wait_event_interruptible(endpoint->wait_q,
+						!list_empty(&endpoint->read_q));
+		wake_lock(&rpc_servers_wake_lock);
+		rc = msm_rpc_read(endpoint, &buffer, -1, -1);
+		if (rc < 0) {
+			printk(KERN_ERR "%s: could not read: %d\n",
+			       __FUNCTION__, rc);
+			break;
+		}
+		req = (struct rpc_request_hdr *)buffer;
+
+		req->type = be32_to_cpu(req->type);
+		req->xid = be32_to_cpu(req->xid);
+		req->rpc_vers = be32_to_cpu(req->rpc_vers);
+		req->prog = be32_to_cpu(req->prog);
+		req->vers = be32_to_cpu(req->vers);
+		req->procedure = be32_to_cpu(req->procedure);
+
+		server = rpc_server_find(req->prog, req->vers);
+
+		if (req->rpc_vers != 2)
+			continue;
+		if (req->type != 0)
+			continue;
+		if (!server) {
+			rpc_send_accepted_void_reply(
+				endpoint, req->xid,
+				RPC_ACCEPTSTAT_PROG_UNAVAIL);
+			continue;
+		}
+
+		rc = server->rpc_call(server, req, rc);
+
+		switch (rc) {
+		case 0:
+			rpc_send_accepted_void_reply(
+				endpoint, req->xid,
+				RPC_ACCEPTSTAT_SUCCESS);
+			break;
+		default:
+			rpc_send_accepted_void_reply(
+				endpoint, req->xid,
+				RPC_ACCEPTSTAT_PROG_UNAVAIL);
+			break;
+		}
+
+		kfree(buffer);
+	}
+
+	do_exit(0);
+}
+
+static int rpcservers_probe(struct platform_device *pdev)
+{
+	struct task_struct *server_thread;
+
+	endpoint = msm_rpc_open();
+	if (IS_ERR(endpoint))
+		return PTR_ERR(endpoint);
+
+	/* we're online -- register any servers installed beforehand */
+	rpc_servers_active = 1;
+	rpc_server_register_all();
+
+	/* start the kernel thread */
+	server_thread = kthread_run(rpc_servers_thread, NULL, "krpcserversd");
+	if (IS_ERR(server_thread))
+		return PTR_ERR(server_thread);
+
+	return 0;
+}
+
+static struct platform_driver rpcservers_driver = {
+	.probe	= rpcservers_probe,
+	.driver	= {
+		.name	= "oncrpc_router",
+		.owner	= THIS_MODULE,
+	},
+};
+
+static int __init rpc_servers_init(void)
+{
+	wake_lock_init(&rpc_servers_wake_lock, WAKE_LOCK_SUSPEND, "rpc_server");
+	return platform_driver_register(&rpcservers_driver);
+}
+
+module_init(rpc_servers_init);
+
+MODULE_DESCRIPTION("MSM RPC Servers");
+MODULE_AUTHOR("Iliyan Malchev <ibm@android.com>");
+MODULE_LICENSE("GPL");
-- 
1.6.4.2

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH 001/641] staging: android: binder: move debugging m ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 002/641] staging: android: binder: remove a predefine, Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 003/641] staging: android: binder: add enum usage i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 004/641] staging: android: binder: global variable ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 005/641] staging: android: binder: clean up for all ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 006/641] Staging: android: binder: cleanup some lon ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 007/641] Staging: android: lowmemorykiller: remove ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 008/641] Staging: android: lowmemorykiller: delete ..., Greg Kroah-Hartman, (Tue Sep 15, 12:03 pm)
[PATCH 009/641] Staging: android: binder: partial checkpat ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 010/641] Staging: android: lowmemorykiller: fix mod ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 011/641] staging: wlan-ng: scripts/checkpatch.pl er ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 012/641] Staging: et1310: Fix the coding style, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 013/641] Staging: rt28[67]0: remove unused md4.h, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 014/641] Staging: rtl8187se/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 015/641] Staging: rtl8192su/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 016/641] Staging: rtl8187se: remove duplicate dot11 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 017/641] Staging: rtl8192su: remove duplicate dot11 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 018/641] Staging: rtl8187se: remove unused ieee8021 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 019/641] Staging: rtl8192su: remove unused ieee8021 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 020/641] Staging: rtl8187se: remove kernel version ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 021/641] Staging: rtl8187se: remove support for old ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 022/641] Staging: rtl8187se/ieee80211: remove dead ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 023/641] Staging: rtl8187se/ieee80211: remove super ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 024/641] Staging: rtl8187se/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 025/641] Staging: rtl8187se/ieee80211: remove super ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 026/641] Staging: rtl8192su: remove kernel version ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 027/641] Staging: rtl8192su: remove support for old ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 028/641] Staging: rtl8192su/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 029/641] Staging: rtl8192su/ieee80211: switch to us ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 030/641] Staging: rtl8192su: add TODO, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 031/641] Staging: rtl8187se: add TODO, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 032/641] Staging: rtl8187se: remove ENABLE_DOT11D i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 033/641] Staging: rtl8187se: remove CONFIG_RTL8180_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 034/641] Staging: rtl8187se: remove THOMAS_TURBO ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 035/641] Staging: rtl8187se: remove CONFIG_RTL818x_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 036/641] Staging: rtl8187se: remove CONFIG_RTL8185B ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 037/641] Staging: rtl8187se: remove CONFIG_RTL8180_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 038/641] Staging: rtl8187se: remove dead code, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 039/641] Staging: rtl8187se: remove unused radio fr ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 040/641] Staging: rtl8187se: remove debugging code ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 041/641] Staging: rtl8187se: remove unused rtl8225_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 042/641] Staging: rtl8187se: cleanup r8180_rtl8225.c, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 043/641] Staging: rtl8187se: merge r8180_rtl8225.c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 044/641] Staging: rtl8187se: cleanup r8180_pm.c, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 045/641] Staging: rtl8187se: merge r8180_pm.c with ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 046/641] Staging: rtl8187se: remove unused definiti ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 047/641] Staging: rtl8187se: remove unused definiti ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 048/641] Staging: rtl8187se: cleanup r8180_rtl8225z2.c, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 049/641] Staging: rtl8187se: cleanup r8180_core.c, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 050/641] Staging: add rt3090 wireless driver, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 051/641] Staging: Add pristine upstream vt6656 driv ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 052/641] Staging: vt6656: Add includes to drivers/s ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 053/641] Staging: vt6656: Build vt6656.ko, not vntw ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 054/641] Staging: vt6656: main_usb.c: Drop obsolete ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 055/641] Staging: vt6656: Replace net_device-&gt;priv ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 056/641] Staging: vt6656: use net_device_ops for ma ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 057/641] Staging: vt6656: replace call to info with ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 058/641] Staging: vt6656: Integrate vt6656 into bui ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 059/641] Staging: vt6655: fix build when !CONFIG_WI ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 060/641] Staging: vt6655: remove dependency on WIRE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 061/641] Staging: otus: Fix warnings in staging/otu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 062/641] Staging: otus: remove dependency on WIRELE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 063/641] Staging: otus: Drop an unnecessary NULL test, Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 064/641] Staging: Comedi: Lindent changes to comdi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 065/641] Staging: comedi: no need for checking vfre ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 066/641] Staging: comedi: Remove references to dead ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 067/641] Staging: comedi: s626: Possible read buffe ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 068/641] Staging: cpc-usb: remove unused #include &lt; ..., Greg Kroah-Hartman, (Tue Sep 15, 12:04 pm)
[PATCH 069/641] Staging: wlan-ng: Remove some superflous c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 070/641] Staging: wlan-ng: Use kzfree() to securely ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 071/641] Staging: wlan-ng: Drop the special case ha ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 072/641] Staging: wlan-ng: Remove more superflous c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 073/641] Staging: wlan-ng: Convert firmware loading ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 074/641] Staging: add Support for Quatech ESU2-100 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 075/641] Staging: quatech_usb2: implement open func ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 076/641] Staging: quatech_usb2: close, read, and so ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 077/641] Staging: quatech_usb2: write_room rewrite, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 078/641] Staging: quatech_usb2: TIOCMGET and TIOCMS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 079/641] Staging: quatech_usb2: chars_in_buffer() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 080/641] Staging: quatech_usb2: vendor implementati ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 081/641] Staging: quatech_usb2: vendor implementati ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 082/641] Staging: quatech_usb2: Improve debug outpu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 083/641] Staging: quatech_usb2: Improvements to set ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 084/641] Staging: vt6656: remove dependency on kern ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 085/641] Staging: vt6656: remove dependency on WIRE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 086/641] Staging: vt665x: depend on WIRELESS_EXT, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 087/641] Staging: at76_usb: fix !CONFIG_WIRELESS_EX ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 088/641] Staging: at76_usb: replace mac2str() with %pM, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 089/641] Staging: wlan-ng: remove dependency on WIR ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[GIT PATCH] STAGING patches for 2.6.31-git, Greg KH, (Tue Sep 15, 12:05 pm)
[PATCH 090/641] Staging: vt6655: Remove Makefile refs to E ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 091/641] Staging: rtl8192su: remove ENABLE_DOT11D i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 092/641] Staging: rtl8192su: remove CONFIG_RTL8192_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 093/641] Staging: rtl8192su: remove THOMAS_TURBO ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 094/641] Staging: rtl8192su: remove USE_ONE_PIPE ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 095/641] Staging: rtl8192su: remove EEPROM_OLD_FORM ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 096/641] Staging: rtl8192su: remove USB_RX_AGGREGAT ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 097/641] Staging: rtl8192su: remove USB_TX_DRIVER_A ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 098/641] Staging: rtl8192su: remove RTL8192SU_DISAB ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 099/641] Staging: rtl8192su: remove RTL8192S_DISABL ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 100/641] Staging: rtl8192su: remove DISABLE_BB_RF i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 101/641] Staging: rtl8192su: remove RTL8192SU_USE_P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 102/641] Staging: rtl8192su: remove RTL8192SU_FPGA_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 103/641] Staging: rtl8192su: remove RTL8192SU_FPGA_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 104/641] Staging: rtl8192su: remove RTL8192SU_ASIC_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 105/641] Staging: rtl8192su: remove RTL8192SU_USB_P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 106/641] Staging: rtl8192su: remove RTL8190_Downloa ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 107/641] Staging: rtl8192su: remove RTL8192S_PREPAR ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 108/641] Staging: rtl8192su: remove RTL8192SU_DISAB ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 109/641] Staging: rtl8192su: remove RTL8192SE ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 110/641] Staging: rtl8192su: remove RTL8192SU ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 111/641] Staging: rtl8192su: remove unused files, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 112/641] Staging: rtl8192su: remove dead code, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 113/641] Staging: rt3070: add support for Linksys W ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 114/641] Staging: rt*: fix wait_queue_head_t declar ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 115/641] Staging: rt*: don't confuse user of rt3070 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 116/641] Staging: vt6655: remove PRIVATE_OBJ ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 117/641] Staging: vt6655: remove unused Makefile.{a ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 118/641] Staging: b3dfg: Drop NULL test on list_ent ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 119/641] Staging: rtl8187se/ieee80211: remove OPENS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 120/641] Staging: rtl8187se/ieee80211: remove FEDOR ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 121/641] Staging: rtl8187se/ieee80211: remove NOT_Y ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 122/641] Staging: rtl8187se: remove ENABLE_IPS ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 123/641] Staging: rtl8187se: rename struct ieee8021 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 124/641] Staging: rtl8187se: rename struct ieee8021 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 125/641] Staging: rtl8187se: rename struct ieee8021 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 126/641] Staging: rtl8187se/ieee80211: switch to us ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 127/641] Staging: rtl8187se/ieee80211: ieee80211.h ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 128/641] Staging: rtl8187se/ieee80211: convert MMIE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:05 pm)
[PATCH 129/641] Staging: rtl8192su: remove more unused files, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 130/641] Staging: rtl8192su: make private ieee80211 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 131/641] Staging: rtl8192su: remove JOHN_DUMP[_TXDE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 132/641] Staging: rtl8192su/ieee80211: remove OPENS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 133/641] Staging: rtl8192su/ieee80211: remove super ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 134/641] Staging: rtl8192su: remove NOT_YET ifdefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 135/641] Staging: rtl8192su/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 136/641] Staging: rtl8192su/ieee80211: remove unuse ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 137/641] Staging: rtl8192su/ieee80211: ieee80211.h ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 138/641] Staging: rtl8192su/ieee80211: move rtl8192 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 139/641] Staging: vt6656: disable wpa related funct ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 140/641] Staging: HTC Dream: add smd code, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 141/641] Staging: HTC Dream: add rpcrouter driver, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 142/641] Staging: HTC Dream: add qdsp support, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 143/641] Staging: HTC Dream: add camera support, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 144/641] Staging: HTC Dream: Makefile glue, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 145/641] Staging: hv: add the Hyper-V api header files, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 146/641] Staging: hv: add the Hyper-V driver header ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 147/641] Staging: hv: add the Hyper-V virtual bus, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 148/641] Staging: hv: add the Hyper-V virtual block ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 149/641] Staging: hv: add the Hyper-V virtual netwo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 150/641] Staging: hv: add the Hyper-V virtual stora ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 151/641] Staging: hv: add a TODO file, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 152/641] Staging: hv: make the Hyper-V virtual bus ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 153/641] Staging: hv: use the correct #ifdef for x86-64, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 154/641] Staging: hv: add the Hyper-V virtual bus t ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 155/641] Staging: hv: make the Hyper-V virtual stor ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 156/641] Staging: hv: add the Hyper-V virtual scsi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 157/641] Staging: hv: storvsc: fix up driver_data usage, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 158/641] Staging: hv: make the Hyper-V virtual bloc ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 159/641] Staging: hv: add the Hyper-V virtual block ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 160/641] Staging: hv: blkvsc: fix up driver_data usage, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 161/641] Staging: hv: make the Hyper-V virtual netw ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 162/641] Staging: hv: add the Hyper-V virtual netwo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 163/641] Staging: hv: netvsc: fix up driver_data usage, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 164/641] Staging: hv: remove INTERNAL typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 165/641] Staging: hv: remove PVOID typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 166/641] Staging: hv: remove VOID typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 167/641] Staging: hv: remove UINT8 and INT8 typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 168/641] Staging: hv: remove UINT16 and INT16 typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 169/641] Staging: hv: remove UINT32 and INT32 typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 170/641] Staging: hv: remove UINT64 and INT64 and U ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 171/641] Staging: hv: remove USHORT typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 172/641] Staging: hv: remove ULONGLONG and LONGLONG ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 173/641] Staging: hv: remove ULONG_PTR typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 174/641] Staging: hv: remove ULONG and LONG typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 175/641] Staging: hv: remove SIZE_T typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 176/641] Staging: hv: remove DWORD and BYTE typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 177/641] Staging: hv: remove BOOL and BOOLEAN typedefs, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 178/641] Staging: hv: remove #defines from osd.c, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 179/641] Staging: hv: remove MIN and MAX usages, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 180/641] Staging: hv: remove PAGE_SIZE and PAGE_SHI ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 181/641] Staging: hv: remove STRUCT_PACKED and STRU ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 182/641] Staging: hv: remove UNUSED_VAR usage, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 183/641] Staging: hv: remove FIELD_OFFSET usage, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 184/641] Staging: hv: remove TRUE, FALSE, and NULL ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 185/641] Staging: hv: osd: remove MemAlloc wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 186/641] Staging: hv: osd: remove MemAllocZeroed wr ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 187/641] Staging: hv: osd: remove MemAllocAtomic wr ..., Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 188/641] Staging: hv: osd: remove MemFree wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:06 pm)
[PATCH 189/641] Staging: hv: make Channel-&gt;InboundLock a r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 190/641] Staging: hv: make RingInfo-&gt;RingLock a rea ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 191/641] Staging: hv: make Device-&gt;RequestLock a re ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 192/641] Staging: hv: make netDevice-&gt;ReceivePacket ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 193/641] Staging: hv: make gVmbusConnection.Channel ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 194/641] Staging: hv: make gVmbusConnection.Channel ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 195/641] Staging: hv: osd: remove spinlock wrapper ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 196/641] Staging: hv: osd: remove Sleep wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 197/641] Staging: hv: osd: remove MemoryFence wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 198/641] Staging: hv: osd: remove LogMsg wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 199/641] Staging: hv: osd: remove PrintBytes wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 200/641] Staging: hv: fix up printk warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 201/641] Staging: hv: osd: remove GetTickCount and ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 202/641] Staging: hv: Remove compatibility ifdefry, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 203/641] Staging: hv: Transform some kzalloc calls ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 204/641] Staging: hv: force hyper-v drivers to be b ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 205/641] Staging: hv: Use %ld instead of %d for a l ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 206/641] Staging: hv: Remove C99 comments, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 207/641] Staging: hv: StorVsc.c: fix print formatting, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 208/641] Staging: hv: blkvsc_drv.c: fix print forma ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 209/641] Staging: hv: fix blkvsc_open() parameters, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 210/641] Staging: hv: fix blkvsc_release() parameters, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 211/641] Staging: hv: fix blkvsc_ioctl() parameters, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 212/641] Staging: hv: Remove X2V_LINUX check, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 213/641] Staging: hv: NetVsc.c: fix print formatting, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 214/641] Staging: hv: RndisFilter.c: fix print form ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 215/641] Staging: hv: storvsc_drv.c: fix print form ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 216/641] Staging: hv: vmbus_drv.c: fix print formatting, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 217/641] Staging: hv: check return value of bus_reg ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 218/641] Staging: hv: check return value of device_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 219/641] Staging: hv: vmbus_drv.c: remove unused st ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 220/641] Staging: hv: Hv.c: remove unused physAddr, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 221/641] Staging: hv: remove VMBUS_CHANNEL_PACKET_P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 222/641] Staging: hv: remove VMBUS_CHANNEL_PACKET_M ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 223/641] Staging: hv: remove VMBUS_CONNECT_STATE ty ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 224/641] Staging: hv: remove VMBUS_CONNECTION typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 225/641] Staging: hv: remove VMBUS_MSGINFO typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 226/641] Staging: hv: remove NETVSC_DEVICE typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 227/641] Staging: hv: Remove WORKQUEUE typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 228/641] Staging: hv: Transform PDEVICE_OBJECT and ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 229/641] Staging: hv: check return value of driver_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 230/641] Staging: hv: comment out blkdev variable i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 231/641] Staging: hv: remove WAITEVENT typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 232/641] Staging: hv remove TIMER typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 233/641] Staging: hv: remove HANDLE typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 234/641] Staging: hv: remove more printk() warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 235/641] Staging: hv: properly fix the printk() war ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 236/641] Staging: hv: Remove typedef DRIVER_OBJECT ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 237/641] Staging: hv: Remove typedef NETVSC_PACKET ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 238/641] Staging: hv: Remove typedef STORVSC_REQUES ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 239/641] Staging: hv: fix sparse static warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 240/641] Staging: hv: fix sparse function warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 241/641] Staging: hv: fix sparse NULL pointer warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 242/641] Staging: hv: rework use of workqueues in osd, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 243/641] Staging: hv: remove WaitEventClose(), Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 244/641] Staging: hv: remove wrapper functions for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 245/641] Staging: hv: remove wrapper functions for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 246/641] Staging: hv: remove wrapper function Virtu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 247/641] Staging: hv: remove wrapper functions arou ..., Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 248/641] Staging: hv: remove custom cpuid function, Greg Kroah-Hartman, (Tue Sep 15, 12:07 pm)
[PATCH 249/641] Staging: hv: remove custom rdmsrl and wrms ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 250/641] Staging: hv: osd: remove physical address ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 251/641] Staging: hv: osd: add osd_ prefix to globa ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 252/641] Staging: hv: remove timer wrapper functions, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 253/641] Staging: hv: remove duplicated osd.o inclu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 254/641] Staging: hv: Replace typedef SG_BUFFER_LIS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 255/641] Staging: hv: blk dev depends on SCSI, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 256/641] Staging: hv: adjust Hyper-V Kconfig, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 257/641] Staging: hv: remove ReadMsr and WriteMsr f ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 258/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 259/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 260/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 261/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 262/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 263/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 264/641] Staging: hv: cleanup coding style issues i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 265/641] Staging: hv: remove Sources.c, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 266/641] Staging: hv: clean up NetVsc.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 267/641] Staging: hv: clean up RndisFilter.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 268/641] Staging: hv: clean up typedefs in Hv.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 269/641] Staging: hv: clean up typedefs in ChannelM ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 270/641] Staging: hv: clean up vstorage.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 271/641] Staging: hv: move osd.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 272/641] Staging: hv: osd.h: codingstyle cleanups, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 273/641] Staging: hv: osd.h: remove GUID typedef, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 274/641] Staging: hv: osd.h: fix GUID reference problem, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 275/641] Staging: hv: osd.c: coding style fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 276/641] Staging: hv: remove include/HvTypes.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 277/641] Staging: hv: remove include/HvHalApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 278/641] Staging: hv: coding style cleanup of inclu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 279/641] Staging: hv: coding style cleanup of inclu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 280/641] Staging: hv: move vmbus.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 281/641] Staging: hv: vmbus.h coding style cleanups, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 282/641] Staging: hv: move rndis.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 283/641] Staging: hv: rndis.h: remove pointless typ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 284/641] Staging: hv: rndis.h: codingstyle fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 285/641] Staging: hv: rndis.h: typedef removal, part 1, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 286/641] Staging: hv: rndis.h: typedef removal, part 2, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 287/641] Staging: hv: coding style cleanups for HvP ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 288/641] Staging: hv: coding style cleanups for HvS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 289/641] Staging: hv: typdef fixes for HvSynicApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 290/641] Staging: hv: remove volatile usage from Hv ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 291/641] Staging: hv: create hv_api.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 292/641] Staging: hv: coding style cleanups for HvS ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 293/641] Staging: hv: move HvStatus.h into hv_api.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 294/641] Staging: hv: coding style cleanups for Vmb ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 295/641] Staging: hv: typedef removal from VmbusCha ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 296/641] Staging: hv: coding style cleanups for Vmb ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 297/641] Staging: hv: typedef removal for VmbusApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 298/641] Staging: hv: codingsyle cleanups for Chann ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 299/641] Staging: hv: typedef removal for ChannelMe ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 300/641] Staging: hv: fix up some coding style issu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 301/641] Staging: hv: fix up coding style issues in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 302/641] Staging: hv: fix up typedefs in NetVscApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 303/641] Staging: hv: move vstorage.h to hv dir, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 304/641] Staging: hv: fix remaining style issue in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 305/641] Staging: hv: fix typedefs in vstorage.h, Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 306/641] Staging: hv: fix coding style issues in Vm ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 307/641] Staging: hv: remove typedefs from VmbusPac ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 308/641] Staging: hv: fix coding style issues in St ..., Greg Kroah-Hartman, (Tue Sep 15, 12:08 pm)
[PATCH 309/641] Staging: hv: fix typedefs in StorVscApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 310/641] Staging: hv: fix coding style issues in nv ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 311/641] Staging: hv: fix typedefs in nvspprotocol.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 312/641] Staging: hv: move nvspprotocol.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 313/641] Staging: hv: remove ChannelMessages.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 314/641] Staging: hv: move List.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 315/641] Staging: hv: move logging.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 316/641] Staging: hv: move NetVscApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 317/641] Staging: hv: move StorVscApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 318/641] Staging: hv: move VmbusApi.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 319/641] Staging: hv: move VmbusChannelInterface.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 320/641] Staging: hv: move VmbusPacketFormat.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 321/641] Staging: hv: coding style cleanups of BlkVsc.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 322/641] Staging: hv: coding style cleanups of Chan ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 323/641] Staging: hv: remove typedefs from ChannelM ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 324/641] Staging: hv: remove typedefs from RndisFil ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 325/641] Staging: hv: remove typedefs from StorVsc.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 326/641] Staging: hv: coding style cleanups for Con ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 327/641] Staging: hv: coding style cleanups on Vmbus.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 328/641] Staging: hv: code reduction from Vmbus.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 329/641] Staging: hv: fix coding style issues in Hv.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 330/641] Staging: hv: coding style cleanups for net ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 331/641] Staging: hv: reorganize netvsc_drv.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 332/641] Staging: hv: coding style cleanups for Cha ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 333/641] Staging: hv: reorg ChannelMgmt a bit, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 334/641] Staging: hv: TODO: add some more items, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 335/641] Staging: hv: coding style cleanups for Sto ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 336/641] Staging: hv: reorg StorVsc.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 337/641] Staging: hv: coding style fixes for blkvsc ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 338/641] Staging: hv: coding style cleanup for Chan ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 339/641] Staging: hv: warn the world of a bug in th ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 340/641] Staging: hv: coding style cleanups for vmb ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 341/641] Staging: hv: coding style cleanup for stor ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 342/641] Staging: hv: coding style cleanup for Rndi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 343/641] Staging: hv: coding style cleanup for NetVsc.c, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 344/641] Staging: hv: rename struct NETVSC_DEVICE, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 345/641] Staging: hv: remove function pointer typed ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 346/641] Staging: hv: remove function pointer typed ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 347/641] Staging: hv: remove function pointer typed ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 348/641] Staging: hv: remove PFN_CHANNEL_CALLBACK, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 349/641] Staging: hv: remove function pointer typed ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 350/641] Staging: hv: Add Haiyang's email to the TO ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 351/641] Staging: hv: remove use of internal list r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 352/641] Staging: hv: remove more usages of interna ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 353/641] Staging: hv: remove use of internal list r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 354/641] Staging: hv: Remove List.h, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 355/641] Staging: hv: update the TODO file, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 356/641] Staging: htc: Dream: limit Kconfig for onl ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 357/641] Staging: HTC Dream: touchscreen driver for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 358/641] Staging: HTC Dream: Cleanup Dream touchscr ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 359/641] Staging: HTC Dream: touchscreen: more cleanups, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 360/641] Staging: dream: synaptics touchscreen for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 361/641] Staging: dream, fix buf overflow, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 362/641] Staging: Dream: separate Kconfig/Makefile ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 363/641] Staging: dream: add support for input on G ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 364/641] Staging: dream: Synaptics touchscreen: che ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 365/641] Staging: meilhaus: convert nested spin_loc ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 366/641] Staging: USB-IP code cleanup, Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 367/641] Staging: cpc-usb: convert comment style in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 368/641] Staging: cpc-usb: convert comment style in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:09 pm)
[PATCH 369/641] Staging: cpc-usb: convert comment style in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 370/641] Staging: cpc-usb: add one todo entry, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 371/641] Staging: usb-ip: vhci_hdc:Fix the returned ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 373/641] Staging: Correct use of ! and &amp;, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 374/641] Staging: ARRAY_SIZE changes, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 375/641] Staging: dst: correct error-handling code, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 376/641] Staging: rt2870sta interface names, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 377/641] Staging: rt2860: remove dependency on WIRE ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 378/641] Staging: udlfb: fix printk format warning, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 379/641] Staging: serqt_usb2: fix qt_open parameters, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 380/641] Staging: otus: includecheck fix: drivers/s ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 381/641] Staging: vt665x: 64bit compile fixes Part 1, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 382/641] Staging: vt665x: 64bit compile fixes Part 2, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 383/641] Staging: vt6655 textual cleanup in prep fo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 384/641] Staging: vt665x: Text janitor in prep for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 385/641] Staging: vt665x: Text janitor in prep for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 386/641] Staging: vt6655: add TODO, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 387/641] Staging: vt6656: add TODO, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 388/641] Staging: vt665x: Typedef and macro cleanup ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 389/641] Staging: vt665x: Typedef and macro cleanup ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 390/641] Staging: vt665x: Clean up include files, P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 391/641] Staging: vt665x: Clean up include files, P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 392/641] Staging: vt665x: Remove umem.h Part 1, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 393/641] Staging: vt665x: Remove umem.h Part 2, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 394/641] Staging: vt665x: remove tpci.h file, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 395/641] Staging: vt665x: remove tpci.h file in vt6656, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 396/641] Staging: vt665x: cleanup USB definitions, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 397/641] Staging: vt665x: remove tbit.h, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 398/641] Staging: vt665x: remove tbit.h part 2, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 399/641] Staging: vt6655: fix possible Read buffer ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 400/641] Staging: VME Framework for the Linux Kernel, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 401/641] Staging: vme: add VME userspace driver, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 402/641] Staging: vme: add Universe I/II bridge driver, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 403/641] Staging: vme: add Tundra TSI148 VME-PCI Br ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 404/641] Staging: vme: add TODO file, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 405/641] Staging: vme: Correct tsi-148 VME interrup ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 406/641] Staging: vme: Extend VME core probing for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 407/641] Staging: vme: fix {master,slave}_get check bug, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 408/641] Staging: vme: Add syncronize interrupts be ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 409/641] Staging: Update VME vme_user module, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 410/641] Staging: Use proper mutexes in the tsi-148 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 411/641] Staging: vme: add VME Location Monitor man ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 412/641] Staging: vme: Update support for the Unive ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 413/641] Staging: vme: Separate the list of TODOs f ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 414/641] Staging: vme: change to VME_BUS, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 415/641] Staging: remove epl driver, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 416/641] Staging: pata_rdc: remove the driver from ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 417/641] Staging: sep: Upstream revision 3 of the s ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 418/641] Staging: sep: Move the RAR support into st ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 419/641] Staging: rar: fix some initial type problems, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 420/641] Staging: rar/sep: Don't use random VENDOR_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 421/641] Staging: sep: Fix rar build, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 422/641] Staging: rar/sep: Remove C++isms from the ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 423/641] Staging: sep: Create a structure to hold a ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 424/641] Staging: sep: rework write_register/read_r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 425/641] Staging: sep: We have two different repeat ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 426/641] Staging: sep: do something about all the p ..., Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 427/641] Staging: sep: indent pass, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 428/641] Staging: sep: first pass after indent, Greg Kroah-Hartman, (Tue Sep 15, 12:10 pm)
[PATCH 429/641] Staging: sep: priceless ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 430/641] Staging: sep: Put all the ARM bits together, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 431/641] Staging: sep: function shuffle, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 432/641] Staging: sep: statically initialize the fo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 433/641] Staging: sep: kill lock wrapper, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 434/641] Staging: sep: merge the two files, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 435/641] Staging: sep: make everything static, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 436/641] Staging: sep: kill off unused code, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 437/641] Staging: sep: squish some of the wrapper f ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 438/641] Staging: sep: forward declaration removal time, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 439/641] Staging: sep: fix time handler, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 440/641] Staging: sep: use O_NDELAY instead of magi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 441/641] Staging: sep: rename some fields, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 442/641] Staging: sep: Fix PCI irq usage, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 443/641] Staging: sep: Use filp-&gt;private_data to cr ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 444/641] Staging: sep: clean up after switching to ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 445/641] Staging: sep: fix flow API, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 446/641] Staging: sep: load_rom is remarkably verbo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 447/641] Staging: sep: remove module int macro, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 448/641] Staging: sep: Try and get kernel address a ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 449/641] Staging: sep: remove extra CFLAGS we don't use, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 450/641] Staging: sep: Use the proper allocators fo ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 451/641] Staging: sep: fix a conversion thinko, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 452/641] Staging: sep: various minor tidyups, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 453/641] Staging: sep: tidy firmware load, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 454/641] Staging: sep: Implement some proper open/c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 455/641] Staging: sep: kick out various fields we c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 456/641] Staging: sep: flow ioctl cleanup, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 457/641] Staging: sep: clean up command sending, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 458/641] Staging: sep: clean up time, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 459/641] Staging: sep: untangle the register_fs code, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 460/641] Staging: sep: use ioremap helpers, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 461/641] Staging: sep: SEP driver build breaks with ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 462/641] Staging: echo: fix up remaining checkpatch ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 463/641] Staging: echo: remove TODO item, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 464/641] Staging: echo: top bit patch, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 465/641] Staging: echo: remove bit_operations.h, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 466/641] Staging: echo: remove unneeded USE_MMX defines, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 467/641] Staging: echo: remove unneeded USE_SSE2 de ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 468/641] Staging: echo: coding style cleanups, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 469/641] Staging: rtl8192su: compile fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 470/641] Staging: rtl8192su: fix up printk warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 471/641] Staging: rtl8192su: fixup size comparison ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 472/641] Staging: rtl8192su: stop using skb-&gt;tail, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 473/641] Staging: rtl8192su: add linux/vmalloc.h, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 474/641] Staging: rt2870: new USB ID for Belkin N+ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 475/641] Staging: rtl8187se: Fix comment-out-typo, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 476/641] Staging: rt2860: includecheck fix: rt_linux.h, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 477/641] Staging: w35und: Convert MDS typedef to st ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 478/641] Staging: w35und: Remove unused struct _RXB ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 479/641] Staging: w35und: Cleanup the mlmetxrx_f.h ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 480/641] Staging: w35und: Convert typedef DESCRIPTO ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 481/641] Staging: w35und: Remove unused struct _STA ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 482/641] Staging: w35und: Convert typedef MTO_PARAM ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 483/641] Staging: w35und: Remove some write-only st ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 484/641] Staging: rt2870: duplicated code is execut ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 485/641] Staging: rt3070: fix build warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 486/641] Staging: rtxxx0: remove support for older ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 487/641] Staging: rtxxx0: remove dead platform spec ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 488/641] Staging: rtxxx0: kill RT8270_USB_DEVICES() ..., Greg Kroah-Hartman, (Tue Sep 15, 12:11 pm)
[PATCH 489/641] Staging: rtxxx0: PID checking fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 490/641] Staging: rt3070: kill TimerQThr thread fir ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 491/641] Staging: rtxxx0: kill PID macros, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 492/641] Staging: rtxxx0: remove unused defines, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 493/641] Staging: rtxxx0: unify different RT30xx{Re ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 494/641] Staging: rtxxx0: remove superfluous RT30xx ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 495/641] Staging: rtxxx0: unify RT{USB,MP}FilterCal ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 496/641] Staging: rtxxx0: unify MlmeCheckPsmChange(), Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 497/641] Staging: rtxxx0: unify AsicEvaluateRxAnt(), Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 498/641] Staging: rtxxx0: remove dead DBG_DIAGNOSE code, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 499/641] Staging: rtxxx0: remove dead virtual adapt ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 500/641] Staging: rtxxx0: debug messages fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 501/641] Staging: rtxxx0: remove unused link_list.h, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 502/641] Staging: rtxxx0: remove superfluous functi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 503/641] Staging: rtxxx0: remove private debugging ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 504/641] Staging: rtxxx0: remove private ioctls, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 505/641] Staging: rtxxx0: remove unused code, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 506/641] Staging: rtxxxx: unify AsicRxAntEvalTimeout(), Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 507/641] Staging: rtxxxx: unify AsicSwitchChannel(), Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 508/641] Staging: rtxx70: unify NICInitRT30xxRFRegi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 509/641] Staging: rtxxxx: RTMPGetRalinkAuthModeStr( ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 510/641] Staging: rt3070: update allowed channels l ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 511/641] Staging: rt3070: fix PID checking in RTUSB ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 512/641] Staging: rt3070: WEP fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 513/641] Staging: rt3070: AsicSetSlotTime() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 514/641] Staging: rt3070: remove needless EFUSE_TAG ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 515/641] Staging: rt3070: add remaining rt2870 devi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 516/641] Staging: rt2870: use internal command for ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 517/641] Staging: rt2870: add fRTUSB_BULK_OUT_DATA_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 518/641] Staging: rt28x0: add SIOCGIWNAME support t ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 519/641] Staging: rt28x0: fix GTK length check in P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 520/641] Staging: rt28x0: fix BPP_R66 register handling, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 521/641] Staging: rt28x0: fix fOP_STATUS_DOZE flag ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 522/641] Staging: rt28x0 fix BACapability policy ha ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 523/641] Staging: rt28x0: AsicSwitchChannel() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 524/641] Staging: rt28x0: BssTableSetEntry() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 525/641] Staging: rt28x0: MlmeSelectTxRateTable() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 526/641] Staging: rt28x0: MlmeCheckPsmChange() fix, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 527/641] Staging: rt28x0: MlmeAssocReqAction() fixe ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 528/641] Staging: rt28x0: rt_ioctl_siwencode() fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 529/641] Staging: rt28x0: LinkUp() fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 530/641] Staging: rt3070: remove unused MiniportDat ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 531/641] Staging: rt3070: remove unused RT_CMD_SET_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 532/641] Staging: rt2870: remove SHOW_ADHOC_ENTRY_I ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 533/641] Staging: rtxxxx: remove unused AsicAntenna ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 534/641] Staging: rt2870: add eFuse support, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 535/641] Staging: rt2870: add Antenna Diversity support, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 536/641] Staging: rtxx70: merge rt3070 with rt2870, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 537/641] Staging: rt2870: remove old firmware, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 538/641] Staging: remove no longer needed rt3070 driver, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 539/641] Staging: rt2860: Fix test in rt_ioctl_siwf ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 540/641] Staging: rt{2860, 2870, 3070}sta: Remove u ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 541/641] staging: Make some structures static, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 542/641] Staging: IIO: core support for device regi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 543/641] Staging: IIO: max1363 ADC driver, Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 544/641] Staging: IIO: tsl2561 digital light sensor ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 545/641] Staging: IIO: lis3l02dq accelerometer core ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 546/641] Staging: IIO: kxsd9 accelerometer minimal ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 547/641] Staging: IIO: Add generic ring buffer supp ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 548/641] Staging: IIO: VTI sca3000 series accelerom ..., Greg Kroah-Hartman, (Tue Sep 15, 12:12 pm)
[PATCH 549/641] Staging: IIO: Trigger support added to core., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 550/641] Staging: IIO: Ring buffer: Initial pass at ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 551/641] Staging: IIO: lis3l02dq ring buffer and da ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 552/641] Staging: IIO: max1363 add software ring bu ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 553/641] Staging: IIO: Periodic timer based trigger, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 554/641] Staging: IIO: Proof of concept gpio trigger, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 555/641] Staging: IIO: Initial documentation, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 556/641] Staging: IIO: Add todo list for staging, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 557/641] Staging: iio: Fix type warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 558/641] Staging: iio: fix duplicate dev_attr_name, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 559/641] Staging: altpciechdma: 64bit type warning fix, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 560/641] Staging: pohmelfs: fix atomic type spew, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 561/641] Staging: pohmelfs: fix type errors, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 562/641] Staging: et1310: kill pAdapter in favour o ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 563/641] Staging: et131x: spinlocks, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 564/641] Staging: et131x: power state, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 565/641] Staging: et131x: kill unused RCV_REF macros, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 566/641] Staging et131x: kill refcount, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 567/641] Staging: et131x: MPSend macros, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 568/641] Staging: et131x: kill copied PCI fields, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 569/641] Staging: et131x: Take a kref for the PCI p ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 570/641] Staging: et131x: CSRAddress to regs, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 571/641] Staging: et131x: Eliminate RegistryDMA Cache, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 572/641] Staging: et131x: eliminate write only regi ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 573/641] Staging: et131x: clean up constant rx/tx r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 574/641] Staging: et131x: attack the config stuff, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 575/641] Staging: et131x: config is already zeroed, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 576/641] Staging: et131x: fold the diet config into ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 577/641] Staging: et131x: de-hungarianise a bit, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 578/641] Staging: et131x: continue pruning unused f ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 579/641] Staging: et131x: remove unused PCI identifiers, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 580/641] Staging: et131x: eeprom remove features, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 581/641] Staging: et131x: sort out the mmc enable r ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 582/641] Staging: et131x: clean up MMC_SRAM_, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 583/641] Staging: et131x: quick tidy of the debug code, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 584/641] Staging: et131x: kill the Q_ADDR struct, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 585/641] Staging: et131x: clean up PM_CSR_t, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 586/641] Staging: et131x: clean up DMA10/DMA4 types, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 587/641] Staging: et131x: clean up MP_FLAG macros, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 588/641] Staging: et131x: kill the interrupt magic ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 589/641] Staging: et131x: put the jagcore routines ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 590/641] Staging: et131x: kill MSI type, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 591/641] Staging: et131x: kill the loopback type, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 592/641] Staging: et131x: prune all the debug code, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 593/641] Staging: et131x: re-order the initpci code ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 594/641] Staging: et131x: kill off the TXDMA error type, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 595/641] Staging: et131x: kill off the TXDMA CSR type, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 596/641] Staging: panel: Add support for TI CLCD in ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 597/641] Staging: rspiusb: Check usb_buffer_map_sg( ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 598/641] Staging: comedi: apci3200: fix test of ui_ ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 599/641] Staging: agnx: remove flush_workqueue(), Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 600/641] Staging: pohmelfs: sync with the developme ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 601/641] Staging: add Realtek 8192 PCI wireless driver, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 602/641] Staging: rtl8192e: fix lots of sparse warnings, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 603/641] Staging: rtl8192e: remove unused functions, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 604/641] Staging: rtl8192e: compile fixes, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 605/641] Staging: rtl8192e: remove #if 0 sections, Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 606/641] Staging: rtl8192e: remove kernel version c ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 607/641] Staging: rtl8192e: remove firmware header ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 608/641] Staging: rtl8192e: remove another firmware ..., Greg Kroah-Hartman, (Tue Sep 15, 12:13 pm)
[PATCH 609/641] Staging: rtl8192e: coding style cleanups o ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 610/641] Staging: rtl8192e: remove unneeded ieee802 ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 611/641] Staging: rtl8192e: remove annoying printk(), Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 612/641] Staging: rtl8192e: fix for stack bug, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 613/641] Staging: rtl8192e: fix timeouts on firmwar ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 614/641] Staging: add cowloop driver, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 615/641] Staging: get cowloop to build properly, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 616/641] Staging: cowloop: add TODO file, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 617/641] Staging: add cowloop to the build, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 618/641] Staging: cowloop: remove kernel version checks, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 619/641] Staging: vt665x: rename the module binary, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 620/641] Staging: rtl8192e: Drop unnecessary NULL test, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 621/641] Staging: rt2860: fix possible NULL derefer ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 622/641] Staging: asus_oled: Cleaned up checkpatch ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 623/641] Staging: rt3090: add device id 1462:891a, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 624/641] Staging: rt2860: add new device ids, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 625/641] Staging: rt2860/rt2870/rt3070/rt3090: fix ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 626/641] Staging: rt3090: remove possible conflict ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 627/641] Staging: rt3090: rename device from raX to ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 628/641] Staging: rt3090: port changes in WPA_MIX_P ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 629/641] Staging: rt3090: enable NATIVE_WPA_SUPPLIC ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 630/641] Staging: vt665x: fix built-in compiling, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 631/641] Staging: comedi: addi-data: NULL dereferen ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 632/641] Staging: dream: introduce missing kfree, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 633/641] Staging: iio: introduce missing kfree, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 634/641] Staging: line6: pod.c: style cleanups, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 635/641] Staging: line6: ffzb returns an unsigned i ..., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 636/641] Staging: remove me4000 driver., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 637/641] Staging: meilhaus: remove the drivers, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 638/641] Staging: rspiusb: remove the driver, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 639/641] Staging: remove at76_usb wireless driver., Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 640/641] Staging: remove heci driver, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
[PATCH 641/641] Staging: remove sxg driver, Greg Kroah-Hartman, (Tue Sep 15, 12:14 pm)
Re: [PATCH 140/641] Staging: HTC Dream: add smd code, Brian Swetland, (Tue Sep 15, 12:26 pm)
Re: [PATCH 140/641] Staging: HTC Dream: add smd code, Pavel Machek, (Tue Sep 15, 3:49 pm)
Re: [GIT PATCH] STAGING patches for 2.6.31-git, Linus Torvalds, (Wed Sep 16, 8:26 am)
Re: [GIT PATCH] STAGING patches for 2.6.31-git, Greg KH, (Wed Sep 16, 8:34 am)
RE: [PATCH 355/641] Staging: hv: update the TODO file, Hank Janssen, (Thu Sep 17, 1:11 am)