1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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
|