Home | History | Annotate | Line # | Download | only in sun
kbdsunvar.h revision 1.1
      1  1.1  uwe /*
      2  1.1  uwe  * Keyboard driver - middle layer for sun keyboard off a serial line.
      3  1.1  uwe  * This code is used by kbd_zs and sunkbd drivers.
      4  1.1  uwe  */
      5  1.1  uwe 
      6  1.1  uwe /*
      7  1.1  uwe  * How many input characters we can buffer.
      8  1.1  uwe  * The port-specific var.h may override this.
      9  1.1  uwe  * Note: must be a power of two!
     10  1.1  uwe  */
     11  1.1  uwe #define	KBD_RX_RING_SIZE	256
     12  1.1  uwe #define KBD_RX_RING_MASK	(KBD_RX_RING_SIZE - 1)
     13  1.1  uwe 
     14  1.1  uwe /*
     15  1.1  uwe  * Output buffer.  Only need a few chars.
     16  1.1  uwe  */
     17  1.1  uwe #define	KBD_TX_RING_SIZE	16
     18  1.1  uwe #define KBD_TX_RING_MASK	(KBD_TX_RING_SIZE - 1)
     19  1.1  uwe /*
     20  1.1  uwe  * Keyboard serial line speed defaults to 1200 bps.
     21  1.1  uwe  */
     22  1.1  uwe #define KBD_DEFAULT_BPS		1200
     23  1.1  uwe #define KBD_RESET_TIMO		1000 /* mS. */
     24  1.1  uwe 
     25  1.1  uwe 
     26  1.1  uwe struct kbd_sun_softc {
     27  1.1  uwe 	/* upper layer (also inherits struct device) */
     28  1.1  uwe 	struct kbd_softc k_kbd;
     29  1.1  uwe 
     30  1.1  uwe 	union {
     31  1.1  uwe 		void *ku_priv;
     32  1.1  uwe 		struct zs_chanstate *ku_cs;
     33  1.1  uwe 	} k_u;
     34  1.1  uwe #define k_priv	k_u.ku_priv
     35  1.1  uwe #define	k_cs	k_u.ku_cs
     36  1.1  uwe 
     37  1.1  uwe 	/*
     38  1.1  uwe 	 * The deviopen and deviclose routines are provided by the
     39  1.1  uwe 	 * underlying lower level driver and used as a back door when
     40  1.1  uwe 	 * opening and closing the internal device.
     41  1.1  uwe 	 */
     42  1.1  uwe 	int (*k_deviopen)(struct device *, int);
     43  1.1  uwe 	int (*k_deviclose)(struct device *, int);
     44  1.1  uwe 
     45  1.1  uwe 	/*
     46  1.1  uwe 	 * Callback provided by the lower layer (actual device driver).
     47  1.1  uwe 	 * Middle layer uses it to send commands to sun keyboard.
     48  1.1  uwe 	 */
     49  1.1  uwe 	void (*k_write_data)(struct kbd_sun_softc *, int);
     50  1.1  uwe 
     51  1.1  uwe 	/* Was initialized once. */
     52  1.1  uwe 	int k_isopen;
     53  1.1  uwe 
     54  1.1  uwe 	/*
     55  1.1  uwe 	 * Magic sequence stuff (Stop-A, aka L1-A).
     56  1.1  uwe 	 * XXX: convert to cnmagic(9).
     57  1.1  uwe 	 */
     58  1.1  uwe 	char k_magic1_down;
     59  1.1  uwe 	u_char k_magic1;	/* L1 */
     60  1.1  uwe 	u_char k_magic2;	/* A */
     61  1.1  uwe 
     62  1.1  uwe 	/* Autorepeat for sun keyboards is handled in software */
     63  1.1  uwe 	int k_repeat_start; 	/* initial delay */
     64  1.1  uwe 	int k_repeat_step;  	/* inter-char delay */
     65  1.1  uwe 	int k_repeatsym;	/* repeating symbol */
     66  1.1  uwe 	int k_repeating;	/* callout is active (use callout_active?) */
     67  1.1  uwe 	struct callout k_repeat_ch;
     68  1.1  uwe 
     69  1.1  uwe 	/* Expecting ID or layout byte from keyboard */
     70  1.1  uwe 	int k_expect;
     71  1.1  uwe #define	KBD_EXPECT_IDCODE	1
     72  1.1  uwe #define	KBD_EXPECT_LAYOUT	2
     73  1.1  uwe 
     74  1.1  uwe 	/* Flags to communicate with kbd_softint() */
     75  1.1  uwe 	volatile int k_intr_flags;
     76  1.1  uwe #define	INTR_RX_OVERRUN 1
     77  1.1  uwe #define INTR_TX_EMPTY   2
     78  1.1  uwe #define INTR_ST_CHECK   4
     79  1.1  uwe 
     80  1.1  uwe 	/* Transmit state */
     81  1.1  uwe 	volatile int k_txflags;
     82  1.1  uwe #define	K_TXBUSY 1
     83  1.1  uwe #define K_TXWANT 2
     84  1.1  uwe 
     85  1.1  uwe 	/*
     86  1.1  uwe 	 * The transmit ring buffer.
     87  1.1  uwe 	 */
     88  1.1  uwe 	volatile u_int k_tbget;	/* transmit buffer `get' index */
     89  1.1  uwe 	volatile u_int k_tbput;	/* transmit buffer `put' index */
     90  1.1  uwe 	u_char k_tbuf[KBD_TX_RING_SIZE]; /* data */
     91  1.1  uwe 
     92  1.1  uwe 	/*
     93  1.1  uwe 	 * The receive ring buffer.
     94  1.1  uwe 	 */
     95  1.1  uwe 	u_int k_rbget;		/* ring buffer `get' index */
     96  1.1  uwe 	volatile u_int k_rbput; /* ring buffer `put' index */
     97  1.1  uwe 	u_short	k_rbuf[KBD_RX_RING_SIZE]; /* rr1, data pairs */
     98  1.1  uwe };
     99  1.1  uwe 
    100  1.1  uwe /* Middle layer methods exported to the upper layer. */
    101  1.1  uwe extern struct kbd_ops kbd_ops_sun;
    102  1.1  uwe 
    103  1.1  uwe /* Methods for lower layer to call. */
    104  1.1  uwe extern void	kbd_sun_input(struct kbd_sun_softc *k, int);
    105  1.1  uwe extern void	kbd_sun_output(struct kbd_sun_softc *k, int c);
    106  1.1  uwe extern void	kbd_sun_start_tx(struct kbd_sun_softc *k);
    107