aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland Dreier <rolandd@cisco.com>2005-09-29 19:31:34 +0000
committerRoland Dreier <rolandd@cisco.com>2006-11-09 11:35:57 -0800
commit1b57ddcbd6d900e11650e58f8e6dbd76e91f62a4 (patch)
tree89115c98a44499d5e40a9905325603a8423b3738
parent7b127a2fdf37ac661d5ae1d4ba697fcedfb3b107 (diff)
downloadlibibverbs-1b57ddcbd6d900e11650e58f8e6dbd76e91f62a4.tar.gz
Move formatting of device's firmware version into device-specific code
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r--ChangeLog10
-rw-r--r--examples/devinfo.c14
-rw-r--r--include/infiniband/driver.h1
-rw-r--r--include/infiniband/verbs.h2
-rw-r--r--src/cmd.c4
5 files changed, 17 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 5ba3ee2..2c6fe34 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2005-09-29 Roland Dreier <roland@cisco.com>
+
+ * examples/devinfo.c (print_hca_cap): Get rid of formatting of
+ firmware version in what should be device-independent code.
+
+ * include/infiniband/driver.h, include/infiniband/verbs.h,
+ src/cmd.c (ibv_cmd_query_device): Change firmware version in
+ struct ibv_device_attr to be a string formatted by device-specific
+ library.
+
2005-09-25 Roland Dreier <roland@cisco.com>
* examples/rc_pingpong.c, examples/srq_pingpong.c,
diff --git a/examples/devinfo.c b/examples/devinfo.c
index 2d43caa..f60bfeb 100644
--- a/examples/devinfo.c
+++ b/examples/devinfo.c
@@ -169,17 +169,6 @@ static int print_all_port_gids(struct ibv_context *ctx, uint8_t port_num, int tb
return rc;
}
-static const char *fw_ver_str(u_int64_t fw_ver, char *str)
-{
- u_int32_t major, minor, sub_minor;
-
- major = (fw_ver >> 32) & 0xffff;
- minor = (fw_ver >> 16) & 0xffff;
- sub_minor = fw_ver & 0xffff;
- sprintf(str, "%x.%x.%x", major, minor, sub_minor);
- return str;
-}
-
static int print_hca_cap(struct ibv_device *ib_dev, uint8_t ib_port)
{
struct ibv_context *ctx;
@@ -202,7 +191,8 @@ static int print_hca_cap(struct ibv_device *ib_dev, uint8_t ib_port)
}
printf("hca_id:\t%s\n", ibv_get_device_name(ib_dev));
- printf("\tfw_ver:\t\t\t\t%s\n", fw_ver_str(device_attr.fw_ver, buf));
+ if (strlen(device_attr.fw_ver))
+ printf("\tfw_ver:\t\t\t\t%s\n", device_attr.fw_ver);
printf("\tnode_guid:\t\t\t%s\n", guid_str(device_attr.node_guid, buf));
printf("\tsys_image_guid:\t\t\t%s\n", guid_str(device_attr.sys_image_guid, buf));
printf("\tmax_mr_size:\t\t\t0x%llx\n", (unsigned long long) device_attr.max_mr_size);
diff --git a/include/infiniband/driver.h b/include/infiniband/driver.h
index 3fe6d09..e310751 100644
--- a/include/infiniband/driver.h
+++ b/include/infiniband/driver.h
@@ -69,6 +69,7 @@ extern int ibv_cmd_get_context(struct ibv_context *context, struct ibv_get_conte
size_t resp_size);
extern int ibv_cmd_query_device(struct ibv_context *context,
struct ibv_device_attr *device_attr,
+ uint64_t *raw_fw_ver,
struct ibv_query_device *cmd, size_t cmd_size);
extern int ibv_cmd_query_port(struct ibv_context *context, uint8_t port_num,
struct ibv_port_attr *port_attr,
diff --git a/include/infiniband/verbs.h b/include/infiniband/verbs.h
index d58e586..bcc2fca 100644
--- a/include/infiniband/verbs.h
+++ b/include/infiniband/verbs.h
@@ -91,7 +91,7 @@ enum ibv_atomic_cap {
};
struct ibv_device_attr {
- uint64_t fw_ver;
+ char fw_ver[64];
uint64_t node_guid;
uint64_t sys_image_guid;
uint64_t max_mr_size;
diff --git a/src/cmd.c b/src/cmd.c
index 6daa097..c560812 100644
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -97,6 +97,7 @@ int ibv_cmd_get_context(struct ibv_context *context, struct ibv_get_context *cmd
int ibv_cmd_query_device(struct ibv_context *context,
struct ibv_device_attr *device_attr,
+ uint64_t *raw_fw_ver,
struct ibv_query_device *cmd, size_t cmd_size)
{
struct ibv_query_device_resp resp;
@@ -106,7 +107,8 @@ int ibv_cmd_query_device(struct ibv_context *context,
if (write(context->cmd_fd, cmd, cmd_size) != cmd_size)
return errno;
- device_attr->fw_ver = resp.fw_ver;
+ memset(device_attr->fw_ver, 0, sizeof device_attr->fw_ver);
+ *raw_fw_ver = resp.fw_ver;
device_attr->node_guid = resp.node_guid;
device_attr->sys_image_guid = resp.sys_image_guid;
device_attr->max_mr_size = resp.max_mr_size;