vmur.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. /* SPDX-License-Identifier: GPL-2.0 */
  2. /*
  3. * Linux driver for System z and s390 unit record devices
  4. * (z/VM virtual punch, reader, printer)
  5. *
  6. * Copyright IBM Corp. 2001, 2007
  7. * Authors: Malcolm Beattie <beattiem@uk.ibm.com>
  8. * Michael Holzheu <holzheu@de.ibm.com>
  9. * Frank Munzert <munzert@de.ibm.com>
  10. */
  11. #ifndef _VMUR_H_
  12. #define _VMUR_H_
  13. #include <linux/refcount.h>
  14. #define DEV_CLASS_UR_I 0x20 /* diag210 unit record input device class */
  15. #define DEV_CLASS_UR_O 0x10 /* diag210 unit record output device class */
  16. /*
  17. * we only support z/VM's default unit record devices:
  18. * both in SPOOL directory control statement and in CP DEFINE statement
  19. * RDR defaults to 2540 reader
  20. * PUN defaults to 2540 punch
  21. * PRT defaults to 1403 printer
  22. */
  23. #define READER_PUNCH_DEVTYPE 0x2540
  24. #define PRINTER_DEVTYPE 0x1403
  25. /* z/VM spool file control block SFBLOK */
  26. struct file_control_block {
  27. char reserved_1[8];
  28. char user_owner[8];
  29. char user_orig[8];
  30. __s32 data_recs;
  31. __s16 rec_len;
  32. __s16 file_num;
  33. __u8 file_stat;
  34. __u8 dev_type;
  35. char reserved_2[6];
  36. char file_name[12];
  37. char file_type[12];
  38. char create_date[8];
  39. char create_time[8];
  40. char reserved_3[6];
  41. __u8 file_class;
  42. __u8 sfb_lok;
  43. __u64 distr_code;
  44. __u32 reserved_4;
  45. __u8 current_starting_copy_number;
  46. __u8 sfblock_cntrl_flags;
  47. __u8 reserved_5;
  48. __u8 more_status_flags;
  49. char rest[200];
  50. } __attribute__ ((packed));
  51. #define FLG_SYSTEM_HOLD 0x04
  52. #define FLG_CP_DUMP 0x10
  53. #define FLG_USER_HOLD 0x20
  54. #define FLG_IN_USE 0x80
  55. /*
  56. * A struct urdev is created for each ur device that is made available
  57. * via the ccw_device driver model.
  58. */
  59. struct urdev {
  60. struct ccw_device *cdev; /* Backpointer to ccw device */
  61. struct mutex io_mutex; /* Serialises device IO */
  62. struct completion *io_done; /* do_ur_io waits; irq completes */
  63. struct device *device;
  64. struct cdev *char_device;
  65. struct ccw_dev_id dev_id; /* device id */
  66. size_t reclen; /* Record length for *write* CCWs */
  67. int class; /* VM device class */
  68. int io_request_rc; /* return code from I/O request */
  69. refcount_t ref_count; /* reference counter */
  70. wait_queue_head_t wait; /* wait queue to serialize open */
  71. int open_flag; /* "urdev is open" flag */
  72. spinlock_t open_lock; /* serialize critical sections */
  73. };
  74. /*
  75. * A struct urfile is allocated at open() time for each device and
  76. * freed on release().
  77. */
  78. struct urfile {
  79. struct urdev *urd;
  80. unsigned int flags;
  81. size_t dev_reclen;
  82. __u16 file_reclen;
  83. };
  84. /*
  85. * Device major/minor definitions.
  86. */
  87. #define UR_MAJOR 0 /* get dynamic major */
  88. /*
  89. * We map minor numbers directly to device numbers (0-FFFF) for simplicity.
  90. * This avoids having to allocate (and manage) slot numbers.
  91. */
  92. #define NUM_MINORS 65536
  93. /* Limiting each I/O to 511 records limits chan prog to 4KB (511 r/w + 1 NOP) */
  94. #define MAX_RECS_PER_IO 511
  95. #define WRITE_CCW_CMD 0x01
  96. #define TRACE(x...) debug_sprintf_event(vmur_dbf, 1, x)
  97. #define CCWDEV_CU_DI(cutype, di) \
  98. CCW_DEVICE(cutype, 0x00), .driver_info = (di)
  99. #define FILE_RECLEN_OFFSET 4064 /* reclen offset in spool data block */
  100. #endif /* _VMUR_H_ */