#ifdef MAGMA_DEBUG
#define dprintf(x) printf x
#else
#define dprintf(x)
#endif
#define MAGMA_MAX_CARDS 4
#define MAGMA_MAX_TTY 16
#define MAGMA_MAX_BPP 2
#define MAGMA_MAX_CD1400 4
#define MAGMA_MAX_CD1190 2
#define MAGMA_CARD(x) ((TTUNIT(x) >> 6) & 0x03)
#define MAGMA_PORT(x) (TTUNIT(x) & 0x0f)
#define MTTY_DIALOUT(x) TTDIALOUT(x)
struct magma_board_info {
const char *mb_sbusname;
const char *mb_name;
const char *mb_realname;
int mb_nser;
int mb_npar;
int mb_ncd1400;
int mb_svcackr;
int mb_svcackt;
int mb_svcackm;
int mb_cd1400[MAGMA_MAX_CD1400];
int mb_ncd1190;
int mb_cd1190[MAGMA_MAX_CD1190];
};
struct cd1400 {
volatile u_char *cd_reg;
int cd_chiprev;
int cd_clock;
int cd_parmode;
};
struct cd1190 {
volatile u_char *cd_reg;
int cd_chiprev;
};
struct magma_softc {
device_t ms_dev;
struct evcnt ms_intrcnt;
int ms_ncd1400;
struct cd1400 ms_cd1400[MAGMA_MAX_CD1400];
volatile u_char *ms_svcackr;
volatile u_char *ms_svcackt;
volatile u_char *ms_svcackm;
int ms_ncd1190;
struct cd1190 ms_cd1190[MAGMA_MAX_CD1190];
struct magma_board_info *ms_board;
struct mtty_softc *ms_mtty;
struct mbpp_softc *ms_mbpp;
void *ms_sicookie;
};
#define MTTY_RBUF_SIZE (2 * 512)
#define MTTY_RX_FIFO_THRESHOLD 6
#define MTTY_RX_DTR_THRESHOLD 9
struct mtty_port {
struct cd1400 *mp_cd1400;
int mp_channel;
struct tty *mp_tty;
int mp_openflags;
int mp_flags;
int mp_carrier;
u_char *mp_rbuf;
u_char *mp_rend;
u_char *mp_rget;
u_char *mp_rput;
u_char *mp_txp;
int mp_txc;
};
#define MTTYF_CARRIER_CHANGED (1<<0)
#define MTTYF_SET_BREAK (1<<1)
#define MTTYF_CLR_BREAK (1<<2)
#define MTTYF_DONE (1<<3)
#define MTTYF_STOP (1<<4)
#define MTTYF_RING_OVERFLOW (1<<5)
struct mtty_softc {
device_t ms_dev;
int ms_nports;
struct mtty_port ms_port[MAGMA_MAX_TTY];
};
#define MBPP_RX_FIFO_THRESHOLD 25
struct mbpp_port {
struct cd1400 *mp_cd1400;
struct cd1190 *mp_cd1190;
struct callout mp_timeout_ch;
struct callout mp_start_ch;
int mp_flags;
struct mbpp_param mp_param;
#define mp_burst mp_param.bp_burst
#define mp_timeout mp_param.bp_timeout
#define mp_delay mp_param.bp_delay
u_char *mp_ptr;
int mp_cnt;
};
#define MBPPF_OPEN (1<<0)
#define MBPPF_TIMEOUT (1<<1)
#define MBPPF_UIO (1<<2)
#define MBPPF_DELAY (1<<3)
#define MBPPF_WAKEUP (1<<4)
struct mbpp_softc {
int ms_nports;
struct mbpp_port ms_port[MAGMA_MAX_BPP];
};
int cd1400_compute_baud(speed_t, int, int *, int *);
__inline void cd1400_write_ccr(struct cd1400 *, u_char);
__inline u_char cd1400_read_reg(struct cd1400 *, int);
__inline void cd1400_write_reg(struct cd1400 *, int, u_char);
void cd1400_enable_transmitter(struct cd1400 *, int);
int magma_match(device_t, cfdata_t, void *);
void magma_attach(device_t, device_t, void *);
int magma_hard(void *);
void magma_soft(void *);
int mtty_match(device_t, cfdata_t, void *);
void mtty_attach(device_t, device_t, void *);
int mtty_modem_control(struct mtty_port *, int, int);
int mtty_param(struct tty *, struct termios *);
void mtty_start(struct tty *);
int mbpp_match(device_t, cfdata_t, void *);
void mbpp_attach(device_t, device_t, void *);
void mbpp_timeout(void *);
void mbpp_start(void *);
int mbpp_send(struct mbpp_port *, void *, int);
int mbpp_recv(struct mbpp_port *, void *, int);
int mbpp_hztoms(int);
int mbpp_mstohz(int);