s390/diag: add diag26c support for VNIC info
authorJulian Wiedmann <jwi@linux.vnet.ibm.com>
Wed, 27 Dec 2017 16:44:30 +0000 (17:44 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 2 Jan 2018 18:52:23 +0000 (13:52 -0500)
With subcode 0x24, diag26c returns all sorts of VNIC-related information.

Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Acked-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/s390/include/asm/diag.h

index 6db78567294c3c27871f91cce468d9f31c9c636a..cdbaad50c7c7d46e4e77b7b0dd8b79360a4d1a33 100644 (file)
@@ -229,13 +229,55 @@ struct diag204_x_phys_block {
 } __packed;
 
 enum diag26c_sc {
+       DIAG26C_PORT_VNIC    = 0x00000024,
        DIAG26C_MAC_SERVICES = 0x00000030
 };
 
 enum diag26c_version {
-       DIAG26C_VERSION2 = 0x00000002   /* z/VM 5.4.0 */
+       DIAG26C_VERSION2         = 0x00000002,  /* z/VM 5.4.0 */
+       DIAG26C_VERSION6_VM65918 = 0x00020006   /* z/VM 6.4.0 + VM65918 */
 };
 
+#define DIAG26C_VNIC_INFO      0x0002
+struct diag26c_vnic_req {
+       u32     resp_buf_len;
+       u32     resp_version;
+       u16     req_format;
+       u16     vlan_id;
+       u64     sys_name;
+       u8      res[2];
+       u16     devno;
+} __packed __aligned(8);
+
+#define VNIC_INFO_PROT_L3      1
+#define VNIC_INFO_PROT_L2      2
+/* Note: this is the bare minimum, use it for uninitialized VNICs only. */
+struct diag26c_vnic_resp {
+       u32     version;
+       u32     entry_cnt;
+       /* VNIC info: */
+       u32     next_entry;
+       u64     owner;
+       u16     devno;
+       u8      status;
+       u8      type;
+       u64     lan_owner;
+       u64     lan_name;
+       u64     port_name;
+       u8      port_type;
+       u8      ext_status:6;
+       u8      protocol:2;
+       u16     base_devno;
+       u32     port_num;
+       u32     ifindex;
+       u32     maxinfo;
+       u32     dev_count;
+       /* 3x device info: */
+       u8      dev_info1[28];
+       u8      dev_info2[28];
+       u8      dev_info3[28];
+} __packed __aligned(8);
+
 #define DIAG26C_GET_MAC        0x0000
 struct diag26c_mac_req {
        u32     resp_buf_len;