1 /* 2 * DATAKIT Common Kernel Structure interface definitions 3 * @(#)dkdev.h 1.3 Garage 84/05/14 4 */ 5 6 /* 7 * datakit ioctl commands 8 */ 9 #define DKIOCMASK (0377 << 8) /* if (code & mask) == val */ 10 #define DKIOCVAL ('k' << 8) /* then datakit control */ 11 12 13 14 /* 15 * common structure for dk.c and dkxqt.c (and a little of dktty.c) 16 * for an open channel 17 */ 18 19 struct dkdev { 20 short d_state ; /* various bit values, defined below */ 21 short dc_state; /* more bit values */ 22 short d_bufct ; /* count of buffers in write Q */ 23 short d_rmode ; /* receive termination modes */ 24 short d_rresid ; /* 1 of 3 */ /* residual buffer left in receive */ 25 short d_rdone ; /* 2 of 3 */ /* completion status of last receive */ 26 short d_rctl ; /* 3 of 3 */ /* control char received */ 27 short d_xctl ; /* control char to send */ 28 int d_pgrp ; /* process group number */ 29 short d_prot; /* active protocols on this channel */ 30 struct diocxwin d_win; /* Requested window size */ 31 struct diocctype *d_ctype; /* Connection type */ 32 # define DpURP 0x0001 /* plain URP -- dk.c */ 33 # define DpTTY 0x0002 /* tty protocol -- dktty.c */ 34 # define DpXQT 0x0004 /* remote execution -- dkxqt.c */ 35 # define DpIP 0x0008 /* IP */ 36 37 union { struct { /* DK */ 38 caddr_t dk_addr ; /* address of current bp or cb */ 39 short dk_param[3] ; /* parameters from user from ioctl */ 40 short dk_Xstate ; /* various state bits */ 41 short dk_error ; /* call setup error code */ 42 } d_dk ; 43 44 45 struct { /* DKXQT */ 46 caddr_t dkx_rbuf ; /* receive buffer address */ 47 caddr_t dkx_xbuf ; /* transmit buffer address */ 48 unsigned dkx_discard ; /* amount to discard from input */ 49 short dkx_Xstate ; /* various state bits */ 50 } d_dkx ; 51 52 53 /* others? */ 54 55 } d_var ; 56 } ; 57 58 #define d_addr d_var.d_dk.dk_addr 59 #define d_param d_var.d_dk.dk_param 60 #define d_error d_var.d_dk.dk_error 61 62 63 #define d_rbuf d_var.d_dkx.dkx_rbuf 64 #define d_xbuf d_var.d_dkx.dkx_xbuf 65 #define d_discard d_var.d_dkx.dkx_discard 66 67 #define dx_state d_var.d_dkx.dkx_Xstate 68 69 /* 70 * bits in d_state 71 */ 72 #define DKOPEN 000001 /* this channel is open somewhere */ 73 #define DKXCLUDE 000002 /* open exclusive use, or DT open */ 74 #define DKWAIT 000004 /* process waiting for a buffer */ 75 #define DKSPLICED 000020 /* received splice request from controller */ 76 77 78 /* 79 * bits in dc_state 80 */ 81 #define DKSETUP 000004 /* setup in progress on channel */ 82 #define DKEXPMT 000010 /* timing experiment mode */ 83 #define DKXMIT 000010 /* transmit */ 84 #define DKDROP 000030 /* for ignoring input */ 85 #define DKRW 000050 /* bounce, read then write */ 86 #define DKWR 000070 /* bounce, write then read */ 87 #define DKNOABO 000100 /* do not abort receives, NK mode */ 88 #define DK_ASYNC 000200 /* generate sigio when complete */ 89 #define DK_NDELAY 000400 /* non-blocking mode */ 90 91 /* 92 * bits in dx_state 93 */ 94 #define DXWAIT 000040 /* process is waiting for line */ 95 #define DXCANCEL 020000 /* last sent cancel, ignore nxt msg */ 96 #define DXRQRCV 040000 /* response received to request */ 97 #define DXRQACT 0100000 /* request active on channel */ 98