
#ifndef _BSC_HEADER_
#define _BSC_HEADER_

#pragma pack(1)


/*========== MAILBOX COMMANDS AND RETURN CODES ==========*/
#define BSC_READ                       0x00
#define BSC_WRITE                      0x01
#define OPEN_LINK                      0x02
#define CLOSE_LINK                     0x03
#define CAM_WRITE                      0x04
#define CAM_READ                       0x05
#define LINK_STATUS                    0x06
#define READ_OPERATIONAL_STATISTICS    0x07
#define FLUSH_OPERATIONAL_STATISTICS   0x08
#define READ_COMMS_ERROR_STATISTICS    0x09
#define FLUSH_COMMS_ERROR_STATISTICS   0x0A
#define READ_BSC_ERROR_STATISTICS      0x0B
#define FLUSH_BSC_ERROR_STATISTICS     0x0C
#define FLUSH_BSC_TEXT_BUFFERS         0x0D
#define SET_CONFIGURATION              0x0E
#define READ_CONFIGURATION             0x0F
#define SET_MODEM_STATUS               0x10
#define READ_MODEM_STATUS              0x11
#define READ_CODE_VERSION              0x12
#define ADD_STATION						0x20
#define DELETE_STATION					0x21
#define DELETE_ALL_STATIONS				0x22
#define LIST_STATIONS					0x23
#define SET_GENERAL_OR_SPECIFIC_POLL	0x24
#define SET_STATION_STATUS				0x25

#define READ_STATE_DIAGNOSTICS         0x30

#define	UNUSED_CMD_FOR_EVENTS		0x7e

#define	Z80_TIMEOUT_ERROR	0x0a
#define	DATA_LENGTH_TOO_BIG	0x03

#define BSC_SENDBOX     0xF000  /* send mailbox */

#define	MDATALEN	4000
#define MBOX_HEADER_SZ	15

/* for point-to-point, ignore station_number and address fields in CBLOCK */

/* note: structure must be packed on 1-byte boundaries
   and for a block this size, it is not wise to allocate it on
   the stack - should be a static global
*/
/* control block */
typedef struct {
	unsigned char 	opp_flag 		;
	unsigned char 	command			;
	unsigned short 	buffer_length		;
	unsigned char 	return_code		;
	unsigned char 	misc_tx_rx_bits		;
	unsigned short 	heading_length		;
	unsigned short 	notify			;
	unsigned char 	station			;
	unsigned char 	poll_address		;
	unsigned char 	select_address		;
	unsigned char 	device_address		;
	unsigned char 	notify_extended		;
	unsigned char 	reserved		;
	unsigned char 	data[MDATALEN]		;
} BSC_MAILBOX_STRUCT;



typedef struct {
	unsigned char 	line_speed_number	;
	unsigned short 	max_data_frame_size	;
	unsigned char 	secondary_station	;
	unsigned char 	num_consec_PAD_eof	;
	unsigned char 	num_add_lead_SYN	;
	unsigned char 	conversational_mode	;
	unsigned char 	pp_dial_up_operation	;
	unsigned char 	switched_CTS_RTS	;
	unsigned char 	EBCDIC_encoding		;
	unsigned char 	auto_open		;
	unsigned char 	misc_bits		;
	unsigned char 	protocol_options1	;
	unsigned char 	protocol_options2	;
	unsigned short 	reserved_pp		;
	unsigned char 	max_retransmissions	;
	unsigned short 	fast_poll_retries	;
	unsigned short 	TTD_retries		;
	unsigned short 	restart_timer		;
	unsigned short 	pp_slow_restart_timer	;
	unsigned short 	TTD_timer		;
	unsigned short 	pp_delay_between_EOT_ENQ ;
	unsigned short 	response_timer		;
	unsigned short 	rx_data_timer		;
	unsigned short 	NAK_retrans_delay_timer ;
	unsigned short 	wait_CTS_timer		;
	unsigned char 	mp_max_consec_ETX	;
	unsigned char 	mp_general_poll_address ;
	unsigned short 	sec_poll_timeout	;
	unsigned char 	pri_poll_skips_inactive ;
	unsigned char 	sec_additional_stn_send_gpoll ;
	unsigned char 	pri_select_retries 	;
	unsigned char 	mp_multipoint_options	;
	unsigned short 	reserved		;
} BSC_CONFIG_STRUCT;


typedef struct {
	unsigned char max_tx_queue	;
	unsigned char max_rx_queue	;
	unsigned char station_flags	;
}ADD_STATION_STRUCT;

typedef struct {
	unsigned char	station		;
	unsigned short	time_stamp	;
	unsigned char	reserved[13]	;
} api_rx_hdr_t;

typedef struct {
        api_rx_hdr_t	api_rx_hdr      ;
        void *   	data    	;
} api_rx_element_t;

typedef struct {
	unsigned char 	station		;
	unsigned char   misc_tx_rx_bits ;
	unsigned char  	reserved[14]	;
} api_tx_hdr_t;

typedef struct {
	api_tx_hdr_t 	api_tx_hdr	;
	void *		data		;
} api_tx_element_t;

#define SIOC_WANPIPE_EXEC_CMD	SIOC_WANPIPE_DEVPRIVATE

#pragma pack()

#endif
