Lines Matching refs:garmin_data_p
182 static int gsp_next_packet(struct garmin_data *garmin_data_p);
269 static int pkt_add(struct garmin_data *garmin_data_p, in pkt_add() argument
287 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_add()
288 garmin_data_p->flags |= FLAGS_QUEUING; in pkt_add()
289 result = list_empty(&garmin_data_p->pktlist); in pkt_add()
290 pkt->seq = garmin_data_p->seq_counter++; in pkt_add()
291 list_add_tail(&pkt->list, &garmin_data_p->pktlist); in pkt_add()
292 state = garmin_data_p->state; in pkt_add()
293 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_add()
295 dev_dbg(&garmin_data_p->port->dev, in pkt_add()
302 gsp_next_packet(garmin_data_p); in pkt_add()
309 static struct garmin_packet *pkt_pop(struct garmin_data *garmin_data_p) in pkt_pop() argument
314 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_pop()
315 if (!list_empty(&garmin_data_p->pktlist)) { in pkt_pop()
316 result = (struct garmin_packet *)garmin_data_p->pktlist.next; in pkt_pop()
319 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_pop()
325 static void pkt_clear(struct garmin_data *garmin_data_p) in pkt_clear() argument
330 spin_lock_irqsave(&garmin_data_p->lock, flags); in pkt_clear()
331 while (!list_empty(&garmin_data_p->pktlist)) { in pkt_clear()
332 result = (struct garmin_packet *)garmin_data_p->pktlist.next; in pkt_clear()
336 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in pkt_clear()
345 static int gsp_send_ack(struct garmin_data *garmin_data_p, __u8 pkt_id) in gsp_send_ack() argument
352 dev_dbg(&garmin_data_p->port->dev, "%s - pkt-id: 0x%X.\n", __func__, in gsp_send_ack()
375 send_to_tty(garmin_data_p->port, pkt, l); in gsp_send_ack()
391 static int gsp_rec_packet(struct garmin_data *garmin_data_p, int count) in gsp_rec_packet() argument
393 struct device *dev = &garmin_data_p->port->dev; in gsp_rec_packet()
395 const __u8 *recpkt = garmin_data_p->inbuffer+GSP_INITIAL_OFFSET; in gsp_rec_packet()
396 __le32 *usbdata = (__le32 *) garmin_data_p->inbuffer; in gsp_rec_packet()
402 usb_serial_debug_data(&garmin_data_p->port->dev, __func__, in gsp_rec_packet()
436 garmin_write_bulk(garmin_data_p->port, garmin_data_p->inbuffer, in gsp_rec_packet()
441 if (isAbortTrfCmnd(garmin_data_p->inbuffer)) { in gsp_rec_packet()
442 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_rec_packet()
443 garmin_data_p->flags |= FLAGS_DROP_DATA; in gsp_rec_packet()
444 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_rec_packet()
445 pkt_clear(garmin_data_p); in gsp_rec_packet()
471 static int gsp_receive(struct garmin_data *garmin_data_p, in gsp_receive() argument
474 struct device *dev = &garmin_data_p->port->dev; in gsp_receive()
488 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_receive()
489 dest = garmin_data_p->inbuffer; in gsp_receive()
490 size = garmin_data_p->insize; in gsp_receive()
491 dleSeen = garmin_data_p->flags & FLAGS_GSP_DLESEEN; in gsp_receive()
492 skip = garmin_data_p->flags & FLAGS_GSP_SKIP; in gsp_receive()
493 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_receive()
532 gsp_rec_packet(garmin_data_p, size); in gsp_receive()
559 spin_lock_irqsave(&garmin_data_p->lock, flags); in gsp_receive()
561 garmin_data_p->insize = size; in gsp_receive()
565 garmin_data_p->flags |= FLAGS_GSP_SKIP; in gsp_receive()
567 garmin_data_p->flags &= ~FLAGS_GSP_SKIP; in gsp_receive()
570 garmin_data_p->flags |= FLAGS_GSP_DLESEEN; in gsp_receive()
572 garmin_data_p->flags &= ~FLAGS_GSP_DLESEEN; in gsp_receive()
574 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in gsp_receive()
577 if (gsp_next_packet(garmin_data_p) > 0) in gsp_receive()
578 garmin_data_p->state = STATE_ACTIVE; in gsp_receive()
580 garmin_data_p->state = STATE_GSP_WAIT_DATA; in gsp_receive()
594 static int gsp_send(struct garmin_data *garmin_data_p, in gsp_send() argument
597 struct device *dev = &garmin_data_p->port->dev; in gsp_send()
607 garmin_data_p->state, count); in gsp_send()
609 k = garmin_data_p->outsize; in gsp_send()
612 garmin_data_p->outsize = 0; in gsp_send()
616 memcpy(garmin_data_p->outbuffer+k, buf, count); in gsp_send()
618 garmin_data_p->outsize = k; in gsp_send()
621 pktid = getPacketId(garmin_data_p->outbuffer); in gsp_send()
622 datalen = getDataLength(garmin_data_p->outbuffer); in gsp_send()
634 usb_serial_debug_data(&garmin_data_p->port->dev, __func__, k, in gsp_send()
635 garmin_data_p->outbuffer); in gsp_send()
637 garmin_data_p->outsize = 0; in gsp_send()
639 if (GARMIN_LAYERID_APPL != getLayerId(garmin_data_p->outbuffer)) { in gsp_send()
641 getLayerId(garmin_data_p->outbuffer)); in gsp_send()
658 src = garmin_data_p->outbuffer+GARMIN_PKTHDR_LENGTH; in gsp_send()
664 src = garmin_data_p->outbuffer+GARMIN_PKTHDR_LENGTH; in gsp_send()
668 dst = garmin_data_p->outbuffer+GPS_OUT_BUFSIZ-datalen; in gsp_send()
673 dst = garmin_data_p->outbuffer; in gsp_send()
698 i = dst-garmin_data_p->outbuffer; in gsp_send()
700 send_to_tty(garmin_data_p->port, garmin_data_p->outbuffer, i); in gsp_send()
702 garmin_data_p->pkt_id = pktid; in gsp_send()
703 garmin_data_p->state = STATE_WAIT_TTY_ACK; in gsp_send()
712 static int gsp_next_packet(struct garmin_data *garmin_data_p) in gsp_next_packet() argument
717 while ((pkt = pkt_pop(garmin_data_p)) != NULL) { in gsp_next_packet()
718 dev_dbg(&garmin_data_p->port->dev, "%s - next pkt: %d\n", __func__, pkt->seq); in gsp_next_packet()
719 result = gsp_send(garmin_data_p, pkt->data, pkt->size); in gsp_next_packet()
744 static int nat_receive(struct garmin_data *garmin_data_p, in nat_receive() argument
755 if (garmin_data_p->insize >= GARMIN_PKTHDR_LENGTH) in nat_receive()
757 +getDataLength(garmin_data_p->inbuffer); in nat_receive()
764 dev_dbg(&garmin_data_p->port->dev, in nat_receive()
767 garmin_data_p->insize = 0; in nat_receive()
771 len -= garmin_data_p->insize; in nat_receive()
775 dest = garmin_data_p->inbuffer in nat_receive()
776 + garmin_data_p->insize; in nat_receive()
778 garmin_data_p->insize += len; in nat_receive()
784 if (garmin_data_p->insize >= GARMIN_PKTHDR_LENGTH) { in nat_receive()
786 getDataLength(garmin_data_p->inbuffer); in nat_receive()
787 if (garmin_data_p->insize >= len) { in nat_receive()
788 garmin_write_bulk(garmin_data_p->port, in nat_receive()
789 garmin_data_p->inbuffer, in nat_receive()
791 garmin_data_p->insize = 0; in nat_receive()
795 if (isAbortTrfCmnd(garmin_data_p->inbuffer)) { in nat_receive()
796 spin_lock_irqsave(&garmin_data_p->lock, in nat_receive()
798 garmin_data_p->flags |= FLAGS_DROP_DATA; in nat_receive()
800 &garmin_data_p->lock, flags); in nat_receive()
801 pkt_clear(garmin_data_p); in nat_receive()
816 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in priv_status_resp() local
817 __le32 *pkt = (__le32 *)garmin_data_p->privpkt; in priv_status_resp()
823 pkt[4] = __cpu_to_le32(garmin_data_p->mode); in priv_status_resp()
824 pkt[5] = __cpu_to_le32(garmin_data_p->serial_num); in priv_status_resp()
838 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in process_resetdev_request() local
840 spin_lock_irqsave(&garmin_data_p->lock, flags); in process_resetdev_request()
841 garmin_data_p->flags &= ~(CLEAR_HALT_REQUIRED); in process_resetdev_request()
842 garmin_data_p->state = STATE_RESET; in process_resetdev_request()
843 garmin_data_p->serial_num = 0; in process_resetdev_request()
844 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in process_resetdev_request()
860 static int garmin_clear(struct garmin_data *garmin_data_p) in garmin_clear() argument
866 pkt_clear(garmin_data_p); in garmin_clear()
868 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_clear()
869 garmin_data_p->insize = 0; in garmin_clear()
870 garmin_data_p->outsize = 0; in garmin_clear()
871 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_clear()
880 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_init_session() local
901 garmin_data_p->state = STATE_ACTIVE; in garmin_init_session()
925 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_open() local
927 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_open()
928 garmin_data_p->mode = initial_mode; in garmin_open()
929 garmin_data_p->count = 0; in garmin_open()
930 garmin_data_p->flags &= FLAGS_SESSION_REPLY1_SEEN; in garmin_open()
931 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_open()
937 if (garmin_data_p->state == STATE_RESET) in garmin_open()
940 garmin_data_p->state = STATE_ACTIVE; in garmin_open()
947 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_close() local
950 __func__, garmin_data_p->mode, garmin_data_p->state, in garmin_close()
951 garmin_data_p->flags); in garmin_close()
953 garmin_clear(garmin_data_p); in garmin_close()
960 if (garmin_data_p->state != STATE_RESET) in garmin_close()
961 garmin_data_p->state = STATE_DISCONNECTED; in garmin_close()
970 struct garmin_data *garmin_data_p = in garmin_write_bulk_callback() local
975 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write_bulk_callback()
976 gsp_send_ack(garmin_data_p, in garmin_write_bulk_callback()
997 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write_bulk() local
1002 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_write_bulk()
1003 garmin_data_p->flags &= ~FLAGS_DROP_DATA; in garmin_write_bulk()
1004 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_write_bulk()
1030 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_write_bulk()
1031 garmin_data_p->flags |= APP_REQ_SEEN; in garmin_write_bulk()
1032 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_write_bulk()
1034 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write_bulk()
1035 pkt_clear(garmin_data_p); in garmin_write_bulk()
1036 garmin_data_p->state = STATE_GSP_WAIT_DATA; in garmin_write_bulk()
1061 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write() local
1062 __le32 *privpkt = (__le32 *)garmin_data_p->privpkt; in garmin_write()
1066 if (garmin_data_p->state == STATE_RESET) in garmin_write()
1075 memcpy(garmin_data_p->privpkt, buf, len); in garmin_write()
1077 pktsiz = getDataLength(garmin_data_p->privpkt); in garmin_write()
1078 pktid = getPacketId(garmin_data_p->privpkt); in garmin_write()
1082 getLayerId(garmin_data_p->privpkt)) { in garmin_write()
1088 garmin_clear(garmin_data_p); in garmin_write()
1094 garmin_data_p->mode = __le32_to_cpu(privpkt[3]); in garmin_write()
1096 __func__, garmin_data_p->mode); in garmin_write()
1113 garmin_data_p->mode); in garmin_write()
1120 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_write()
1121 return gsp_receive(garmin_data_p, buf, count); in garmin_write()
1123 return nat_receive(garmin_data_p, buf, count); in garmin_write()
1134 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_write_room() local
1135 return GPS_OUT_BUFSIZ-garmin_data_p->outsize; in garmin_write_room()
1139 static void garmin_read_process(struct garmin_data *garmin_data_p, in garmin_read_process() argument
1145 if (garmin_data_p->flags & FLAGS_DROP_DATA) { in garmin_read_process()
1147 dev_dbg(&garmin_data_p->port->dev, "%s - pkt dropped\n", __func__); in garmin_read_process()
1148 } else if (garmin_data_p->state != STATE_DISCONNECTED && in garmin_read_process()
1149 garmin_data_p->state != STATE_RESET) { in garmin_read_process()
1154 if (garmin_data_p->flags & FLAGS_QUEUING) { in garmin_read_process()
1155 pkt_add(garmin_data_p, data, data_length); in garmin_read_process()
1159 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_process()
1160 garmin_data_p->flags |= APP_RESP_SEEN; in garmin_read_process()
1161 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_process()
1163 if (garmin_data_p->mode == MODE_GARMIN_SERIAL) { in garmin_read_process()
1164 pkt_add(garmin_data_p, data, data_length); in garmin_read_process()
1166 send_to_tty(garmin_data_p->port, data, in garmin_read_process()
1179 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_read_bulk_callback() local
1192 garmin_read_process(garmin_data_p, data, urb->actual_length, 1); in garmin_read_bulk_callback()
1195 0 != (garmin_data_p->flags & FLAGS_BULK_IN_RESTART)) { in garmin_read_bulk_callback()
1196 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1197 garmin_data_p->flags &= ~FLAGS_BULK_IN_RESTART; in garmin_read_bulk_callback()
1198 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1206 if (0 == (garmin_data_p->flags & FLAGS_THROTTLED)) { in garmin_read_bulk_callback()
1215 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1216 garmin_data_p->flags &= ~FLAGS_BULK_IN_ACTIVE; in garmin_read_bulk_callback()
1217 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_bulk_callback()
1227 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_read_int_callback() local
1257 if (0 == (garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE)) { in garmin_read_int_callback()
1266 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1267 garmin_data_p->flags |= FLAGS_BULK_IN_ACTIVE; in garmin_read_int_callback()
1268 spin_unlock_irqrestore(&garmin_data_p->lock, in garmin_read_int_callback()
1273 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1274 garmin_data_p->flags |= FLAGS_BULK_IN_RESTART; in garmin_read_int_callback()
1275 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1282 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1283 garmin_data_p->flags |= FLAGS_SESSION_REPLY1_SEEN; in garmin_read_int_callback()
1284 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_read_int_callback()
1287 garmin_data_p->serial_num = __le32_to_cpup( in garmin_read_int_callback()
1291 __func__, garmin_data_p->serial_num); in garmin_read_int_callback()
1294 garmin_read_process(garmin_data_p, data, urb->actual_length, 0); in garmin_read_int_callback()
1309 static int garmin_flush_queue(struct garmin_data *garmin_data_p) in garmin_flush_queue() argument
1314 if ((garmin_data_p->flags & FLAGS_THROTTLED) == 0) { in garmin_flush_queue()
1315 pkt = pkt_pop(garmin_data_p); in garmin_flush_queue()
1317 send_to_tty(garmin_data_p->port, pkt->data, pkt->size); in garmin_flush_queue()
1319 mod_timer(&garmin_data_p->timer, (1)+jiffies); in garmin_flush_queue()
1322 spin_lock_irqsave(&garmin_data_p->lock, flags); in garmin_flush_queue()
1323 garmin_data_p->flags &= ~FLAGS_QUEUING; in garmin_flush_queue()
1324 spin_unlock_irqrestore(&garmin_data_p->lock, flags); in garmin_flush_queue()
1334 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_throttle() local
1338 spin_lock_irq(&garmin_data_p->lock); in garmin_throttle()
1339 garmin_data_p->flags |= FLAGS_QUEUING|FLAGS_THROTTLED; in garmin_throttle()
1340 spin_unlock_irq(&garmin_data_p->lock); in garmin_throttle()
1347 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_unthrottle() local
1350 spin_lock_irq(&garmin_data_p->lock); in garmin_unthrottle()
1351 garmin_data_p->flags &= ~FLAGS_THROTTLED; in garmin_unthrottle()
1352 spin_unlock_irq(&garmin_data_p->lock); in garmin_unthrottle()
1356 if (garmin_data_p->mode == MODE_NATIVE) in garmin_unthrottle()
1357 garmin_flush_queue(garmin_data_p); in garmin_unthrottle()
1359 if (0 != (garmin_data_p->flags & FLAGS_BULK_IN_ACTIVE)) { in garmin_unthrottle()
1375 struct garmin_data *garmin_data_p = (struct garmin_data *) data; in timeout_handler() local
1378 if (garmin_data_p->mode == MODE_NATIVE) in timeout_handler()
1379 if (garmin_data_p->flags & FLAGS_QUEUING) in timeout_handler()
1380 garmin_flush_queue(garmin_data_p); in timeout_handler()
1388 struct garmin_data *garmin_data_p; in garmin_port_probe() local
1390 garmin_data_p = kzalloc(sizeof(struct garmin_data), GFP_KERNEL); in garmin_port_probe()
1391 if (!garmin_data_p) in garmin_port_probe()
1394 init_timer(&garmin_data_p->timer); in garmin_port_probe()
1395 spin_lock_init(&garmin_data_p->lock); in garmin_port_probe()
1396 INIT_LIST_HEAD(&garmin_data_p->pktlist); in garmin_port_probe()
1398 garmin_data_p->timer.data = (unsigned long)garmin_data_p; in garmin_port_probe()
1399 garmin_data_p->timer.function = timeout_handler; in garmin_port_probe()
1400 garmin_data_p->port = port; in garmin_port_probe()
1401 garmin_data_p->state = 0; in garmin_port_probe()
1402 garmin_data_p->flags = 0; in garmin_port_probe()
1403 garmin_data_p->count = 0; in garmin_port_probe()
1404 usb_set_serial_port_data(port, garmin_data_p); in garmin_port_probe()
1414 struct garmin_data *garmin_data_p = usb_get_serial_port_data(port); in garmin_port_remove() local
1417 del_timer_sync(&garmin_data_p->timer); in garmin_port_remove()
1418 kfree(garmin_data_p); in garmin_port_remove()