1 /* SPDX-License-Identifier: GPL-2.0 */
6 * Original 3270 Code for 2.4 written by Richard Hitt (UTS Global)
7 * Rewritten for 2.5 by Martin Schwidefsky <schwidefsky@de.ibm.com>
8 * Copyright IBM Corp. 2003, 2009
11 #include <uapi/asm/raw3270.h>
12 #include <asm/idals.h>
13 #include <asm/ioctl.h>
17 extern const struct class class3270
;
19 /* 3270 CCW request */
20 struct raw3270_request
{
21 struct list_head list
; /* list head for request queueing. */
22 struct raw3270_view
*view
; /* view of this request */
23 struct ccw1 ccw
; /* single ccw. */
24 void *buffer
; /* output buffer. */
25 size_t size
; /* size of output buffer. */
26 int rescnt
; /* residual count from devstat. */
27 int rc
; /* return code for this request. */
29 /* Callback for delivering final status. */
30 void (*callback
)(struct raw3270_request
*rq
, void *data
);
34 struct raw3270_request
*raw3270_request_alloc(size_t size
);
35 void raw3270_request_free(struct raw3270_request
*rq
);
36 int raw3270_request_reset(struct raw3270_request
*rq
);
37 void raw3270_request_set_cmd(struct raw3270_request
*rq
, u8 cmd
);
38 int raw3270_request_add_data(struct raw3270_request
*rq
, void *data
, size_t size
);
39 void raw3270_request_set_data(struct raw3270_request
*rq
, void *data
, size_t size
);
40 void raw3270_request_set_idal(struct raw3270_request
*rq
, struct idal_buffer
*ib
);
43 raw3270_request_final(struct raw3270_request
*rq
)
45 return list_empty(&rq
->list
);
48 void raw3270_buffer_address(struct raw3270
*, char *, int, int);
51 * Functions of a 3270 view.
54 int (*activate
)(struct raw3270_view
*rq
);
55 void (*deactivate
)(struct raw3270_view
*rq
);
56 void (*intv
)(struct raw3270_view
*view
,
57 struct raw3270_request
*rq
, struct irb
*ib
);
58 void (*release
)(struct raw3270_view
*view
);
59 void (*free
)(struct raw3270_view
*view
);
60 void (*resize
)(struct raw3270_view
*view
,
61 int new_model
, int new_cols
, int new_rows
,
62 int old_model
, int old_cols
, int old_rows
);
66 * View structure chaining. The raw3270_view structure is meant to
67 * be embedded at the start of the real view data structure, e.g.:
69 * struct raw3270_view view;
74 struct list_head list
;
75 spinlock_t lock
; /* protects members of view */
76 #define RAW3270_VIEW_LOCK_IRQ 0
77 #define RAW3270_VIEW_LOCK_BH 1
80 struct raw3270_fn
*fn
;
82 unsigned int rows
, cols
; /* # of rows & colums of the view */
83 unsigned char *ascebc
; /* ascii -> ebcdic table */
86 int raw3270_add_view(struct raw3270_view
*view
, struct raw3270_fn
*fn
, int minor
, int subclass
);
87 int raw3270_view_lock_unavailable(struct raw3270_view
*view
);
88 int raw3270_activate_view(struct raw3270_view
*view
);
89 void raw3270_del_view(struct raw3270_view
*view
);
90 void raw3270_deactivate_view(struct raw3270_view
*view
);
91 struct raw3270_view
*raw3270_find_view(struct raw3270_fn
*fn
, int minor
);
92 int raw3270_start(struct raw3270_view
*view
, struct raw3270_request
*rq
);
93 int raw3270_start_locked(struct raw3270_view
*view
, struct raw3270_request
*rq
);
94 int raw3270_start_irq(struct raw3270_view
*view
, struct raw3270_request
*rq
);
95 int raw3270_reset(struct raw3270_view
*view
);
96 struct raw3270_view
*raw3270_view(struct raw3270_view
*view
);
97 int raw3270_view_active(struct raw3270_view
*view
);
98 int raw3270_start_request(struct raw3270_view
*view
, struct raw3270_request
*rq
,
99 int cmd
, void *data
, size_t len
);
100 void raw3270_read_modified_cb(struct raw3270_request
*rq
, void *data
);
102 /* Reference count inliner for view structures. */
104 raw3270_get_view(struct raw3270_view
*view
)
106 atomic_inc(&view
->ref_count
);
109 extern wait_queue_head_t raw3270_wait_queue
;
112 raw3270_put_view(struct raw3270_view
*view
)
114 if (atomic_dec_return(&view
->ref_count
) == 0)
115 wake_up(&raw3270_wait_queue
);
118 struct raw3270
*raw3270_setup_console(void);
119 void raw3270_wait_cons_dev(struct raw3270
*rp
);
121 /* Notifier for device addition/removal */
122 struct raw3270_notifier
{
123 struct list_head list
;
124 void (*create
)(int minor
);
125 void (*destroy
)(int minor
);
128 int raw3270_register_notifier(struct raw3270_notifier
*notifier
);
129 void raw3270_unregister_notifier(struct raw3270_notifier
*notifier
);