• 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

4  *	sm.c  -- soundcard radio modem driver.
63 #include "sm.h"
262 void sm_output_status(struct sm_state *sm)
267 int ptt = /*hdlcdrv_ptt(&sm->hdrv)*/(sm->dma.ptt_cnt > 0) ^ invert_ptt;
268 int dcd = (!!sm->hdrv.hdlcrx.dcd) ^ invert_dcd;
270 if (sm->hdrv.ptt_out.flags & SP_SER) {
271 outb(dcd | (ptt << 1), UART_MCR(sm->hdrv.ptt_out.seriobase));
272 outb(0x40 & (-ptt), UART_LCR(sm->hdrv.ptt_out.seriobase));
274 if (sm->hdrv.ptt_out.flags & SP_PAR && sm->pardev && sm->pardev->port)
275 parport_write_data(sm->pardev->port, ptt | (dcd << 1));
276 if (sm->hdrv.ptt_out.flags & SP_MIDI && hdlcdrv_ptt(&sm->hdrv))
277 outb(0, MIDI_DATA(sm->hdrv.ptt_out.midiiobase));
282 static void sm_output_open(struct sm_state *sm, const char *ifname)
287 sm->hdrv.ptt_out.flags = 0;
288 if (sm->hdrv.ptt_out.seriobase > 0 &&
289 sm->hdrv.ptt_out.seriobase <= 0x1000-SER_EXTENT &&
290 ((u = check_uart(sm->hdrv.ptt_out.seriobase))) != c_uart_unknown) {
291 sm->hdrv.ptt_out.flags |= SP_SER;
292 request_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT, "sm ser ptt");
293 outb(0, UART_IER(sm->hdrv.ptt_out.seriobase));
295 outb(0x80, UART_LCR(sm->hdrv.ptt_out.seriobase));
296 outb(0, UART_DLM(sm->hdrv.ptt_out.seriobase));
297 outb(1, UART_DLL(sm->hdrv.ptt_out.seriobase)); /* as fast as possible */
300 sm->pardev = NULL;
301 if (sm->hdrv.ptt_out.pariobase > 0) {
303 while (pp && pp->base != sm->hdrv.ptt_out.pariobase)
306 printk(KERN_WARNING "%s: parport at address 0x%x not found\n", sm_drvname, sm->hdrv.ptt_out.pariobase);
308 printk(KERN_WARNING "%s: parport at address 0x%x cannot be used\n", sm_drvname, sm->hdrv.ptt_out.pariobase);
310 sm->pardev = parport_register_device(pp, ifname, NULL, NULL, NULL, PARPORT_DEV_EXCL, NULL);
311 if (!sm->pardev) {
313 printk(KERN_WARNING "%s: cannot register parport device (address 0x%x)\n", sm_drvname, sm->hdrv.ptt_out.pariobase);
315 if (parport_claim(sm->pardev)) {
316 parport_unregister_device(sm->pardev);
317 sm->pardev = NULL;
318 printk(KERN_WARNING "%s: cannot claim parport at address 0x%x\n", sm_drvname, sm->hdrv.ptt_out.pariobase);
320 sm->hdrv.ptt_out.flags |= SP_PAR;
324 if (sm->hdrv.ptt_out.midiiobase > 0 &&
325 sm->hdrv.ptt_out.midiiobase <= 0x1000-MIDI_EXTENT &&
326 check_midi(sm->hdrv.ptt_out.midiiobase)) {
327 sm->hdrv.ptt_out.flags |= SP_MIDI;
328 request_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT,
329 "sm midi ptt");
331 sm_output_status(sm);
334 if (sm->hdrv.ptt_out.flags & SP_SER)
335 printk(" serial interface at 0x%x, uart %s", sm->hdrv.ptt_out.seriobase,
337 if (sm->hdrv.ptt_out.flags & SP_PAR)
338 printk(" parallel interface at 0x%x", sm->hdrv.ptt_out.pariobase);
339 if (sm->hdrv.ptt_out.flags & SP_MIDI)
340 printk(" mpu401 (midi) interface at 0x%x", sm->hdrv.ptt_out.midiiobase);
341 if (!sm->hdrv.ptt_out.flags)
348 static void sm_output_close(struct sm_state *sm)
351 sm->hdrv.hdlctx.ptt = sm->hdrv.hdlctx.calibrate = 0;
352 sm_output_status(sm);
353 if (sm->hdrv.ptt_out.flags & SP_SER)
354 release_region(sm->hdrv.ptt_out.seriobase, SER_EXTENT);
355 if (sm->hdrv.ptt_out.flags & SP_PAR && sm->pardev) {
356 parport_release(sm->pardev);
357 parport_unregister_device(sm->pardev);
359 if (sm->hdrv.ptt_out.flags & SP_MIDI)
360 release_region(sm->hdrv.ptt_out.midiiobase, MIDI_EXTENT);
361 sm->hdrv.ptt_out.flags = 0;
381 struct sm_state *sm;
389 sm = (struct sm_state *)dev->priv;
391 if (!sm->mode_tx || !sm->mode_rx || !sm->hwdrv || !sm->hwdrv->open)
393 sm->hdrv.par.bitrate = sm->mode_rx->bitrate;
394 err = sm->hwdrv->open(dev, sm);
397 sm_output_open(sm, dev->name);
400 sm_drvname, sm->hwdrv->hw_name, sm->mode_tx->name,
401 sm->mode_rx->name, dev->base_addr, dev->irq, dev->dma, sm->hdrv.ptt_out.dma2);
409 struct sm_state *sm;
417 sm = (struct sm_state *)dev->priv;
420 if (sm->hwdrv && sm->hwdrv->close)
421 err = sm->hwdrv && sm->hwdrv->close(dev, sm);
422 sm_output_close(sm);
425 sm_drvname, sm->hwdrv->hw_name, dev->base_addr, dev->irq, dev->dma);
431 static int sethw(struct net_device *dev, struct sm_state *sm, char *mode)
444 if ((*hwp)->loc_storage > sizeof(sm->hw)) {
449 sm->hwdrv = *hwp;
453 if (sm->hwdrv && sm->hwdrv->sethw)
454 return sm->hwdrv->sethw(dev, sm, cp);
463 struct sm_state *sm;
478 sm = (struct sm_state *)dev->priv;
481 if (!sm->hwdrv || !sm->hwdrv->ioctl)
482 return sm->hwdrv->ioctl(dev, sm, ifr, hi, cmd);
487 if (sm->hwdrv && sm->hwdrv->ioctl)
488 return sm->hwdrv->ioctl(dev, sm, ifr, hi, cmd);
493 if (sm->hwdrv && sm->hwdrv->hw_name)
494 cp += sprintf(cp, "%s:", sm->hwdrv->hw_name);
497 if (sm->mode_tx && sm->mode_tx->name)
498 cp += sprintf(cp, "%s", sm->mode_tx->name);
501 if (!sm->mode_rx || !sm->mode_rx ||
502 strcmp(sm->mode_rx->name, sm->mode_tx->name)) {
503 if (sm->mode_rx && sm->mode_rx->name)
504 cp += sprintf(cp, ",%s", sm->mode_rx->name);
516 return sethw(dev, sm, hi->data.modename);
544 bi.data.dbg.int_rate = sm->debug_vals.last_intcnt;
545 bi.data.dbg.mod_cycles = sm->debug_vals.mod_cyc;
546 bi.data.dbg.demod_cycles = sm->debug_vals.demod_cyc;
547 bi.data.dbg.dma_residue = sm->debug_vals.dma_residue;
548 sm->debug_vals.mod_cyc = sm->debug_vals.demod_cyc =
549 sm->debug_vals.dma_residue = 0;
562 bi.data.diag.mode = sm->diag.mode;
563 bi.data.diag.flags = sm->diag.flags;
564 bi.data.diag.samplesperbit = sm->mode_rx->sperbit;
565 if (sm->diag.mode != newdiagmode) {
568 sm->diag.ptr = -1;
569 sm->diag.flags = newdiagflags & ~SM_DIAGFLAG_VALID;
570 sm->diag.mode = newdiagmode;
576 if (sm->diag.ptr < 0 || sm->diag.mode == SM_DIAGMODE_OFF) {
583 if (sm->diag.ptr < bi.data.diag.datalen) {
588 if (copy_to_user(bi.data.diag.data, sm->diag.data,
594 sm->diag.ptr = -1;
595 sm->diag.flags = newdiagflags & ~SM_DIAGFLAG_VALID;
596 sm->diag.mode = newdiagmode;
644 struct sm_state *sm;
654 sprintf(ifname, "sm%d", i);
678 sm = (struct sm_state *)dev->priv;
679 sm->hdrv.ptt_out.dma2 = dma2[i];
680 sm->hdrv.ptt_out.seriobase = serio[i];
681 sm->hdrv.ptt_out.pariobase = pario[i];
682 sm->hdrv.ptt_out.midiiobase = midiio[i];
683 if (set_hw && sethw(dev, sm, mode[i]))
699 printk(KERN_INFO "sm: cleanup_module called\n");
703 struct sm_state *sm = (struct sm_state *)dev->priv;
705 if (sm) {
706 if (sm->hdrv.magic != HDLCDRV_MAGIC)
707 printk(KERN_ERR "sm: invalid magic in "