diff options
Diffstat (limited to 'drivers/char/modem_interface/modem_buffer.h')
| -rw-r--r-- | drivers/char/modem_interface/modem_buffer.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/char/modem_interface/modem_buffer.h b/drivers/char/modem_interface/modem_buffer.h new file mode 100644 index 00000000..ac31efef --- /dev/null +++ b/drivers/char/modem_interface/modem_buffer.h @@ -0,0 +1,58 @@ +/* + * kernel/driver/char/modem_interface/modem_buffer.h + * + * Generic modem interface buffer defination. + * + * Author: Jiayong Yang(Jiayong.Yang@spreadtrum.com) + * Created: Jul 27, 2012 + * Copyright: Spreadtrum Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#ifndef _MODEM_BUFFER_H +#define _MODEM_BUFFER_H + +#define RECV_BUFFER_SIZE (65*1024) +enum BUF_type_t{ + BUF_SEND, + BUF_RECV, +}; + +enum BUF_status_t{ + BUF_STATUS_IDLE, + BUF_STATUS_NOEMPTY, + BUF_STATUS_WRITTEN, + BUF_STATUS_FULL, + BUF_STATUS_SENT, +}; + +struct single_buffer_t{ + char *addr; + int size; + int write_point; + int read_point; + enum BUF_status_t status; +}; + +struct modem_buffer{ + struct mutex mutex; + struct semaphore buf_read_sem; + struct semaphore buf_write_sem; + enum BUF_type_t type; + int save_index; + int trans_index; + int trans_count; + int lost_count; + struct single_buffer_t buffer[2]; +}; + +extern int pingpang_buffer_send(struct modem_buffer *buffer); +extern int pingpang_buffer_init(struct modem_buffer *buffer); +extern void pingpang_buffer_free(struct modem_buffer *buffer); +extern void pingpang_buffer_send_complete(struct modem_buffer *buffer,int index); +extern int pingpang_buffer_read(struct modem_buffer *buffer,char *data,int size); +extern int pingpang_buffer_write(struct modem_buffer *buffer,char *data,int size); +extern int save_to_receive_buffer(struct modem_buffer *buffer,char *data,int size); +#endif |
