Files
s390-tools/zpcictl/zpcictl.h
Jan Höppner 177cf8cfeb zpcictl: Introduce new tool zpcictl
zpcictl is used to manage PCI devices on z Systems. In this first
version it is mainly used to handle erroneous PCI devices by changing
their state and make those changes known to the SE. Log data, such as
S.M.A.R.T. data for NVMe devices, is sent alongside those state changes.

The state change is issued by sending data via the PCI 'report_error'
sysfs attribute. It's a binary attribute which will cause the host to
send an Adapter Notification Event.

Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
2018-09-29 12:41:44 +02:00

61 lines
1.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*
* zpcictl - Manage PCI devices on z Systems
*
* Copyright IBM Corp. 2018
*
* s390-tools is free software; you can redistribute it and/or modify
* it under the terms of the MIT license. See LICENSE for details.
*/
#ifndef ZPCICTL_H
#define ZPCICTL_H
#include <linux/types.h>
#include "lib/zt_common.h"
#define SCLP_ERRNOTIFY_AQ_RESET 0
#define SCLP_ERRNOTIFY_AQ_DECONF 1
#define SCLP_ERRNOTIFY_AQ_REPORT_ERR 2
#define PCI_CLASS_UNCLASSIFIED 0x000000U
#define PCI_CLASS_NVME 0x010802U
#define PCI_CLASS_NETWORK 0x020000U
struct options {
unsigned int reset;
unsigned int deconfigure;
unsigned int report;
};
struct zpci_device {
u16 fid;
u16 pchid;
u32 class;
char slot[13];
char *device;
};
struct zpci_report_error_header {
__u8 version; /* Interface version byte */
__u8 action; /* Action qualifier byte
* 0: Adapter Reset Request
* 1: Deconfigure and repair action requested
* 2: Informational Report
*/
__u16 length; /* Length of Subsequent Data (up to 4K SCLP header) */
__u8 data[0]; /* Subsequent Data passed verbatim to SCLP ET 24 */
};
struct zpci_report_error_data {
__u64 timestamp;
__u64 err_log_id;
char log_data[4054]; /* We cannot exceed a total of 4074 bytes (header + data) */
};
struct zpci_report_error {
struct zpci_report_error_header header;
struct zpci_report_error_data data;
} __packed;
#endif /* ZPCICTL_H */