1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Definitions for USB serial mobile broadband cards 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun #ifndef __LINUX_USB_USB_WWAN 7*4882a593Smuzhiyun #define __LINUX_USB_USB_WWAN 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun extern void usb_wwan_dtr_rts(struct usb_serial_port *port, int on); 10*4882a593Smuzhiyun extern int usb_wwan_open(struct tty_struct *tty, struct usb_serial_port *port); 11*4882a593Smuzhiyun extern void usb_wwan_close(struct usb_serial_port *port); 12*4882a593Smuzhiyun extern int usb_wwan_port_probe(struct usb_serial_port *port); 13*4882a593Smuzhiyun extern int usb_wwan_port_remove(struct usb_serial_port *port); 14*4882a593Smuzhiyun extern int usb_wwan_write_room(struct tty_struct *tty); 15*4882a593Smuzhiyun extern int usb_wwan_tiocmget(struct tty_struct *tty); 16*4882a593Smuzhiyun extern int usb_wwan_tiocmset(struct tty_struct *tty, 17*4882a593Smuzhiyun unsigned int set, unsigned int clear); 18*4882a593Smuzhiyun extern int usb_wwan_get_serial_info(struct tty_struct *tty, 19*4882a593Smuzhiyun struct serial_struct *ss); 20*4882a593Smuzhiyun extern int usb_wwan_set_serial_info(struct tty_struct *tty, 21*4882a593Smuzhiyun struct serial_struct *ss); 22*4882a593Smuzhiyun extern int usb_wwan_write(struct tty_struct *tty, struct usb_serial_port *port, 23*4882a593Smuzhiyun const unsigned char *buf, int count); 24*4882a593Smuzhiyun extern int usb_wwan_chars_in_buffer(struct tty_struct *tty); 25*4882a593Smuzhiyun #ifdef CONFIG_PM 26*4882a593Smuzhiyun extern int usb_wwan_suspend(struct usb_serial *serial, pm_message_t message); 27*4882a593Smuzhiyun extern int usb_wwan_resume(struct usb_serial *serial); 28*4882a593Smuzhiyun #endif 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun /* per port private data */ 31*4882a593Smuzhiyun 32*4882a593Smuzhiyun #define N_IN_URB 4 33*4882a593Smuzhiyun #define N_OUT_URB 4 34*4882a593Smuzhiyun #define IN_BUFLEN 4096 35*4882a593Smuzhiyun #define OUT_BUFLEN 4096 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun struct usb_wwan_intf_private { 38*4882a593Smuzhiyun spinlock_t susp_lock; 39*4882a593Smuzhiyun unsigned int suspended:1; 40*4882a593Smuzhiyun unsigned int use_send_setup:1; 41*4882a593Smuzhiyun unsigned int use_zlp:1; 42*4882a593Smuzhiyun int in_flight; 43*4882a593Smuzhiyun unsigned int open_ports; 44*4882a593Smuzhiyun void *private; 45*4882a593Smuzhiyun }; 46*4882a593Smuzhiyun 47*4882a593Smuzhiyun struct usb_wwan_port_private { 48*4882a593Smuzhiyun /* Input endpoints and buffer for this port */ 49*4882a593Smuzhiyun struct urb *in_urbs[N_IN_URB]; 50*4882a593Smuzhiyun u8 *in_buffer[N_IN_URB]; 51*4882a593Smuzhiyun /* Output endpoints and buffer for this port */ 52*4882a593Smuzhiyun struct urb *out_urbs[N_OUT_URB]; 53*4882a593Smuzhiyun u8 *out_buffer[N_OUT_URB]; 54*4882a593Smuzhiyun unsigned long out_busy; /* Bit vector of URBs in use */ 55*4882a593Smuzhiyun struct usb_anchor delayed; 56*4882a593Smuzhiyun 57*4882a593Smuzhiyun /* Settings for the port */ 58*4882a593Smuzhiyun int rts_state; /* Handshaking pins (outputs) */ 59*4882a593Smuzhiyun int dtr_state; 60*4882a593Smuzhiyun int cts_state; /* Handshaking pins (inputs) */ 61*4882a593Smuzhiyun int dsr_state; 62*4882a593Smuzhiyun int dcd_state; 63*4882a593Smuzhiyun int ri_state; 64*4882a593Smuzhiyun 65*4882a593Smuzhiyun unsigned long tx_start_time[N_OUT_URB]; 66*4882a593Smuzhiyun }; 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #endif /* __LINUX_USB_USB_WWAN */ 69