Lines Matching refs:garmin_data_p

170 static int gsp_next_packet(struct garmin_data *garmin_data_p);
260 static int pkt_add(struct garmin_data *garmin_data_p, in pkt_add() argument
278 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_add()
279 garmin_data_p->flags |= FLAGS_QUEUING; in pkt_add()
280 result = list_empty(&garmin_data_p->pktlist); in pkt_add()
281 pkt->seq = garmin_data_p->seq_counter++; in pkt_add()
282 list_add_tail(&pkt->list, &garmin_data_p->pktlist); in pkt_add()
283 state = garmin_data_p->state; in pkt_add()
284 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_add()
286 dev_dbg(&garmin_data_p->port->dev, in pkt_add()
293 gsp_next_packet(garmin_data_p); in pkt_add()
300 static struct garmin_packet *pkt_pop(struct garmin_data *garmin_data_p) in pkt_pop() argument
305 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_pop()
306 if (!list_empty(&garmin_data_p->pktlist)) { in pkt_pop()
307 result = (struct garmin_packet *)garmin_data_p->pktlist.next; in pkt_pop()
310 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_pop()
316 static void pkt_clear(struct garmin_data *garmin_data_p) in pkt_clear() argument
321 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_clear()
322 while (!list_empty(&garmin_data_p->pktlist)) { in pkt_clear()
323 result = (struct garmin_packet *)garmin_data_p->pktlist.next; in pkt_clear()
327 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_clear()
336 static int gsp_send_ack(struct garmin_data *garmin_data_p, __u8 pkt_id) in gsp_send_ack() argument
343 dev_dbg(&garmin_data_p->port->dev, "%s - pkt-id: 0x%X.\n", __func__, in gsp_send_ack()
366 send_to_tty(garmin_data_p->port, pkt, l); in gsp_send_ack()
382 static int gsp_rec_packet(struct garmin_data *garmin_data_p, int count) in gsp_rec_packet() argument
384 struct device *dev = &garmin_data_p->port->dev; in gsp_rec_packet()
386 const __u8 *recpkt = garmin_data_p->inbuffer+GSP_INITIAL_OFFSET; in gsp_rec_packet()
387 __le32 *usbdata = (__le32 *) garmin_data_p->inbuffer; in gsp_rec_packet()
393 usb_serial_debug_data(&garmin_data_p->port->dev, __func__, in gsp_rec_packet()
427 garmin_write_bulk(garmin_data_p->port, garmin_data_p->inbuffer, in gsp_rec_packet()
432 if (isAbortTrfCmnd(garmin_data_p->inbuffer)) { in gsp_rec_packet()
433 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_rec_packet()
434 garmin_data_p->flags |= FLAGS_DROP_DATA; in gsp_rec_packet()
435 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_rec_packet()
436 pkt_clear(garmin_data_p); in gsp_rec_packet()
462 static int gsp_receive(struct garmin_data *garmin_data_p, in gsp_receive() argument
465 struct device *dev = &garmin_data_p->port->dev; in gsp_receive()
479 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_receive()
480 dest = garmin_data_p->inbuffer; in gsp_receive()
481 size = garmin_data_p->insize; in gsp_receive()
482 dleSeen = garmin_data_p->flags & FLAGS_GSP_DLESEEN; in gsp_receive()
483 skip = garmin_data_p->flags & FLAGS_GSP_SKIP; in gsp_receive()
484 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_receive()
523 gsp_rec_packet(garmin_data_p, size); in gsp_receive()
550 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_receive()
552 garmin_data_p->insize = size; in gsp_receive()
556 garmin_data_p->flags |= FLAGS_GSP_SKIP; in gsp_receive()
558 garmin_data_p->flags &= ~FLAGS_GSP_SKIP; in gsp_receive()
561 garmin_data_p->flags |= FLAGS_GSP_DLESEEN; in gsp_receive()
563 garmin_data_p->flags &= ~FLAGS_GSP_DLESEEN; in gsp_receive()
565 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_receive()
568 if (gsp_next_packet(garmin_data_p) > 0) in gsp_receive()
569 garmin_data_p->state = STATE_ACTIVE; in gsp_receive()
571 garmin_data_p->state = STATE_GSP_WAIT_DATA; in gsp_receive()
585 static int gsp_send(struct garmin_data *garmin_data_p, in gsp_send() argument
588 struct device *dev = &garmin_data_p->port->dev; in gsp_send()
598 garmin_data_p->state, count); in gsp_send()
600 k = garmin_data_p->outsize; in gsp_send()
603 garmin_data_p->outsize = 0; in gsp_send()
607 memcpy(garmin_data_p->outbuffer+k, buf, count); in gsp_send()
609 garmin_data_p->outsize = k; in gsp_send()
612 pktid = getPacketId(garmin_data_p->outbuffer); in gsp_send()
613 datalen = getDataLength(garmin_data_p->outbuffer); in gsp_send()
625 usb_serial_debug_data(&garmin_data_p->port->dev, __func__, k, in gsp_send()
626 garmin_data_p->outbuffer); in gsp_send()
628 garmin_data_p->outsize = 0; in gsp_send()
630 if (getLayerId(garmin_data_p->outbuffer) != GARMIN_LAYERID_APPL) { in gsp_send()
632 getLayerId(garmin_data_p->outbuffer)); in gsp_send()
649 src = garmin_data_p->outbuffer+GARMIN_PKTHDR_LENGTH; in gsp_send()
655 src = garmin_data_p->outbuffer+GARMIN_PKTHDR_LENGTH; in gsp_send()
659 dst = garmin_data_p->outbuffer+GPS_OUT_BUFSIZ-datalen; in gsp_send()
664 dst = garmin_data_p->outbuffer; in gsp_send()
689 i = dst-garmin_data_p->outbuffer; in gsp_send()
691 send_to_tty(garmin_data_p->port, garmin_data_p->outbuffer, i); in gsp_send()
693 garmin_data_p->pkt_id = pktid; in gsp_send()
694 garmin_data_p->state = STATE_WAIT_TTY_ACK; in gsp_send()
703 static int gsp_next_packet(struct garmin_data *garmin_data_p) in gsp_next_packet() argument
708 while ((pkt = pkt_pop(garmin_data_p)) != NULL) { in gsp_next_packet()
709 dev_dbg(&garmin_data_p->port->dev, "%s - next pkt: %d\n", __func__, pkt->seq); in gsp_next_packet()
710 result = gsp_send(garmin_data_p, pkt->data, pkt->size); in gsp_next_packet()
735 static int nat_receive(struct garmin_data *garmin_data_p, in nat_receive() argument
746 if (garmin_data_p->insize >= GARMIN_PKTHDR_LENGTH) in nat_receive()
748 +getDataLength(garmin_data_p->inbuffer); in nat_receive()
755 dev_dbg(&garmin_data_p->port->dev, in nat_receive()
758 garmin_data_p->insize = 0; in nat_receive()
762 len -= garmin_data_p->insize; in nat_receive()
766 dest = garmin_data_p->inbuffer in nat_receive()
767 + garmin_data_p->insize; in nat_receive()
769 garmin_data_p->insize += len; in nat_receive()
775 if (garmin_data_p->insize >= GARMIN_PKTHDR_LENGTH) { in nat_receive()
777 getDataLength(garmin_data_p->inbuffer); in nat_receive()
778 if (garmin_data_p->insize >= len) { in nat_receive()
779 garmin_write_bulk(garmin_data_p->port, in nat_receive()
780 garmin_data_p->inbuffer, in nat_receive()
782 garmin_data_p->insize = 0; in nat_receive()
786 if (isAbortTrfCmnd(garmin_data_p->inbuffer)) { in nat_receive()
787 spin_lock_irqsave(&garmin_data_p->lock, in nat_receive()
789 garmin_data_p->flags |= FLAGS_DROP_DATA; in nat_receive()
791 &garmin_data_p->lock, flags); in nat_receive()
792 pkt_clear(garmin_data_p); in nat_receive()
807 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in priv_status_resp() local
808 __le32 *pkt = (__le32 *)garmin_data_p->privpkt; in priv_status_resp()
814 pkt[4] = __cpu_to_le32(garmin_data_p->mode); in priv_status_resp()
815 pkt[5] = __cpu_to_le32(garmin_data_p->serial_num); in priv_status_resp()
829 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in process_resetdev_request() local
831 spin_lock_irqsave(&garmin_data_p->lock, flags); in process_resetdev_request()
832 garmin_data_p->flags &= ~(CLEAR_HALT_REQUIRED); in process_resetdev_request()
833 garmin_data_p->state = STATE_RESET; in process_resetdev_request()
834 garmin_data_p->serial_num = 0; in process_resetdev_request()
835 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in process_resetdev_request()
851 static int garmin_clear(struct garmin_data *garmin_data_p) in garmin_clear() argument
856 pkt_clear(garmin_data_p); in garmin_clear()
858 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_clear()
859 garmin_data_p->insize = 0; in garmin_clear()
860 garmin_data_p->outsize = 0; in garmin_clear()
861 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_clear()
869 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_init_session() local
887 garmin_data_p->state = STATE_ACTIVE; in garmin_init_session()
899 usb_kill_anchored_urbs(&garmin_data_p->write_urbs); in garmin_init_session()
911 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_open() local
913 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_open()
914 garmin_data_p->mode = initial_mode; in garmin_open()
915 garmin_data_p->count = 0; in garmin_open()
916 garmin_data_p->flags &= FLAGS_SESSION_REPLY1_SEEN; in garmin_open()
917 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_open()
922 if (garmin_data_p->state == STATE_RESET) in garmin_open()
925 garmin_data_p->state = STATE_ACTIVE; in garmin_open()
932 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_close() local
935 __func__, garmin_data_p->mode, garmin_data_p->state, in garmin_close()
936 garmin_data_p->flags); in garmin_close()
938 garmin_clear(garmin_data_p); in garmin_close()
942 usb_kill_anchored_urbs(&garmin_data_p->write_urbs); in garmin_close()
945 if (garmin_data_p->state != STATE_RESET) in garmin_close()
946 garmin_data_p->state = STATE_DISCONNECTED; in garmin_close()
955 struct garmin_data *garmin_data_p = in garmin_write_bulk_callback() local
960 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write_bulk_callback()
961 gsp_send_ack(garmin_data_p, in garmin_write_bulk_callback()
982 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write_bulk() local
987 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_write_bulk()
988 garmin_data_p->flags &= ~FLAGS_DROP_DATA; in garmin_write_bulk()
989 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_write_bulk()
1013 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_write_bulk()
1014 garmin_data_p->flags |= APP_REQ_SEEN; in garmin_write_bulk()
1015 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_write_bulk()
1017 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write_bulk()
1018 pkt_clear(garmin_data_p); in garmin_write_bulk()
1019 garmin_data_p->state = STATE_GSP_WAIT_DATA; in garmin_write_bulk()
1024 usb_anchor_urb(urb, &garmin_data_p->write_urbs); in garmin_write_bulk()
1047 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write() local
1048 __le32 *privpkt = (__le32 *)garmin_data_p->privpkt; in garmin_write()
1052 if (garmin_data_p->state == STATE_RESET) in garmin_write()
1061 memcpy(garmin_data_p->privpkt, buf, len); in garmin_write()
1063 pktsiz = getDataLength(garmin_data_p->privpkt); in garmin_write()
1064 pktid = getPacketId(garmin_data_p->privpkt); in garmin_write()
1067 getLayerId(garmin_data_p->privpkt) == in garmin_write()
1074 garmin_clear(garmin_data_p); in garmin_write()
1080 garmin_data_p->mode = __le32_to_cpu(privpkt[3]); in garmin_write()
1082 __func__, garmin_data_p->mode); in garmin_write()
1099 garmin_data_p->mode); in garmin_write()
1106 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write()
1107 return gsp_receive(garmin_data_p, buf, count); in garmin_write()
1109 return nat_receive(garmin_data_p, buf, count); in garmin_write()
1120 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write_room() local
1121 return GPS_OUT_BUFSIZ-garmin_data_p->outsize; in garmin_write_room()
1125 static void garmin_read_process(struct garmin_data *garmin_data_p, in garmin_read_process() argument
1131 if (garmin_data_p->flags & FLAGS_DROP_DATA) { in garmin_read_process()
1133 dev_dbg(&garmin_data_p->port->dev, "%s - pkt dropped\n", __func__); in garmin_read_process()
1134 } else if (garmin_data_p->state != STATE_DISCONNECTED && in garmin_read_process()
1135 garmin_data_p->state != STATE_RESET) { in garmin_read_process()
1140 if (garmin_data_p->flags & FLAGS_QUEUING) { in garmin_read_process()
1141 pkt_add(garmin_data_p, data, data_length); in garmin_read_process()
1145 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_process()
1146 garmin_data_p->flags |= APP_RESP_SEEN; in garmin_read_process()
1147 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_process()
1149 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_read_process()
1150 pkt_add(garmin_data_p, data, data_length); in garmin_read_process()
1152 send_to_tty(garmin_data_p->port, data, in garmin_read_process()
1165 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_read_bulk_callback() local
1178 garmin_read_process(garmin_data_p, data, urb->actual_length, 1); in garmin_read_bulk_callback()
1181 (garmin_data_p->flags & FLAGS_BULK_IN_RESTART) != 0) { in garmin_read_bulk_callback()
1182 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1183 garmin_data_p->flags &= ~FLAGS_BULK_IN_RESTART; in garmin_read_bulk_callback()
1184 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1192 if ((garmin_data_p->flags & FLAGS_THROTTLED) == 0) { in garmin_read_bulk_callback()
1201 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1202 garmin_data_p->flags &= ~FLAGS_BULK_IN_ACTIVE; in garmin_read_bulk_callback()
1203 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1213 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_read_int_callback() local
1243 if ((garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE) == 0) { in garmin_read_int_callback()
1252 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1253 garmin_data_p->flags |= FLAGS_BULK_IN_ACTIVE; in garmin_read_int_callback()
1254 spin_unlock_irqrestore(&garmin_data_p->lock, in garmin_read_int_callback()
1259 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1260 garmin_data_p->flags |= FLAGS_BULK_IN_RESTART; in garmin_read_int_callback()
1261 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1268 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1269 garmin_data_p->flags |= FLAGS_SESSION_REPLY1_SEEN; in garmin_read_int_callback()
1270 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1273 garmin_data_p->serial_num = __le32_to_cpup( in garmin_read_int_callback()
1277 __func__, garmin_data_p->serial_num); in garmin_read_int_callback()
1280 garmin_read_process(garmin_data_p, data, urb->actual_length, 0); in garmin_read_int_callback()
1295 static int garmin_flush_queue(struct garmin_data *garmin_data_p) in garmin_flush_queue() argument
1300 if ((garmin_data_p->flags & FLAGS_THROTTLED) == 0) { in garmin_flush_queue()
1301 pkt = pkt_pop(garmin_data_p); in garmin_flush_queue()
1303 send_to_tty(garmin_data_p->port, pkt->data, pkt->size); in garmin_flush_queue()
1305 mod_timer(&garmin_data_p->timer, (1)+jiffies); in garmin_flush_queue()
1308 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_flush_queue()
1309 garmin_data_p->flags &= ~FLAGS_QUEUING; in garmin_flush_queue()
1310 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_flush_queue()
1320 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_throttle() local
1324 spin_lock_irq(&garmin_data_p->lock); in garmin_throttle()
1325 garmin_data_p->flags |= FLAGS_QUEUING|FLAGS_THROTTLED; in garmin_throttle()
1326 spin_unlock_irq(&garmin_data_p->lock); in garmin_throttle()
1333 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_unthrottle() local
1336 spin_lock_irq(&garmin_data_p->lock); in garmin_unthrottle()
1337 garmin_data_p->flags &= ~FLAGS_THROTTLED; in garmin_unthrottle()
1338 spin_unlock_irq(&garmin_data_p->lock); in garmin_unthrottle()
1342 if (garmin_data_p->mode == MODE_NATIVE) in garmin_unthrottle()
1343 garmin_flush_queue(garmin_data_p); in garmin_unthrottle()
1345 if ((garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE) != 0) { in garmin_unthrottle()
1361 struct garmin_data *garmin_data_p = from_timer(garmin_data_p, t, timer); in timeout_handler() local
1364 if (garmin_data_p->mode == MODE_NATIVE) in timeout_handler()
1365 if (garmin_data_p->flags & FLAGS_QUEUING) in timeout_handler()
1366 garmin_flush_queue(garmin_data_p); in timeout_handler()
1374 struct garmin_data *garmin_data_p; in garmin_port_probe() local
1376 garmin_data_p = kzalloc(sizeof(struct garmin_data), GFP_KERNEL); in garmin_port_probe()
1377 if (!garmin_data_p) in garmin_port_probe()
1380 timer_setup(&garmin_data_p->timer, timeout_handler, 0); in garmin_port_probe()
1381 spin_lock_init(&garmin_data_p->lock); in garmin_port_probe()
1382 INIT_LIST_HEAD(&garmin_data_p->pktlist); in garmin_port_probe()
1383 garmin_data_p->port = port; in garmin_port_probe()
1384 garmin_data_p->state = 0; in garmin_port_probe()
1385 garmin_data_p->flags = 0; in garmin_port_probe()
1386 garmin_data_p->count = 0; in garmin_port_probe()
1387 init_usb_anchor(&garmin_data_p->write_urbs); in garmin_port_probe()
1388 usb_set_serial_port_data(port, garmin_data_p); in garmin_port_probe()
1396 kfree(garmin_data_p); in garmin_port_probe()
1404 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_port_remove() local
1406 usb_kill_anchored_urbs(&garmin_data_p->write_urbs); in garmin_port_remove()
1408 timer_shutdown_sync(&garmin_data_p->timer); in garmin_port_remove()
1409 kfree(garmin_data_p); in garmin_port_remove()