File Index
Files and directories
Sign in
FILE

raw3270.h

File preview with syntax highlighting.

linux-6.19.14/drivers/s390/char/raw3270.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2/*
  3 * IBM/3270 Driver
  4 *
  5 * Author(s):
  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
  9 */
 10
 11#include <uapi/asm/raw3270.h>
 12#include <asm/idals.h>
 13#include <asm/ioctl.h>
 14
 15struct raw3270;
 16struct raw3270_view;
 17extern const struct class class3270;
 18
 19/* 3270 CCW request */
 20struct 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. */
 28
 29	/* Callback for delivering final status. */
 30	void (*callback)(struct raw3270_request *rq, void *data);
 31	void *callback_data;
 32};
 33
 34struct raw3270_request *raw3270_request_alloc(size_t size);
 35void raw3270_request_free(struct raw3270_request *rq);
 36int raw3270_request_reset(struct raw3270_request *rq);
 37void raw3270_request_set_cmd(struct raw3270_request *rq, u8 cmd);
 38int  raw3270_request_add_data(struct raw3270_request *rq, void *data, size_t size);
 39void raw3270_request_set_data(struct raw3270_request *rq, void *data, size_t size);
 40void raw3270_request_set_idal(struct raw3270_request *rq, struct idal_buffer *ib);
 41
 42static inline int
 43raw3270_request_final(struct raw3270_request *rq)
 44{
 45	return list_empty(&rq->list);
 46}
 47
 48void raw3270_buffer_address(struct raw3270 *, char *, int, int);
 49
 50/*
 51 * Functions of a 3270 view.
 52 */
 53struct raw3270_fn {
 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);
 63};
 64
 65/*
 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.:
 68 *   struct example {
 69 *     struct raw3270_view view;
 70 *     ...
 71 *   };
 72 */
 73struct raw3270_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
 78	atomic_t ref_count;
 79	struct raw3270 *dev;
 80	struct raw3270_fn *fn;
 81	unsigned int model;
 82	unsigned int rows, cols;	/* # of rows & colums of the view */
 83	unsigned char *ascebc;		/* ascii -> ebcdic table */
 84};
 85
 86int raw3270_add_view(struct raw3270_view *view, struct raw3270_fn *fn, int minor, int subclass);
 87int raw3270_view_lock_unavailable(struct raw3270_view *view);
 88int raw3270_activate_view(struct raw3270_view *view);
 89void raw3270_del_view(struct raw3270_view *view);
 90void raw3270_deactivate_view(struct raw3270_view *view);
 91struct raw3270_view *raw3270_find_view(struct raw3270_fn *fn, int minor);
 92int raw3270_start(struct raw3270_view *view, struct raw3270_request *rq);
 93int raw3270_start_locked(struct raw3270_view *view, struct raw3270_request *rq);
 94int raw3270_start_irq(struct raw3270_view *view, struct raw3270_request *rq);
 95int raw3270_reset(struct raw3270_view *view);
 96struct raw3270_view *raw3270_view(struct raw3270_view *view);
 97int raw3270_view_active(struct raw3270_view *view);
 98int raw3270_start_request(struct raw3270_view *view, struct raw3270_request *rq,
 99			  int cmd, void *data, size_t len);
100void raw3270_read_modified_cb(struct raw3270_request *rq, void *data);
101
102/* Reference count inliner for view structures. */
103static inline void
104raw3270_get_view(struct raw3270_view *view)
105{
106	atomic_inc(&view->ref_count);
107}
108
109extern wait_queue_head_t raw3270_wait_queue;
110
111static inline void
112raw3270_put_view(struct raw3270_view *view)
113{
114	if (atomic_dec_return(&view->ref_count) == 0)
115		wake_up(&raw3270_wait_queue);
116}
117
118struct raw3270 *raw3270_setup_console(void);
119void raw3270_wait_cons_dev(struct raw3270 *rp);
120
121/* Notifier for device addition/removal */
122struct raw3270_notifier {
123	struct list_head list;
124	void (*create)(int minor);
125	void (*destroy)(int minor);
126};
127
128int raw3270_register_notifier(struct raw3270_notifier *notifier);
129void raw3270_unregister_notifier(struct raw3270_notifier *notifier);
~/ Read-only file preview.