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