Skip to content

Commit aac8e75

Browse files
jeff-lien-sndkigaw
authored andcommitted
linux: Add functions to set and clear etdas bit
To retrieve telemetry log data area 4, the Extended Telemetry Data Area 4 Supported in the Host Behavior Support feature needs to be set. The bit will be cleared after the log has been retrieved. This commit will add functions to set and clear that bit. Signed-off-by: jeff-lien-sndk <[email protected]> [wagi: - added changed argument to clear function - refactored error handling (return early)] Signed-off-by: Daniel Wagner <[email protected]>
1 parent a6497f6 commit aac8e75

3 files changed

Lines changed: 72 additions & 0 deletions

File tree

src/libnvme.map

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# SPDX-License-Identifier: LGPL-2.1-or-later
22
LIBNVME_UNRELEASED {
3+
global:
4+
nvme_set_etdas;
5+
nvme_clear_etdas;
36
};
47

58
LIBNVME_1_14 {

src/nvme/linux.c

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,53 @@ int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset,
121121
return err;
122122
}
123123

124+
int nvme_set_etdas(int fd, bool *changed)
125+
{
126+
struct nvme_feat_host_behavior da4;
127+
int err;
128+
129+
err = nvme_get_features_host_behavior(fd, 0, &da4, NULL);
130+
if (err)
131+
return err;
132+
133+
if (da4.etdas) {
134+
*changed = false;
135+
return 0;
136+
}
137+
138+
da4.etdas = 1;
139+
140+
err = nvme_set_features_host_behavior(fd, 0, &da4);
141+
if (err)
142+
return err;
143+
144+
*changed = true;
145+
return 0;
146+
}
147+
148+
int nvme_clear_etdas(int fd, bool *changed)
149+
{
150+
struct nvme_feat_host_behavior da4;
151+
int err;
152+
153+
err = nvme_get_features_host_behavior(fd, 0, &da4, NULL);
154+
if (err)
155+
return err;
156+
157+
if (!da4.etdas) {
158+
*changed = false;
159+
return 0;
160+
}
161+
162+
da4.etdas = 0;
163+
err = nvme_set_features_host_behavior(fd, 0, &da4);
164+
if (err)
165+
return err;
166+
167+
*changed = true;
168+
return 0;
169+
}
170+
124171
int nvme_get_telemetry_max(int fd, enum nvme_telemetry_da *da, size_t *data_tx)
125172
{
126173
_cleanup_free_ struct nvme_id_ctrl *id_ctrl = NULL;

src/nvme/linux.h

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,28 @@
3434
int nvme_fw_download_seq(int fd, __u32 size, __u32 xfer, __u32 offset,
3535
void *buf);
3636

37+
/**
38+
* nvme_set_etdas() - Set the Extended Telemetry Data Area 4 Supported bit
39+
* @fd: File descriptor of nvme device
40+
* @changed: boolean to indicate whether or not the host
41+
* behavior support feature had been changed
42+
*
43+
* Return: The nvme command status if a response was received (see
44+
* &enum nvme_status_field) or -1 with errno set otherwise.
45+
*/
46+
int nvme_set_etdas(int fd, bool *changed);
47+
48+
/**
49+
* nvme_clear_etdas() - Clear the Extended Telemetry Data Area 4 Supported bit
50+
* @fd: File descriptor of nvme device
51+
* @changed: boolean to indicate whether or not the host
52+
* behavior support feature had been changed
53+
*
54+
* Return: The nvme command status if a response was received (see
55+
* &enum nvme_status_field) or -1 with errno set otherwise.
56+
*/
57+
int nvme_clear_etdas(int fd, bool *changed);
58+
3759
/**
3860
* nvme_get_telemetry_max() - Get telemetry limits
3961
* @fd: File descriptor of nvme device

0 commit comments

Comments
 (0)