Skip to content

Commit 5db1650

Browse files
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]>
1 parent a6497f6 commit 5db1650

3 files changed

Lines changed: 62 additions & 0 deletions

File tree

src/libnvme.map

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
LIBNVME_UNRELEASED {
33
};
44

5+
LIBNVME_1_15 {
6+
global:
7+
nvme_set_etdas;
8+
nvme_clear_etdas;
9+
};
10+
511
LIBNVME_1_14 {
612
global:
713
nvme_get_features_temp_thresh2;

src/nvme/linux.c

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,41 @@ 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,
125+
bool *host_behavior_changed)
126+
{
127+
__u32 result;
128+
int err;
129+
struct nvme_feat_host_behavior da4_enable;
130+
131+
*host_behavior_changed = false;
132+
err = nvme_get_features_host_behavior(fd, 0, &da4_enable, &result);
133+
134+
if (!err && !da4_enable.etdas) {
135+
da4_enable.etdas = 1;
136+
err = nvme_set_features_host_behavior(fd, 0, &da4_enable);
137+
*host_behavior_changed = true;
138+
}
139+
140+
return err;
141+
}
142+
143+
int nvme_clear_etdas(int fd)
144+
{
145+
__u32 result;
146+
int err;
147+
struct nvme_feat_host_behavior da4_disable;
148+
149+
err = nvme_get_features_host_behavior(fd, 0, &da4_disable, &result);
150+
151+
if (!err && da4_disable.etdas) {
152+
da4_disable.etdas = 0;
153+
err = nvme_set_features_host_behavior(fd, 0, &da4_disable);
154+
}
155+
156+
return err;
157+
}
158+
124159
int nvme_get_telemetry_max(int fd, enum nvme_telemetry_da *da, size_t *data_tx)
125160
{
126161
_cleanup_free_ struct nvme_id_ctrl *id_ctrl = NULL;

src/nvme/linux.h

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,27 @@
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+
* @host_behavior_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,
47+
bool *host_behavior_changed);
48+
49+
/**
50+
* nvme_clear_etdas() - Clear the Extended Telemetry Data Area 4 Supported bit
51+
* @fd: File descriptor of nvme device
52+
*
53+
* Return: The nvme command status if a response was received (see
54+
* &enum nvme_status_field) or -1 with errno set otherwise.
55+
*/
56+
int nvme_clear_etdas(int fd);
57+
3758
/**
3859
* nvme_get_telemetry_max() - Get telemetry limits
3960
* @fd: File descriptor of nvme device

0 commit comments

Comments
 (0)