aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rapidio
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/rapidio')
-rw-r--r--drivers/rapidio/rio.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c
index f861b728f80e..9a7b2168d1d5 100644
--- a/drivers/rapidio/rio.c
+++ b/drivers/rapidio/rio.c
@@ -32,6 +32,7 @@
32#include "rio.h" 32#include "rio.h"
33 33
34static LIST_HEAD(rio_mports); 34static LIST_HEAD(rio_mports);
35static unsigned char next_portid;
35 36
36/** 37/**
37 * rio_local_get_device_id - Get the base/extended device id for a port 38 * rio_local_get_device_id - Get the base/extended device id for a port
@@ -1164,8 +1165,33 @@ int __devinit rio_init_mports(void)
1164 1165
1165device_initcall_sync(rio_init_mports); 1166device_initcall_sync(rio_init_mports);
1166 1167
1168static int hdids[RIO_MAX_MPORTS + 1];
1169
1170static int rio_get_hdid(int index)
1171{
1172 if (!hdids[0] || hdids[0] <= index || index >= RIO_MAX_MPORTS)
1173 return -1;
1174
1175 return hdids[index + 1];
1176}
1177
1178static int rio_hdid_setup(char *str)
1179{
1180 (void)get_options(str, ARRAY_SIZE(hdids), hdids);
1181 return 1;
1182}
1183
1184__setup("riohdid=", rio_hdid_setup);
1185
1167void rio_register_mport(struct rio_mport *port) 1186void rio_register_mport(struct rio_mport *port)
1168{ 1187{
1188 if (next_portid >= RIO_MAX_MPORTS) {
1189 pr_err("RIO: reached specified max number of mports\n");
1190 return;
1191 }
1192
1193 port->id = next_portid++;
1194 port->host_deviceid = rio_get_hdid(port->id);
1169 list_add_tail(&port->node, &rio_mports); 1195 list_add_tail(&port->node, &rio_mports);
1170} 1196}
1171 1197