greybus: rename HOST_DEV_CPORT_ID_MAX

We limit the number of host-side CPorts to a fixed maximum (which
is less than the 4096 that UniPro allows).  This patch imposes a
similar limit on the CPort IDs defined by modules (signaling an
error if one too large is found in a manifest).

It seems reasonable to use the same value for both limits.  Change
the name of the constant that defines the host limit and use it for
both.  Update cport_id_valid() to enforce the maximum.

(Ultimately we should impose a limit like this; this change is being
made in preparation for supporting multiple connections over a
single CPort.)

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
Alex Elder 2015-06-13 11:02:09 -05:00 committed by Greg Kroah-Hartman
parent d29b3d631e
commit fb690ca96f
4 changed files with 12 additions and 9 deletions

View File

@ -158,7 +158,7 @@ struct gb_connection *gb_connection_create(struct gb_bundle *bundle,
if (!connection)
return NULL;
retval = ida_simple_get(id_map, 0, HOST_DEV_CPORT_ID_MAX, GFP_KERNEL);
retval = ida_simple_get(id_map, 0, CPORT_ID_MAX, GFP_KERNEL);
if (retval < 0) {
kfree(connection);
return NULL;

View File

@ -246,7 +246,7 @@ static int __init gb_init(void)
if (greybus_disabled())
return -ENODEV;
BUILD_BUG_ON(HOST_DEV_CPORT_ID_MAX >= (long)CPORT_ID_BAD);
BUILD_BUG_ON(CPORT_ID_MAX >= (long)CPORT_ID_BAD);
gb_debugfs_init();

View File

@ -52,13 +52,13 @@
.serial_number = (s),
/* XXX I couldn't get my Kconfig file to be noticed for out-of-tree build */
#ifndef CONFIG_HOST_DEV_CPORT_ID_MAX
#define CONFIG_HOST_DEV_CPORT_ID_MAX 128
#endif /* !CONFIG_HOST_DEV_CPORT_ID_MAX */
#ifndef CONFIG_CPORT_ID_MAX
#define CONFIG_CPORT_ID_MAX 128
#endif /* !CONFIG_CPORT_ID_MAX */
/* Maximum number of CPorts usable by a host device */
/* XXX This should really be determined by the AP module manifest */
#define HOST_DEV_CPORT_ID_MAX CONFIG_HOST_DEV_CPORT_ID_MAX
#define CPORT_ID_MAX CONFIG_CPORT_ID_MAX
#define CPORT_ID_BAD U16_MAX /* UniPro max id is 4095 */
/* For SP1 hardware, we are going to "hardcode" each device to have all logical
@ -198,7 +198,7 @@ static inline int is_gb_connection(const struct device *dev)
static inline bool cport_id_valid(u16 cport_id)
{
return cport_id != CPORT_ID_BAD;
return cport_id != CPORT_ID_BAD && cport_id <= CPORT_ID_MAX;
}
#endif /* __KERNEL__ */

View File

@ -224,9 +224,12 @@ static u32 gb_manifest_parse_cports(struct gb_bundle *bundle)
if (desc_cport->bundle != bundle_id)
continue;
cport_id = le16_to_cpu(desc_cport->id);
if (cport_id > CPORT_ID_MAX)
goto cleanup;
/* Found one. Set up its function structure */
protocol_id = desc_cport->protocol_id;
cport_id = le16_to_cpu(desc_cport->id);
if (!gb_connection_create(bundle, cport_id, protocol_id))
goto cleanup;