diff options
Diffstat (limited to 'drivers/s390/char/vmur.h')
-rw-r--r-- | drivers/s390/char/vmur.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/drivers/s390/char/vmur.h b/drivers/s390/char/vmur.h new file mode 100644 index 000000000000..16d0a4e38e40 --- /dev/null +++ b/drivers/s390/char/vmur.h | |||
@@ -0,0 +1,104 @@ | |||
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 | |||
11 | #ifndef _VMUR_H_ | ||
12 | #define _VMUR_H_ | ||
13 | |||
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 | |||
26 | /* z/VM spool file control block SFBLOK */ | ||
27 | struct file_control_block { | ||
28 | char reserved_1[8]; | ||
29 | char user_owner[8]; | ||
30 | char user_orig[8]; | ||
31 | __s32 data_recs; | ||
32 | __s16 rec_len; | ||
33 | __s16 file_num; | ||
34 | __u8 file_stat; | ||
35 | __u8 dev_type; | ||
36 | char reserved_2[6]; | ||
37 | char file_name[12]; | ||
38 | char file_type[12]; | ||
39 | char create_date[8]; | ||
40 | char create_time[8]; | ||
41 | char reserved_3[6]; | ||
42 | __u8 file_class; | ||
43 | __u8 sfb_lok; | ||
44 | __u64 distr_code; | ||
45 | __u32 reserved_4; | ||
46 | __u8 current_starting_copy_number; | ||
47 | __u8 sfblock_cntrl_flags; | ||
48 | __u8 reserved_5; | ||
49 | __u8 more_status_flags; | ||
50 | char rest[200]; | ||
51 | } __attribute__ ((packed)); | ||
52 | |||
53 | #define FLG_CP_DUMP 0x10 | ||
54 | |||
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 mutex open_mutex; /* Serialises access to device */ | ||
63 | struct completion *io_done; /* do_ur_io waits; irq completes */ | ||
64 | struct device *device; | ||
65 | struct cdev *char_device; | ||
66 | struct ccw_dev_id dev_id; /* device id */ | ||
67 | size_t reclen; /* Record length for *write* CCWs */ | ||
68 | int class; /* VM device class */ | ||
69 | int io_request_rc; /* return code from I/O request */ | ||
70 | }; | ||
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 | /* | ||
84 | * Device major/minor definitions. | ||
85 | */ | ||
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 | |||
94 | /* Limiting each I/O to 511 records limits chan prog to 4KB (511 r/w + 1 NOP) */ | ||
95 | #define MAX_RECS_PER_IO 511 | ||
96 | #define WRITE_CCW_CMD 0x01 | ||
97 | |||
98 | #define TRACE(x...) debug_sprintf_event(vmur_dbf, 1, x) | ||
99 | #define CCWDEV_CU_DI(cutype, di) \ | ||
100 | CCW_DEVICE(cutype, 0x00), .driver_info = (di) | ||
101 | |||
102 | #define FILE_RECLEN_OFFSET 4064 /* reclen offset in spool data block */ | ||
103 | |||
104 | #endif /* _VMUR_H_ */ | ||