• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asus-wl-520gu-7.0.1.45/src/linux/linux/drivers/net/hamradio/soundmodem/

Lines Matching refs:sm

36 #include "sm.h"
60 #define SCSTATE ((struct sc_state_sbc *)(&sm->hw))
159 static int config_resources(struct net_device *dev, struct sm_state *sm, int fdx)
204 switch (sm->hdrv.ptt_out.dma2) {
254 static void setup_dma_dsp(struct net_device *dev, struct sm_state *sm, int send)
276 nsamps = dma_setup(sm, send, dev->dma) - 1;
298 struct sm_state *sm = (struct sm_state *)dev->priv;
301 if (!dev || !sm || sm->hdrv.magic != HDLCDRV_MAGIC)
307 dma_ptr(sm, sm->dma.ptt_cnt > 0, dev->dma, &curfrag);
309 sm_int_freq(sm);
311 if (sm->dma.ptt_cnt <= 0) {
312 dma_receive(sm, curfrag);
313 hdlcdrv_arbitrate(dev, &sm->hdrv);
314 if (hdlcdrv_ptt(&sm->hdrv)) {
317 hdlcdrv_transmitter(dev, &sm->hdrv); /* prefill HDLC buffer */
318 dma_start_transmit(sm);
319 setup_dma_dsp(dev, sm, 1);
320 dma_transmit(sm);
322 } else if (dma_end_transmit(sm, curfrag)) {
326 dma_init_receive(sm);
327 setup_dma_dsp(dev, sm, 0);
329 dma_transmit(sm);
330 sm_output_status(sm);
331 hdlcdrv_transmitter(dev, &sm->hdrv);
332 hdlcdrv_receiver(dev, &sm->hdrv);
338 static int sbc_open(struct net_device *dev, struct sm_state *sm)
343 if (sizeof(sm->m) < sizeof(struct sc_state_sbc)) {
344 printk(KERN_ERR "sm sbc: sbc state too big: %d > %d\n",
345 sizeof(struct sc_state_sbc), sizeof(sm->m));
348 if (!dev || !sm)
382 (err = config_resources(dev, sm, 0))) {
389 dma_init_receive(sm);
390 dmasz = (NUM_FRAGMENTS + 1) * sm->dma.ifragsz;
391 u = NUM_FRAGMENTS * sm->dma.ofragsz;
394 if (!(sm->dma.ibuf = sm->dma.obuf = kmalloc(dmasz, GFP_KERNEL | GFP_DMA)))
396 dma_init_transmit(sm);
397 dma_init_receive(sm);
399 memset(&sm->m, 0, sizeof(sm->m));
400 memset(&sm->d, 0, sizeof(sm->d));
401 if (sm->mode_tx->init)
402 sm->mode_tx->init(sm);
403 if (sm->mode_rx->init)
404 sm->mode_rx->init(sm);
406 if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
407 kfree(sm->dma.obuf);
411 sm->hwdrv->hw_name, dev)) {
413 kfree(sm->dma.obuf);
416 request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
417 setup_dma_dsp(dev, sm, 0);
423 static int sbc_close(struct net_device *dev, struct sm_state *sm)
425 if (!dev || !sm)
435 kfree(sm->dma.obuf);
441 static int sbc_sethw(struct net_device *dev, struct sm_state *sm, char *mode)
448 sm->mode_tx = NULL;
449 sm->mode_rx = NULL;
457 if ((*mtp)->loc_storage > sizeof(sm->m)) {
469 if ((*mrp)->loc_storage > sizeof(sm->d)) {
478 sm->mode_tx = *mtp;
479 sm->mode_rx = *mrp;
480 SCSTATE->fmt[0] = 256-((1000000L+sm->mode_rx->srate/2)/
481 sm->mode_rx->srate);
482 SCSTATE->fmt[1] = 256-((1000000L+sm->mode_tx->srate/2)/
483 sm->mode_tx->srate);
484 sm->dma.ifragsz = (sm->mode_rx->srate + 50)/100;
485 sm->dma.ofragsz = (sm->mode_tx->srate + 50)/100;
486 if (sm->dma.ifragsz < sm->mode_rx->overlap)
487 sm->dma.ifragsz = sm->mode_rx->overlap;
488 sm->dma.i16bit = sm->dma.o16bit = 0;
498 static int sbc_ioctl(struct net_device *dev, struct sm_state *sm, struct ifreq *ifr,
522 bi.data.mix.sample_rate = sm->mode_rx->srate;
523 bi.data.mix.bit_rate = sm->hdrv.par.bitrate;
593 static void setup_dma_fdx_dsp(struct net_device *dev, struct sm_state *sm)
614 if (sm->dma.o16bit) {
619 isamps = dma_setup(sm, 0, dev->dma) - 1;
620 osamps = dma_setup(sm, 1, sm->hdrv.ptt_out.dma2) - 1;
636 isamps = dma_setup(sm, 0, sm->hdrv.ptt_out.dma2) - 1;
637 osamps = dma_setup(sm, 1, dev->dma) - 1;
649 dma_init_receive(sm);
650 dma_init_transmit(sm);
659 struct sm_state *sm = (struct sm_state *)dev->priv;
664 if (!dev || !sm || sm->hdrv.magic != HDLCDRV_MAGIC)
672 if (sm->dma.o16bit) {
676 dma_ptr(sm, 0, dev->dma, &icfrag);
682 dma_ptr(sm, 1, dev->dma, &ocfrag);
688 if (sm->dma.o16bit) {
690 disable_dma(sm->hdrv.ptt_out.dma2);
691 clear_dma_ff(sm->hdrv.ptt_out.dma2);
692 dma_ptr(sm, 1, sm->hdrv.ptt_out.dma2, &ocfrag);
693 enable_dma(sm->hdrv.ptt_out.dma2);
696 disable_dma(sm->hdrv.ptt_out.dma2);
697 clear_dma_ff(sm->hdrv.ptt_out.dma2);
698 dma_ptr(sm, 0, sm->hdrv.ptt_out.dma2, &icfrag);
699 enable_dma(sm->hdrv.ptt_out.dma2);
703 sm_int_freq(sm);
706 if (dma_end_transmit(sm, ocfrag))
707 dma_clear_transmit(sm);
708 dma_transmit(sm);
711 dma_receive(sm, icfrag);
712 hdlcdrv_arbitrate(dev, &sm->hdrv);
714 sm_output_status(sm);
715 hdlcdrv_transmitter(dev, &sm->hdrv);
716 hdlcdrv_receiver(dev, &sm->hdrv);
721 static int sbcfdx_open(struct net_device *dev, struct sm_state *sm)
725 if (sizeof(sm->m) < sizeof(struct sc_state_sbc)) {
726 printk(KERN_ERR "sm sbc: sbc state too big: %d > %d\n",
727 sizeof(struct sc_state_sbc), sizeof(sm->m));
730 if (!dev || !sm)
755 if ((err = config_resources(dev, sm, 1))) {
762 if (!(sm->dma.ibuf = kmalloc(sm->dma.ifragsz * (NUM_FRAGMENTS+1), GFP_KERNEL | GFP_DMA)))
764 if (!(sm->dma.obuf = kmalloc(sm->dma.ofragsz * NUM_FRAGMENTS, GFP_KERNEL | GFP_DMA))) {
765 kfree(sm->dma.ibuf);
768 dma_init_transmit(sm);
769 dma_init_receive(sm);
771 memset(&sm->m, 0, sizeof(sm->m));
772 memset(&sm->d, 0, sizeof(sm->d));
773 if (sm->mode_tx->init)
774 sm->mode_tx->init(sm);
775 if (sm->mode_rx->init)
776 sm->mode_rx->init(sm);
778 if (request_dma(dev->dma, sm->hwdrv->hw_name)) {
779 kfree(sm->dma.ibuf);
780 kfree(sm->dma.obuf);
783 if (request_dma(sm->hdrv.ptt_out.dma2, sm->hwdrv->hw_name)) {
784 kfree(sm->dma.ibuf);
785 kfree(sm->dma.obuf);
790 sm->hwdrv->hw_name, dev)) {
791 kfree(sm->dma.ibuf);
792 kfree(sm->dma.obuf);
794 free_dma(sm->hdrv.ptt_out.dma2);
797 request_region(dev->base_addr, SBC_EXTENT, sm->hwdrv->hw_name);
798 setup_dma_fdx_dsp(dev, sm);
804 static int sbcfdx_close(struct net_device *dev, struct sm_state *sm)
806 if (!dev || !sm)
812 disable_dma(sm->hdrv.ptt_out.dma2);
816 free_dma(sm->hdrv.ptt_out.dma2);
818 kfree(sm->dma.ibuf);
819 kfree(sm->dma.obuf);
825 static int sbcfdx_sethw(struct net_device *dev, struct sm_state *sm, char *mode)
832 sm->mode_tx = NULL;
833 sm->mode_rx = NULL;
841 if ((*mtp)->loc_storage > sizeof(sm->m)) {
851 if ((*mrp)->loc_storage > sizeof(sm->d)) {
859 sm->mode_tx = *mtp;
860 sm->mode_rx = *mrp;
861 SCSTATE->sr[0] = sm->mode_rx->srate;
862 SCSTATE->sr[1] = sm->mode_tx->srate;
863 sm->dma.ifragsz = (sm->mode_rx->srate + 50)/100;
864 sm->dma.ofragsz = (sm->mode_tx->srate + 50)/100;
865 if (sm->dma.ifragsz < sm->mode_rx->overlap)
866 sm->dma.ifragsz = sm->mode_rx->overlap;
867 if (sm->mode_rx->demodulator_s16 && sm->mode_tx->modulator_u8) {
868 sm->dma.i16bit = 1;
869 sm->dma.o16bit = 0;
870 sm->dma.ifragsz <<= 1;
871 } else if (sm->mode_rx->demodulator_u8 && sm->mode_tx->modulator_s16) {
872 sm->dma.i16bit = 0;
873 sm->dma.o16bit = 1;
874 sm->dma.ofragsz <<= 1;
877 sm->mode_rx->name, sm->mode_tx->name);
878 sm->mode_tx = NULL;
879 sm->mode_rx = NULL;
891 static int sbcfdx_ioctl(struct net_device *dev, struct sm_state *sm, struct ifreq *ifr,
902 return sbc_ioctl(dev, sm, ifr, hi, cmd);