linux/arch/powerpc/platforms/pseries/vas.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * Copyright 2020-21 IBM Corp.
   4 */
   5
   6#ifndef _VAS_H
   7#define _VAS_H
   8#include <asm/vas.h>
   9#include <linux/mutex.h>
  10#include <linux/stringify.h>
  11
  12/*
  13 * VAS window modify flags
  14 */
  15#define VAS_MOD_WIN_CLOSE       PPC_BIT(0)
  16#define VAS_MOD_WIN_JOBS_KILL   PPC_BIT(1)
  17#define VAS_MOD_WIN_DR          PPC_BIT(3)
  18#define VAS_MOD_WIN_PR          PPC_BIT(4)
  19#define VAS_MOD_WIN_SF          PPC_BIT(5)
  20#define VAS_MOD_WIN_TA          PPC_BIT(6)
  21#define VAS_MOD_WIN_FLAGS       (VAS_MOD_WIN_JOBS_KILL | VAS_MOD_WIN_DR | \
  22                                VAS_MOD_WIN_PR | VAS_MOD_WIN_SF)
  23
  24#define VAS_WIN_ACTIVE          0x0
  25#define VAS_WIN_CLOSED          0x1
  26#define VAS_WIN_INACTIVE        0x2     /* Inactive due to HW failure */
  27/* Process of being modified, deallocated, or quiesced */
  28#define VAS_WIN_MOD_IN_PROCESS  0x3
  29
  30#define VAS_COPY_PASTE_USER_MODE        0x00000001
  31#define VAS_COP_OP_USER_MODE            0x00000010
  32
  33/*
  34 * Co-processor feature - GZIP QoS windows or GZIP default windows
  35 */
  36enum vas_cop_feat_type {
  37        VAS_GZIP_QOS_FEAT_TYPE,
  38        VAS_GZIP_DEF_FEAT_TYPE,
  39        VAS_MAX_FEAT_TYPE,
  40};
  41
  42/*
  43 * Use to get feature specific capabilities from the
  44 * hypervisor.
  45 */
  46struct hv_vas_cop_feat_caps {
  47        __be64  descriptor;
  48        u8      win_type;               /* Default or QoS type */
  49        u8      user_mode;
  50        __be16  max_lpar_creds;
  51        __be16  max_win_creds;
  52        union {
  53                __be16  reserved;
  54                __be16  def_lpar_creds; /* Used for default capabilities */
  55        };
  56        __be16  target_lpar_creds;
  57} __packed __aligned(0x1000);
  58
  59/*
  60 * Feature specific (QoS or default) capabilities.
  61 */
  62struct vas_cop_feat_caps {
  63        u64             descriptor;
  64        u8              win_type;       /* Default or QoS type */
  65        u8              user_mode;      /* User mode copy/paste or COP HCALL */
  66        u16             max_lpar_creds; /* Max credits available in LPAR */
  67        /* Max credits can be assigned per window */
  68        u16             max_win_creds;
  69        union {
  70                u16     reserved;       /* Used for QoS credit type */
  71                u16     def_lpar_creds; /* Used for default credit type */
  72        };
  73        /* Total LPAR available credits. Can be different from max LPAR */
  74        /* credits due to DLPAR operation */
  75        atomic_t        target_lpar_creds;
  76        atomic_t        used_lpar_creds; /* Used credits so far */
  77        u16             avail_lpar_creds; /* Remaining available credits */
  78};
  79
  80/*
  81 * Feature (QoS or Default) specific to store capabilities and
  82 * the list of open windows.
  83 */
  84struct vas_caps {
  85        struct vas_cop_feat_caps caps;
  86        struct list_head list;  /* List of open windows */
  87};
  88
  89/*
  90 * To get window information from the hypervisor.
  91 */
  92struct hv_vas_win_lpar {
  93        __be16  version;
  94        u8      win_type;
  95        u8      status;
  96        __be16  credits;        /* No of credits assigned to this window */
  97        __be16  reserved;
  98        __be32  pid;            /* LPAR Process ID */
  99        __be32  tid;            /* LPAR Thread ID */
 100        __be64  win_addr;       /* Paste address */
 101        __be32  interrupt;      /* Interrupt when NX request completes */
 102        __be32  fault;          /* Interrupt when NX sees fault */
 103        /* Associativity Domain Identifiers as returned in */
 104        /* H_HOME_NODE_ASSOCIATIVITY */
 105        __be64  domain[6];
 106        __be64  win_util;       /* Number of bytes processed */
 107} __packed __aligned(0x1000);
 108
 109struct pseries_vas_window {
 110        struct vas_window vas_win;
 111        u64 win_addr;           /* Physical paste address */
 112        u8 win_type;            /* QoS or Default window */
 113        u32 complete_irq;       /* Completion interrupt */
 114        u32 fault_irq;          /* Fault interrupt */
 115        u64 domain[6];          /* Associativity domain Ids */
 116                                /* this window is allocated */
 117        u64 util;
 118
 119        /* List of windows opened which is used for LPM */
 120        struct list_head win_list;
 121        u64 flags;
 122        char *name;
 123        int fault_virq;
 124};
 125#endif /* _VAS_H */
 126