+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,
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;
}
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);
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,
};
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;
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;
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;