149901133SHans Petter Selasky 249901133SHans Petter Selasky /*- 349901133SHans Petter Selasky * Copyright (c) 2011 Anybots Inc 4*4d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 5718cf2ccSPedro F. Giffuni * 649901133SHans Petter Selasky * written by Akinori Furukoshi <moonlightakkiy@yahoo.ca> 749901133SHans Petter Selasky * - ucom part is based on u3g.c 849901133SHans Petter Selasky * 949901133SHans Petter Selasky * Redistribution and use in source and binary forms, with or without 1049901133SHans Petter Selasky * modification, are permitted provided that the following conditions 1149901133SHans Petter Selasky * are met: 1249901133SHans Petter Selasky * 1. Redistributions of source code must retain the above copyright 1349901133SHans Petter Selasky * notice, this list of conditions and the following disclaimer. 1449901133SHans Petter Selasky * 2. Redistributions in binary form must reproduce the above copyright 1549901133SHans Petter Selasky * notice, this list of conditions and the following disclaimer in the 1649901133SHans Petter Selasky * documentation and/or other materials provided with the distribution. 1749901133SHans Petter Selasky * 1849901133SHans Petter Selasky * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1949901133SHans Petter Selasky * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2049901133SHans Petter Selasky * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2149901133SHans Petter Selasky * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2249901133SHans Petter Selasky * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2349901133SHans Petter Selasky * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2449901133SHans Petter Selasky * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2549901133SHans Petter Selasky * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2649901133SHans Petter Selasky * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2749901133SHans Petter Selasky * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2849901133SHans Petter Selasky * SUCH DAMAGE. 2949901133SHans Petter Selasky */ 3049901133SHans Petter Selasky 3149901133SHans Petter Selasky #ifndef _IF_USEVAR_H_ 3249901133SHans Petter Selasky #define _IF_USEVAR_H_ 3349901133SHans Petter Selasky 3449901133SHans Petter Selasky #define USIE_DCD 0x0001 3549901133SHans Petter Selasky #define USIE_DSR 0x0002 3649901133SHans Petter Selasky #define USIE_DTR 0x0004 3749901133SHans Petter Selasky #define USIE_RI 0x0008 3849901133SHans Petter Selasky #define USIE_CTS 0x0100 3949901133SHans Petter Selasky #define USIE_RTS 0x0200 4049901133SHans Petter Selasky 4149901133SHans Petter Selasky #define USIE_HIP_FRM_CHR 0x7e 4249901133SHans Petter Selasky #define USIE_HIP_ESC_CHR 0x7d 4349901133SHans Petter Selasky #define USIE_HIP_IF 0 4449901133SHans Petter Selasky 4549901133SHans Petter Selasky #define USIE_HIPCNS_MIN 16 /* HIP + CnS + 2 framing char */ 4649901133SHans Petter Selasky #define USIE_HIPCNS_MAX 261 /* HIP + max CnS 255 + 2 framing char */ 4749901133SHans Petter Selasky 4849901133SHans Petter Selasky #define USIE_CNFG_INDEX 0 4949901133SHans Petter Selasky #define USIE_IFACE_INDEX 0 5049901133SHans Petter Selasky #define USIE_IFACE_MAX 12 5149901133SHans Petter Selasky #define USIE_BUFSIZE 2048 5249901133SHans Petter Selasky #define USIE_MTU_MAX 1500 5349901133SHans Petter Selasky #define USIE_RXSZ_MAX 4096 5449901133SHans Petter Selasky 5549901133SHans Petter Selasky /* USB control pipe request */ 5649901133SHans Petter Selasky #define USIE_POWER 0x00 5749901133SHans Petter Selasky #define USIE_FW_ATTR 0x06 5849901133SHans Petter Selasky #define USIE_NMEA 0x07 5949901133SHans Petter Selasky #define USIE_LINK_STATE 0x22 6049901133SHans Petter Selasky 6149901133SHans Petter Selasky /* firmware attr flags */ 6249901133SHans Petter Selasky #define USIE_PM_AUTO (1 << 1) 6349901133SHans Petter Selasky #define USIE_FW_DHCP (1 << 3) /* DHCP capable */ 6449901133SHans Petter Selasky 6549901133SHans Petter Selasky /* line state flags */ 6649901133SHans Petter Selasky #define USIE_LS_DTR (1 << 0) 6749901133SHans Petter Selasky #define USIE_LS_RTS (1 << 1) 6849901133SHans Petter Selasky 6949901133SHans Petter Selasky /* Host Interface Porotocol Header */ 7049901133SHans Petter Selasky struct usie_hip { 7149901133SHans Petter Selasky uint16_t len; 7249901133SHans Petter Selasky #define USIE_HIP_LEN_MASK 0x3fff 7349901133SHans Petter Selasky #define USIE_HIP_IP_LEN_MASK 0x07ff 7449901133SHans Petter Selasky 7549901133SHans Petter Selasky uint8_t id; 7649901133SHans Petter Selasky #define USIE_HIP_PAD (1 << 7) 7749901133SHans Petter Selasky #define USIE_HIP_MASK 0x7f 7849901133SHans Petter Selasky #define USIE_HIP_SYNC2M 0x20 /* host -> modem */ 7949901133SHans Petter Selasky #define USIE_HIP_DOWN 0x26 8049901133SHans Petter Selasky #define USIE_HIP_CNS2M 0x2b /* h -> m */ 8149901133SHans Petter Selasky #define USIE_HIP_CTX 0x3f 8249901133SHans Petter Selasky #define USIE_HIP_SYNC2H 0x60 /* h <- m */ 8349901133SHans Petter Selasky #define USIE_HIP_RESTR 0x62 8449901133SHans Petter Selasky #define USIE_HIP_RCGI 0x64 8549901133SHans Petter Selasky #define USIE_HIP_CNS2H 0x6b /* h <- m */ 8649901133SHans Petter Selasky #define USIE_HIP_UMTS 0x78 8749901133SHans Petter Selasky #define USIE_HIP_IP 0x7f 8849901133SHans Petter Selasky 8949901133SHans Petter Selasky uint8_t param; 9049901133SHans Petter Selasky } __packed __aligned(4); 9149901133SHans Petter Selasky 9249901133SHans Petter Selasky /* Control and Status Header */ 9349901133SHans Petter Selasky struct usie_cns { 9449901133SHans Petter Selasky uint16_t obj; /* object type */ 9549901133SHans Petter Selasky #define USIE_CNS_OB_RSSI 0x1001 /* read RSSI */ 9649901133SHans Petter Selasky #define USIE_CNS_OB_HW_DISABLE 0x1011 /* disable h/w */ 9749901133SHans Petter Selasky #define USIE_CNS_OB_PW_SW 0x1071 /* power on/off */ 9849901133SHans Petter Selasky #define USIE_CNS_OB_PROF_WRITE 0x7003 /* write profile */ 9949901133SHans Petter Selasky #define USIE_CNS_OB_LINK_UPDATE 0x7004 /* dis/connect */ 10049901133SHans Petter Selasky #define USIE_CNS_OB_PDP_READ 0x7006 /* read out IP addr */ 10149901133SHans Petter Selasky 10249901133SHans Petter Selasky uint8_t op; /* operation type */ 10349901133SHans Petter Selasky #define USIE_CNS_OP_ERR (1 << 7)/* | == error */ 10449901133SHans Petter Selasky #define USIE_CNS_OP_REQ 0x01 /* host -> modem */ 10549901133SHans Petter Selasky #define USIE_CNS_OP_RSP 0x02 /* h <- m */ 10649901133SHans Petter Selasky #define USIE_CNS_OP_SET 0x03 /* h -> m */ 10749901133SHans Petter Selasky #define USIE_CNS_OP_ACK 0x04 /* h <- m */ 10849901133SHans Petter Selasky #define USIE_CNS_OP_NOTIF_ON 0x05 /* h -> m */ 10949901133SHans Petter Selasky #define USIE_CNS_OP_RSP_ON 0x06 /* h <- m */ 11049901133SHans Petter Selasky #define USIE_CNS_OP_NOTIF 0x07 /* h <- m */ 11149901133SHans Petter Selasky #define USIE_CNS_OP_NOTIF_OFF 0x08 /* h -> m */ 11249901133SHans Petter Selasky #define USIE_CNS_OP_RSP_OFF 0x09 /* h <- m */ 11349901133SHans Petter Selasky #define USIE_CNS_OP_REQ_CHG 0x0a /* h -> m */ 11449901133SHans Petter Selasky #define USIE_CNS_OP_RSP_CHG 0x0b /* h <- m */ 11549901133SHans Petter Selasky 11649901133SHans Petter Selasky uint8_t rsv0; /* reserved, always '0' */ 11749901133SHans Petter Selasky uint32_t id; /* caller ID */ 11849901133SHans Petter Selasky /* 11949901133SHans Petter Selasky * .id is to identify calling functions 12049901133SHans Petter Selasky * h/w responses with the same .id used in request. Only '0' is reserved 12149901133SHans Petter Selasky * for notification (asynchronous message generated by h/w without any 12249901133SHans Petter Selasky * request). All other values are user defineable. 12349901133SHans Petter Selasky */ 12449901133SHans Petter Selasky #define USIE_CNS_ID_NOTIF 0x00000000 /* reserved */ 12549901133SHans Petter Selasky #define USIE_CNS_ID_INIT 0x00000001 12649901133SHans Petter Selasky #define USIE_CNS_ID_STOP 0x00000002 12749901133SHans Petter Selasky #define USIE_CNS_ID_DNS 0x00000003 12849901133SHans Petter Selasky #define USIE_CNS_ID_RSSI 0x00000004 12949901133SHans Petter Selasky 13049901133SHans Petter Selasky uint8_t rsv1; /* reserved, always '0' */ 13149901133SHans Petter Selasky uint8_t len; /* length of param */ 13249901133SHans Petter Selasky } __packed; 13349901133SHans Petter Selasky 13449901133SHans Petter Selasky /* 13549901133SHans Petter Selasky * CnS param attached to struct usie_cns 13649901133SHans Petter Selasky * usie_cns.len is total size of this param 13749901133SHans Petter Selasky * max 255 13849901133SHans Petter Selasky */ 13949901133SHans Petter Selasky #define USIE_CNS_PM_UP 0x01 14049901133SHans Petter Selasky #define USIE_CNS_PM_DOWN 0x00 14149901133SHans Petter Selasky 14249901133SHans Petter Selasky /* Link Sense Indication data structure */ 14349901133SHans Petter Selasky struct usie_lsi { 14449901133SHans Petter Selasky uint8_t proto; 14549901133SHans Petter Selasky #define USIE_LSI_UMTS 0x01 14649901133SHans Petter Selasky 14749901133SHans Petter Selasky uint8_t pad0; 14849901133SHans Petter Selasky uint16_t len; 14949901133SHans Petter Selasky uint8_t area; 15049901133SHans Petter Selasky #define USIE_LSI_AREA_NO 0x00 15149901133SHans Petter Selasky #define USIE_LSI_AREA_NODATA 0x01 15249901133SHans Petter Selasky 15349901133SHans Petter Selasky uint8_t pad1[41]; 15449901133SHans Petter Selasky uint8_t state; 15549901133SHans Petter Selasky #define USIE_LSI_STATE_IDLE 0x00 15649901133SHans Petter Selasky 15749901133SHans Petter Selasky uint8_t pad2[33]; 15849901133SHans Petter Selasky uint8_t type; 15949901133SHans Petter Selasky #define USIE_LSI_IP4 0x00 16049901133SHans Petter Selasky 16149901133SHans Petter Selasky uint8_t pdp_addr_len; /* PDP addr */ 16249901133SHans Petter Selasky uint8_t pdp_addr[16]; 16349901133SHans Petter Selasky uint8_t pad3[23]; 16449901133SHans Petter Selasky uint8_t dns1_addr_len; /* DNS addr */ 16549901133SHans Petter Selasky uint8_t dns1_addr[16]; 16649901133SHans Petter Selasky uint8_t dns2_addr_len; 16749901133SHans Petter Selasky uint8_t dns2_addr[16]; 16849901133SHans Petter Selasky uint8_t wins1_addr_len; /* Wins addr */ 16949901133SHans Petter Selasky uint8_t wins1_addr[16]; 17049901133SHans Petter Selasky uint8_t wins2_addr_len; 17149901133SHans Petter Selasky uint8_t wins2_addr[16]; 17249901133SHans Petter Selasky uint8_t pad4[4]; 17349901133SHans Petter Selasky uint8_t gw_addr_len; /* GW addr */ 17449901133SHans Petter Selasky uint8_t gw_addr[16]; 17549901133SHans Petter Selasky uint8_t rsv[8]; 17649901133SHans Petter Selasky } __packed; 17749901133SHans Petter Selasky 17849901133SHans Petter Selasky struct usie_net_info { 17949901133SHans Petter Selasky uint8_t addr_len; 18049901133SHans Petter Selasky uint8_t pdp_addr[16]; 18149901133SHans Petter Selasky uint8_t dns1_addr[16]; 18249901133SHans Petter Selasky uint8_t dns2_addr[16]; 18349901133SHans Petter Selasky uint8_t gw_addr[16]; 18449901133SHans Petter Selasky } __packed; 18549901133SHans Petter Selasky 18649901133SHans Petter Selasky /* Tx/Rx IP packet descriptor */ 18749901133SHans Petter Selasky struct usie_desc { 18849901133SHans Petter Selasky struct usie_hip hip; 18949901133SHans Petter Selasky uint16_t desc_type; 19049901133SHans Petter Selasky #define USIE_TYPE_MASK 0x03ff 19149901133SHans Petter Selasky #define USIE_IP_TX 0x0002 19249901133SHans Petter Selasky #define USIE_IP_RX 0x0202 19349901133SHans Petter Selasky 19449901133SHans Petter Selasky struct ether_header ethhdr; 19549901133SHans Petter Selasky } __packed; 19649901133SHans Petter Selasky 19749901133SHans Petter Selasky enum { 19849901133SHans Petter Selasky USIE_UC_STATUS, 19949901133SHans Petter Selasky USIE_UC_RX, 20049901133SHans Petter Selasky USIE_UC_TX, 20149901133SHans Petter Selasky USIE_UC_N_XFER 20249901133SHans Petter Selasky }; 20349901133SHans Petter Selasky 20449901133SHans Petter Selasky enum { 20549901133SHans Petter Selasky USIE_IF_STATUS, 20649901133SHans Petter Selasky USIE_IF_RX, 20749901133SHans Petter Selasky USIE_IF_TX, 20849901133SHans Petter Selasky USIE_IF_N_XFER 20949901133SHans Petter Selasky }; 21049901133SHans Petter Selasky 21149901133SHans Petter Selasky struct usie_softc { 21249901133SHans Petter Selasky struct ucom_super_softc sc_super_ucom; 21349901133SHans Petter Selasky 21449901133SHans Petter Selasky #define USIE_UCOM_MAX 6 21549901133SHans Petter Selasky struct ucom_softc sc_ucom[USIE_UCOM_MAX]; 21649901133SHans Petter Selasky uint8_t sc_uc_ifnum[USIE_UCOM_MAX]; 21749901133SHans Petter Selasky 21849901133SHans Petter Selasky struct mtx sc_mtx; 21949901133SHans Petter Selasky 22049901133SHans Petter Selasky struct task sc_if_status_task; 22149901133SHans Petter Selasky struct task sc_if_sync_task; 22249901133SHans Petter Selasky struct usb_callout sc_if_sync_ch; 22349901133SHans Petter Selasky 22449901133SHans Petter Selasky struct usie_net_info sc_net; 22549901133SHans Petter Selasky 22649901133SHans Petter Selasky struct usie_desc sc_txd; 22749901133SHans Petter Selasky 22849901133SHans Petter Selasky struct usb_xfer *sc_uc_xfer[USIE_UCOM_MAX][USIE_UC_N_XFER]; 22949901133SHans Petter Selasky struct usb_xfer *sc_if_xfer[USIE_IF_N_XFER]; 23049901133SHans Petter Selasky 231935b194dSJustin Hibbits if_t sc_ifp; 23249901133SHans Petter Selasky struct usb_device *sc_udev; 23349901133SHans Petter Selasky device_t sc_dev; 23449901133SHans Petter Selasky 23549901133SHans Petter Selasky struct mbuf *sc_rxm; 23649901133SHans Petter Selasky 23749901133SHans Petter Selasky uint16_t sc_if_ifnum; 23849901133SHans Petter Selasky 23949901133SHans Petter Selasky int16_t sc_rssi; 24049901133SHans Petter Selasky 24149901133SHans Petter Selasky uint8_t sc_msr; 24249901133SHans Petter Selasky uint8_t sc_lsr; 24349901133SHans Petter Selasky uint8_t sc_nucom; 24449901133SHans Petter Selasky 24549901133SHans Petter Selasky uint8_t sc_resp_temp[USIE_BUFSIZE] __aligned(4); 24649901133SHans Petter Selasky uint8_t sc_status_temp[USIE_BUFSIZE] __aligned(4); 24749901133SHans Petter Selasky }; 24849901133SHans Petter Selasky 24949901133SHans Petter Selasky /* Some code assumptions */ 25049901133SHans Petter Selasky 25149901133SHans Petter Selasky extern uint8_t usie_assert[((sizeof(struct usie_hip) + 25249901133SHans Petter Selasky sizeof(struct usie_lsi) + 1) <= USIE_BUFSIZE) ? 1 : -1]; 25349901133SHans Petter Selasky 25449901133SHans Petter Selasky extern uint8_t ucdc_assert[(sizeof(struct usb_cdc_notification) 25549901133SHans Petter Selasky >= 16) ? 1 : -1]; 25649901133SHans Petter Selasky 25749901133SHans Petter Selasky #endif /* _IF_USEVAR_H_ */ 258