vmur.h 3.0 KB

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