[go: up one dir, main page]

File: vmur.h

package info (click to toggle)
s390-tools 2.3.0-2~deb10u1
  • links: PTS
  • area: main
  • in suites: buster
  • size: 6,188 kB
  • sloc: ansic: 87,755; sh: 8,398; cpp: 8,384; perl: 3,783; makefile: 1,476; asm: 654
file content (140 lines) | stat: -rw-r--r-- 2,656 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * vmur - Work with z/VM spool file queues (reader, punch, printer)
 *
 * Copyright IBM Corp. 2007, 2017
 *
 * s390-tools is free software; you can redistribute it and/or modify
 * it under the terms of the MIT license. See LICENSE for details.
 */

#ifndef _VMUR_H
#define _VMUR_H

#define ERR(x...) \
do { \
	fflush(stdout); \
	fprintf(stderr, "%s: ", prog_name);\
	fprintf(stderr, x); \
} while (0)

#define ERR_EXIT(x...) \
do { \
	fflush(stdout); \
	fprintf(stderr, "%s: ", prog_name); \
	fprintf(stderr, x); \
	exit(1); \
} while (0)

#define CHECK_SPEC_MAX(i, j, str) \
do { \
	if (i > j) \
		ERR_EXIT(str " can only be specified once.\n"); \
} while (0)

#define VMCP_DEVICE_NODE "/dev/vmcp"
#define VMCP_BUFSIZE 0x4000
#define VMCP_GETSIZE _IOR(0x10, 3, int)
#define VMCP_SETBUF  _IOW(0x10, 2, int)
#define VMCP_GETCODE _IOR(0x10, 1, int)

#define CP_PREFIX_LEN 11

#define VMRDR_DEVICE_NODE "/dev/vmrdr-0.0.000c"
#define VMPUN_DEVICE_NODE "/dev/vmpun-0.0.000d"
#define VMPRT_DEVICE_NODE "/dev/vmprt-0.0.000e"

#define VMPUN_RECLEN 80
#define VMPRT_RECLEN 132

#define VMUR_REC_COUNT 511

#define PAGE_SIZE 4096
#define MAXCMDLEN 80

#define NOP               0x3
#define CCW_IMMED_FLAG    0x10
#define IS_CONTROL_RECORD 0x20

#define EBCDIC_LF 0x25
#define ASCII_LF  0x0a
#define RSCS_USERID "RSCS"

#define SYSFS_CLASS_DIR   "/sys/class/vmur"
#define PROC_DEVICES_FILE "/proc/devices"
#define PROC_DEVICES_FILE_WIDTH 100

#define LOCK_FILE "/tmp/.vmur_lock"

#define EBCDIC_CODE_PAGE "IBM037"
#define ASCII_CODE_PAGE  "ISO-8859-1"

#define READ_BLOCKS 80

enum spoolfile_fmt {
	TYPE_NORMAL,
	TYPE_VMDUMP,
	TYPE_NETDATA,
};

enum ur_action {
	RECEIVE = 0,
	PUNCH   = 1,
	PRINT   = 2,
	PURGE   = 3,
	ORDER   = 4,
	LIST    = 5,
	LAST    = 6,
};

const char *ur_action_str[] = {
	"receive",
	"punch",
	"print",
	"purge",
	"order",
	"list",
};

unsigned int ur_action_prefix_len[] = {
	2, /* RECEIVE */
	3, /* PUNCH */
	2, /* PRINT */
	3, /* PURGE */
	2, /* ORDER */
	2, /* LIST */
};

struct ccw {
	__u8 opcode;
	char reserved_1[3];
	__u8 flag;
	char reserved_2[1];
	__u16 data_len; /* data length */
} __attribute__ ((packed));

struct data { /* CMS NETDATA format */
	__u8 length;
	__u8 flag;
	char magic[5];
	char reserved[248];
} __attribute__ ((packed));

struct splink_page {
	__u32 magic;
	char reserved1[8];
	__u32 data_recs; /* number of data records in 4k buf */
	char data[4048];
	__u16 rec_len;
	char reserved2[22];
	__u16 spoolid;
	char reserved3[6];
} __attribute__ ((packed));

struct splink_record {
	struct ccw ccw;
	char reserved[2];
	__u16 record_len; /* record length */
	struct data data;
} __attribute__ ((packed));

#endif