diff options
-rw-r--r-- | drivers/rapidio/rio-scan.c | 49 | ||||
-rw-r--r-- | drivers/rapidio/rio.h | 56 | ||||
-rw-r--r-- | drivers/rapidio/switches/idtcps.c | 27 | ||||
-rw-r--r-- | drivers/rapidio/switches/tsi500.c | 18 | ||||
-rw-r--r-- | drivers/rapidio/switches/tsi568.c | 20 | ||||
-rw-r--r-- | drivers/rapidio/switches/tsi57x.c | 31 | ||||
-rw-r--r-- | include/asm-generic/vmlinux.lds.h | 9 | ||||
-rw-r--r-- | include/linux/rio.h | 35 |
8 files changed, 111 insertions, 134 deletions
diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c index 1faa1a5756e2..566432106cc5 100644 --- a/drivers/rapidio/rio-scan.c +++ b/drivers/rapidio/rio-scan.c | |||
@@ -246,24 +246,24 @@ static int rio_is_switch(struct rio_dev *rdev) | |||
246 | } | 246 | } |
247 | 247 | ||
248 | /** | 248 | /** |
249 | * rio_route_set_ops- Sets routing operations for a particular vendor switch | 249 | * rio_switch_init - Sets switch operations for a particular vendor switch |
250 | * @rdev: RIO device | 250 | * @rdev: RIO device |
251 | * @do_enum: Enumeration/Discovery mode flag | ||
251 | * | 252 | * |
252 | * Searches the RIO route ops table for known switch types. If the vid | 253 | * Searches the RIO switch ops table for known switch types. If the vid |
253 | * and did match a switch table entry, then set the add_entry() and | 254 | * and did match a switch table entry, then call switch initialization |
254 | * get_entry() ops to the table entry values. | 255 | * routine to setup switch-specific routines. |
255 | */ | 256 | */ |
256 | static void rio_route_set_ops(struct rio_dev *rdev) | 257 | static void rio_switch_init(struct rio_dev *rdev, int do_enum) |
257 | { | 258 | { |
258 | struct rio_route_ops *cur = __start_rio_route_ops; | 259 | struct rio_switch_ops *cur = __start_rio_switch_ops; |
259 | struct rio_route_ops *end = __end_rio_route_ops; | 260 | struct rio_switch_ops *end = __end_rio_switch_ops; |
260 | 261 | ||
261 | while (cur < end) { | 262 | while (cur < end) { |
262 | if ((cur->vid == rdev->vid) && (cur->did == rdev->did)) { | 263 | if ((cur->vid == rdev->vid) && (cur->did == rdev->did)) { |
263 | pr_debug("RIO: adding routing ops for %s\n", rio_name(rdev)); | 264 | pr_debug("RIO: calling init routine for %s\n", |
264 | rdev->rswitch->add_entry = cur->add_hook; | 265 | rio_name(rdev)); |
265 | rdev->rswitch->get_entry = cur->get_hook; | 266 | cur->init_hook(rdev, do_enum); |
266 | rdev->rswitch->clr_table = cur->clr_hook; | ||
267 | break; | 267 | break; |
268 | } | 268 | } |
269 | cur++; | 269 | cur++; |
@@ -283,30 +283,6 @@ static void rio_route_set_ops(struct rio_dev *rdev) | |||
283 | } | 283 | } |
284 | 284 | ||
285 | /** | 285 | /** |
286 | * rio_em_set_ops- Sets Error Managment operations for a particular vendor switch | ||
287 | * @rdev: RIO device | ||
288 | * | ||
289 | * Searches the RIO EM ops table for known switch types. If the vid | ||
290 | * and did match a switch table entry, then set the em_init() and | ||
291 | * em_handle() ops to the table entry values. | ||
292 | */ | ||
293 | static void rio_em_set_ops(struct rio_dev *rdev) | ||
294 | { | ||
295 | struct rio_em_ops *cur = __start_rio_em_ops; | ||
296 | struct rio_em_ops *end = __end_rio_em_ops; | ||
297 | |||
298 | while (cur < end) { | ||
299 | if ((cur->vid == rdev->vid) && (cur->did == rdev->did)) { | ||
300 | pr_debug("RIO: adding EM ops for %s\n", rio_name(rdev)); | ||
301 | rdev->rswitch->em_init = cur->init_hook; | ||
302 | rdev->rswitch->em_handle = cur->handler_hook; | ||
303 | break; | ||
304 | } | ||
305 | cur++; | ||
306 | } | ||
307 | } | ||
308 | |||
309 | /** | ||
310 | * rio_add_device- Adds a RIO device to the device model | 286 | * rio_add_device- Adds a RIO device to the device model |
311 | * @rdev: RIO device | 287 | * @rdev: RIO device |
312 | * | 288 | * |
@@ -484,8 +460,7 @@ static struct rio_dev __devinit *rio_setup_device(struct rio_net *net, | |||
484 | rdev->rswitch = rswitch; | 460 | rdev->rswitch = rswitch; |
485 | dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, | 461 | dev_set_name(&rdev->dev, "%02x:s:%04x", rdev->net->id, |
486 | rdev->rswitch->switchid); | 462 | rdev->rswitch->switchid); |
487 | rio_route_set_ops(rdev); | 463 | rio_switch_init(rdev, do_enum); |
488 | rio_em_set_ops(rdev); | ||
489 | 464 | ||
490 | if (do_enum && rdev->rswitch->clr_table) | 465 | if (do_enum && rdev->rswitch->clr_table) |
491 | rdev->rswitch->clr_table(port, destid, hopcount, | 466 | rdev->rswitch->clr_table(port, destid, hopcount, |
diff --git a/drivers/rapidio/rio.h b/drivers/rapidio/rio.h index 2f628ce1a1c1..f27b7a9c47d2 100644 --- a/drivers/rapidio/rio.h +++ b/drivers/rapidio/rio.h | |||
@@ -39,55 +39,29 @@ extern int rio_set_port_lockout(struct rio_dev *rdev, u32 pnum, int lock); | |||
39 | extern struct device_attribute rio_dev_attrs[]; | 39 | extern struct device_attribute rio_dev_attrs[]; |
40 | extern spinlock_t rio_global_list_lock; | 40 | extern spinlock_t rio_global_list_lock; |
41 | 41 | ||
42 | extern struct rio_route_ops __start_rio_route_ops[]; | 42 | extern struct rio_switch_ops __start_rio_switch_ops[]; |
43 | extern struct rio_route_ops __end_rio_route_ops[]; | 43 | extern struct rio_switch_ops __end_rio_switch_ops[]; |
44 | 44 | ||
45 | /* Helpers internal to the RIO core code */ | 45 | /* Helpers internal to the RIO core code */ |
46 | #define DECLARE_RIO_ROUTE_SECTION(section, name, vid, did, add_hook, get_hook, clr_hook) \ | 46 | #define DECLARE_RIO_SWITCH_SECTION(section, name, vid, did, init_hook) \ |
47 | static const struct rio_route_ops __rio_route_##name __used \ | 47 | static const struct rio_switch_ops __rio_switch_##name __used \ |
48 | __section(section) = { vid, did, add_hook, get_hook, clr_hook }; | 48 | __section(section) = { vid, did, init_hook }; |
49 | 49 | ||
50 | /** | 50 | /** |
51 | * DECLARE_RIO_ROUTE_OPS - Registers switch routing operations | 51 | * DECLARE_RIO_SWITCH_INIT - Registers switch initialization routine |
52 | * @vid: RIO vendor ID | 52 | * @vid: RIO vendor ID |
53 | * @did: RIO device ID | 53 | * @did: RIO device ID |
54 | * @add_hook: Callback that adds a route entry | 54 | * @init_hook: Callback that performs switch-specific initialization |
55 | * @get_hook: Callback that gets a route entry | ||
56 | * | 55 | * |
57 | * Manipulating switch route tables in RIO is switch specific. This | 56 | * Manipulating switch route tables and error management in RIO |
58 | * registers a switch by vendor and device ID with two callbacks for | 57 | * is switch specific. This registers a switch by vendor and device ID with |
59 | * modifying and retrieving route entries in a switch. A &struct | 58 | * initialization callback for setting up switch operations and (if required) |
60 | * rio_route_ops is initialized with the ops and placed into a | 59 | * hardware initialization. A &struct rio_switch_ops is initialized with |
61 | * RIO-specific kernel section. | 60 | * pointer to the init routine and placed into a RIO-specific kernel section. |
62 | */ | 61 | */ |
63 | #define DECLARE_RIO_ROUTE_OPS(vid, did, add_hook, get_hook, clr_hook) \ | 62 | #define DECLARE_RIO_SWITCH_INIT(vid, did, init_hook) \ |
64 | DECLARE_RIO_ROUTE_SECTION(.rio_route_ops, vid##did, \ | 63 | DECLARE_RIO_SWITCH_SECTION(.rio_switch_ops, vid##did, \ |
65 | vid, did, add_hook, get_hook, clr_hook) | 64 | vid, did, init_hook) |
66 | 65 | ||
67 | #define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16)) | 66 | #define RIO_GET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x00ff0000) >> 16)) |
68 | #define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16)) | 67 | #define RIO_SET_DID(size, x) (size ? (x & 0xffff) : ((x & 0x000000ff) << 16)) |
69 | |||
70 | /* | ||
71 | * RapidIO Error Management | ||
72 | */ | ||
73 | extern struct rio_em_ops __start_rio_em_ops[]; | ||
74 | extern struct rio_em_ops __end_rio_em_ops[]; | ||
75 | |||
76 | /* Helpers internal to the RIO core code */ | ||
77 | #define DECLARE_RIO_EM_SECTION(section, name, vid, did, init_hook, em_hook) \ | ||
78 | static const struct rio_em_ops __rio_em_##name __used \ | ||
79 | __section(section) = { vid, did, init_hook, em_hook }; | ||
80 | |||
81 | /** | ||
82 | * DECLARE_RIO_EM_OPS - Registers switch EM operations | ||
83 | * @vid: RIO vendor ID | ||
84 | * @did: RIO device ID | ||
85 | * @init_hook: Callback that initializes device specific EM | ||
86 | * @em_hook: Callback that handles device specific EM | ||
87 | * | ||
88 | * A &struct rio_em_ops is initialized with the ops and placed into a | ||
89 | * RIO-specific kernel section. | ||
90 | */ | ||
91 | #define DECLARE_RIO_EM_OPS(vid, did, init_hook, em_hook) \ | ||
92 | DECLARE_RIO_EM_SECTION(.rio_em_ops, vid##did, \ | ||
93 | vid, did, init_hook, em_hook) | ||
diff --git a/drivers/rapidio/switches/idtcps.c b/drivers/rapidio/switches/idtcps.c index 7e3d03283dec..46e6630dacd3 100644 --- a/drivers/rapidio/switches/idtcps.c +++ b/drivers/rapidio/switches/idtcps.c | |||
@@ -1,7 +1,8 @@ | |||
1 | /* | 1 | /* |
2 | * IDT CPS RapidIO switches support | 2 | * IDT CPS RapidIO switches support |
3 | * | 3 | * |
4 | * Copyright 2009 Integrated Device Technology, Inc. | 4 | * Copyright 2009-2010 Integrated Device Technology, Inc. |
5 | * Alexandre Bounine <alexandre.bounine@idt.com> | ||
5 | * | 6 | * |
6 | * This program is free software; you can redistribute it and/or modify it | 7 | * This program is free software; you can redistribute it and/or modify it |
7 | * under the terms of the GNU General Public License as published by the | 8 | * under the terms of the GNU General Public License as published by the |
@@ -81,9 +82,21 @@ idtcps_route_clr_table(struct rio_mport *mport, u16 destid, u8 hopcount, | |||
81 | return 0; | 82 | return 0; |
82 | } | 83 | } |
83 | 84 | ||
84 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDTCPS6Q, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 85 | static int idtcps_switch_init(struct rio_dev *rdev, int do_enum) |
85 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDTCPS8, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 86 | { |
86 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDTCPS10Q, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 87 | pr_debug("RIO: %s for %s\n", __func__, rio_name(rdev)); |
87 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDTCPS12, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 88 | rdev->rswitch->add_entry = idtcps_route_add_entry; |
88 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDTCPS16, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 89 | rdev->rswitch->get_entry = idtcps_route_get_entry; |
89 | DECLARE_RIO_ROUTE_OPS(RIO_VID_IDT, RIO_DID_IDT70K200, idtcps_route_add_entry, idtcps_route_get_entry, idtcps_route_clr_table); | 90 | rdev->rswitch->clr_table = idtcps_route_clr_table; |
91 | rdev->rswitch->em_init = NULL; | ||
92 | rdev->rswitch->em_handle = NULL; | ||
93 | |||
94 | return 0; | ||
95 | } | ||
96 | |||
97 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDTCPS6Q, idtcps_switch_init); | ||
98 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDTCPS8, idtcps_switch_init); | ||
99 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDTCPS10Q, idtcps_switch_init); | ||
100 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDTCPS12, idtcps_switch_init); | ||
101 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDTCPS16, idtcps_switch_init); | ||
102 | DECLARE_RIO_SWITCH_INIT(RIO_VID_IDT, RIO_DID_IDT70K200, idtcps_switch_init); | ||
diff --git a/drivers/rapidio/switches/tsi500.c b/drivers/rapidio/switches/tsi500.c index ae553bb41089..65b865d64d34 100644 --- a/drivers/rapidio/switches/tsi500.c +++ b/drivers/rapidio/switches/tsi500.c | |||
@@ -1,6 +1,10 @@ | |||
1 | /* | 1 | /* |
2 | * RapidIO Tsi500 switch support | 2 | * RapidIO Tsi500 switch support |
3 | * | 3 | * |
4 | * Copyright 2009-2010 Integrated Device Technology, Inc. | ||
5 | * Alexandre Bounine <alexandre.bounine@idt.com> | ||
6 | * - Modified switch operations initialization. | ||
7 | * | ||
4 | * Copyright 2005 MontaVista Software, Inc. | 8 | * Copyright 2005 MontaVista Software, Inc. |
5 | * Matt Porter <mporter@kernel.crashing.org> | 9 | * Matt Porter <mporter@kernel.crashing.org> |
6 | * | 10 | * |
@@ -57,4 +61,16 @@ tsi500_route_get_entry(struct rio_mport *mport, u16 destid, u8 hopcount, u16 tab | |||
57 | return ret; | 61 | return ret; |
58 | } | 62 | } |
59 | 63 | ||
60 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI500, tsi500_route_add_entry, tsi500_route_get_entry, NULL); | 64 | static int tsi500_switch_init(struct rio_dev *rdev, int do_enum) |
65 | { | ||
66 | pr_debug("RIO: %s for %s\n", __func__, rio_name(rdev)); | ||
67 | rdev->rswitch->add_entry = tsi500_route_add_entry; | ||
68 | rdev->rswitch->get_entry = tsi500_route_get_entry; | ||
69 | rdev->rswitch->clr_table = NULL; | ||
70 | rdev->rswitch->em_init = NULL; | ||
71 | rdev->rswitch->em_handle = NULL; | ||
72 | |||
73 | return 0; | ||
74 | } | ||
75 | |||
76 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI500, tsi500_switch_init); | ||
diff --git a/drivers/rapidio/switches/tsi568.c b/drivers/rapidio/switches/tsi568.c index 905cf9cb09cc..322840d43832 100644 --- a/drivers/rapidio/switches/tsi568.c +++ b/drivers/rapidio/switches/tsi568.c | |||
@@ -2,6 +2,10 @@ | |||
2 | * RapidIO Tsi568 switch support | 2 | * RapidIO Tsi568 switch support |
3 | * | 3 | * |
4 | * Copyright 2009-2010 Integrated Device Technology, Inc. | 4 | * Copyright 2009-2010 Integrated Device Technology, Inc. |
5 | * Alexandre Bounine <alexandre.bounine@idt.com> | ||
6 | * - Added EM support | ||
7 | * - Modified switch operations initialization. | ||
8 | * | ||
5 | * Copyright 2005 MontaVista Software, Inc. | 9 | * Copyright 2005 MontaVista Software, Inc. |
6 | * Matt Porter <mporter@kernel.crashing.org> | 10 | * Matt Porter <mporter@kernel.crashing.org> |
7 | * | 11 | * |
@@ -106,8 +110,6 @@ tsi568_route_clr_table(struct rio_mport *mport, u16 destid, u8 hopcount, | |||
106 | return 0; | 110 | return 0; |
107 | } | 111 | } |
108 | 112 | ||
109 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI568, tsi568_route_add_entry, tsi568_route_get_entry, tsi568_route_clr_table); | ||
110 | |||
111 | static int | 113 | static int |
112 | tsi568_em_init(struct rio_dev *rdev) | 114 | tsi568_em_init(struct rio_dev *rdev) |
113 | { | 115 | { |
@@ -127,4 +129,16 @@ tsi568_em_init(struct rio_dev *rdev) | |||
127 | return 0; | 129 | return 0; |
128 | } | 130 | } |
129 | 131 | ||
130 | DECLARE_RIO_EM_OPS(RIO_VID_TUNDRA, RIO_DID_TSI568, tsi568_em_init, NULL); | 132 | static int tsi568_switch_init(struct rio_dev *rdev, int do_enum) |
133 | { | ||
134 | pr_debug("RIO: %s for %s\n", __func__, rio_name(rdev)); | ||
135 | rdev->rswitch->add_entry = tsi568_route_add_entry; | ||
136 | rdev->rswitch->get_entry = tsi568_route_get_entry; | ||
137 | rdev->rswitch->clr_table = tsi568_route_clr_table; | ||
138 | rdev->rswitch->em_init = tsi568_em_init; | ||
139 | rdev->rswitch->em_handle = NULL; | ||
140 | |||
141 | return 0; | ||
142 | } | ||
143 | |||
144 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI568, tsi568_switch_init); | ||
diff --git a/drivers/rapidio/switches/tsi57x.c b/drivers/rapidio/switches/tsi57x.c index 23040b92ea76..2e902d3e1abe 100644 --- a/drivers/rapidio/switches/tsi57x.c +++ b/drivers/rapidio/switches/tsi57x.c | |||
@@ -1,7 +1,11 @@ | |||
1 | /* | 1 | /* |
2 | * RapidIO Tsi57x switch family support | 2 | * RapidIO Tsi57x switch family support |
3 | * | 3 | * |
4 | * Copyright 2009 Integrated Device Technology, Inc. | 4 | * Copyright 2009-2010 Integrated Device Technology, Inc. |
5 | * Alexandre Bounine <alexandre.bounine@idt.com> | ||
6 | * - Added EM support | ||
7 | * - Modified switch operations initialization. | ||
8 | * | ||
5 | * Copyright 2005 MontaVista Software, Inc. | 9 | * Copyright 2005 MontaVista Software, Inc. |
6 | * Matt Porter <mporter@kernel.crashing.org> | 10 | * Matt Porter <mporter@kernel.crashing.org> |
7 | * | 11 | * |
@@ -108,11 +112,6 @@ tsi57x_route_clr_table(struct rio_mport *mport, u16 destid, u8 hopcount, | |||
108 | return 0; | 112 | return 0; |
109 | } | 113 | } |
110 | 114 | ||
111 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI572, tsi57x_route_add_entry, tsi57x_route_get_entry, tsi57x_route_clr_table); | ||
112 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI574, tsi57x_route_add_entry, tsi57x_route_get_entry, tsi57x_route_clr_table); | ||
113 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI577, tsi57x_route_add_entry, tsi57x_route_get_entry, tsi57x_route_clr_table); | ||
114 | DECLARE_RIO_ROUTE_OPS(RIO_VID_TUNDRA, RIO_DID_TSI578, tsi57x_route_add_entry, tsi57x_route_get_entry, tsi57x_route_clr_table); | ||
115 | |||
116 | static int | 115 | static int |
117 | tsi57x_em_init(struct rio_dev *rdev) | 116 | tsi57x_em_init(struct rio_dev *rdev) |
118 | { | 117 | { |
@@ -253,7 +252,19 @@ exit_es: | |||
253 | return 0; | 252 | return 0; |
254 | } | 253 | } |
255 | 254 | ||
256 | DECLARE_RIO_EM_OPS(RIO_VID_TUNDRA, RIO_DID_TSI572, tsi57x_em_init, tsi57x_em_handler); | 255 | static int tsi57x_switch_init(struct rio_dev *rdev, int do_enum) |
257 | DECLARE_RIO_EM_OPS(RIO_VID_TUNDRA, RIO_DID_TSI574, tsi57x_em_init, tsi57x_em_handler); | 256 | { |
258 | DECLARE_RIO_EM_OPS(RIO_VID_TUNDRA, RIO_DID_TSI577, tsi57x_em_init, tsi57x_em_handler); | 257 | pr_debug("RIO: %s for %s\n", __func__, rio_name(rdev)); |
259 | DECLARE_RIO_EM_OPS(RIO_VID_TUNDRA, RIO_DID_TSI578, tsi57x_em_init, tsi57x_em_handler); | 258 | rdev->rswitch->add_entry = tsi57x_route_add_entry; |
259 | rdev->rswitch->get_entry = tsi57x_route_get_entry; | ||
260 | rdev->rswitch->clr_table = tsi57x_route_clr_table; | ||
261 | rdev->rswitch->em_init = tsi57x_em_init; | ||
262 | rdev->rswitch->em_handle = tsi57x_em_handler; | ||
263 | |||
264 | return 0; | ||
265 | } | ||
266 | |||
267 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI572, tsi57x_switch_init); | ||
268 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI574, tsi57x_switch_init); | ||
269 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI577, tsi57x_switch_init); | ||
270 | DECLARE_RIO_SWITCH_INIT(RIO_VID_TUNDRA, RIO_DID_TSI578, tsi57x_switch_init); | ||
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index 8f7c89b20639..ef779c6fc3d7 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
@@ -248,12 +248,9 @@ | |||
248 | \ | 248 | \ |
249 | /* RapidIO route ops */ \ | 249 | /* RapidIO route ops */ \ |
250 | .rio_ops : AT(ADDR(.rio_ops) - LOAD_OFFSET) { \ | 250 | .rio_ops : AT(ADDR(.rio_ops) - LOAD_OFFSET) { \ |
251 | VMLINUX_SYMBOL(__start_rio_route_ops) = .; \ | 251 | VMLINUX_SYMBOL(__start_rio_switch_ops) = .; \ |
252 | *(.rio_route_ops) \ | 252 | *(.rio_switch_ops) \ |
253 | VMLINUX_SYMBOL(__end_rio_route_ops) = .; \ | 253 | VMLINUX_SYMBOL(__end_rio_switch_ops) = .; \ |
254 | VMLINUX_SYMBOL(__start_rio_em_ops) = .; \ | ||
255 | *(.rio_em_ops) \ | ||
256 | VMLINUX_SYMBOL(__end_rio_em_ops) = .; \ | ||
257 | } \ | 254 | } \ |
258 | \ | 255 | \ |
259 | TRACEDATA \ | 256 | TRACEDATA \ |
diff --git a/include/linux/rio.h b/include/linux/rio.h index 4ec31f44f406..3d0ac930cbea 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
@@ -320,40 +320,17 @@ struct rio_device_id { | |||
320 | }; | 320 | }; |
321 | 321 | ||
322 | /** | 322 | /** |
323 | * struct rio_route_ops - Per-switch route operations | 323 | * struct rio_switch_ops - Per-switch operations |
324 | * @vid: RIO vendor ID | 324 | * @vid: RIO vendor ID |
325 | * @did: RIO device ID | 325 | * @did: RIO device ID |
326 | * @add_hook: Callback that adds a route entry | 326 | * @init_hook: Callback that performs switch device initialization |
327 | * @get_hook: Callback that gets a route entry | ||
328 | * @clr_hook: Callback that clears a switch route table (may be NULL) | ||
329 | * | 327 | * |
330 | * Defines the operations that are necessary to manipulate the route | 328 | * Defines the operations that are necessary to initialize/control |
331 | * tables for a particular RIO switch device. | 329 | * a particular RIO switch device. |
332 | */ | 330 | */ |
333 | struct rio_route_ops { | 331 | struct rio_switch_ops { |
334 | u16 vid, did; | 332 | u16 vid, did; |
335 | int (*add_hook) (struct rio_mport * mport, u16 destid, u8 hopcount, | 333 | int (*init_hook) (struct rio_dev *rdev, int do_enum); |
336 | u16 table, u16 route_destid, u8 route_port); | ||
337 | int (*get_hook) (struct rio_mport * mport, u16 destid, u8 hopcount, | ||
338 | u16 table, u16 route_destid, u8 * route_port); | ||
339 | int (*clr_hook) (struct rio_mport *mport, u16 destid, u8 hopcount, | ||
340 | u16 table); | ||
341 | }; | ||
342 | |||
343 | /** | ||
344 | * struct rio_em_ops - Per-switch error management operations | ||
345 | * @vid: RIO vendor ID | ||
346 | * @did: RIO device ID | ||
347 | * @init_hook: Switch specific error management initialization (may be NULL) | ||
348 | * @handler_hook: Switch specific error management handler (may be NULL) | ||
349 | * | ||
350 | * Defines the operations that are necessary to initialize and handle | ||
351 | * error management events for a particular RIO switch device. | ||
352 | */ | ||
353 | struct rio_em_ops { | ||
354 | u16 vid, did; | ||
355 | int (*init_hook) (struct rio_dev *dev); | ||
356 | int (*handler_hook) (struct rio_dev *dev, u8 swport); | ||
357 | }; | 334 | }; |
358 | 335 | ||
359 | union rio_pw_msg { | 336 | union rio_pw_msg { |