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