/*
 * rocket.h --- the exported interface of the rocket driver to its configuration program.
 *
 * Written by Theodore Ts'o, Copyright 1997.
 * Copyright 1997 Comtrol Corporation. 
 *
 */

/*  Model Information Struct */
typedef struct {
	unsigned long model;
	char modelString[80];
	unsigned long numPorts;
	int loadrm2;
	int startingPortNumber;
} rocketModel_t;

struct rocket_config {
	int line;
	int flags;
	int closing_wait;
	int close_delay;
	int port;
	int reserved[32];
};

struct rocket_ports {
	int tty_major;
	int callout_major;
	rocketModel_t rocketModel[8];
};

struct rocket_version {
	char rocket_version[32];
	char rocket_date[32];
	char reserved[64];
};

/*
 * Rocketport flags
 */
#define ROCKET_CALLOUT_NOHUP    0x00000001
#define ROCKET_FORCE_CD		0x00000002
#define ROCKET_HUP_NOTIFY	0x00000004
#define ROCKET_SPLIT_TERMIOS	0x00000008
#define ROCKET_SPD_MASK		0x00000070
#define ROCKET_SPD_HI		0x00000010	/* Use 56000 instead of 38400 bps */
#define ROCKET_SPD_VHI		0x00000020	/* Use 115200 instead of 38400 bps */
#define ROCKET_SPD_SHI		0x00000030	/* Use 230400 instead of 38400 bps */
#define ROCKET_SPD_WARP	        0x00000040	/* Use 460800 instead of 38400 bps */
#define ROCKET_SAK		0x00000080
#define ROCKET_SESSION_LOCKOUT	0x00000100
#define ROCKET_PGRP_LOCKOUT	0x00000200
#define ROCKET_RTS_TOGGLE	0x00000400
#define ROCKET_MODE_MASK        0x00003000
#define ROCKET_MODE_RS232       0x00000000
#define ROCKET_MODE_RS485       0x00001000
#define ROCKET_MODE_RS422       0x00002000
#define ROCKET_FLAGS		0x00003FFF

#define ROCKET_USR_MASK 0x0071	/* Legal flags that non-privileged
				 * users can set or reset */

/*
 * For closing_wait and closing_wait2
 */
#define ROCKET_CLOSING_WAIT_NONE	65535
#define ROCKET_CLOSING_WAIT_INF		0

/*
 * Rocketport ioctls -- "RP"
 */
#define RCKP_GET_STRUCT		0x00525001
#define RCKP_GET_CONFIG		0x00525002
#define RCKP_SET_CONFIG		0x00525003
#define RCKP_GET_PORTS		0x00525004
#define RCKP_RESET_RM2		0x00525005
#define RCKP_GET_VERSION	0x00525006

/*  Rocketport Models */
#define MODEL_RP32INTF        0x0001	/* RP 32 port w/external I/F   */
#define MODEL_RP8INTF         0x0002	/* RP 8 port w/external I/F    */
#define MODEL_RP16INTF        0x0003	/* RP 16 port w/external I/F   */
#define MODEL_RP8OCTA         0x0005	/* RP 8 port w/octa cable      */
#define MODEL_RP4QUAD         0x0004	/* RP 4 port w/quad cable      */
#define MODEL_RP8J            0x0006	/* RP 8 port w/RJ11 connectors */
#define MODEL_RP4J            0x0007	/* RP 4 port w/RJ45 connectors */
#define MODEL_RP8SNI          0x0008	/* RP 8 port w/ DB78 SNI connector */
#define MODEL_RP16SNI         0x0009	/* RP 16 port w/ DB78 SNI connector */
#define MODEL_RPP4            0x000A	/* RP Plus 4 port              */
#define MODEL_RPP8            0x000B	/* RP Plus 8 port              */
#define MODEL_RP2_232         0x000E	/* RP Plus 2 port RS232        */
#define MODEL_RP2_422         0x000F	/* RP Plus 2 port RS232        */

/*  Rocketmodem II Models */
#define MODEL_RP6M            0x000C	/* RM 6 port                   */
#define MODEL_RP4M            0x000D	/* RM 4 port                   */

/* Universal PCI boards */
#define MODEL_UPCI_RP32INTF   0x0801	/* RP UPCI 32 port w/external I/F     */
#define MODEL_UPCI_RP8INTF    0x0802	/* RP UPCI 8 port w/external I/F      */
#define MODEL_UPCI_RP16INTF   0x0803	/* RP UPCI 16 port w/external I/F     */
#define MODEL_UPCI_RP8OCTA    0x0805	/* RP UPCI 8 port w/octa cable        */ 
#define MODEL_UPCI_RM3_8PORT  0x080C	/* RP UPCI Rocketmodem III 8 port     */
#define MODEL_UPCI_RM3_4PORT  0x080C	/* RP UPCI Rocketmodem III 4 port     */

/*  Compact PCI 16 port  */
#define MODEL_CPCI_RP16INTF   0x0903	/* RP Compact PCI 16 port w/external I/F */

/* All ISA boards */
#define MODEL_ISA             0x1000
