linux/arch/s390/include/asm/appldata.h
<<
>>
Prefs
   1/*
   2 * Copyright IBM Corp. 2006
   3 *
   4 * Author(s): Melissa Howland <melissah@us.ibm.com>
   5 */
   6
   7#ifndef _ASM_S390_APPLDATA_H
   8#define _ASM_S390_APPLDATA_H
   9
  10#include <asm/diag.h>
  11#include <asm/io.h>
  12
  13#define APPLDATA_START_INTERVAL_REC     0x80
  14#define APPLDATA_STOP_REC               0x81
  15#define APPLDATA_GEN_EVENT_REC          0x82
  16#define APPLDATA_START_CONFIG_REC       0x83
  17
  18/*
  19 * Parameter list for DIAGNOSE X'DC'
  20 */
  21struct appldata_parameter_list {
  22        u16 diag;
  23        u8  function;
  24        u8  parlist_length;
  25        u32 unused01;
  26        u16 reserved;
  27        u16 buffer_length;
  28        u32 unused02;
  29        u64 product_id_addr;
  30        u64 buffer_addr;
  31} __attribute__ ((packed));
  32
  33struct appldata_product_id {
  34        char prod_nr[7];        /* product number */
  35        u16  prod_fn;           /* product function */
  36        u8   record_nr;         /* record number */
  37        u16  version_nr;        /* version */
  38        u16  release_nr;        /* release */
  39        u16  mod_lvl;           /* modification level */
  40} __attribute__ ((packed));
  41
  42static inline int appldata_asm(struct appldata_product_id *id,
  43                               unsigned short fn, void *buffer,
  44                               unsigned short length)
  45{
  46        struct appldata_parameter_list parm_list;
  47        int ry;
  48
  49        if (!MACHINE_IS_VM)
  50                return -EOPNOTSUPP;
  51        parm_list.diag = 0xdc;
  52        parm_list.function = fn;
  53        parm_list.parlist_length = sizeof(parm_list);
  54        parm_list.buffer_length = length;
  55        parm_list.product_id_addr = (unsigned long) id;
  56        parm_list.buffer_addr = virt_to_phys(buffer);
  57        diag_stat_inc(DIAG_STAT_X0DC);
  58        asm volatile(
  59                "       diag    %1,%0,0xdc"
  60                : "=d" (ry)
  61                : "d" (&parm_list), "m" (parm_list), "m" (*id)
  62                : "cc");
  63        return ry;
  64}
  65
  66#endif /* _ASM_S390_APPLDATA_H */
  67