|
@@ -32,6 +32,7 @@
|
|
|
#include "rio.h"
|
|
|
|
|
|
static LIST_HEAD(rio_mports);
|
|
|
+static unsigned char next_portid;
|
|
|
|
|
|
/**
|
|
|
* rio_local_get_device_id - Get the base/extended device id for a port
|
|
@@ -1164,8 +1165,33 @@ int __devinit rio_init_mports(void)
|
|
|
|
|
|
device_initcall_sync(rio_init_mports);
|
|
|
|
|
|
+static int hdids[RIO_MAX_MPORTS + 1];
|
|
|
+
|
|
|
+static int rio_get_hdid(int index)
|
|
|
+{
|
|
|
+ if (!hdids[0] || hdids[0] <= index || index >= RIO_MAX_MPORTS)
|
|
|
+ return -1;
|
|
|
+
|
|
|
+ return hdids[index + 1];
|
|
|
+}
|
|
|
+
|
|
|
+static int rio_hdid_setup(char *str)
|
|
|
+{
|
|
|
+ (void)get_options(str, ARRAY_SIZE(hdids), hdids);
|
|
|
+ return 1;
|
|
|
+}
|
|
|
+
|
|
|
+__setup("riohdid=", rio_hdid_setup);
|
|
|
+
|
|
|
void rio_register_mport(struct rio_mport *port)
|
|
|
{
|
|
|
+ if (next_portid >= RIO_MAX_MPORTS) {
|
|
|
+ pr_err("RIO: reached specified max number of mports\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ port->id = next_portid++;
|
|
|
+ port->host_deviceid = rio_get_hdid(port->id);
|
|
|
list_add_tail(&port->node, &rio_mports);
|
|
|
}
|
|
|
|