diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -40,6 +40,9 @@ # xargs -n1 | sort | uniq -d; # done +# 20210929: Remove ng_h4 +OLD_FILES+=usr/share/man/man4/ng_h4.4.gz + # 20210923: rename boot(9) to kern_reboot(9) OLD_FILES+=usr/share/man/man9/boot.9.gz diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -353,7 +353,6 @@ ng_frame_relay.4 \ ng_gif.4 \ ng_gif_demux.4 \ - ng_h4.4 \ ng_hci.4 \ ng_hole.4 \ ng_hub.4 \ diff --git a/share/man/man4/netgraph.4 b/share/man/man4/netgraph.4 --- a/share/man/man4/netgraph.4 +++ b/share/man/man4/netgraph.4 @@ -36,7 +36,7 @@ .\" $Whistle: netgraph.4,v 1.7 1999/01/28 23:54:52 julian Exp $ .\" $FreeBSD$ .\" -.Dd January 9, 2021 +.Dd September 29, 2021 .Dt NETGRAPH 4 .Os .Sh NAME @@ -1433,7 +1433,6 @@ .Xr ng_frame_relay 4 , .Xr ng_gif 4 , .Xr ng_gif_demux 4 , -.Xr ng_h4 4 , .Xr ng_hci 4 , .Xr ng_hole 4 , .Xr ng_hub 4 , diff --git a/share/man/man4/ng_h4.4 b/share/man/man4/ng_h4.4 deleted file mode 100644 --- a/share/man/man4/ng_h4.4 +++ /dev/null @@ -1,123 +0,0 @@ -.\" Copyright (c) 2001-2002 Maksim Yevmenkin -.\" All rights reserved. -.\" -.\" Redistribution and use in source and binary forms, with or without -.\" modification, are permitted provided that the following conditions -.\" are met: -.\" 1. Redistributions of source code must retain the above copyright -.\" notice, this list of conditions and the following disclaimer. -.\" 2. Redistributions in binary form must reproduce the above copyright -.\" notice, this list of conditions and the following disclaimer in the -.\" documentation and/or other materials provided with the distribution. -.\" -.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND -.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE -.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS -.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY -.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF -.\" SUCH DAMAGE. -.\" -.\" $Id: ng_h4.4,v 1.2 2003/05/21 19:37:35 max Exp $ -.\" $FreeBSD$ -.\" -.Dd June 14, 2002 -.Dt NG_H4 4 -.Os -.Sh NAME -.Nm ng_h4 -.Nd Netgraph node type that is also an H4 line discipline -.Sh SYNOPSIS -.In sys/types.h -.In netgraph/bluetooth/include/ng_h4.h -.Sh DESCRIPTION -The -.Nm h4 -node type is both a persistent Netgraph node type and a H4 line -discipline. -It implements a Bluetooth HCI UART transport layer as -per chapter H4 of the Bluetooth Specification Book v1.1. -A new node is created when the corresponding line discipline, -.Dv H4DISC , -is registered on a tty device (see -.Xr tty 4 ) . -.Pp -The node has a single hook called -.Dv hook . -Incoming bytes received on the tty device are re-assembled into -HCI frames (according to the length). -Full HCI frames are sent out on the hook. -HCI frames received on -.Dv hook -are transmitted out on the tty device. -No modification to the data is performed in either direction. -While the line discipline is installed on a tty, the normal -read and write operations are unavailable, returning -.Er EIO . -.Pp -Information about the node is available via the netgraph -.Xr ioctl 2 -command -.Dv NGIOCGINFO . -This command returns a -.Vt "struct nodeinfo" -similar to the -.Dv NGM_NODEINFO -.Xr netgraph 4 -control message. -.Sh HOOKS -This node type supports the following hooks: -.Bl -tag -width ".Va hook" -.It Va hook -single HCI frame contained in single -.Vt mbuf -structure. -.El -.Sh CONTROL MESSAGES -This node type supports the generic control messages, plus the following: -.Bl -tag -width foo -.It Dv NGM_H4_NODE_RESET -Reset the node. -.It Dv NGM_H4_NODE_GET_STATE -Returns current receiving state for the node. -.It Dv NGM_H4_NODE_GET_DEBUG -Returns an integer containing the current debug level for the node. -.It Dv NGM_H4_NODE_SET_DEBUG -This command takes an integer argument and sets current debug level -for the node. -.It Dv NGM_H4_NODE_GET_QLEN -Returns current length of outgoing queue for the node. -.It Dv NGM_H4_NODE_SET_QLEN -This command takes an integer argument and sets maximum length of -outgoing queue for the node. -.It Dv NGM_H4_NODE_GET_STAT -Returns various statistic information for the node, such as: number of -bytes (frames) sent, number of bytes (frames) received and number of -input (output) errors. -.It Dv NGM_H4_NODE_RESET_STAT -Reset all statistic counters to zero. -.El -.Sh SHUTDOWN -This node shuts down when the corresponding device is closed -(or the line discipline is uninstalled on the device). -.Sh SEE ALSO -.Xr ioctl 2 , -.Xr netgraph 4 , -.Xr tty 4 , -.Xr ngctl 8 -.Sh HISTORY -The -.Nm h4 -node type was implemented in -.Fx 5.0 . -.Sh AUTHORS -.An Maksim Yevmenkin Aq Mt m_evmenkin@yahoo.com -.Sh BUGS -This node still uses -.Xr spltty 9 -to lock tty layer. -This is wrong. diff --git a/share/man/man5/bluetooth.device.conf.5 b/share/man/man5/bluetooth.device.conf.5 --- a/share/man/man5/bluetooth.device.conf.5 +++ b/share/man/man5/bluetooth.device.conf.5 @@ -24,7 +24,7 @@ .\" .\" $FreeBSD$ .\" -.Dd January 9, 2021 +.Dd September 29, 2021 .Dt BLUETOOTH.DEVICE.CONF 5 .Os .Sh NAME @@ -173,7 +173,6 @@ file should be used to specify configuration parameters overrides for the second USB Bluetooth device. .Sh SEE ALSO -.Xr ng_h4 4 , .Xr ng_hci 4 , .Xr ng_l2cap 4 , .Xr ng_ubt 4 , diff --git a/sys/conf/files b/sys/conf/files --- a/sys/conf/files +++ b/sys/conf/files @@ -4253,7 +4253,6 @@ netgraph/atm/uni/ng_uni.c optional ngatm_uni \ compile-with "${NORMAL_C} -I$S/contrib/ngatm" netgraph/bluetooth/common/ng_bluetooth.c optional netgraph_bluetooth -netgraph/bluetooth/drivers/h4/ng_h4.c optional netgraph_bluetooth_h4 netgraph/bluetooth/drivers/ubt/ng_ubt.c optional netgraph_bluetooth_ubt usb netgraph/bluetooth/drivers/ubt/ng_ubt_intel.c optional netgraph_bluetooth_ubt usb netgraph/bluetooth/drivers/ubtbcmfw/ubtbcmfw.c optional netgraph_bluetooth_ubtbcmfw usb diff --git a/sys/modules/netgraph/bluetooth/h4/Makefile b/sys/modules/netgraph/bluetooth/h4/Makefile deleted file mode 100644 --- a/sys/modules/netgraph/bluetooth/h4/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -# $Id: Makefile,v 1.1 2002/11/24 20:40:04 max Exp $ -# $FreeBSD$ - -.PATH: ${SRCTOP}/sys/netgraph/bluetooth/drivers/h4 - -CFLAGS+= -I${SRCTOP}/sys/netgraph/bluetooth/include \ - -I${SRCTOP}/sys/netgraph/bluetooth/drivers/h4 - -KMOD= ng_h4 -SRCS= ng_h4.c - -.include diff --git a/sys/netgraph/bluetooth/drivers/h4/TODO b/sys/netgraph/bluetooth/drivers/h4/TODO deleted file mode 100644 --- a/sys/netgraph/bluetooth/drivers/h4/TODO +++ /dev/null @@ -1,13 +0,0 @@ -$Id: TODO,v 1.2 2004/08/23 18:08:15 max Exp $ -$FreeBSD$ - -FIXME/TODO list - -This is a list of open issues for H4 node - -1) Locking/SMP - - External code now uses ng_send_fn to inject data into Netgraph, but - i still use splXXX to lock tty level. this is wrong and should be - fixed! - diff --git a/sys/netgraph/bluetooth/drivers/h4/ng_h4.c b/sys/netgraph/bluetooth/drivers/h4/ng_h4.c deleted file mode 100644 --- a/sys/netgraph/bluetooth/drivers/h4/ng_h4.c +++ /dev/null @@ -1,1020 +0,0 @@ -/* - * ng_h4.c - */ - -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2001-2002 Maksim Yevmenkin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: ng_h4.c,v 1.10 2005/10/31 17:57:43 max Exp $ - * $FreeBSD$ - * - * Based on: - * --------- - * - * FreeBSD: src/sys/netgraph/ng_tty.c - * Author: Archie Cobbs - * - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/***************************************************************************** - ***************************************************************************** - ** This node implements a Bluetooth HCI UART transport layer as per chapter - ** H4 of the Bluetooth Specification Book v1.1. It is a terminal line - ** discipline that is also a netgraph node. Installing this line discipline - ** on a terminal device instantiates a new netgraph node of this type, which - ** allows access to the device via the "hook" hook of the node. - ** - ** Once the line discipline is installed, you can find out the name of the - ** corresponding netgraph node via a NGIOCGINFO ioctl(). - ***************************************************************************** - *****************************************************************************/ - -/* MALLOC define */ -#ifndef NG_SEPARATE_MALLOC -MALLOC_DEFINE(M_NETGRAPH_H4, "netgraph_h4", "Netgraph Bluetooth H4 node"); -#else -#define M_NETGRAPH_H4 M_NETGRAPH -#endif /* NG_SEPARATE_MALLOC */ - -/* Line discipline methods */ -static int ng_h4_open (struct cdev *, struct tty *); -static int ng_h4_close (struct tty *, int); -static int ng_h4_read (struct tty *, struct uio *, int); -static int ng_h4_write (struct tty *, struct uio *, int); -static int ng_h4_input (int, struct tty *); -static int ng_h4_start (struct tty *); -static int ng_h4_ioctl (struct tty *, u_long, caddr_t, - int, struct thread *); - -/* Line discipline descriptor */ -static struct linesw ng_h4_disc = { - ng_h4_open, /* open */ - ng_h4_close, /* close */ - ng_h4_read, /* read */ - ng_h4_write, /* write */ - ng_h4_ioctl, /* ioctl */ - ng_h4_input, /* input */ - ng_h4_start, /* start */ - ttymodem /* modem */ -}; - -/* Netgraph methods */ -static ng_constructor_t ng_h4_constructor; -static ng_rcvmsg_t ng_h4_rcvmsg; -static ng_shutdown_t ng_h4_shutdown; -static ng_newhook_t ng_h4_newhook; -static ng_connect_t ng_h4_connect; -static ng_rcvdata_t ng_h4_rcvdata; -static ng_disconnect_t ng_h4_disconnect; - -/* Other stuff */ -static void ng_h4_process_timeout (node_p, hook_p, void *, int); -static int ng_h4_mod_event (module_t, int, void *); - -/* Netgraph node type descriptor */ -static struct ng_type typestruct = { - .version = NG_ABI_VERSION, - .name = NG_H4_NODE_TYPE, - .mod_event = ng_h4_mod_event, - .constructor = ng_h4_constructor, - .rcvmsg = ng_h4_rcvmsg, - .shutdown = ng_h4_shutdown, - .newhook = ng_h4_newhook, - .connect = ng_h4_connect, - .rcvdata = ng_h4_rcvdata, - .disconnect = ng_h4_disconnect, - .cmdlist = ng_h4_cmdlist -}; -NETGRAPH_INIT(h4, &typestruct); -MODULE_VERSION(ng_h4, NG_BLUETOOTH_VERSION); - -static int ng_h4_node = 0; - -/***************************************************************************** - ***************************************************************************** - ** Line discipline methods - ***************************************************************************** - *****************************************************************************/ - -/* - * Set our line discipline on the tty. - */ - -static int -ng_h4_open(struct cdev *dev, struct tty *tp) -{ - struct thread *td = curthread; - char name[NG_NODESIZ]; - ng_h4_info_p sc = NULL; - int error; - - /* Super-user only */ - error = priv_check(td, PRIV_NETGRAPH_TTY); /* XXX */ - if (error != 0) - return (error); - - /* Initialize private struct */ - sc = malloc(sizeof(*sc), M_NETGRAPH_H4, M_NOWAIT|M_ZERO); - if (sc == NULL) - return (ENOMEM); - - sc->tp = tp; - sc->debug = NG_H4_WARN_LEVEL; - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - mtx_init(&sc->outq.ifq_mtx, "ng_h4 node+queue", NULL, MTX_DEF); - IFQ_SET_MAXLEN(&sc->outq, NG_H4_DEFAULTQLEN); - ng_callout_init(&sc->timo); - - NG_H4_LOCK(sc); - - /* Setup netgraph node */ - error = ng_make_node_common(&typestruct, &sc->node); - if (error != 0) { - NG_H4_UNLOCK(sc); - - printf("%s: Unable to create new node!\n", __func__); - - mtx_destroy(&sc->outq.ifq_mtx); - bzero(sc, sizeof(*sc)); - free(sc, M_NETGRAPH_H4); - - return (error); - } - - /* Assign node its name */ - snprintf(name, sizeof(name), "%s%d", typestruct.name, ng_h4_node ++); - - error = ng_name_node(sc->node, name); - if (error != 0) { - NG_H4_UNLOCK(sc); - - printf("%s: %s - node name exists?\n", __func__, name); - - NG_NODE_UNREF(sc->node); - mtx_destroy(&sc->outq.ifq_mtx); - bzero(sc, sizeof(*sc)); - free(sc, M_NETGRAPH_H4); - - return (error); - } - - /* Set back pointers */ - NG_NODE_SET_PRIVATE(sc->node, sc); - tp->t_lsc = (caddr_t) sc; - - /* The node has to be a WRITER because data can change node status */ - NG_NODE_FORCE_WRITER(sc->node); - - /* - * Pre-allocate cblocks to the an appropriate amount. - * I'm not sure what is appropriate. - */ - - ttyflush(tp, FREAD | FWRITE); - clist_alloc_cblocks(&tp->t_canq, 0, 0); - clist_alloc_cblocks(&tp->t_rawq, 0, 0); - clist_alloc_cblocks(&tp->t_outq, - MLEN + NG_H4_HIWATER, MLEN + NG_H4_HIWATER); - - NG_H4_UNLOCK(sc); - - return (error); -} /* ng_h4_open */ - -/* - * Line specific close routine, called from device close routine - * and from ttioctl. This causes the node to be destroyed as well. - */ - -static int -ng_h4_close(struct tty *tp, int flag) -{ - ng_h4_info_p sc = (ng_h4_info_p) tp->t_lsc; - - ttyflush(tp, FREAD | FWRITE); - clist_free_cblocks(&tp->t_outq); - - if (sc != NULL) { - NG_H4_LOCK(sc); - - if (callout_pending(&sc->timo)) - ng_uncallout(&sc->timo, sc->node); - - tp->t_lsc = NULL; - sc->dying = 1; - - NG_H4_UNLOCK(sc); - - ng_rmnode_self(sc->node); - } - - return (0); -} /* ng_h4_close */ - -/* - * Once the device has been turned into a node, we don't allow reading. - */ - -static int -ng_h4_read(struct tty *tp, struct uio *uio, int flag) -{ - return (EIO); -} /* ng_h4_read */ - -/* - * Once the device has been turned into a node, we don't allow writing. - */ - -static int -ng_h4_write(struct tty *tp, struct uio *uio, int flag) -{ - return (EIO); -} /* ng_h4_write */ - -/* - * We implement the NGIOCGINFO ioctl() defined in ng_message.h. - */ - -static int -ng_h4_ioctl(struct tty *tp, u_long cmd, caddr_t data, int flag, - struct thread *td) -{ - ng_h4_info_p sc = (ng_h4_info_p) tp->t_lsc; - int error = 0; - - if (sc == NULL) - return (ENXIO); - - NG_H4_LOCK(sc); - - switch (cmd) { - case NGIOCGINFO: -#undef NI -#define NI(x) ((struct nodeinfo *)(x)) - - bzero(data, sizeof(*NI(data))); - - if (NG_NODE_HAS_NAME(sc->node)) - strncpy(NI(data)->name, NG_NODE_NAME(sc->node), - sizeof(NI(data)->name) - 1); - - strncpy(NI(data)->type, sc->node->nd_type->name, - sizeof(NI(data)->type) - 1); - - NI(data)->id = (u_int32_t) ng_node2ID(sc->node); - NI(data)->hooks = NG_NODE_NUMHOOKS(sc->node); - break; - - default: - error = ENOIOCTL; - break; - } - - NG_H4_UNLOCK(sc); - - return (error); -} /* ng_h4_ioctl */ - -/* - * Receive data coming from the device. We get one character at a time, which - * is kindof silly. - */ - -static int -ng_h4_input(int c, struct tty *tp) -{ - ng_h4_info_p sc = (ng_h4_info_p) tp->t_lsc; - - if (sc == NULL || tp != sc->tp || - sc->node == NULL || NG_NODE_NOT_VALID(sc->node)) - return (0); - - NG_H4_LOCK(sc); - - /* Check for error conditions */ - if ((tp->t_state & TS_CONNECTED) == 0) { - NG_H4_INFO("%s: %s - no carrier\n", __func__, - NG_NODE_NAME(sc->node)); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - NG_H4_UNLOCK(sc); - - return (0); /* XXX Loss of synchronization here! */ - } - - /* Check for framing error or overrun on this char */ - if (c & TTY_ERRORMASK) { - NG_H4_ERR("%s: %s - line error %#x, c=%#x\n", __func__, - NG_NODE_NAME(sc->node), c & TTY_ERRORMASK, - c & TTY_CHARMASK); - - NG_H4_STAT_IERROR(sc->stat); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - NG_H4_UNLOCK(sc); - - return (0); /* XXX Loss of synchronization here! */ - } - - NG_H4_STAT_BYTES_RECV(sc->stat, 1); - - /* Append char to mbuf */ - if (sc->got >= sizeof(sc->ibuf)) { - NG_H4_ALERT("%s: %s - input buffer overflow, c=%#x, got=%d\n", - __func__, NG_NODE_NAME(sc->node), c & TTY_CHARMASK, - sc->got); - - NG_H4_STAT_IERROR(sc->stat); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - NG_H4_UNLOCK(sc); - - return (0); /* XXX Loss of synchronization here! */ - } - - sc->ibuf[sc->got ++] = (c & TTY_CHARMASK); - - NG_H4_INFO("%s: %s - got char %#x, want=%d, got=%d\n", __func__, - NG_NODE_NAME(sc->node), c, sc->want, sc->got); - - if (sc->got < sc->want) { - NG_H4_UNLOCK(sc); - - return (0); /* Wait for more */ - } - - switch (sc->state) { - /* Got packet indicator */ - case NG_H4_W4_PKT_IND: - NG_H4_INFO("%s: %s - got packet indicator %#x\n", __func__, - NG_NODE_NAME(sc->node), sc->ibuf[0]); - - sc->state = NG_H4_W4_PKT_HDR; - - /* - * Since packet indicator included in the packet header - * just set sc->want to sizeof(packet header). - */ - - switch (sc->ibuf[0]) { - case NG_HCI_ACL_DATA_PKT: - sc->want = sizeof(ng_hci_acldata_pkt_t); - break; - - case NG_HCI_SCO_DATA_PKT: - sc->want = sizeof(ng_hci_scodata_pkt_t); - break; - - case NG_HCI_EVENT_PKT: - sc->want = sizeof(ng_hci_event_pkt_t); - break; - - default: - NG_H4_WARN("%s: %s - ignoring unknown packet " \ - "type=%#x\n", __func__, NG_NODE_NAME(sc->node), - sc->ibuf[0]); - - NG_H4_STAT_IERROR(sc->stat); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - break; - } - break; - - /* Got packet header */ - case NG_H4_W4_PKT_HDR: - sc->state = NG_H4_W4_PKT_DATA; - - switch (sc->ibuf[0]) { - case NG_HCI_ACL_DATA_PKT: - c = le16toh(((ng_hci_acldata_pkt_t *) - (sc->ibuf))->length); - break; - - case NG_HCI_SCO_DATA_PKT: - c = ((ng_hci_scodata_pkt_t *)(sc->ibuf))->length; - break; - - case NG_HCI_EVENT_PKT: - c = ((ng_hci_event_pkt_t *)(sc->ibuf))->length; - break; - - default: - KASSERT((0), ("Invalid packet type=%#x\n", - sc->ibuf[0])); - break; - } - - NG_H4_INFO("%s: %s - got packet header, packet type=%#x, " \ - "packet size=%d, payload size=%d\n", __func__, - NG_NODE_NAME(sc->node), sc->ibuf[0], sc->got, c); - - if (c > 0) { - sc->want += c; - - /* - * Try to prevent possible buffer overrun - * - * XXX I'm *really* confused here. It turns out - * that Xircom card sends us packets with length - * greater then 512 bytes! This is greater then - * our old receive buffer (ibuf) size. In the same - * time the card demands from us *not* to send - * packets greater then 192 bytes. Weird! How the - * hell i should know how big *receive* buffer - * should be? For now increase receiving buffer - * size to 1K and add the following check. - */ - - if (sc->want >= sizeof(sc->ibuf)) { - int b; - - NG_H4_ALERT("%s: %s - packet too big for " \ - "buffer, type=%#x, got=%d, want=%d, " \ - "length=%d\n", __func__, - NG_NODE_NAME(sc->node), sc->ibuf[0], - sc->got, sc->want, c); - - NG_H4_ALERT("Packet header:\n"); - for (b = 0; b < sc->got; b++) - NG_H4_ALERT("%#x ", sc->ibuf[b]); - NG_H4_ALERT("\n"); - - /* Reset state */ - NG_H4_STAT_IERROR(sc->stat); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - } - - break; - } - - /* else FALLTHROUGH and deliver frame */ - /* XXX Is this true? Should we deliver empty frame? */ - - /* Got packet data */ - case NG_H4_W4_PKT_DATA: - NG_H4_INFO("%s: %s - got full packet, packet type=%#x, " \ - "packet size=%d\n", __func__, - NG_NODE_NAME(sc->node), sc->ibuf[0], sc->got); - - if (sc->hook != NULL && NG_HOOK_IS_VALID(sc->hook)) { - struct mbuf *m = NULL; - - MGETHDR(m, M_NOWAIT, MT_DATA); - if (m != NULL) { - m->m_pkthdr.len = 0; - - /* XXX m_copyback() is stupid */ - m->m_len = min(MHLEN, sc->got); - - m_copyback(m, 0, sc->got, sc->ibuf); - NG_SEND_DATA_ONLY(c, sc->hook, m); - } else { - NG_H4_ERR("%s: %s - could not get mbuf\n", - __func__, NG_NODE_NAME(sc->node)); - - NG_H4_STAT_IERROR(sc->stat); - } - } - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - NG_H4_STAT_PCKTS_RECV(sc->stat); - break; - - default: - KASSERT((0), ("Invalid H4 node state=%d", sc->state)); - break; - } - - NG_H4_UNLOCK(sc); - - return (0); -} /* ng_h4_input */ - -/* - * This is called when the device driver is ready for more output. Called from - * tty system. - */ - -static int -ng_h4_start(struct tty *tp) -{ - ng_h4_info_p sc = (ng_h4_info_p) tp->t_lsc; - struct mbuf *m = NULL; - int size; - - if (sc == NULL || tp != sc->tp || - sc->node == NULL || NG_NODE_NOT_VALID(sc->node)) - return (0); - -#if 0 - while (tp->t_outq.c_cc < NG_H4_HIWATER) { /* XXX 2.2 specific ? */ -#else - while (1) { -#endif - /* Remove first mbuf from queue */ - IF_DEQUEUE(&sc->outq, m); - if (m == NULL) - break; - - /* Send as much of it as possible */ - while (m != NULL) { - size = m->m_len - b_to_q(mtod(m, u_char *), - m->m_len, &tp->t_outq); - - NG_H4_LOCK(sc); - NG_H4_STAT_BYTES_SENT(sc->stat, size); - NG_H4_UNLOCK(sc); - - m->m_data += size; - m->m_len -= size; - if (m->m_len > 0) - break; /* device can't take no more */ - - m = m_free(m); - } - - /* Put remainder of mbuf chain (if any) back on queue */ - if (m != NULL) { - IF_PREPEND(&sc->outq, m); - break; - } - - /* Full packet has been sent */ - NG_H4_LOCK(sc); - NG_H4_STAT_PCKTS_SENT(sc->stat); - NG_H4_UNLOCK(sc); - } - - /* - * Call output process whether or not there is any output. We are - * being called in lieu of ttstart and must do what it would. - */ - - tt_oproc(sc->tp); - - /* - * This timeout is needed for operation on a pseudo-tty, because the - * pty code doesn't call pppstart after it has drained the t_outq. - */ - - NG_H4_LOCK(sc); - - if (!IFQ_IS_EMPTY(&sc->outq) && !callout_pending(&sc->timo)) - ng_callout(&sc->timo, sc->node, NULL, 1, - ng_h4_process_timeout, NULL, 0); - - NG_H4_UNLOCK(sc); - - return (0); -} /* ng_h4_start */ - -/***************************************************************************** - ***************************************************************************** - ** Netgraph node methods - ***************************************************************************** - *****************************************************************************/ - -/* - * Initialize a new node of this type. We only allow nodes to be created as - * a result of setting the line discipline on a tty, so always return an error - * if not. - */ - -static int -ng_h4_constructor(node_p node) -{ - return (EOPNOTSUPP); -} /* ng_h4_constructor */ - -/* - * Add a new hook. There can only be one. - */ - -static int -ng_h4_newhook(node_p node, hook_p hook, const char *name) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(node); - - if (strcmp(name, NG_H4_HOOK) != 0) - return (EINVAL); - - NG_H4_LOCK(sc); - - if (sc->hook != NULL) { - NG_H4_UNLOCK(sc); - return (EISCONN); - } - sc->hook = hook; - - NG_H4_UNLOCK(sc); - - return (0); -} /* ng_h4_newhook */ - -/* - * Connect hook. Just say yes. - */ - -static int -ng_h4_connect(hook_p hook) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(NG_HOOK_NODE(hook)); - - if (hook != sc->hook) - panic("%s: hook != sc->hook\n", __func__); - - NG_HOOK_FORCE_QUEUE(NG_HOOK_PEER(hook)); - NG_HOOK_FORCE_QUEUE(hook); - - return (0); -} /* ng_h4_connect */ - -/* - * Disconnect the hook - */ - -static int -ng_h4_disconnect(hook_p hook) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(NG_HOOK_NODE(hook)); - - /* - * We need to check for sc != NULL because we can be called from - * ng_h4_close() via ng_rmnode_self() - */ - - if (sc != NULL) { - if (hook != sc->hook) - panic("%s: hook != sc->hook\n", __func__); - - NG_H4_LOCK(sc); - - /* XXX do we have to untimeout and drain out queue? */ - if (callout_pending(&sc->timo)) - ng_uncallout(&sc->timo, sc->node); - - _IF_DRAIN(&sc->outq); - - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - - sc->hook = NULL; - - NG_H4_UNLOCK(sc); - } - - return (0); -} /* ng_h4_disconnect */ - -/* - * Remove this node. The does the netgraph portion of the shutdown. - * This should only be called indirectly from ng_h4_close(). - */ - -static int -ng_h4_shutdown(node_p node) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(node); - - NG_H4_LOCK(sc); - - if (!sc->dying) { - NG_H4_UNLOCK(sc); - - NG_NODE_REVIVE(node); /* we will persist */ - - return (EOPNOTSUPP); - } - - NG_H4_UNLOCK(sc); - - NG_NODE_SET_PRIVATE(node, NULL); - - _IF_DRAIN(&sc->outq); - - NG_NODE_UNREF(node); - mtx_destroy(&sc->outq.ifq_mtx); - bzero(sc, sizeof(*sc)); - free(sc, M_NETGRAPH_H4); - - return (0); -} /* ng_h4_shutdown */ - -/* - * Receive incoming data from Netgraph system. Put it on our - * output queue and start output if necessary. - */ - -static int -ng_h4_rcvdata(hook_p hook, item_p item) -{ - ng_h4_info_p sc = (ng_h4_info_p)NG_NODE_PRIVATE(NG_HOOK_NODE(hook)); - struct mbuf *m = NULL; - int qlen; - - if (sc == NULL) - return (EHOSTDOWN); - - if (hook != sc->hook) - panic("%s: hook != sc->hook\n", __func__); - - NGI_GET_M(item, m); - NG_FREE_ITEM(item); - - NG_H4_LOCK(sc); - - if (_IF_QFULL(&sc->outq)) { - NG_H4_ERR("%s: %s - dropping mbuf, len=%d\n", __func__, - NG_NODE_NAME(sc->node), m->m_pkthdr.len); - - NG_H4_STAT_OERROR(sc->stat); - - NG_H4_UNLOCK(sc); - - NG_FREE_M(m); - - return (ENOBUFS); - } - - NG_H4_INFO("%s: %s - queue mbuf, len=%d\n", __func__, - NG_NODE_NAME(sc->node), m->m_pkthdr.len); - - _IF_ENQUEUE(&sc->outq, m); - qlen = _IF_QLEN(&sc->outq); - - NG_H4_UNLOCK(sc); - - /* - * If qlen > 1, then we should already have a scheduled callout - */ - - if (qlen == 1) { - mtx_lock(&Giant); - ng_h4_start(sc->tp); - mtx_unlock(&Giant); - } - - return (0); -} /* ng_h4_rcvdata */ - -/* - * Receive control message - */ - -static int -ng_h4_rcvmsg(node_p node, item_p item, hook_p lasthook) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(node); - struct ng_mesg *msg = NULL, *resp = NULL; - int error = 0; - - if (sc == NULL) - return (EHOSTDOWN); - - NGI_GET_MSG(item, msg); - NG_H4_LOCK(sc); - - switch (msg->header.typecookie) { - case NGM_GENERIC_COOKIE: - switch (msg->header.cmd) { - case NGM_TEXT_STATUS: - NG_MKRESPONSE(resp, msg, NG_TEXTRESPONSE, M_NOWAIT); - if (resp == NULL) - error = ENOMEM; - else - snprintf(resp->data, NG_TEXTRESPONSE, - "Hook: %s\n" \ - "Debug: %d\n" \ - "State: %d\n" \ - "Queue: [have:%d,max:%d]\n" \ - "Input: [got:%d,want:%d]", - (sc->hook != NULL)? NG_H4_HOOK : "", - sc->debug, - sc->state, - _IF_QLEN(&sc->outq), - sc->outq.ifq_maxlen, - sc->got, - sc->want); - break; - - default: - error = EINVAL; - break; - } - break; - - case NGM_H4_COOKIE: - switch (msg->header.cmd) { - case NGM_H4_NODE_RESET: - _IF_DRAIN(&sc->outq); - sc->state = NG_H4_W4_PKT_IND; - sc->want = 1; - sc->got = 0; - break; - - case NGM_H4_NODE_GET_STATE: - NG_MKRESPONSE(resp, msg, sizeof(ng_h4_node_state_ep), - M_NOWAIT); - if (resp == NULL) - error = ENOMEM; - else - *((ng_h4_node_state_ep *)(resp->data)) = - sc->state; - break; - - case NGM_H4_NODE_GET_DEBUG: - NG_MKRESPONSE(resp, msg, sizeof(ng_h4_node_debug_ep), - M_NOWAIT); - if (resp == NULL) - error = ENOMEM; - else - *((ng_h4_node_debug_ep *)(resp->data)) = - sc->debug; - break; - - case NGM_H4_NODE_SET_DEBUG: - if (msg->header.arglen != sizeof(ng_h4_node_debug_ep)) - error = EMSGSIZE; - else - sc->debug = - *((ng_h4_node_debug_ep *)(msg->data)); - break; - - case NGM_H4_NODE_GET_QLEN: - NG_MKRESPONSE(resp, msg, sizeof(ng_h4_node_qlen_ep), - M_NOWAIT); - if (resp == NULL) - error = ENOMEM; - else - *((ng_h4_node_qlen_ep *)(resp->data)) = - sc->outq.ifq_maxlen; - break; - - case NGM_H4_NODE_SET_QLEN: - if (msg->header.arglen != sizeof(ng_h4_node_qlen_ep)) - error = EMSGSIZE; - else if (*((ng_h4_node_qlen_ep *)(msg->data)) <= 0) - error = EINVAL; - else - IFQ_SET_MAXLEN(&sc->outq, - *((ng_h4_node_qlen_ep *)(msg->data))); - break; - - case NGM_H4_NODE_GET_STAT: - NG_MKRESPONSE(resp, msg, sizeof(ng_h4_node_stat_ep), - M_NOWAIT); - if (resp == NULL) - error = ENOMEM; - else - bcopy(&sc->stat, resp->data, - sizeof(ng_h4_node_stat_ep)); - break; - - case NGM_H4_NODE_RESET_STAT: - NG_H4_STAT_RESET(sc->stat); - break; - - default: - error = EINVAL; - break; - } - break; - - default: - error = EINVAL; - break; - } - - NG_H4_UNLOCK(sc); - - NG_RESPOND_MSG(error, node, item, resp); - NG_FREE_MSG(msg); - - return (error); -} /* ng_h4_rcvmsg */ - -/* - * Timeout processing function. - * We still have data to output to the device, so try sending more. - */ - -static void -ng_h4_process_timeout(node_p node, hook_p hook, void *arg1, int arg2) -{ - ng_h4_info_p sc = (ng_h4_info_p) NG_NODE_PRIVATE(node); - - mtx_lock(&Giant); - ng_h4_start(sc->tp); - mtx_unlock(&Giant); -} /* ng_h4_process_timeout */ - -/* - * Handle loading and unloading for this node type - */ - -static int -ng_h4_mod_event(module_t mod, int event, void *data) -{ - static int ng_h4_ldisc; - int error = 0; - - switch (event) { - case MOD_LOAD: - /* Register line discipline */ - mtx_lock(&Giant); - ng_h4_ldisc = ldisc_register(H4DISC, &ng_h4_disc); - mtx_unlock(&Giant); - - if (ng_h4_ldisc < 0) { - printf("%s: can't register H4 line discipline\n", - __func__); - error = EIO; - } - break; - - case MOD_UNLOAD: - /* Unregister line discipline */ - mtx_lock(&Giant); - ldisc_deregister(ng_h4_ldisc); - mtx_unlock(&Giant); - break; - - default: - error = EOPNOTSUPP; - break; - } - - return (error); -} /* ng_h4_mod_event */ diff --git a/sys/netgraph/bluetooth/drivers/h4/ng_h4_prse.h b/sys/netgraph/bluetooth/drivers/h4/ng_h4_prse.h deleted file mode 100644 --- a/sys/netgraph/bluetooth/drivers/h4/ng_h4_prse.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * ng_h4_prse.h - */ - -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2001 Maksim Yevmenkin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: ng_h4_prse.h,v 1.4 2005/10/31 17:57:43 max Exp $ - * $FreeBSD$ - */ - -/*************************************************************************** - *************************************************************************** - ** ng_parse definitions for the H4 node - *************************************************************************** - ***************************************************************************/ - -#ifndef _NETGRAPH_H4_PRSE_H_ -#define _NETGRAPH_H4_PRSE_H_ - -/* - * H4 node command list - */ - -/* Stat info */ -static const struct ng_parse_struct_field ng_h4_stat_type_fields[] = -{ - { "pckts_recv", &ng_parse_uint32_type, }, - { "bytes_recv", &ng_parse_uint32_type, }, - { "pckts_sent", &ng_parse_uint32_type, }, - { "bytes_sent", &ng_parse_uint32_type, }, - { "oerrors", &ng_parse_uint32_type, }, - { "ierrors", &ng_parse_uint32_type, }, - { NULL, } -}; -static const struct ng_parse_type ng_h4_stat_type = { - &ng_parse_struct_type, - &ng_h4_stat_type_fields -}; - -static const struct ng_cmdlist ng_h4_cmdlist[] = { - { - NGM_H4_COOKIE, - NGM_H4_NODE_RESET, - "reset", - NULL, - NULL - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_GET_STATE, - "get_state", - NULL, - &ng_parse_uint16_type - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_GET_DEBUG, - "get_debug", - NULL, - &ng_parse_uint16_type - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_SET_DEBUG, - "set_debug", - &ng_parse_uint16_type, - NULL - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_GET_QLEN, - "get_qlen", - NULL, - &ng_parse_int32_type - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_SET_QLEN, - "set_qlen", - &ng_parse_int32_type, - NULL - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_GET_STAT, - "get_stat", - NULL, - &ng_h4_stat_type - }, - { - NGM_H4_COOKIE, - NGM_H4_NODE_RESET_STAT, - "reset_stat", - NULL, - NULL - }, - { 0, } -}; - -#endif /* ndef _NETGRAPH_H4_PRSE_H_ */ diff --git a/sys/netgraph/bluetooth/drivers/h4/ng_h4_var.h b/sys/netgraph/bluetooth/drivers/h4/ng_h4_var.h deleted file mode 100644 --- a/sys/netgraph/bluetooth/drivers/h4/ng_h4_var.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * ng_h4_var.h - */ - -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2001-2002 Maksim Yevmenkin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: ng_h4_var.h,v 1.5 2005/10/31 17:57:43 max Exp $ - * $FreeBSD$ - * - * Based on: - * --------- - * - * FreeBSD: src/sys/netgraph/ng_tty.h - * Author: Archie Cobbs - */ - -#ifndef _NETGRAPH_H4_VAR_H_ -#define _NETGRAPH_H4_VAR_H_ - -/* - * Malloc declaration - */ - -#ifndef NG_SEPARATE_MALLOC -MALLOC_DECLARE(M_NETGRAPH_H4); -#else -#define M_NETGRAPH_H4 M_NETGRAPH -#endif /* NG_SEPARATE_MALLOC */ - -/* - * Debug - */ - -#define NG_H4_ALERT if (sc->debug >= NG_H4_ALERT_LEVEL) printf -#define NG_H4_ERR if (sc->debug >= NG_H4_ERR_LEVEL) printf -#define NG_H4_WARN if (sc->debug >= NG_H4_WARN_LEVEL) printf -#define NG_H4_INFO if (sc->debug >= NG_H4_INFO_LEVEL) printf - -#define NG_H4_HIWATER 256 /* High water mark on output */ - -/* - * Per-node private info - */ - -typedef struct ng_h4_info { - struct tty *tp; /* Terminal device */ - node_p node; /* Netgraph node */ - - ng_h4_node_debug_ep debug; /* Debug level */ - ng_h4_node_state_ep state; /* State */ - - ng_h4_node_stat_ep stat; -#define NG_H4_STAT_PCKTS_SENT(s) (s).pckts_sent ++ -#define NG_H4_STAT_BYTES_SENT(s, n) (s).bytes_sent += (n) -#define NG_H4_STAT_PCKTS_RECV(s) (s).pckts_recv ++ -#define NG_H4_STAT_BYTES_RECV(s, n) (s).bytes_recv += (n) -#define NG_H4_STAT_OERROR(s) (s).oerrors ++ -#define NG_H4_STAT_IERROR(s) (s).ierrors ++ -#define NG_H4_STAT_RESET(s) bzero(&(s), sizeof((s))) - - struct ifqueue outq; /* Queue of outgoing mbuf's */ -#define NG_H4_DEFAULTQLEN 12 /* XXX max number of mbuf's in outq */ -#define NG_H4_LOCK(sc) IF_LOCK(&sc->outq) -#define NG_H4_UNLOCK(sc) IF_UNLOCK(&sc->outq) - -#define NG_H4_IBUF_SIZE 1024 /* XXX must be big enough to hold full - frame */ - u_int8_t ibuf[NG_H4_IBUF_SIZE]; /* Incoming data */ - u_int32_t got; /* Number of bytes we have received */ - u_int32_t want; /* Number of bytes we want to receive */ - - hook_p hook; /* Upstream hook */ - struct callout timo; /* See man timeout(9) */ - - u_int8_t dying; /* are we dying? */ -} ng_h4_info_t; -typedef ng_h4_info_t * ng_h4_info_p; - -#endif /* _NETGRAPH_H4_VAR_H_ */ diff --git a/sys/netgraph/bluetooth/include/ng_h4.h b/sys/netgraph/bluetooth/include/ng_h4.h deleted file mode 100644 --- a/sys/netgraph/bluetooth/include/ng_h4.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * ng_h4.h - */ - -/*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2001-2002 Maksim Yevmenkin - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $Id: ng_h4.h,v 1.1 2002/11/24 19:47:05 max Exp $ - * $FreeBSD$ - * - * Based on: - * --------- - * - * FreeBSD: src/sys/netgraph/ng_tty.h - * Author: Archie Cobbs - */ - -/* - * This file contains everything that application needs to know about - * Bluetooth HCI UART transport layer as per chapter H4 of the Bluetooth - * Specification Book v1.1. - * - * This file can be included by both kernel and userland applications. - */ - -#ifndef _NETGRAPH_H4_H_ -#define _NETGRAPH_H4_H_ - -/************************************************************************** - ************************************************************************** - ** Netgraph node hook name, type name and type cookie and commands - ************************************************************************** - **************************************************************************/ - -/* Hook name */ -#define NG_H4_HOOK "hook" - -/* Node type name and magic cookie */ -#define NG_H4_NODE_TYPE "h4" -#define NGM_H4_COOKIE 1013899512 - -/* Node states */ -#define NG_H4_W4_PKT_IND 1 /* Waiting for packet indicator */ -#define NG_H4_W4_PKT_HDR 2 /* Waiting for packet header */ -#define NG_H4_W4_PKT_DATA 3 /* Waiting for packet data */ - -/* Debug levels */ -#define NG_H4_ALERT_LEVEL 1 -#define NG_H4_ERR_LEVEL 2 -#define NG_H4_WARN_LEVEL 3 -#define NG_H4_INFO_LEVEL 4 - -/************************************************************************** - ************************************************************************** - ** H4 node command/event parameters - ************************************************************************** - **************************************************************************/ - -/* Reset node */ -#define NGM_H4_NODE_RESET 1 - -/* Get node state (see states above) */ -#define NGM_H4_NODE_GET_STATE 2 -typedef u_int16_t ng_h4_node_state_ep; - -/* Get/Set node debug level (see levels above) */ -#define NGM_H4_NODE_GET_DEBUG 3 -#define NGM_H4_NODE_SET_DEBUG 4 -typedef u_int16_t ng_h4_node_debug_ep; - -/* Get/Set max queue length for the node */ -#define NGM_H4_NODE_GET_QLEN 5 -#define NGM_H4_NODE_SET_QLEN 6 -typedef int32_t ng_h4_node_qlen_ep; - -/* Get node statistic */ -#define NGM_H4_NODE_GET_STAT 7 -typedef struct { - u_int32_t pckts_recv; /* # of packets received */ - u_int32_t bytes_recv; /* # of bytes received */ - u_int32_t pckts_sent; /* # of packets sent */ - u_int32_t bytes_sent; /* # of bytes sent */ - u_int32_t oerrors; /* # of output errors */ - u_int32_t ierrors; /* # of input errors */ -} ng_h4_node_stat_ep; - -/* Reset node statistic */ -#define NGM_H4_NODE_RESET_STAT 8 - -#endif /* _NETGRAPH_H4_H_ */