From bbc530c0dde2385d85631cdc9ac82ebd0bdea763 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Sat, 14 Nov 2009 03:40:29 +0000 Subject: [infiniband] Report IB link status as IPoIB netdevice status --- src/net/infiniband.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/net') diff --git a/src/net/infiniband.c b/src/net/infiniband.c index cd7deae25..0025e5c46 100644 --- a/src/net/infiniband.c +++ b/src/net/infiniband.c @@ -27,6 +27,7 @@ FILE_LICENCE ( GPL2_OR_LATER ); #include #include #include +#include #include #include #include @@ -48,6 +49,16 @@ struct list_head ib_devices = LIST_HEAD_INIT ( ib_devices ); /** List of open Infiniband devices, in reverse order of opening */ static struct list_head open_ib_devices = LIST_HEAD_INIT ( open_ib_devices ); +/* Disambiguate the various possible EINPROGRESSes */ +#define EINPROGRESS_INIT ( EINPROGRESS | EUNIQ_01 ) +#define EINPROGRESS_ARMED ( EINPROGRESS | EUNIQ_02 ) + +/** Human-readable message for the link statuses */ +struct errortab infiniband_errors[] __errortab = { + { EINPROGRESS_INIT, "Initialising" }, + { EINPROGRESS_ARMED, "Armed" }, +}; + /*************************************************************************** * * Completion queues @@ -607,6 +618,22 @@ void ib_close ( struct ib_device *ibdev ) { } } +/** + * Get link state + * + * @v ibdev Infiniband device + * @ret rc Link status code + */ +int ib_link_rc ( struct ib_device *ibdev ) { + switch ( ibdev->port_state ) { + case IB_PORT_STATE_DOWN: return -ENOTCONN; + case IB_PORT_STATE_INIT: return -EINPROGRESS_INIT; + case IB_PORT_STATE_ARMED: return -EINPROGRESS_ARMED; + case IB_PORT_STATE_ACTIVE: return 0; + default: return -EINVAL; + } +} + /*************************************************************************** * * Multicast @@ -838,6 +865,7 @@ struct ib_device * alloc_ibdev ( size_t priv_size ) { ib_set_drvdata ( ibdev, drv_priv ); INIT_LIST_HEAD ( &ibdev->cqs ); INIT_LIST_HEAD ( &ibdev->qps ); + ibdev->port_state = IB_PORT_STATE_DOWN; ibdev->lid = IB_LID_NONE; ibdev->pkey = IB_PKEY_NONE; } -- cgit v1.2.3-55-g7522