if_cp.c (138352) | if_cp.c (138673) |
---|---|
1/* 2 * Cronyx-Tau-PCI adapter driver for FreeBSD. 3 * Supports PPP/HDLC, Cisco/HDLC and FrameRelay protocol in synchronous mode, 4 * and asyncronous channels with full modem control. 5 * Keepalive protocol implemented in both Cisco and PPP modes. 6 * 7 * Copyright (C) 1999-2004 Cronyx Engineering. 8 * Author: Kurakin Roman, <rik@cronyx.ru> --- 8 unchanged lines hidden (view full) --- 17 * modify and redistribute this software in source and binary forms, 18 * as long as this message is kept with the software, all derivative 19 * works or modified versions. 20 * 21 * Cronyx Id: if_cp.c,v 1.1.2.41 2004/06/23 17:09:13 rik Exp $ 22 */ 23 24#include <sys/cdefs.h> | 1/* 2 * Cronyx-Tau-PCI adapter driver for FreeBSD. 3 * Supports PPP/HDLC, Cisco/HDLC and FrameRelay protocol in synchronous mode, 4 * and asyncronous channels with full modem control. 5 * Keepalive protocol implemented in both Cisco and PPP modes. 6 * 7 * Copyright (C) 1999-2004 Cronyx Engineering. 8 * Author: Kurakin Roman, <rik@cronyx.ru> --- 8 unchanged lines hidden (view full) --- 17 * modify and redistribute this software in source and binary forms, 18 * as long as this message is kept with the software, all derivative 19 * works or modified versions. 20 * 21 * Cronyx Id: if_cp.c,v 1.1.2.41 2004/06/23 17:09:13 rik Exp $ 22 */ 23 24#include <sys/cdefs.h> |
25__FBSDID("$FreeBSD: head/sys/dev/cp/if_cp.c 138352 2004-12-03 16:57:15Z rik $"); | 25__FBSDID("$FreeBSD: head/sys/dev/cp/if_cp.c 138673 2004-12-11 05:38:16Z rik $"); |
26 27#include <sys/param.h> | 26 27#include <sys/param.h> |
28 29#if __FreeBSD_version >= 500000 30# define NPCI 1 31#else 32# include "pci.h" 33#endif 34 35#if NPCI > 0 36 | |
37#include <sys/ucred.h> 38#include <sys/proc.h> 39#include <sys/systm.h> 40#include <sys/mbuf.h> 41#include <sys/kernel.h> 42#include <sys/module.h> 43#include <sys/conf.h> 44#include <sys/malloc.h> 45#include <sys/socket.h> 46#include <sys/sockio.h> 47#include <sys/tty.h> 48#include <sys/bus.h> 49#include <vm/vm.h> 50#include <vm/pmap.h> 51#include <net/if.h> | 28#include <sys/ucred.h> 29#include <sys/proc.h> 30#include <sys/systm.h> 31#include <sys/mbuf.h> 32#include <sys/kernel.h> 33#include <sys/module.h> 34#include <sys/conf.h> 35#include <sys/malloc.h> 36#include <sys/socket.h> 37#include <sys/sockio.h> 38#include <sys/tty.h> 39#include <sys/bus.h> 40#include <vm/vm.h> 41#include <vm/pmap.h> 42#include <net/if.h> |
52#if __FreeBSD_version > 501000 53# include <dev/pci/pcivar.h> 54# include <dev/pci/pcireg.h> 55#else 56# include <pci/pcivar.h> 57# include <pci/pcireg.h> 58#endif | 43#include <dev/pci/pcivar.h> 44#include <dev/pci/pcireg.h> |
59#include <machine/bus.h> 60#include <sys/rman.h> 61#include "opt_ng_cronyx.h" 62#ifdef NETGRAPH_CRONYX 63# include "opt_netgraph.h" 64# ifndef NETGRAPH 65# error #option NETGRAPH missed from configuration 66# endif 67# include <netgraph/ng_message.h> 68# include <netgraph/netgraph.h> 69# include <dev/cp/ng_cp.h> 70#else 71# include <net/if_sppp.h> 72# define PP_CISCO IFF_LINK2 | 45#include <machine/bus.h> 46#include <sys/rman.h> 47#include "opt_ng_cronyx.h" 48#ifdef NETGRAPH_CRONYX 49# include "opt_netgraph.h" 50# ifndef NETGRAPH 51# error #option NETGRAPH missed from configuration 52# endif 53# include <netgraph/ng_message.h> 54# include <netgraph/netgraph.h> 55# include <dev/cp/ng_cp.h> 56#else 57# include <net/if_sppp.h> 58# define PP_CISCO IFF_LINK2 |
73# if __FreeBSD_version < 500000 74# include <bpf.h> 75# endif | |
76# include <net/bpf.h> | 59# include <net/bpf.h> |
77# define NBPFILTER NBPF | |
78#endif 79#include <dev/cx/machdep.h> 80#include <dev/cp/cpddk.h> 81#include <machine/cserial.h> 82#include <machine/resource.h> 83#include <machine/pmap.h> 84 85/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */ --- 20 unchanged lines hidden (view full) --- 106 107 {0, 0} 108}; 109 110typedef struct _cp_dma_mem_t { 111 unsigned long phys; 112 void *virt; 113 size_t size; | 60#endif 61#include <dev/cx/machdep.h> 62#include <dev/cp/cpddk.h> 63#include <machine/cserial.h> 64#include <machine/resource.h> 65#include <machine/pmap.h> 66 67/* If we don't have Cronyx's sppp version, we don't have fr support via sppp */ --- 20 unchanged lines hidden (view full) --- 88 89 {0, 0} 90}; 91 92typedef struct _cp_dma_mem_t { 93 unsigned long phys; 94 void *virt; 95 size_t size; |
114#if __FreeBSD_version >= 500000 | |
115 bus_dma_tag_t dmat; 116 bus_dmamap_t mapp; | 96 bus_dma_tag_t dmat; 97 bus_dmamap_t mapp; |
117#endif | |
118} cp_dma_mem_t; 119 120typedef struct _drv_t { 121 char name [8]; 122 cp_chan_t *chan; 123 cp_board_t *board; 124 cp_dma_mem_t dmamem; 125 int running; --- 169 unchanged lines hidden (view full) --- 295 /* Turn LED off 50 msec later. */ 296 if (!led_timo[b->num].callout) 297 led_timo[b->num] = timeout (cp_led_off, b, hz/20); 298 splx (s); 299} 300 301extern struct cdevsw cp_cdevsw; 302 | 98} cp_dma_mem_t; 99 100typedef struct _drv_t { 101 char name [8]; 102 cp_chan_t *chan; 103 cp_board_t *board; 104 cp_dma_mem_t dmamem; 105 int running; --- 169 unchanged lines hidden (view full) --- 275 /* Turn LED off 50 msec later. */ 276 if (!led_timo[b->num].callout) 277 led_timo[b->num] = timeout (cp_led_off, b, hz/20); 278 splx (s); 279} 280 281extern struct cdevsw cp_cdevsw; 282 |
303#if __FreeBSD_version >= 500000 | |
304static void 305cp_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error) 306{ 307 unsigned long *addr; 308 309 if (error) 310 return; 311 --- 40 unchanged lines hidden (view full) --- 352 353static void 354cp_bus_dma_mem_free (cp_dma_mem_t *dmem) 355{ 356 bus_dmamap_unload (dmem->dmat, dmem->mapp); 357 bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); 358 bus_dma_tag_destroy (dmem->dmat); 359} | 283static void 284cp_bus_dmamap_addr (void *arg, bus_dma_segment_t *segs, int nseg, int error) 285{ 286 unsigned long *addr; 287 288 if (error) 289 return; 290 --- 40 unchanged lines hidden (view full) --- 331 332static void 333cp_bus_dma_mem_free (cp_dma_mem_t *dmem) 334{ 335 bus_dmamap_unload (dmem->dmat, dmem->mapp); 336 bus_dmamem_free (dmem->dmat, dmem->virt, dmem->mapp); 337 bus_dma_tag_destroy (dmem->dmat); 338} |
360#else 361static int 362cp_bus_dma_mem_alloc (int bnum, int cnum, cp_dma_mem_t *dmem) 363{ 364 dmem->virt = contigmalloc (dmem->size, M_DEVBUF, M_WAITOK, 365 0x100000, 0xffffffff, 16, 0); 366 if (dmem->virt == NULL) { 367 if (cnum >= 0) printf ("cp%d-%d: ", bnum, cnum); 368 else printf ("cp%d: ", bnum); 369 printf ("couldn't allocate memory for dma memory\n", unit); 370 return 0; 371 } 372 dmem->phys = vtophys (dmem->virt); 373 return 1; 374} | |
375 | 339 |
376static void 377cp_bus_dma_mem_free (cp_dma_mem_t *dmem) 378{ 379 contigfree (dmem->virt, dmem->size, M_DEVBUF); 380} 381#endif 382 | |
383/* 384 * Called if the probe succeeded. 385 */ 386static int cp_attach (device_t dev) 387{ 388 bdrv_t *bd = device_get_softc (dev); 389 int unit = device_get_unit (dev); 390 unsigned short res; --- 80 unchanged lines hidden (view full) --- 471 d->chan = c; 472 c->sys = d; 473#ifdef NETGRAPH 474 if (ng_make_node_common (&typestruct, &d->node) != 0) { 475 printf ("%s: cannot make common node\n", d->name); 476 d->node = NULL; 477 continue; 478 } | 340/* 341 * Called if the probe succeeded. 342 */ 343static int cp_attach (device_t dev) 344{ 345 bdrv_t *bd = device_get_softc (dev); 346 int unit = device_get_unit (dev); 347 unsigned short res; --- 80 unchanged lines hidden (view full) --- 428 d->chan = c; 429 c->sys = d; 430#ifdef NETGRAPH 431 if (ng_make_node_common (&typestruct, &d->node) != 0) { 432 printf ("%s: cannot make common node\n", d->name); 433 d->node = NULL; 434 continue; 435 } |
479#if __FreeBSD_version >= 500000 | |
480 NG_NODE_SET_PRIVATE (d->node, d); | 436 NG_NODE_SET_PRIVATE (d->node, d); |
481#else 482 d->node->private = d; 483#endif | |
484 sprintf (d->nodename, "%s%d", NG_CP_NODE_TYPE, 485 c->board->num*NCHAN + c->num); 486 if (ng_name_node (d->node, d->nodename)) { 487 printf ("%s: cannot name node\n", d->nodename); | 437 sprintf (d->nodename, "%s%d", NG_CP_NODE_TYPE, 438 c->board->num*NCHAN + c->num); 439 if (ng_name_node (d->node, d->nodename)) { 440 printf ("%s: cannot name node\n", d->nodename); |
488#if __FreeBSD_version >= 500000 | |
489 NG_NODE_UNREF (d->node); | 441 NG_NODE_UNREF (d->node); |
490#else 491 ng_rmnode (d->node); 492 ng_unref (d->node); 493#endif | |
494 continue; 495 } 496 d->queue.ifq_maxlen = IFQ_MAXLEN; 497 d->hi_queue.ifq_maxlen = IFQ_MAXLEN; | 442 continue; 443 } 444 d->queue.ifq_maxlen = IFQ_MAXLEN; 445 d->hi_queue.ifq_maxlen = IFQ_MAXLEN; |
498#if __FreeBSD_version >= 500000 | |
499 mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF); 500 mtx_init (&d->hi_queue.ifq_mtx, "cp_queue_hi", NULL, MTX_DEF); | 446 mtx_init (&d->queue.ifq_mtx, "cp_queue", NULL, MTX_DEF); 447 mtx_init (&d->hi_queue.ifq_mtx, "cp_queue_hi", NULL, MTX_DEF); |
501#endif | |
502#else /*NETGRAPH*/ 503 d->pp.pp_if.if_softc = d; | 448#else /*NETGRAPH*/ 449 d->pp.pp_if.if_softc = d; |
504#if __FreeBSD_version > 501000 | |
505 if_initname (&d->pp.pp_if, "cp", b->num * NCHAN + c->num); | 450 if_initname (&d->pp.pp_if, "cp", b->num * NCHAN + c->num); |
506#else 507 d->pp.pp_if.if_unit = b->num * NCHAN + c->num; 508 d->pp.pp_if.if_name = "cp"; 509#endif | |
510 d->pp.pp_if.if_mtu = PP_MTU; 511 d->pp.pp_if.if_flags = IFF_POINTOPOINT | IFF_MULTICAST | 512 IFF_NEEDSGIANT; 513 d->pp.pp_if.if_ioctl = cp_sioctl; 514 d->pp.pp_if.if_start = cp_ifstart; 515 d->pp.pp_if.if_watchdog = cp_ifwatchdog; 516 d->pp.pp_if.if_init = cp_initialize; 517 sppp_attach (&d->pp.pp_if); --- 60 unchanged lines hidden (view full) --- 578 untimeout (cp_led_off, b, led_timo[b->num]); 579 580 for (c=b->chan; c<b->chan+NCHAN; ++c) { 581 drv_t *d = (drv_t*) c->sys; 582 583 if (! d || ! d->chan->type) 584 continue; 585#ifndef NETGRAPH | 451 d->pp.pp_if.if_mtu = PP_MTU; 452 d->pp.pp_if.if_flags = IFF_POINTOPOINT | IFF_MULTICAST | 453 IFF_NEEDSGIANT; 454 d->pp.pp_if.if_ioctl = cp_sioctl; 455 d->pp.pp_if.if_start = cp_ifstart; 456 d->pp.pp_if.if_watchdog = cp_ifwatchdog; 457 d->pp.pp_if.if_init = cp_initialize; 458 sppp_attach (&d->pp.pp_if); --- 60 unchanged lines hidden (view full) --- 519 untimeout (cp_led_off, b, led_timo[b->num]); 520 521 for (c=b->chan; c<b->chan+NCHAN; ++c) { 522 drv_t *d = (drv_t*) c->sys; 523 524 if (! d || ! d->chan->type) 525 continue; 526#ifndef NETGRAPH |
586#if __FreeBSD_version >= 410000 && NBPFILTER > 0 | |
587 /* Detach from the packet filter list of interfaces. */ 588 bpfdetach (&d->pp.pp_if); | 527 /* Detach from the packet filter list of interfaces. */ 528 bpfdetach (&d->pp.pp_if); |
589#endif | |
590 /* Detach from the sync PPP list. */ 591 sppp_detach (&d->pp.pp_if); 592 593 /* Detach from the system list of interfaces. */ 594 if_detach (&d->pp.pp_if); 595#else | 529 /* Detach from the sync PPP list. */ 530 sppp_detach (&d->pp.pp_if); 531 532 /* Detach from the system list of interfaces. */ 533 if_detach (&d->pp.pp_if); 534#else |
596#if __FreeBSD_version >= 500000 | |
597 if (d->node) { 598 ng_rmnode_self (d->node); 599 NG_NODE_UNREF (d->node); 600 d->node = NULL; 601 } 602 mtx_destroy (&d->queue.ifq_mtx); 603 mtx_destroy (&d->hi_queue.ifq_mtx); | 535 if (d->node) { 536 ng_rmnode_self (d->node); 537 NG_NODE_UNREF (d->node); 538 d->node = NULL; 539 } 540 mtx_destroy (&d->queue.ifq_mtx); 541 mtx_destroy (&d->hi_queue.ifq_mtx); |
604#else 605 ng_rmnode (d->node); 606 d->node = 0; | |
607#endif | 542#endif |
608#endif | |
609 destroy_dev (d->devt); 610 } 611 612 /* Disable the interrupt request. */ 613 bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand); 614 bus_deactivate_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); 615 bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); 616 bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); --- 163 unchanged lines hidden (view full) --- 780 IF_DEQUEUE (&d->queue, m); 781#else 782 m = sppp_dequeue (&d->pp.pp_if); 783#endif 784 if (! m) 785 return; 786#ifndef NETGRAPH 787 if (d->pp.pp_if.if_bpf) | 543 destroy_dev (d->devt); 544 } 545 546 /* Disable the interrupt request. */ 547 bus_teardown_intr (dev, bd->cp_irq, bd->cp_intrhand); 548 bus_deactivate_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); 549 bus_release_resource (dev, SYS_RES_IRQ, 0, bd->cp_irq); 550 bus_release_resource (dev, SYS_RES_MEMORY, PCIR_BAR(0), bd->cp_res); --- 163 unchanged lines hidden (view full) --- 714 IF_DEQUEUE (&d->queue, m); 715#else 716 m = sppp_dequeue (&d->pp.pp_if); 717#endif 718 if (! m) 719 return; 720#ifndef NETGRAPH 721 if (d->pp.pp_if.if_bpf) |
788#if __FreeBSD_version >= 500000 | |
789 BPF_MTAP (&d->pp.pp_if, m); | 722 BPF_MTAP (&d->pp.pp_if, m); |
790#else 791 bpf_mtap (&d->pp.pp_if, m); | |
792#endif | 723#endif |
793#endif | |
794 len = m->m_pkthdr.len; 795 if (len >= BUFSZ) 796 printf ("%s: too long packet: %d bytes: ", 797 d->name, len); 798 else if (! m->m_next) 799 cp_send_packet (d->chan, (u_char*) mtod (m, caddr_t), len, 0); 800 else { 801 u_char *buf = d->chan->tbuf[d->chan->te]; --- 63 unchanged lines hidden (view full) --- 865#endif 866 cp_start (d); 867} 868 869static void cp_receive (cp_chan_t *c, unsigned char *data, int len) 870{ 871 drv_t *d = c->sys; 872 struct mbuf *m; | 724 len = m->m_pkthdr.len; 725 if (len >= BUFSZ) 726 printf ("%s: too long packet: %d bytes: ", 727 d->name, len); 728 else if (! m->m_next) 729 cp_send_packet (d->chan, (u_char*) mtod (m, caddr_t), len, 0); 730 else { 731 u_char *buf = d->chan->tbuf[d->chan->te]; --- 63 unchanged lines hidden (view full) --- 795#endif 796 cp_start (d); 797} 798 799static void cp_receive (cp_chan_t *c, unsigned char *data, int len) 800{ 801 drv_t *d = c->sys; 802 struct mbuf *m; |
873#if __FreeBSD_version >= 500000 && defined NETGRAPH | 803#ifdef NETGRAPH |
874 int error; 875#endif 876 877 if (! d->running) 878 return; 879 880 m = makembuf (data, len); 881 if (! m) { 882 CP_DEBUG (d, ("no memory for packet\n")); 883#ifndef NETGRAPH 884 ++d->pp.pp_if.if_iqdrops; 885#endif 886 return; 887 } 888 if (c->debug > 1) 889 printmbuf (m); 890#ifdef NETGRAPH 891 m->m_pkthdr.rcvif = 0; | 804 int error; 805#endif 806 807 if (! d->running) 808 return; 809 810 m = makembuf (data, len); 811 if (! m) { 812 CP_DEBUG (d, ("no memory for packet\n")); 813#ifndef NETGRAPH 814 ++d->pp.pp_if.if_iqdrops; 815#endif 816 return; 817 } 818 if (c->debug > 1) 819 printmbuf (m); 820#ifdef NETGRAPH 821 m->m_pkthdr.rcvif = 0; |
892#if __FreeBSD_version >= 500000 | |
893 NG_SEND_DATA_ONLY (error, d->hook, m); 894#else | 822 NG_SEND_DATA_ONLY (error, d->hook, m); 823#else |
895 ng_queue_data (d->hook, m, 0); 896#endif 897#else | |
898 ++d->pp.pp_if.if_ipackets; 899 m->m_pkthdr.rcvif = &d->pp.pp_if; 900 /* Check if there's a BPF listener on this interface. 901 * If so, hand off the raw packet to bpf. */ 902 if (d->pp.pp_if.if_bpf) | 824 ++d->pp.pp_if.if_ipackets; 825 m->m_pkthdr.rcvif = &d->pp.pp_if; 826 /* Check if there's a BPF listener on this interface. 827 * If so, hand off the raw packet to bpf. */ 828 if (d->pp.pp_if.if_bpf) |
903#if __FreeBSD_version >= 500000 | |
904 BPF_TAP (&d->pp.pp_if, data, len); | 829 BPF_TAP (&d->pp.pp_if, data, len); |
905#else 906 bpf_tap (&d->pp.pp_if, data, len); 907#endif | |
908 sppp_input (&d->pp.pp_if, m); 909#endif 910} 911 912static void cp_error (cp_chan_t *c, int data) 913{ 914 drv_t *d = c->sys; 915 --- 39 unchanged lines hidden (view full) --- 955 break; 956 } 957} 958 959/* 960 * You also need read, write, open, close routines. 961 * This should get you started 962 */ | 830 sppp_input (&d->pp.pp_if, m); 831#endif 832} 833 834static void cp_error (cp_chan_t *c, int data) 835{ 836 drv_t *d = c->sys; 837 --- 39 unchanged lines hidden (view full) --- 877 break; 878 } 879} 880 881/* 882 * You also need read, write, open, close routines. 883 * This should get you started 884 */ |
963#if __FreeBSD_version < 500000 964static int cp_open (dev_t dev, int oflags, int devtype, struct proc *p) 965#else | |
966static int cp_open (struct cdev *dev, int oflags, int devtype, struct thread *td) | 885static int cp_open (struct cdev *dev, int oflags, int devtype, struct thread *td) |
967#endif | |
968{ 969 int unit = minor (dev); 970 drv_t *d; 971 972 if (unit >= NBRD*NCHAN || ! (d = channel[unit])) 973 return ENXIO; 974 CP_DEBUG2 (d, ("cp_open\n")); 975 return 0; 976} 977 978/* 979 * Only called on the LAST close. 980 */ | 886{ 887 int unit = minor (dev); 888 drv_t *d; 889 890 if (unit >= NBRD*NCHAN || ! (d = channel[unit])) 891 return ENXIO; 892 CP_DEBUG2 (d, ("cp_open\n")); 893 return 0; 894} 895 896/* 897 * Only called on the LAST close. 898 */ |
981#if __FreeBSD_version < 500000 982static int cp_close (dev_t dev, int fflag, int devtype, struct proc *p) 983#else | |
984static int cp_close (struct cdev *dev, int fflag, int devtype, struct thread *td) | 899static int cp_close (struct cdev *dev, int fflag, int devtype, struct thread *td) |
985#endif | |
986{ 987 drv_t *d = channel [minor (dev)]; 988 989 CP_DEBUG2 (d, ("cp_close\n")); 990 return 0; 991} 992 993static int cp_modem_status (cp_chan_t *c) --- 7 unchanged lines hidden (view full) --- 1001 if (cp_get_cts (c)) status |= TIOCM_CTS; 1002 if (cp_get_dsr (c)) status |= TIOCM_DSR; 1003 if (c->dtr) status |= TIOCM_DTR; 1004 if (c->rts) status |= TIOCM_RTS; 1005 splx (s); 1006 return status; 1007} 1008 | 900{ 901 drv_t *d = channel [minor (dev)]; 902 903 CP_DEBUG2 (d, ("cp_close\n")); 904 return 0; 905} 906 907static int cp_modem_status (cp_chan_t *c) --- 7 unchanged lines hidden (view full) --- 915 if (cp_get_cts (c)) status |= TIOCM_CTS; 916 if (cp_get_dsr (c)) status |= TIOCM_DSR; 917 if (c->dtr) status |= TIOCM_DTR; 918 if (c->rts) status |= TIOCM_RTS; 919 splx (s); 920 return status; 921} 922 |
1009#if __FreeBSD_version < 500000 1010static int cp_ioctl (dev_t dev, u_long cmd, caddr_t data, int flag, struct proc *p) 1011#else | |
1012static int cp_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td) | 923static int cp_ioctl (struct cdev *dev, u_long cmd, caddr_t data, int flag, struct thread *td) |
1013#endif | |
1014{ 1015 drv_t *d = channel [minor (dev)]; 1016 cp_chan_t *c = d->chan; 1017 struct serial_statistics *st; 1018 struct e1_statistics *opte1; 1019 struct e3_statistics *opte3; 1020 int error, s; 1021 char mask[16]; --- 13 unchanged lines hidden (view full) --- 1035 CP_DEBUG2 (d, ("ioctl: getproto\n")); 1036 strcpy ((char*)data, (d->pp.pp_flags & PP_FR) ? "fr" : 1037 (d->pp.pp_if.if_flags & PP_CISCO) ? "cisco" : "ppp"); 1038 return 0; 1039 1040 case SERIAL_SETPROTO: 1041 CP_DEBUG2 (d, ("ioctl: setproto\n")); 1042 /* Only for superuser! */ | 924{ 925 drv_t *d = channel [minor (dev)]; 926 cp_chan_t *c = d->chan; 927 struct serial_statistics *st; 928 struct e1_statistics *opte1; 929 struct e3_statistics *opte3; 930 int error, s; 931 char mask[16]; --- 13 unchanged lines hidden (view full) --- 945 CP_DEBUG2 (d, ("ioctl: getproto\n")); 946 strcpy ((char*)data, (d->pp.pp_flags & PP_FR) ? "fr" : 947 (d->pp.pp_if.if_flags & PP_CISCO) ? "cisco" : "ppp"); 948 return 0; 949 950 case SERIAL_SETPROTO: 951 CP_DEBUG2 (d, ("ioctl: setproto\n")); 952 /* Only for superuser! */ |
1043#if __FreeBSD_version < 500000 1044 error = suser (p); 1045#else /* __FreeBSD_version >= 500000 */ | |
1046 error = suser (td); | 953 error = suser (td); |
1047#endif /* __FreeBSD_version >= 500000 */ | |
1048 if (error) 1049 return error; 1050 if (d->pp.pp_if.if_flags & IFF_RUNNING) 1051 return EBUSY; 1052 if (! strcmp ("cisco", (char*)data)) { 1053 d->pp.pp_flags &= ~(PP_FR); 1054 d->pp.pp_flags |= PP_KEEPALIVE; 1055 d->pp.pp_if.if_flags |= PP_CISCO; --- 14 unchanged lines hidden (view full) --- 1070 (d->pp.pp_if.if_flags & PP_CISCO)) 1071 return EINVAL; 1072 *(int*)data = (d->pp.pp_flags & PP_KEEPALIVE) ? 1 : 0; 1073 return 0; 1074 1075 case SERIAL_SETKEEPALIVE: 1076 CP_DEBUG2 (d, ("ioctl: setkeepalive\n")); 1077 /* Only for superuser! */ | 954 if (error) 955 return error; 956 if (d->pp.pp_if.if_flags & IFF_RUNNING) 957 return EBUSY; 958 if (! strcmp ("cisco", (char*)data)) { 959 d->pp.pp_flags &= ~(PP_FR); 960 d->pp.pp_flags |= PP_KEEPALIVE; 961 d->pp.pp_if.if_flags |= PP_CISCO; --- 14 unchanged lines hidden (view full) --- 976 (d->pp.pp_if.if_flags & PP_CISCO)) 977 return EINVAL; 978 *(int*)data = (d->pp.pp_flags & PP_KEEPALIVE) ? 1 : 0; 979 return 0; 980 981 case SERIAL_SETKEEPALIVE: 982 CP_DEBUG2 (d, ("ioctl: setkeepalive\n")); 983 /* Only for superuser! */ |
1078#if __FreeBSD_version < 500000 1079 error = suser (p); 1080#else | |
1081 error = suser (td); | 984 error = suser (td); |
1082#endif | |
1083 if (error) 1084 return error; 1085 if ((d->pp.pp_flags & PP_FR) || 1086 (d->pp.pp_if.if_flags & PP_CISCO)) 1087 return EINVAL; 1088 s = splimp (); 1089 if (*(int*)data) 1090 d->pp.pp_flags |= PP_KEEPALIVE; --- 5 unchanged lines hidden (view full) --- 1096 1097 case SERIAL_GETMODE: 1098 CP_DEBUG2 (d, ("ioctl: getmode\n")); 1099 *(int*)data = SERIAL_HDLC; 1100 return 0; 1101 1102 case SERIAL_SETMODE: 1103 /* Only for superuser! */ | 985 if (error) 986 return error; 987 if ((d->pp.pp_flags & PP_FR) || 988 (d->pp.pp_if.if_flags & PP_CISCO)) 989 return EINVAL; 990 s = splimp (); 991 if (*(int*)data) 992 d->pp.pp_flags |= PP_KEEPALIVE; --- 5 unchanged lines hidden (view full) --- 998 999 case SERIAL_GETMODE: 1000 CP_DEBUG2 (d, ("ioctl: getmode\n")); 1001 *(int*)data = SERIAL_HDLC; 1002 return 0; 1003 1004 case SERIAL_SETMODE: 1005 /* Only for superuser! */ |
1104#if __FreeBSD_version < 500000 1105 error = suser (p); 1106#else | |
1107 error = suser (td); | 1006 error = suser (td); |
1108#endif | |
1109 if (error) 1110 return error; 1111 if (*(int*)data != SERIAL_HDLC) 1112 return EINVAL; 1113 return 0; 1114 1115 case SERIAL_GETCFG: 1116 CP_DEBUG2 (d, ("ioctl: getcfg\n")); 1117 if (c->type != T_E1 || c->unfram) 1118 return EINVAL; 1119 *(char*)data = c->board->mux ? 'c' : 'a'; 1120 return 0; 1121 1122 case SERIAL_SETCFG: 1123 CP_DEBUG2 (d, ("ioctl: setcfg\n")); | 1007 if (error) 1008 return error; 1009 if (*(int*)data != SERIAL_HDLC) 1010 return EINVAL; 1011 return 0; 1012 1013 case SERIAL_GETCFG: 1014 CP_DEBUG2 (d, ("ioctl: getcfg\n")); 1015 if (c->type != T_E1 || c->unfram) 1016 return EINVAL; 1017 *(char*)data = c->board->mux ? 'c' : 'a'; 1018 return 0; 1019 1020 case SERIAL_SETCFG: 1021 CP_DEBUG2 (d, ("ioctl: setcfg\n")); |
1124#if __FreeBSD_version < 500000 1125 error = suser (p); 1126#else | |
1127 error = suser (td); | 1022 error = suser (td); |
1128#endif | |
1129 if (error) 1130 return error; 1131 if (c->type != T_E1) 1132 return EINVAL; 1133 s = splimp (); 1134 cp_set_mux (c->board, *((char*)data) == 'c'); 1135 splx (s); 1136 return 0; --- 78 unchanged lines hidden (view full) --- 1215 for (s = 0; s < 48; ++s) { 1216 opte3->icv[s] = c->e3icv[s]; 1217 } 1218 return 0; 1219 1220 case SERIAL_CLRSTAT: 1221 CP_DEBUG2 (d, ("ioctl: clrstat\n")); 1222 /* Only for superuser! */ | 1023 if (error) 1024 return error; 1025 if (c->type != T_E1) 1026 return EINVAL; 1027 s = splimp (); 1028 cp_set_mux (c->board, *((char*)data) == 'c'); 1029 splx (s); 1030 return 0; --- 78 unchanged lines hidden (view full) --- 1109 for (s = 0; s < 48; ++s) { 1110 opte3->icv[s] = c->e3icv[s]; 1111 } 1112 return 0; 1113 1114 case SERIAL_CLRSTAT: 1115 CP_DEBUG2 (d, ("ioctl: clrstat\n")); 1116 /* Only for superuser! */ |
1223#if __FreeBSD_version < 500000 1224 error = suser (p); 1225#else | |
1226 error = suser (td); | 1117 error = suser (td); |
1227#endif | |
1228 if (error) 1229 return error; 1230 c->rintr = 0; 1231 c->tintr = 0; 1232 c->ibytes = 0; 1233 c->obytes = 0; 1234 c->ipkts = 0; 1235 c->opkts = 0; --- 12 unchanged lines hidden (view full) --- 1248 case SERIAL_GETBAUD: 1249 CP_DEBUG2 (d, ("ioctl: getbaud\n")); 1250 *(long*)data = c->baud; 1251 return 0; 1252 1253 case SERIAL_SETBAUD: 1254 CP_DEBUG2 (d, ("ioctl: setbaud\n")); 1255 /* Only for superuser! */ | 1118 if (error) 1119 return error; 1120 c->rintr = 0; 1121 c->tintr = 0; 1122 c->ibytes = 0; 1123 c->obytes = 0; 1124 c->ipkts = 0; 1125 c->opkts = 0; --- 12 unchanged lines hidden (view full) --- 1138 case SERIAL_GETBAUD: 1139 CP_DEBUG2 (d, ("ioctl: getbaud\n")); 1140 *(long*)data = c->baud; 1141 return 0; 1142 1143 case SERIAL_SETBAUD: 1144 CP_DEBUG2 (d, ("ioctl: setbaud\n")); 1145 /* Only for superuser! */ |
1256#if __FreeBSD_version < 500000 1257 error = suser (p); 1258#else | |
1259 error = suser (td); | 1146 error = suser (td); |
1260#endif | |
1261 if (error) 1262 return error; 1263 s = splimp (); 1264 cp_set_baud (c, *(long*)data); 1265 splx (s); 1266 return 0; 1267 1268 case SERIAL_GETLOOP: 1269 CP_DEBUG2 (d, ("ioctl: getloop\n")); 1270 *(int*)data = c->lloop; 1271 return 0; 1272 1273 case SERIAL_SETLOOP: 1274 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1275 /* Only for superuser! */ | 1147 if (error) 1148 return error; 1149 s = splimp (); 1150 cp_set_baud (c, *(long*)data); 1151 splx (s); 1152 return 0; 1153 1154 case SERIAL_GETLOOP: 1155 CP_DEBUG2 (d, ("ioctl: getloop\n")); 1156 *(int*)data = c->lloop; 1157 return 0; 1158 1159 case SERIAL_SETLOOP: 1160 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1161 /* Only for superuser! */ |
1276#if __FreeBSD_version < 500000 1277 error = suser (p); 1278#else | |
1279 error = suser (td); | 1162 error = suser (td); |
1280#endif | |
1281 if (error) 1282 return error; 1283 s = splimp (); 1284 cp_set_lloop (c, *(int*)data); 1285 splx (s); 1286 return 0; 1287 1288 case SERIAL_GETDPLL: 1289 CP_DEBUG2 (d, ("ioctl: getdpll\n")); 1290 if (c->type != T_SERIAL) 1291 return EINVAL; 1292 *(int*)data = c->dpll; 1293 return 0; 1294 1295 case SERIAL_SETDPLL: 1296 CP_DEBUG2 (d, ("ioctl: setdpll\n")); 1297 /* Only for superuser! */ | 1163 if (error) 1164 return error; 1165 s = splimp (); 1166 cp_set_lloop (c, *(int*)data); 1167 splx (s); 1168 return 0; 1169 1170 case SERIAL_GETDPLL: 1171 CP_DEBUG2 (d, ("ioctl: getdpll\n")); 1172 if (c->type != T_SERIAL) 1173 return EINVAL; 1174 *(int*)data = c->dpll; 1175 return 0; 1176 1177 case SERIAL_SETDPLL: 1178 CP_DEBUG2 (d, ("ioctl: setdpll\n")); 1179 /* Only for superuser! */ |
1298#if __FreeBSD_version < 500000 1299 error = suser (p); 1300#else | |
1301 error = suser (td); | 1180 error = suser (td); |
1302#endif | |
1303 if (error) 1304 return error; 1305 if (c->type != T_SERIAL) 1306 return EINVAL; 1307 s = splimp (); 1308 cp_set_dpll (c, *(int*)data); 1309 splx (s); 1310 return 0; 1311 1312 case SERIAL_GETNRZI: 1313 CP_DEBUG2 (d, ("ioctl: getnrzi\n")); 1314 if (c->type != T_SERIAL) 1315 return EINVAL; 1316 *(int*)data = c->nrzi; 1317 return 0; 1318 1319 case SERIAL_SETNRZI: 1320 CP_DEBUG2 (d, ("ioctl: setnrzi\n")); 1321 /* Only for superuser! */ | 1181 if (error) 1182 return error; 1183 if (c->type != T_SERIAL) 1184 return EINVAL; 1185 s = splimp (); 1186 cp_set_dpll (c, *(int*)data); 1187 splx (s); 1188 return 0; 1189 1190 case SERIAL_GETNRZI: 1191 CP_DEBUG2 (d, ("ioctl: getnrzi\n")); 1192 if (c->type != T_SERIAL) 1193 return EINVAL; 1194 *(int*)data = c->nrzi; 1195 return 0; 1196 1197 case SERIAL_SETNRZI: 1198 CP_DEBUG2 (d, ("ioctl: setnrzi\n")); 1199 /* Only for superuser! */ |
1322#if __FreeBSD_version < 500000 1323 error = suser (p); 1324#else | |
1325 error = suser (td); | 1200 error = suser (td); |
1326#endif | |
1327 if (error) 1328 return error; 1329 if (c->type != T_SERIAL) 1330 return EINVAL; 1331 s = splimp (); 1332 cp_set_nrzi (c, *(int*)data); 1333 splx (s); 1334 return 0; 1335 1336 case SERIAL_GETDEBUG: 1337 CP_DEBUG2 (d, ("ioctl: getdebug\n")); 1338 *(int*)data = d->chan->debug; 1339 return 0; 1340 1341 case SERIAL_SETDEBUG: 1342 CP_DEBUG2 (d, ("ioctl: setdebug\n")); 1343 /* Only for superuser! */ | 1201 if (error) 1202 return error; 1203 if (c->type != T_SERIAL) 1204 return EINVAL; 1205 s = splimp (); 1206 cp_set_nrzi (c, *(int*)data); 1207 splx (s); 1208 return 0; 1209 1210 case SERIAL_GETDEBUG: 1211 CP_DEBUG2 (d, ("ioctl: getdebug\n")); 1212 *(int*)data = d->chan->debug; 1213 return 0; 1214 1215 case SERIAL_SETDEBUG: 1216 CP_DEBUG2 (d, ("ioctl: setdebug\n")); 1217 /* Only for superuser! */ |
1344#if __FreeBSD_version < 500000 1345 error = suser (p); 1346#else | |
1347 error = suser (td); | 1218 error = suser (td); |
1348#endif | |
1349 if (error) 1350 return error; 1351 d->chan->debug = *(int*)data; 1352#ifndef NETGRAPH 1353 if (d->chan->debug) 1354 d->pp.pp_if.if_flags |= IFF_DEBUG; 1355 else 1356 d->pp.pp_if.if_flags &= ~IFF_DEBUG; --- 5 unchanged lines hidden (view full) --- 1362 if (c->type != T_E1) 1363 return EINVAL; 1364 *(int*)data = c->higain; 1365 return 0; 1366 1367 case SERIAL_SETHIGAIN: 1368 CP_DEBUG2 (d, ("ioctl: sethigain\n")); 1369 /* Only for superuser! */ | 1219 if (error) 1220 return error; 1221 d->chan->debug = *(int*)data; 1222#ifndef NETGRAPH 1223 if (d->chan->debug) 1224 d->pp.pp_if.if_flags |= IFF_DEBUG; 1225 else 1226 d->pp.pp_if.if_flags &= ~IFF_DEBUG; --- 5 unchanged lines hidden (view full) --- 1232 if (c->type != T_E1) 1233 return EINVAL; 1234 *(int*)data = c->higain; 1235 return 0; 1236 1237 case SERIAL_SETHIGAIN: 1238 CP_DEBUG2 (d, ("ioctl: sethigain\n")); 1239 /* Only for superuser! */ |
1370#if __FreeBSD_version < 500000 1371 error = suser (p); 1372#else | |
1373 error = suser (td); | 1240 error = suser (td); |
1374#endif | |
1375 if (error) 1376 return error; 1377 if (c->type != T_E1) 1378 return EINVAL; 1379 s = splimp (); 1380 cp_set_higain (c, *(int*)data); 1381 splx (s); 1382 return 0; 1383 1384 case SERIAL_GETPHONY: 1385 CP_DEBUG2 (d, ("ioctl: getphony\n")); 1386 if (c->type != T_E1) 1387 return EINVAL; 1388 *(int*)data = c->phony; 1389 return 0; 1390 1391 case SERIAL_SETPHONY: 1392 CP_DEBUG2 (d, ("ioctl: setphony\n")); 1393 /* Only for superuser! */ | 1241 if (error) 1242 return error; 1243 if (c->type != T_E1) 1244 return EINVAL; 1245 s = splimp (); 1246 cp_set_higain (c, *(int*)data); 1247 splx (s); 1248 return 0; 1249 1250 case SERIAL_GETPHONY: 1251 CP_DEBUG2 (d, ("ioctl: getphony\n")); 1252 if (c->type != T_E1) 1253 return EINVAL; 1254 *(int*)data = c->phony; 1255 return 0; 1256 1257 case SERIAL_SETPHONY: 1258 CP_DEBUG2 (d, ("ioctl: setphony\n")); 1259 /* Only for superuser! */ |
1394#if __FreeBSD_version < 500000 1395 error = suser (p); 1396#else | |
1397 error = suser (td); | 1260 error = suser (td); |
1398#endif | |
1399 if (error) 1400 return error; 1401 if (c->type != T_E1) 1402 return EINVAL; 1403 s = splimp (); 1404 cp_set_phony (c, *(int*)data); 1405 splx (s); 1406 return 0; 1407 1408 case SERIAL_GETUNFRAM: 1409 CP_DEBUG2 (d, ("ioctl: getunfram\n")); 1410 if (c->type != T_E1) 1411 return EINVAL; 1412 *(int*)data = c->unfram; 1413 return 0; 1414 1415 case SERIAL_SETUNFRAM: 1416 CP_DEBUG2 (d, ("ioctl: setunfram\n")); 1417 /* Only for superuser! */ | 1261 if (error) 1262 return error; 1263 if (c->type != T_E1) 1264 return EINVAL; 1265 s = splimp (); 1266 cp_set_phony (c, *(int*)data); 1267 splx (s); 1268 return 0; 1269 1270 case SERIAL_GETUNFRAM: 1271 CP_DEBUG2 (d, ("ioctl: getunfram\n")); 1272 if (c->type != T_E1) 1273 return EINVAL; 1274 *(int*)data = c->unfram; 1275 return 0; 1276 1277 case SERIAL_SETUNFRAM: 1278 CP_DEBUG2 (d, ("ioctl: setunfram\n")); 1279 /* Only for superuser! */ |
1418#if __FreeBSD_version < 500000 1419 error = suser (p); 1420#else | |
1421 error = suser (td); | 1280 error = suser (td); |
1422#endif | |
1423 if (error) 1424 return error; 1425 if (c->type != T_E1) 1426 return EINVAL; 1427 s = splimp (); 1428 cp_set_unfram (c, *(int*)data); 1429 splx (s); 1430 return 0; 1431 1432 case SERIAL_GETSCRAMBLER: 1433 CP_DEBUG2 (d, ("ioctl: getscrambler\n")); 1434 if (c->type != T_G703 && !c->unfram) 1435 return EINVAL; 1436 *(int*)data = c->scrambler; 1437 return 0; 1438 1439 case SERIAL_SETSCRAMBLER: 1440 CP_DEBUG2 (d, ("ioctl: setscrambler\n")); 1441 /* Only for superuser! */ | 1281 if (error) 1282 return error; 1283 if (c->type != T_E1) 1284 return EINVAL; 1285 s = splimp (); 1286 cp_set_unfram (c, *(int*)data); 1287 splx (s); 1288 return 0; 1289 1290 case SERIAL_GETSCRAMBLER: 1291 CP_DEBUG2 (d, ("ioctl: getscrambler\n")); 1292 if (c->type != T_G703 && !c->unfram) 1293 return EINVAL; 1294 *(int*)data = c->scrambler; 1295 return 0; 1296 1297 case SERIAL_SETSCRAMBLER: 1298 CP_DEBUG2 (d, ("ioctl: setscrambler\n")); 1299 /* Only for superuser! */ |
1442#if __FreeBSD_version < 500000 1443 error = suser (p); 1444#else | |
1445 error = suser (td); | 1300 error = suser (td); |
1446#endif | |
1447 if (error) 1448 return error; 1449 if (c->type != T_G703 && !c->unfram) 1450 return EINVAL; 1451 s = splimp (); 1452 cp_set_scrambler (c, *(int*)data); 1453 splx (s); 1454 return 0; --- 6 unchanged lines hidden (view full) --- 1461 c->type != T_STS1) 1462 return EINVAL; 1463 *(int*)data = c->monitor; 1464 return 0; 1465 1466 case SERIAL_SETMONITOR: 1467 CP_DEBUG2 (d, ("ioctl: setmonitor\n")); 1468 /* Only for superuser! */ | 1301 if (error) 1302 return error; 1303 if (c->type != T_G703 && !c->unfram) 1304 return EINVAL; 1305 s = splimp (); 1306 cp_set_scrambler (c, *(int*)data); 1307 splx (s); 1308 return 0; --- 6 unchanged lines hidden (view full) --- 1315 c->type != T_STS1) 1316 return EINVAL; 1317 *(int*)data = c->monitor; 1318 return 0; 1319 1320 case SERIAL_SETMONITOR: 1321 CP_DEBUG2 (d, ("ioctl: setmonitor\n")); 1322 /* Only for superuser! */ |
1469#if __FreeBSD_version < 500000 1470 error = suser (p); 1471#else | |
1472 error = suser (td); | 1323 error = suser (td); |
1473#endif | |
1474 if (error) 1475 return error; 1476 if (c->type != T_E1) 1477 return EINVAL; 1478 s = splimp (); 1479 cp_set_monitor (c, *(int*)data); 1480 splx (s); 1481 return 0; 1482 1483 case SERIAL_GETUSE16: 1484 CP_DEBUG2 (d, ("ioctl: getuse16\n")); 1485 if (c->type != T_E1 || c->unfram) 1486 return EINVAL; 1487 *(int*)data = c->use16; 1488 return 0; 1489 1490 case SERIAL_SETUSE16: 1491 CP_DEBUG2 (d, ("ioctl: setuse16\n")); 1492 /* Only for superuser! */ | 1324 if (error) 1325 return error; 1326 if (c->type != T_E1) 1327 return EINVAL; 1328 s = splimp (); 1329 cp_set_monitor (c, *(int*)data); 1330 splx (s); 1331 return 0; 1332 1333 case SERIAL_GETUSE16: 1334 CP_DEBUG2 (d, ("ioctl: getuse16\n")); 1335 if (c->type != T_E1 || c->unfram) 1336 return EINVAL; 1337 *(int*)data = c->use16; 1338 return 0; 1339 1340 case SERIAL_SETUSE16: 1341 CP_DEBUG2 (d, ("ioctl: setuse16\n")); 1342 /* Only for superuser! */ |
1493#if __FreeBSD_version < 500000 1494 error = suser (p); 1495#else | |
1496 error = suser (td); | 1343 error = suser (td); |
1497#endif | |
1498 if (error) 1499 return error; 1500 if (c->type != T_E1) 1501 return EINVAL; 1502 s = splimp (); 1503 cp_set_use16 (c, *(int*)data); 1504 splx (s); 1505 return 0; 1506 1507 case SERIAL_GETCRC4: 1508 CP_DEBUG2 (d, ("ioctl: getcrc4\n")); 1509 if (c->type != T_E1 || c->unfram) 1510 return EINVAL; 1511 *(int*)data = c->crc4; 1512 return 0; 1513 1514 case SERIAL_SETCRC4: 1515 CP_DEBUG2 (d, ("ioctl: setcrc4\n")); 1516 /* Only for superuser! */ | 1344 if (error) 1345 return error; 1346 if (c->type != T_E1) 1347 return EINVAL; 1348 s = splimp (); 1349 cp_set_use16 (c, *(int*)data); 1350 splx (s); 1351 return 0; 1352 1353 case SERIAL_GETCRC4: 1354 CP_DEBUG2 (d, ("ioctl: getcrc4\n")); 1355 if (c->type != T_E1 || c->unfram) 1356 return EINVAL; 1357 *(int*)data = c->crc4; 1358 return 0; 1359 1360 case SERIAL_SETCRC4: 1361 CP_DEBUG2 (d, ("ioctl: setcrc4\n")); 1362 /* Only for superuser! */ |
1517#if __FreeBSD_version < 500000 1518 error = suser (p); 1519#else | |
1520 error = suser (td); | 1363 error = suser (td); |
1521#endif | |
1522 if (error) 1523 return error; 1524 if (c->type != T_E1) 1525 return EINVAL; 1526 s = splimp (); 1527 cp_set_crc4 (c, *(int*)data); 1528 splx (s); 1529 return 0; --- 14 unchanged lines hidden (view full) --- 1544 case GSYN_RCV2: *(int*)data = E1CLK_RECEIVE_CHAN2; break; 1545 case GSYN_RCV3: *(int*)data = E1CLK_RECEIVE_CHAN3; break; 1546 } 1547 return 0; 1548 1549 case SERIAL_SETCLK: 1550 CP_DEBUG2 (d, ("ioctl: setclk\n")); 1551 /* Only for superuser! */ | 1364 if (error) 1365 return error; 1366 if (c->type != T_E1) 1367 return EINVAL; 1368 s = splimp (); 1369 cp_set_crc4 (c, *(int*)data); 1370 splx (s); 1371 return 0; --- 14 unchanged lines hidden (view full) --- 1386 case GSYN_RCV2: *(int*)data = E1CLK_RECEIVE_CHAN2; break; 1387 case GSYN_RCV3: *(int*)data = E1CLK_RECEIVE_CHAN3; break; 1388 } 1389 return 0; 1390 1391 case SERIAL_SETCLK: 1392 CP_DEBUG2 (d, ("ioctl: setclk\n")); 1393 /* Only for superuser! */ |
1552#if __FreeBSD_version < 500000 1553 error = suser (p); 1554#else | |
1555 error = suser (td); | 1394 error = suser (td); |
1556#endif | |
1557 if (error) 1558 return error; 1559 if (c->type != T_E1 && 1560 c->type != T_G703 && 1561 c->type != T_E3 && 1562 c->type != T_T3 && 1563 c->type != T_STS1) 1564 return EINVAL; --- 14 unchanged lines hidden (view full) --- 1579 if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) 1580 return EINVAL; 1581 *(u_long*)data = c->ts; 1582 return 0; 1583 1584 case SERIAL_SETTIMESLOTS: 1585 CP_DEBUG2 (d, ("ioctl: settimeslots\n")); 1586 /* Only for superuser! */ | 1395 if (error) 1396 return error; 1397 if (c->type != T_E1 && 1398 c->type != T_G703 && 1399 c->type != T_E3 && 1400 c->type != T_T3 && 1401 c->type != T_STS1) 1402 return EINVAL; --- 14 unchanged lines hidden (view full) --- 1417 if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) 1418 return EINVAL; 1419 *(u_long*)data = c->ts; 1420 return 0; 1421 1422 case SERIAL_SETTIMESLOTS: 1423 CP_DEBUG2 (d, ("ioctl: settimeslots\n")); 1424 /* Only for superuser! */ |
1587#if __FreeBSD_version < 500000 1588 error = suser (p); 1589#else | |
1590 error = suser (td); | 1425 error = suser (td); |
1591#endif | |
1592 if (error) 1593 return error; 1594 if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) 1595 return EINVAL; 1596 s = splimp (); 1597 cp_set_ts (c, *(u_long*)data); 1598 splx (s); 1599 return 0; --- 7 unchanged lines hidden (view full) --- 1607 return EINVAL; 1608 *(int*)data = c->invtxc; 1609 return 0; 1610#endif 1611 1612 case SERIAL_SETINVCLK: 1613 CP_DEBUG2 (d, ("ioctl: setinvclk\n")); 1614 /* Only for superuser! */ | 1426 if (error) 1427 return error; 1428 if ((c->type != T_E1 || c->unfram) && c->type != T_DATA) 1429 return EINVAL; 1430 s = splimp (); 1431 cp_set_ts (c, *(u_long*)data); 1432 splx (s); 1433 return 0; --- 7 unchanged lines hidden (view full) --- 1441 return EINVAL; 1442 *(int*)data = c->invtxc; 1443 return 0; 1444#endif 1445 1446 case SERIAL_SETINVCLK: 1447 CP_DEBUG2 (d, ("ioctl: setinvclk\n")); 1448 /* Only for superuser! */ |
1615#if __FreeBSD_version < 500000 1616 error = suser (p); 1617#else | |
1618 error = suser (td); | 1449 error = suser (td); |
1619#endif | |
1620 if (error) 1621 return error; 1622 if (c->type != T_SERIAL) 1623 return EINVAL; 1624 s = splimp (); 1625 cp_set_invtxc (c, *(int*)data); 1626 cp_set_invrxc (c, *(int*)data); 1627 splx (s); --- 4 unchanged lines hidden (view full) --- 1632 if (c->type != T_SERIAL) 1633 return EINVAL; 1634 *(int*)data = c->invtxc; 1635 return 0; 1636 1637 case SERIAL_SETINVTCLK: 1638 CP_DEBUG2 (d, ("ioctl: setinvtclk\n")); 1639 /* Only for superuser! */ | 1450 if (error) 1451 return error; 1452 if (c->type != T_SERIAL) 1453 return EINVAL; 1454 s = splimp (); 1455 cp_set_invtxc (c, *(int*)data); 1456 cp_set_invrxc (c, *(int*)data); 1457 splx (s); --- 4 unchanged lines hidden (view full) --- 1462 if (c->type != T_SERIAL) 1463 return EINVAL; 1464 *(int*)data = c->invtxc; 1465 return 0; 1466 1467 case SERIAL_SETINVTCLK: 1468 CP_DEBUG2 (d, ("ioctl: setinvtclk\n")); 1469 /* Only for superuser! */ |
1640#if __FreeBSD_version < 500000 1641 error = suser (p); 1642#else | |
1643 error = suser (td); | 1470 error = suser (td); |
1644#endif | |
1645 if (error) 1646 return error; 1647 if (c->type != T_SERIAL) 1648 return EINVAL; 1649 s = splimp (); 1650 cp_set_invtxc (c, *(int*)data); 1651 splx (s); 1652 return 0; 1653 1654 case SERIAL_GETINVRCLK: 1655 CP_DEBUG2 (d, ("ioctl: getinvrclk\n")); 1656 if (c->type != T_SERIAL) 1657 return EINVAL; 1658 *(int*)data = c->invrxc; 1659 return 0; 1660 1661 case SERIAL_SETINVRCLK: 1662 CP_DEBUG2 (d, ("ioctl: setinvrclk\n")); 1663 /* Only for superuser! */ | 1471 if (error) 1472 return error; 1473 if (c->type != T_SERIAL) 1474 return EINVAL; 1475 s = splimp (); 1476 cp_set_invtxc (c, *(int*)data); 1477 splx (s); 1478 return 0; 1479 1480 case SERIAL_GETINVRCLK: 1481 CP_DEBUG2 (d, ("ioctl: getinvrclk\n")); 1482 if (c->type != T_SERIAL) 1483 return EINVAL; 1484 *(int*)data = c->invrxc; 1485 return 0; 1486 1487 case SERIAL_SETINVRCLK: 1488 CP_DEBUG2 (d, ("ioctl: setinvrclk\n")); 1489 /* Only for superuser! */ |
1664#if __FreeBSD_version < 500000 1665 error = suser (p); 1666#else | |
1667 error = suser (td); | 1490 error = suser (td); |
1668#endif | |
1669 if (error) 1670 return error; 1671 if (c->type != T_SERIAL) 1672 return EINVAL; 1673 s = splimp (); 1674 cp_set_invrxc (c, *(int*)data); 1675 splx (s); 1676 return 0; --- 6 unchanged lines hidden (view full) --- 1683 *(int*)data = cp_get_lq (c); 1684 splx (s); 1685 return 0; 1686 1687#if 0 1688 case SERIAL_RESET: 1689 CP_DEBUG2 (d, ("ioctl: reset\n")); 1690 /* Only for superuser! */ | 1491 if (error) 1492 return error; 1493 if (c->type != T_SERIAL) 1494 return EINVAL; 1495 s = splimp (); 1496 cp_set_invrxc (c, *(int*)data); 1497 splx (s); 1498 return 0; --- 6 unchanged lines hidden (view full) --- 1505 *(int*)data = cp_get_lq (c); 1506 splx (s); 1507 return 0; 1508 1509#if 0 1510 case SERIAL_RESET: 1511 CP_DEBUG2 (d, ("ioctl: reset\n")); 1512 /* Only for superuser! */ |
1691#if __FreeBSD_version < 500000 1692 error = suser (p); 1693#else | |
1694 error = suser (td); | 1513 error = suser (td); |
1695#endif | |
1696 if (error) 1697 return error; 1698 s = splimp (); 1699 cp_reset (c->board, 0, 0); 1700 splx (s); 1701 return 0; 1702 1703 case SERIAL_HARDRESET: 1704 CP_DEBUG2 (d, ("ioctl: hardreset\n")); 1705 /* Only for superuser! */ | 1514 if (error) 1515 return error; 1516 s = splimp (); 1517 cp_reset (c->board, 0, 0); 1518 splx (s); 1519 return 0; 1520 1521 case SERIAL_HARDRESET: 1522 CP_DEBUG2 (d, ("ioctl: hardreset\n")); 1523 /* Only for superuser! */ |
1706#if __FreeBSD_version < 500000 1707 error = suser (p); 1708#else | |
1709 error = suser (td); | 1524 error = suser (td); |
1710#endif | |
1711 if (error) 1712 return error; 1713 s = splimp (); 1714 /* hard_reset (c->board); */ 1715 splx (s); 1716 return 0; 1717#endif 1718 --- 11 unchanged lines hidden (view full) --- 1730 if (c->type != T_E1 && c->type != T_DATA) 1731 return EINVAL; 1732 *(int*)data = c->dir; 1733 return 0; 1734 1735 case SERIAL_SETDIR: 1736 CP_DEBUG2 (d, ("ioctl: setdir\n")); 1737 /* Only for superuser! */ | 1525 if (error) 1526 return error; 1527 s = splimp (); 1528 /* hard_reset (c->board); */ 1529 splx (s); 1530 return 0; 1531#endif 1532 --- 11 unchanged lines hidden (view full) --- 1544 if (c->type != T_E1 && c->type != T_DATA) 1545 return EINVAL; 1546 *(int*)data = c->dir; 1547 return 0; 1548 1549 case SERIAL_SETDIR: 1550 CP_DEBUG2 (d, ("ioctl: setdir\n")); 1551 /* Only for superuser! */ |
1738#if __FreeBSD_version < 500000 1739 error = suser (p); 1740#else | |
1741 error = suser (td); | 1552 error = suser (td); |
1742#endif | |
1743 if (error) 1744 return error; 1745 s = splimp (); 1746 cp_set_dir (c, *(int*)data); 1747 splx (s); 1748 return 0; 1749 1750 case SERIAL_GETRLOOP: --- 6 unchanged lines hidden (view full) --- 1757 *(int*)data = cp_get_rloop (c); 1758 return 0; 1759 1760 case SERIAL_SETRLOOP: 1761 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1762 if (c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) 1763 return EINVAL; 1764 /* Only for superuser! */ | 1553 if (error) 1554 return error; 1555 s = splimp (); 1556 cp_set_dir (c, *(int*)data); 1557 splx (s); 1558 return 0; 1559 1560 case SERIAL_GETRLOOP: --- 6 unchanged lines hidden (view full) --- 1567 *(int*)data = cp_get_rloop (c); 1568 return 0; 1569 1570 case SERIAL_SETRLOOP: 1571 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1572 if (c->type != T_E3 && c->type != T_T3 && c->type != T_STS1) 1573 return EINVAL; 1574 /* Only for superuser! */ |
1765#if __FreeBSD_version < 500000 1766 error = suser (p); 1767#else | |
1768 error = suser (td); | 1575 error = suser (td); |
1769#endif | |
1770 if (error) 1771 return error; 1772 s = splimp (); 1773 cp_set_rloop (c, *(int*)data); 1774 splx (s); 1775 return 0; 1776 1777 case SERIAL_GETCABLEN: 1778 CP_DEBUG2 (d, ("ioctl: getcablen\n")); 1779 if (c->type != T_T3 && c->type != T_STS1) 1780 return EINVAL; 1781 *(int*)data = c->cablen; 1782 return 0; 1783 1784 case SERIAL_SETCABLEN: 1785 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1786 if (c->type != T_T3 && c->type != T_STS1) 1787 return EINVAL; 1788 /* Only for superuser! */ | 1576 if (error) 1577 return error; 1578 s = splimp (); 1579 cp_set_rloop (c, *(int*)data); 1580 splx (s); 1581 return 0; 1582 1583 case SERIAL_GETCABLEN: 1584 CP_DEBUG2 (d, ("ioctl: getcablen\n")); 1585 if (c->type != T_T3 && c->type != T_STS1) 1586 return EINVAL; 1587 *(int*)data = c->cablen; 1588 return 0; 1589 1590 case SERIAL_SETCABLEN: 1591 CP_DEBUG2 (d, ("ioctl: setloop\n")); 1592 if (c->type != T_T3 && c->type != T_STS1) 1593 return EINVAL; 1594 /* Only for superuser! */ |
1789#if __FreeBSD_version < 500000 1790 error = suser (p); 1791#else | |
1792 error = suser (td); | 1595 error = suser (td); |
1793#endif | |
1794 if (error) 1795 return error; 1796 s = splimp (); 1797 cp_set_cablen (c, *(int*)data); 1798 splx (s); 1799 return 0; 1800 1801 case TIOCSDTR: /* Set DTR */ --- 31 unchanged lines hidden (view full) --- 1833 1834 case TIOCMGET: /* Get modem status */ 1835 *(int*)data = cp_modem_status (c); 1836 return 0; 1837 } 1838 return ENOTTY; 1839} 1840 | 1596 if (error) 1597 return error; 1598 s = splimp (); 1599 cp_set_cablen (c, *(int*)data); 1600 splx (s); 1601 return 0; 1602 1603 case TIOCSDTR: /* Set DTR */ --- 31 unchanged lines hidden (view full) --- 1635 1636 case TIOCMGET: /* Get modem status */ 1637 *(int*)data = cp_modem_status (c); 1638 return 0; 1639 } 1640 return ENOTTY; 1641} 1642 |
1841#if __FreeBSD_version < 500000 | |
1842static struct cdevsw cp_cdevsw = { | 1643static struct cdevsw cp_cdevsw = { |
1843 cp_open, cp_close, noread, nowrite, 1844 cp_ioctl, nopoll, nommap, nostrategy, 1845 "cp", CDEV_MAJOR, nodump, nopsize, 1846 D_NAGGED, -1 1847 }; 1848#elif __FreeBSD_version == 500000 1849static struct cdevsw cp_cdevsw = { 1850 cp_open, cp_close, noread, nowrite, 1851 cp_ioctl, nopoll, nommap, nostrategy, 1852 "cp", CDEV_MAJOR, nodump, nopsize, 1853 D_NAGGED, 1854 }; 1855#elif __FreeBSD_version <= 501000 1856static struct cdevsw cp_cdevsw = { 1857 .d_open = cp_open, 1858 .d_close = cp_close, 1859 .d_read = noread, 1860 .d_write = nowrite, 1861 .d_ioctl = cp_ioctl, 1862 .d_poll = nopoll, 1863 .d_mmap = nommap, 1864 .d_strategy = nostrategy, 1865 .d_name = "cp", 1866 .d_maj = CDEV_MAJOR, 1867 .d_dump = nodump, 1868 .d_flags = D_NAGGED, 1869}; 1870#elif __FreeBSD_version < 502103 1871static struct cdevsw cp_cdevsw = { 1872 .d_open = cp_open, 1873 .d_close = cp_close, 1874 .d_ioctl = cp_ioctl, 1875 .d_name = "cp", 1876 .d_maj = CDEV_MAJOR, 1877 .d_flags = D_NAGGED, 1878}; 1879#else /* __FreeBSD_version >= 502103 */ 1880static struct cdevsw cp_cdevsw = { | |
1881 .d_version = D_VERSION, 1882 .d_open = cp_open, 1883 .d_close = cp_close, 1884 .d_ioctl = cp_ioctl, 1885 .d_name = "cp", 1886 .d_maj = CDEV_MAJOR, 1887 .d_flags = D_NEEDGIANT, 1888}; | 1644 .d_version = D_VERSION, 1645 .d_open = cp_open, 1646 .d_close = cp_close, 1647 .d_ioctl = cp_ioctl, 1648 .d_name = "cp", 1649 .d_maj = CDEV_MAJOR, 1650 .d_flags = D_NEEDGIANT, 1651}; |
1889#endif | |
1890 1891#ifdef NETGRAPH | 1652 1653#ifdef NETGRAPH |
1892#if __FreeBSD_version >= 500000 | |
1893static int ng_cp_constructor (node_p node) 1894{ 1895 drv_t *d = NG_NODE_PRIVATE (node); | 1654static int ng_cp_constructor (node_p node) 1655{ 1656 drv_t *d = NG_NODE_PRIVATE (node); |
1896#else 1897static int ng_cp_constructor (node_p *node) 1898{ 1899 drv_t *d = (*node)->private; 1900#endif | |
1901 CP_DEBUG (d, ("Constructor\n")); 1902 return EINVAL; 1903} 1904 1905static int ng_cp_newhook (node_p node, hook_p hook, const char *name) 1906{ 1907 int s; | 1657 CP_DEBUG (d, ("Constructor\n")); 1658 return EINVAL; 1659} 1660 1661static int ng_cp_newhook (node_p node, hook_p hook, const char *name) 1662{ 1663 int s; |
1908#if __FreeBSD_version >= 500000 | |
1909 drv_t *d = NG_NODE_PRIVATE (node); | 1664 drv_t *d = NG_NODE_PRIVATE (node); |
1910#else 1911 drv_t *d = node->private; 1912#endif | |
1913 1914 CP_DEBUG (d, ("Newhook\n")); 1915 /* Attach debug hook */ 1916 if (strcmp (name, NG_CP_HOOK_DEBUG) == 0) { | 1665 1666 CP_DEBUG (d, ("Newhook\n")); 1667 /* Attach debug hook */ 1668 if (strcmp (name, NG_CP_HOOK_DEBUG) == 0) { |
1917#if __FreeBSD_version >= 500000 | |
1918 NG_HOOK_SET_PRIVATE (hook, NULL); | 1669 NG_HOOK_SET_PRIVATE (hook, NULL); |
1919#else 1920 hook->private = 0; 1921#endif | |
1922 d->debug_hook = hook; 1923 return 0; 1924 } 1925 1926 /* Check for raw hook */ 1927 if (strcmp (name, NG_CP_HOOK_RAW) != 0) 1928 return EINVAL; 1929 | 1670 d->debug_hook = hook; 1671 return 0; 1672 } 1673 1674 /* Check for raw hook */ 1675 if (strcmp (name, NG_CP_HOOK_RAW) != 0) 1676 return EINVAL; 1677 |
1930#if __FreeBSD_version >= 500000 | |
1931 NG_HOOK_SET_PRIVATE (hook, d); | 1678 NG_HOOK_SET_PRIVATE (hook, d); |
1932#else 1933 hook->private = d; 1934#endif | |
1935 d->hook = hook; 1936 s = splimp (); 1937 cp_up (d); 1938 splx (s); 1939 return 0; 1940} 1941 1942static char *format_timeslots (u_long s) --- 226 unchanged lines hidden (view full) --- 2169 lq = cp_get_lq (c); 2170 splx (x); 2171 length += sprintf (s + length, " (level=-%.1fdB)", lq / 10.0); 2172 } 2173 length += sprintf (s + length, "\n"); 2174 return length; 2175} 2176 | 1679 d->hook = hook; 1680 s = splimp (); 1681 cp_up (d); 1682 splx (s); 1683 return 0; 1684} 1685 1686static char *format_timeslots (u_long s) --- 226 unchanged lines hidden (view full) --- 1913 lq = cp_get_lq (c); 1914 splx (x); 1915 length += sprintf (s + length, " (level=-%.1fdB)", lq / 10.0); 1916 } 1917 length += sprintf (s + length, "\n"); 1918 return length; 1919} 1920 |
2177#if __FreeBSD_version >= 500000 | |
2178static int ng_cp_rcvmsg (node_p node, item_p item, hook_p lasthook) 2179{ 2180 drv_t *d = NG_NODE_PRIVATE (node); 2181 struct ng_mesg *msg; | 1921static int ng_cp_rcvmsg (node_p node, item_p item, hook_p lasthook) 1922{ 1923 drv_t *d = NG_NODE_PRIVATE (node); 1924 struct ng_mesg *msg; |
2182#else 2183static int ng_cp_rcvmsg (node_p node, struct ng_mesg *msg, 2184 const char *retaddr, struct ng_mesg **rptr) 2185{ 2186 drv_t *d = node->private; 2187#endif | |
2188 struct ng_mesg *resp = NULL; 2189 int error = 0; 2190 2191 CP_DEBUG (d, ("Rcvmsg\n")); | 1925 struct ng_mesg *resp = NULL; 1926 int error = 0; 1927 1928 CP_DEBUG (d, ("Rcvmsg\n")); |
2192#if __FreeBSD_version >= 500000 | |
2193 NGI_GET_MSG (item, msg); | 1929 NGI_GET_MSG (item, msg); |
2194#endif | |
2195 switch (msg->header.typecookie) { 2196 default: 2197 error = EINVAL; 2198 break; 2199 2200 case NGM_CP_COOKIE: 2201 printf ("Not implemented yet\n"); 2202 error = EINVAL; --- 5 unchanged lines hidden (view full) --- 2208 error = EINVAL; 2209 break; 2210 2211 case NGM_TEXT_STATUS: { 2212 char *s; 2213 int l = 0; 2214 int dl = sizeof (struct ng_mesg) + 730; 2215 | 1930 switch (msg->header.typecookie) { 1931 default: 1932 error = EINVAL; 1933 break; 1934 1935 case NGM_CP_COOKIE: 1936 printf ("Not implemented yet\n"); 1937 error = EINVAL; --- 5 unchanged lines hidden (view full) --- 1943 error = EINVAL; 1944 break; 1945 1946 case NGM_TEXT_STATUS: { 1947 char *s; 1948 int l = 0; 1949 int dl = sizeof (struct ng_mesg) + 730; 1950 |
2216#if __FreeBSD_version >= 500000 | |
2217 NG_MKRESPONSE (resp, msg, dl, M_NOWAIT); 2218 if (! resp) { 2219 error = ENOMEM; 2220 break; 2221 } | 1951 NG_MKRESPONSE (resp, msg, dl, M_NOWAIT); 1952 if (! resp) { 1953 error = ENOMEM; 1954 break; 1955 } |
2222#else 2223 MALLOC (resp, struct ng_mesg *, dl, 2224 M_NETGRAPH, M_NOWAIT); 2225 if (! resp) { 2226 error = ENOMEM; 2227 break; 2228 } 2229 bzero (resp, dl); 2230#endif | |
2231 s = (resp)->data; 2232 if (d) { 2233 l += print_chan (s + l, d->chan); 2234 l += print_stats (s + l, d->chan, 1); 2235 l += print_modems (s + l, d->chan, 1); 2236 l += print_e1_stats (s + l, d->chan); 2237 } else 2238 l += sprintf (s + l, "Error: node not connect to channel"); | 1956 s = (resp)->data; 1957 if (d) { 1958 l += print_chan (s + l, d->chan); 1959 l += print_stats (s + l, d->chan, 1); 1960 l += print_modems (s + l, d->chan, 1); 1961 l += print_e1_stats (s + l, d->chan); 1962 } else 1963 l += sprintf (s + l, "Error: node not connect to channel"); |
2239#if __FreeBSD_version < 500000 2240 (resp)->header.version = NG_VERSION; 2241 (resp)->header.arglen = strlen (s) + 1; 2242 (resp)->header.token = msg->header.token; 2243 (resp)->header.typecookie = NGM_CP_COOKIE; 2244 (resp)->header.cmd = msg->header.cmd; 2245#endif | |
2246 strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRLEN); 2247 } 2248 break; 2249 } 2250 break; 2251 } | 1964 strncpy ((resp)->header.cmdstr, "status", NG_CMDSTRLEN); 1965 } 1966 break; 1967 } 1968 break; 1969 } |
2252#if __FreeBSD_version >= 500000 | |
2253 NG_RESPOND_MSG (error, node, item, resp); 2254 NG_FREE_MSG (msg); | 1970 NG_RESPOND_MSG (error, node, item, resp); 1971 NG_FREE_MSG (msg); |
2255#else 2256 *rptr = resp; 2257 FREE (msg, M_NETGRAPH); 2258#endif | |
2259 return error; 2260} 2261 | 1972 return error; 1973} 1974 |
2262#if __FreeBSD_version >= 500000 | |
2263static int ng_cp_rcvdata (hook_p hook, item_p item) 2264{ 2265 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook)); 2266 struct mbuf *m; 2267 struct ng_tag_prio *ptag; | 1975static int ng_cp_rcvdata (hook_p hook, item_p item) 1976{ 1977 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE(hook)); 1978 struct mbuf *m; 1979 struct ng_tag_prio *ptag; |
2268#else 2269static int ng_cp_rcvdata (hook_p hook, struct mbuf *m, meta_p meta) 2270{ 2271 drv_t *d = hook->node->private; 2272#endif | |
2273 struct ifqueue *q; 2274 int s; 2275 2276 CP_DEBUG2 (d, ("Rcvdata\n")); | 1980 struct ifqueue *q; 1981 int s; 1982 1983 CP_DEBUG2 (d, ("Rcvdata\n")); |
2277#if __FreeBSD_version >= 500000 | |
2278 NGI_GET_M (item, m); 2279 NG_FREE_ITEM (item); 2280 if (! NG_HOOK_PRIVATE (hook) || ! d) { 2281 NG_FREE_M (m); | 1984 NGI_GET_M (item, m); 1985 NG_FREE_ITEM (item); 1986 if (! NG_HOOK_PRIVATE (hook) || ! d) { 1987 NG_FREE_M (m); |
2282#else 2283 if (! hook->private || ! d) { 2284 NG_FREE_DATA (m,meta); 2285#endif | |
2286 return ENETDOWN; 2287 } 2288 2289 /* Check for high priority data */ 2290 if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE, 2291 NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) ) 2292 q = &d->hi_queue; 2293 else 2294 q = &d->queue; 2295 2296 s = splimp (); | 1988 return ENETDOWN; 1989 } 1990 1991 /* Check for high priority data */ 1992 if ((ptag = (struct ng_tag_prio *)m_tag_locate(m, NGM_GENERIC_COOKIE, 1993 NG_TAG_PRIO, NULL)) != NULL && (ptag->priority > NG_PRIO_CUTOFF) ) 1994 q = &d->hi_queue; 1995 else 1996 q = &d->queue; 1997 1998 s = splimp (); |
2297#if __FreeBSD_version >= 500000 | |
2298 IF_LOCK (q); 2299 if (_IF_QFULL (q)) { 2300 _IF_DROP (q); 2301 IF_UNLOCK (q); 2302 splx (s); 2303 NG_FREE_M (m); 2304 return ENOBUFS; 2305 } 2306 _IF_ENQUEUE (q, m); 2307 IF_UNLOCK (q); | 1999 IF_LOCK (q); 2000 if (_IF_QFULL (q)) { 2001 _IF_DROP (q); 2002 IF_UNLOCK (q); 2003 splx (s); 2004 NG_FREE_M (m); 2005 return ENOBUFS; 2006 } 2007 _IF_ENQUEUE (q, m); 2008 IF_UNLOCK (q); |
2308#else 2309 if (IF_QFULL (q)) { 2310 IF_DROP (q); 2311 splx (s); 2312 NG_FREE_DATA (m, meta); 2313 return ENOBUFS; 2314 } 2315 IF_ENQUEUE (q, m); 2316#endif | |
2317 cp_start (d); 2318 splx (s); 2319 return 0; 2320} 2321 2322static int ng_cp_rmnode (node_p node) 2323{ | 2009 cp_start (d); 2010 splx (s); 2011 return 0; 2012} 2013 2014static int ng_cp_rmnode (node_p node) 2015{ |
2324#if __FreeBSD_version >= 500000 | |
2325 drv_t *d = NG_NODE_PRIVATE (node); 2326 2327 CP_DEBUG (d, ("Rmnode\n")); 2328 if (d && d->running) { 2329 int s = splimp (); 2330 cp_down (d); 2331 splx (s); 2332 } 2333#ifdef KLD_MODULE 2334 if (node->nd_flags & NGF_REALLY_DIE) { 2335 NG_NODE_SET_PRIVATE (node, NULL); 2336 NG_NODE_UNREF (node); 2337 } 2338 NG_NODE_REVIVE(node); /* Persistant node */ 2339#endif | 2016 drv_t *d = NG_NODE_PRIVATE (node); 2017 2018 CP_DEBUG (d, ("Rmnode\n")); 2019 if (d && d->running) { 2020 int s = splimp (); 2021 cp_down (d); 2022 splx (s); 2023 } 2024#ifdef KLD_MODULE 2025 if (node->nd_flags & NGF_REALLY_DIE) { 2026 NG_NODE_SET_PRIVATE (node, NULL); 2027 NG_NODE_UNREF (node); 2028 } 2029 NG_NODE_REVIVE(node); /* Persistant node */ 2030#endif |
2340#else /* __FreeBSD_version < 500000 */ 2341 drv_t *d = node->private; 2342 2343 if (d && d->running) { 2344 int s = splimp (); 2345 cp_down (d); 2346 splx (s); 2347 } 2348 2349 node->flags |= NG_INVALID; 2350 ng_cutlinks (node); 2351#ifdef KLD_MODULE 2352 ng_unname (node); 2353 ng_unref (node); 2354#endif 2355#endif | |
2356 return 0; 2357} 2358 2359static void ng_cp_watchdog (void *arg) 2360{ 2361 drv_t *d = arg; 2362 2363 if (d) { 2364 if (d->timeout == 1) 2365 cp_watchdog (d); 2366 if (d->timeout) 2367 d->timeout--; 2368 d->timeout_handle = timeout (ng_cp_watchdog, d, hz); 2369 } 2370} 2371 2372static int ng_cp_connect (hook_p hook) 2373{ | 2031 return 0; 2032} 2033 2034static void ng_cp_watchdog (void *arg) 2035{ 2036 drv_t *d = arg; 2037 2038 if (d) { 2039 if (d->timeout == 1) 2040 cp_watchdog (d); 2041 if (d->timeout) 2042 d->timeout--; 2043 d->timeout_handle = timeout (ng_cp_watchdog, d, hz); 2044 } 2045} 2046 2047static int ng_cp_connect (hook_p hook) 2048{ |
2374#if __FreeBSD_version >= 500000 | |
2375 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); | 2049 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); |
2376#else 2377 drv_t *d = hook->node->private; 2378#endif | |
2379 2380 if (d) { 2381 CP_DEBUG (d, ("Connect\n")); 2382 d->timeout_handle = timeout (ng_cp_watchdog, d, hz); 2383 } 2384 2385 return 0; 2386} 2387 2388static int ng_cp_disconnect (hook_p hook) 2389{ | 2050 2051 if (d) { 2052 CP_DEBUG (d, ("Connect\n")); 2053 d->timeout_handle = timeout (ng_cp_watchdog, d, hz); 2054 } 2055 2056 return 0; 2057} 2058 2059static int ng_cp_disconnect (hook_p hook) 2060{ |
2390#if __FreeBSD_version >= 500000 | |
2391 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); | 2061 drv_t *d = NG_NODE_PRIVATE (NG_HOOK_NODE (hook)); |
2392#else 2393 drv_t *d = hook->node->private; 2394#endif | |
2395 2396 if (d) { 2397 CP_DEBUG (d, ("Disconnect\n")); | 2062 2063 if (d) { 2064 CP_DEBUG (d, ("Disconnect\n")); |
2398#if __FreeBSD_version >= 500000 | |
2399 if (NG_HOOK_PRIVATE (hook)) | 2065 if (NG_HOOK_PRIVATE (hook)) |
2400#else 2401 if (hook->private) 2402#endif | |
2403 { 2404 int s = splimp (); 2405 cp_down (d); 2406 splx (s); 2407 } 2408 untimeout (ng_cp_watchdog, d, d->timeout_handle); 2409 } 2410 return 0; 2411} 2412#endif 2413 2414static int cp_modevent (module_t mod, int type, void *unused) 2415{ 2416 static int load_count = 0; 2417 2418 switch (type) { 2419 case MOD_LOAD: | 2066 { 2067 int s = splimp (); 2068 cp_down (d); 2069 splx (s); 2070 } 2071 untimeout (ng_cp_watchdog, d, d->timeout_handle); 2072 } 2073 return 0; 2074} 2075#endif 2076 2077static int cp_modevent (module_t mod, int type, void *unused) 2078{ 2079 static int load_count = 0; 2080 2081 switch (type) { 2082 case MOD_LOAD: |
2420#if __FreeBSD_version >= 500000 && defined NETGRAPH | 2083#ifdef NETGRAPH |
2421 if (ng_newtype (&typestruct)) 2422 printf ("Failed to register ng_cp\n"); 2423#endif 2424 ++load_count; | 2084 if (ng_newtype (&typestruct)) 2085 printf ("Failed to register ng_cp\n"); 2086#endif 2087 ++load_count; |
2425#if __FreeBSD_version <= 500000 2426 cdevsw_add (&cp_cdevsw); 2427#endif | |
2428 timeout_handle = timeout (cp_timeout, 0, hz*5); 2429 break; 2430 case MOD_UNLOAD: 2431 if (load_count == 1) { 2432 printf ("Removing device entry for Tau-PCI\n"); | 2088 timeout_handle = timeout (cp_timeout, 0, hz*5); 2089 break; 2090 case MOD_UNLOAD: 2091 if (load_count == 1) { 2092 printf ("Removing device entry for Tau-PCI\n"); |
2433#if __FreeBSD_version <= 500000 2434 cdevsw_remove (&cp_cdevsw); 2435#endif 2436#if __FreeBSD_version >= 500000 && defined NETGRAPH | 2093#ifdef NETGRAPH |
2437 ng_rmtype (&typestruct); 2438#endif 2439 } 2440 untimeout (cp_timeout, 0, timeout_handle); 2441 --load_count; 2442 break; 2443 case MOD_SHUTDOWN: 2444 break; --- 10 unchanged lines hidden (view full) --- 2455 .shutdown = ng_cp_rmnode, 2456 .newhook = ng_cp_newhook, 2457 .connect = ng_cp_connect, 2458 .rcvdata = ng_cp_rcvdata, 2459 .disconnect = ng_cp_disconnect, 2460}; 2461#endif /*NETGRAPH*/ 2462 | 2094 ng_rmtype (&typestruct); 2095#endif 2096 } 2097 untimeout (cp_timeout, 0, timeout_handle); 2098 --load_count; 2099 break; 2100 case MOD_SHUTDOWN: 2101 break; --- 10 unchanged lines hidden (view full) --- 2112 .shutdown = ng_cp_rmnode, 2113 .newhook = ng_cp_newhook, 2114 .connect = ng_cp_connect, 2115 .rcvdata = ng_cp_rcvdata, 2116 .disconnect = ng_cp_disconnect, 2117}; 2118#endif /*NETGRAPH*/ 2119 |
2463#if __FreeBSD_version >= 500000 | |
2464#ifdef NETGRAPH 2465MODULE_DEPEND (ng_cp, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); 2466#else 2467MODULE_DEPEND (cp, sppp, 1, 1, 1); 2468#endif 2469#ifdef KLD_MODULE 2470DRIVER_MODULE (cpmod, pci, cp_driver, cp_devclass, cp_modevent, NULL); 2471#else 2472DRIVER_MODULE (cp, pci, cp_driver, cp_devclass, cp_modevent, NULL); 2473#endif | 2120#ifdef NETGRAPH 2121MODULE_DEPEND (ng_cp, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); 2122#else 2123MODULE_DEPEND (cp, sppp, 1, 1, 1); 2124#endif 2125#ifdef KLD_MODULE 2126DRIVER_MODULE (cpmod, pci, cp_driver, cp_devclass, cp_modevent, NULL); 2127#else 2128DRIVER_MODULE (cp, pci, cp_driver, cp_devclass, cp_modevent, NULL); 2129#endif |
2474#elif __FreeBSD_version >= 400000 2475#ifdef NETGRAPH 2476DRIVER_MODULE (cp, pci, cp_driver, cp_devclass, ng_mod_event, &typestruct); 2477#else 2478DRIVER_MODULE (cp, pci, cp_driver, cp_devclass, cp_modevent, NULL); 2479#endif 2480#endif /* __FreeBSD_version >= 400000 */ 2481#endif /* NPCI */ | |