aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/ti-st/st_kim.h
blob: ff3270ec7847cc7c9a398d8d504802b15658a211 (plain) (blame)
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
/*
 *  Shared Transport Line discipline driver Core
 *	Init Manager Module header file
 *  Copyright (C) 2009 Texas Instruments
 *
 *  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.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#ifndef ST_KIM_H
#define ST_KIM_H

#include <linux/types.h>
#include "st.h"
#include "st_core.h"
#include "st_ll.h"
#include <linux/rfkill.h>

/* time in msec to wait for
 * line discipline to be installed
 */
#define LDISC_TIME	500
#define CMD_RESP_TIME	500
#define MAKEWORD(a, b)  ((unsigned short)(((unsigned char)(a)) \
	| ((unsigned short)((unsigned char)(b))) << 8))

#define GPIO_HIGH 1
#define GPIO_LOW  0

/* the Power-On-Reset logic, requires to attempt
 * to download firmware onto chip more than once
 * since the self-test for chip takes a while
 */
#define POR_RETRY_COUNT 5
/*
 * legacy rfkill support where-in 3 rfkill
 * devices are created for the 3 gpios
 * that ST has requested
 */
#define LEGACY_RFKILL_SUPPORT
/*
 * header file for ST provided by KIM
 */
struct kim_data_s {
	long uim_pid;
	struct platform_device *kim_pdev;
	struct completion kim_rcvd, ldisc_installed;
	/* MAX len of the .bts firmware script name */
	char resp_buffer[30];
	const struct firmware *fw_entry;
	long gpios[ST_MAX];
	struct kobject *kim_kobj;
/* used by kim_int_recv to validate fw response */
	unsigned long rx_state;
	unsigned long rx_count;
	struct sk_buff *rx_skb;
#ifdef LEGACY_RFKILL_SUPPORT
	struct rfkill *rfkill[ST_MAX];
	enum proto_type rf_protos[ST_MAX];
#endif
	struct st_data_s *core_data;
};

long st_kim_start(void);
long st_kim_stop(void);
/*
 * called from st_tty_receive to authenticate fw_download
 */
void st_kim_recv(void *, const unsigned char *, long count);

void st_kim_chip_toggle(enum proto_type, enum kim_gpio_state);

void st_kim_complete(void);

/* function called from ST KIM to ST Core, to
 * list out the protocols registered
 */
void kim_st_list_protocols(struct st_data_s *, char *);

/*
 * BTS headers
 */
#define ACTION_SEND_COMMAND     1
#define ACTION_WAIT_EVENT       2
#define ACTION_SERIAL           3
#define ACTION_DELAY            4
#define ACTION_RUN_SCRIPT       5
#define ACTION_REMARKS          6

/*
 *  * BRF Firmware header
 *   */
struct bts_header {
	uint32_t magic;
	uint32_t version;
	uint8_t future[24];
	uint8_t actions[0];
} __attribute__ ((packed));

/*
 *  * BRF Actions structure
 *   */
struct bts_action {
	uint16_t type;
	uint16_t size;
	uint8_t data[0];
} __attribute__ ((packed));

struct bts_action_send {
	uint8_t data[0];
} __attribute__ ((packed));

struct bts_action_wait {
	uint32_t msec;
	uint32_t size;
	uint8_t data[0];
} __attribute__ ((packed));

struct bts_action_delay {
	uint32_t msec;
} __attribute__ ((packed));

struct bts_action_serial {
	uint32_t baud;
	uint32_t flow_control;
} __attribute__ ((packed));

/* for identifying the change speed HCI VS
 * command
 */
struct hci_command {
	uint8_t prefix;
	uint16_t opcode;
	uint8_t plen;
	uint32_t speed;
} __attribute__ ((packed));


#endif /* ST_KIM_H */