/* SPDX-License-Identifier: GPL-2.0 */
/*
 * Linux driver for System z and s390 unit record devices
 * (z/VM virtual punch, reader, printer)
 *
 * Copyright IBM Corp. 2001, 2007
 * Authors: Malcolm Beattie <beattiem@uk.ibm.com>
 *	    Michael Holzheu <holzheu@de.ibm.com>
 *	    Frank Munzert <munzert@de.ibm.com>
 */

#ifndef _VMUR_H_
#define _VMUR_H_

#include <linux/refcount.h>
#include <linux/workqueue.h>

#define DEV_CLASS_UR_I 0x20 /* diag210 unit record input device class */
#define DEV_CLASS_UR_O 0x10 /* diag210 unit record output device class */
/*
 * we only support z/VM's default unit record devices:
 * both in SPOOL directory control statement and in CP DEFINE statement
 *	RDR defaults to 2540 reader
 *	PUN defaults to 2540 punch
 *	PRT defaults to 1403 printer
 */
#define READER_PUNCH_DEVTYPE	0x2540
#define PRINTER_DEVTYPE		0x1403

/* z/VM spool file control block SFBLOK */
struct file_control_block {
	char reserved_1[8];
	char user_owner[8];
	char user_orig[8];
	__s32 data_recs;
	__s16 rec_len;
	__s16 file_num;
	__u8  file_stat;
	__u8  dev_type;
	char  reserved_2[6];
	char  file_name[12];
	char  file_type[12];
	char  create_date[8];
	char  create_time[8];
	char  reserved_3[6];
	__u8  file_class;
	__u8  sfb_lok;
	__u64 distr_code;
	__u32 reserved_4;
	__u8  current_starting_copy_number;
	__u8  sfblock_cntrl_flags;
	__u8  reserved_5;
	__u8  more_status_flags;
	char  rest[200];
} __attribute__ ((packed));

#define FLG_SYSTEM_HOLD	0x04
#define FLG_CP_DUMP	0x10
#define FLG_USER_HOLD	0x20
#define FLG_IN_USE	0x80

/*
 * A struct urdev is created for each ur device that is made available
 * via the ccw_device driver model.
 */
struct urdev {
	struct ccw_device *cdev;	/* Backpointer to ccw device */
	struct mutex io_mutex;		/* Serialises device IO */
	struct completion *io_done;	/* do_ur_io waits; irq completes */
	struct device *device;
	struct cdev *char_device;
	struct ccw_dev_id dev_id;	/* device id */
	size_t reclen;			/* Record length for *write* CCWs */
	int class;			/* VM device class */
	int io_request_rc;		/* return code from I/O request */
	refcount_t ref_count;		/* reference counter */
	wait_queue_head_t wait;		/* wait queue to serialize open */
	int open_flag;			/* "urdev is open" flag */
	spinlock_t open_lock;		/* serialize critical sections */
	struct work_struct uevent_work;	/* work to send uevent */
};

/*
 * A struct urfile is allocated at open() time for each device and
 * freed on release().
 */
struct urfile {
	struct urdev *urd;
	unsigned int flags;
	size_t dev_reclen;
	__u16 file_reclen;
};

/*
 * Device major/minor definitions.
 */

#define UR_MAJOR 0	/* get dynamic major */
/*
 * We map minor numbers directly to device numbers (0-FFFF) for simplicity.
 * This avoids having to allocate (and manage) slot numbers.
 */
#define NUM_MINORS 65536

/* Limiting each I/O to 511 records limits chan prog to 4KB (511 r/w + 1 NOP) */
#define MAX_RECS_PER_IO		511
#define WRITE_CCW_CMD		0x01

#define TRACE(x...) debug_sprintf_event(vmur_dbf, 1, x)
#define CCWDEV_CU_DI(cutype, di) \
		CCW_DEVICE(cutype, 0x00), .driver_info = (di)

#define FILE_RECLEN_OFFSET	4064 /* reclen offset in spool data block */

#endif /* _VMUR_H_ */
