diff options
author | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
---|---|---|
committer | Roland McGrath <roland@gnu.org> | 2000-02-04 03:21:18 +0000 |
commit | 9fd51e9b0ad33a89a83fdbbb66bd20d85f7893fb (patch) | |
tree | 8845b79f170028cb4380045c50277bbf075b5b7d /pfinet/linux-src/include/linux/hfmodem.h |
Import of Linux 2.2.12 subset (ipv4 stack and related)
Diffstat (limited to 'pfinet/linux-src/include/linux/hfmodem.h')
-rw-r--r-- | pfinet/linux-src/include/linux/hfmodem.h | 256 |
1 files changed, 256 insertions, 0 deletions
diff --git a/pfinet/linux-src/include/linux/hfmodem.h b/pfinet/linux-src/include/linux/hfmodem.h new file mode 100644 index 00000000..7b35f116 --- /dev/null +++ b/pfinet/linux-src/include/linux/hfmodem.h @@ -0,0 +1,256 @@ +/*****************************************************************************/ + +/* + * hfmodem.h -- Linux soundcard HF FSK driver. + * + * Copyright (C) 1997 Thomas Sailer (sailer@ife.ee.ethz.ch) + * Swiss Federal Institute of Technology (ETH), Electronics Lab + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * + * This is the Linux realtime sound output driver + */ + +/*****************************************************************************/ + +#ifndef _HFMODEM_H +#define _HFMODEM_H +/* --------------------------------------------------------------------- */ + +#include <linux/version.h> + +#include <linux/ioctl.h> +#include <linux/types.h> +#include <linux/fs.h> +#if LINUX_VERSION_CODE >= 0x20100 +#include <linux/poll.h> +#endif + +/* --------------------------------------------------------------------- */ + +#define HFMODEM_MINOR 145 + +#define HFMODEM_SRATE 8000 +#define HFMODEM_MAXBITS 4800 /* required for GTOR 300 baud mode */ +#define HFMODEM_MINBAUD 40 +#define HFMODEM_MAXBAUD 400 +#define HFMODEM_MAXCORRLEN ((HFMODEM_SRATE+HFMODEM_MINBAUD-1)/HFMODEM_MINBAUD) + +/* --------------------------------------------------------------------- */ + +typedef unsigned long hfmodem_time_t; +typedef int hfmodem_soft_t; +typedef unsigned long hfmodem_id_t; + +/* --------------------------------------------------------------------- */ + +struct hfmodem_ioctl_fsk_tx_request { + hfmodem_time_t tstart; + hfmodem_time_t tinc; + int inv; + hfmodem_id_t id; + unsigned int nbits; + unsigned char *data; + unsigned int freq[2]; +}; + +struct hfmodem_ioctl_fsk_rx_request { + hfmodem_time_t tstart; + hfmodem_time_t tinc; + unsigned int baud; + hfmodem_id_t id; + unsigned int nbits; + hfmodem_soft_t *data; + unsigned int freq[2]; +}; + +struct hfmodem_ioctl_mixer_params { + int src; + int igain; + int ogain; +}; + +struct hfmodem_ioctl_sample_params { + __s16 *data; + int len; +}; + +#define HFMODEM_IOCTL_FSKTXREQUEST _IOW('H', 0, struct hfmodem_ioctl_fsk_tx_request) +#define HFMODEM_IOCTL_FSKRXREQUEST _IOW('H', 1, struct hfmodem_ioctl_fsk_rx_request) +#define HFMODEM_IOCTL_CLEARRQ _IO('H', 3) +#define HFMODEM_IOCTL_GETCURTIME _IOR('H', 4, hfmodem_time_t) +#define HFMODEM_IOCTL_WAITRQ _IOR('H', 5, hfmodem_id_t) +#define HFMODEM_IOCTL_MIXERPARAMS _IOW('H', 6, struct hfmodem_ioctl_mixer_params) +#define HFMODEM_IOCTL_SAMPLESTART _IOW('H', 7, struct hfmodem_ioctl_sample_params) +#define HFMODEM_IOCTL_SAMPLEFINISHED _IO('H', 8) + +/* --------------------------------------------------------------------- */ +#ifdef __KERNEL__ + +#include <linux/parport.h> + +#define DMA_MODE_AUTOINIT 0x10 + +#define NR_DEVICE 1 + +#define HFMODEM_FRAGSAMPLES (HFMODEM_SRATE/100) +#define HFMODEM_FRAGSIZE (HFMODEM_FRAGSAMPLES*2) +#define HFMODEM_NUMFRAGS 8 +#define HFMODEM_EXCESSFRAGS 3 + +#define HFMODEM_NUMRXSLOTS 20 +#define HFMODEM_NUMTXSLOTS 4 + +#define HFMODEM_CORRELATOR_CACHE 8 + +enum slot_st { ss_unused = 0, ss_ready, ss_oper, ss_retired }; +typedef int hfmodem_conv_t; + +struct hfmodem_state { + const struct hfmodem_scops *scops; + + /* io params */ + struct { + unsigned int base_addr; + unsigned int dma; + unsigned int irq; + } io; + + struct { + unsigned int seriobase; + unsigned int pariobase; + unsigned int midiiobase; + unsigned int flags; + struct pardevice *pardev; + } ptt_out; + + struct { + __s16 *buf; + unsigned int lastfrag; + unsigned int fragptr; + unsigned int last_dmaptr; + int ptt_frames; + } dma; + + struct { + unsigned int last_tvusec; + unsigned long long time_cnt; + hfmodem_time_t lasttime; +#ifdef __i386__ + unsigned int starttime_lo, starttime_hi; +#endif /* __i386__ */ + } clk; + + int active; + struct wait_queue *wait; + + struct { + __s16 *kbuf; + __s16 *ubuf; + __s16 *kptr; + unsigned int size; + int rem; + } sbuf; + + struct { + hfmodem_time_t last_time; + unsigned int tx_phase; + + struct hfmodem_l1_rxslot { + enum slot_st state; + hfmodem_time_t tstart, tinc; + hfmodem_soft_t *data; + hfmodem_soft_t *userdata; + unsigned int nbits; + unsigned int cntbits; + hfmodem_id_t id; + unsigned int corrlen; + hfmodem_conv_t scale; + unsigned int corr_cache; + } rxslots[HFMODEM_NUMRXSLOTS]; + + struct hfmodem_l1_txslot { + enum slot_st state; + hfmodem_time_t tstart, tinc; + unsigned char *data; + unsigned int nbits; + unsigned int cntbits; + hfmodem_id_t id; + unsigned char inv; + unsigned int phinc; + unsigned int phase_incs[2]; + } txslots[HFMODEM_NUMTXSLOTS]; + } l1; +}; + +struct hfmodem_correlator_cache { + int refcnt; + int lru; + unsigned short phase_incs[2]; + hfmodem_conv_t correlator[2][2][HFMODEM_MAXCORRLEN]; +}; + +struct hfmodem_scops { + unsigned int extent; + + void (*init)(struct hfmodem_state *dev); + void (*prepare_input)(struct hfmodem_state *dev); + void (*trigger_input)(struct hfmodem_state *dev); + void (*prepare_output)(struct hfmodem_state *dev); + void (*trigger_output)(struct hfmodem_state *dev); + void (*stop)(struct hfmodem_state *dev); + unsigned int (*intack)(struct hfmodem_state *dev); + void (*mixer)(struct hfmodem_state *dev, int src, int igain, int ogain); +}; + +/* --------------------------------------------------------------------- */ + +extern int hfmodem_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg); +#if LINUX_VERSION_CODE >= 0x20100 +extern unsigned int hfmodem_poll(struct file *file, poll_table *wait); +#else +extern int hfmodem_select(struct inode *inode, struct file *file, int sel_type, select_table *wait); +#endif + +extern void hfmodem_clear_rq(struct hfmodem_state *dev); +extern void hfmodem_input_samples(struct hfmodem_state *dev, hfmodem_time_t tstart, + hfmodem_time_t tinc, __s16 *samples); +extern int hfmodem_output_samples(struct hfmodem_state *dev, hfmodem_time_t tstart, + hfmodem_time_t tinc, __s16 *samples); +extern long hfmodem_next_tx_event(struct hfmodem_state *dev, hfmodem_time_t curr); +extern void hfmodem_finish_pending_rx_requests(struct hfmodem_state *dev); +extern void hfmodem_wakeup(struct hfmodem_state *dev); + + +extern int hfmodem_sbcprobe(struct hfmodem_state *dev); +extern int hfmodem_wssprobe(struct hfmodem_state *dev); + +extern void hfmodem_refclock_probe(void); +extern void hfmodem_refclock_init(struct hfmodem_state *dev); +extern hfmodem_time_t hfmodem_refclock_current(struct hfmodem_state *dev, hfmodem_time_t expected, int exp_valid); + +/* --------------------------------------------------------------------- */ + +extern const char hfmodem_drvname[]; +extern const char hfmodem_drvinfo[]; + +extern struct hfmodem_state hfmodem_state[NR_DEVICE]; +extern struct hfmodem_correlator_cache hfmodem_correlator_cache[HFMODEM_CORRELATOR_CACHE]; + +/* --------------------------------------------------------------------- */ +#endif /* __KERNEL__ */ +/* --------------------------------------------------------------------- */ +#endif /* _HFMODEM_H */ |