Commit | Line | Data |
---|---|---|
14e865ba DW |
1 | /* Copyright (C) 2007, Red Hat, Inc. */ |
2 | ||
3 | #ifndef _LBS_CMD_H_ | |
4 | #define _LBS_CMD_H_ | |
5 | ||
cc4b9d39 DW |
6 | #include <net/cfg80211.h> |
7 | ||
9e66e701 | 8 | #include "host.h" |
14e865ba DW |
9 | #include "dev.h" |
10 | ||
bca61f8a HS |
11 | |
12 | /* Command & response transfer between host and card */ | |
13 | ||
14 | struct cmd_ctrl_node { | |
15 | struct list_head list; | |
16 | int result; | |
17 | /* command response */ | |
18 | int (*callback)(struct lbs_private *, | |
19 | unsigned long, | |
20 | struct cmd_header *); | |
21 | unsigned long callback_arg; | |
22 | /* command data */ | |
23 | struct cmd_header *cmdbuf; | |
24 | /* wait queue */ | |
25 | u16 cmdwaitqwoken; | |
26 | wait_queue_head_t cmdwait_q; | |
27 | }; | |
28 | ||
29 | ||
f15ebb63 | 30 | /* lbs_cmd() infers the size of the buffer to copy data back into, from |
bca61f8a | 31 | the size of the target of the pointer. Since the command to be sent |
f15ebb63 DW |
32 | may often be smaller, that size is set in cmd->size by the caller.*/ |
33 | #define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg) ({ \ | |
34 | uint16_t __sz = le16_to_cpu((cmd)->hdr.size); \ | |
35 | (cmd)->hdr.size = cpu_to_le16(sizeof(*(cmd))); \ | |
36 | __lbs_cmd(priv, cmdnr, &(cmd)->hdr, __sz, cb, cb_arg); \ | |
37 | }) | |
14e865ba | 38 | |
689442dc DW |
39 | #define lbs_cmd_with_response(priv, cmdnr, cmd) \ |
40 | lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd)) | |
7e226272 | 41 | |
8db4a2b9 HS |
42 | void lbs_cmd_async(struct lbs_private *priv, uint16_t command, |
43 | struct cmd_header *in_cmd, int in_cmd_size); | |
44 | ||
7ad994de | 45 | int __lbs_cmd(struct lbs_private *priv, uint16_t command, |
7e226272 | 46 | struct cmd_header *in_cmd, int in_cmd_size, |
7ad994de | 47 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), |
14e865ba DW |
48 | unsigned long callback_arg); |
49 | ||
6d898b19 HS |
50 | struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv, |
51 | uint16_t command, struct cmd_header *in_cmd, int in_cmd_size, | |
52 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), | |
53 | unsigned long callback_arg); | |
54 | ||
bca61f8a HS |
55 | int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, |
56 | struct cmd_header *resp); | |
0112c9e9 | 57 | |
bca61f8a HS |
58 | int lbs_allocate_cmd_buffer(struct lbs_private *priv); |
59 | int lbs_free_cmd_buffer(struct lbs_private *priv); | |
0112c9e9 | 60 | |
bca61f8a | 61 | int lbs_execute_next_command(struct lbs_private *priv); |
df90d843 DD |
62 | void __lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd, |
63 | int result); | |
bca61f8a HS |
64 | void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd, |
65 | int result); | |
66 | int lbs_process_command_response(struct lbs_private *priv, u8 *data, u32 len); | |
3ed6e080 | 67 | |
3ed6e080 | 68 | |
bca61f8a | 69 | /* From cmdresp.c */ |
a8bdcd71 | 70 | |
80279fb7 JB |
71 | void lbs_mac_event_disconnected(struct lbs_private *priv, |
72 | bool locally_generated); | |
6e66f03f | 73 | |
301eacbf | 74 | |
bca61f8a HS |
75 | |
76 | /* Events */ | |
77 | ||
78 | int lbs_process_event(struct lbs_private *priv, u32 event); | |
79 | ||
80 | ||
81 | /* Actual commands */ | |
82 | ||
83 | int lbs_update_hw_spec(struct lbs_private *priv); | |
8e3c91bb | 84 | |
2dd4b262 DW |
85 | int lbs_set_channel(struct lbs_private *priv, u8 channel); |
86 | ||
bca61f8a HS |
87 | int lbs_update_channel(struct lbs_private *priv); |
88 | ||
89 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, | |
90 | struct wol_config *p_wol_config); | |
91 | ||
92 | int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action, | |
93 | struct sleep_params *sp); | |
94 | ||
bca61f8a HS |
95 | void lbs_ps_confirm_sleep(struct lbs_private *priv); |
96 | ||
97 | int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on); | |
98 | ||
99 | void lbs_set_mac_control(struct lbs_private *priv); | |
871fc09f | 100 | int lbs_set_mac_control_sync(struct lbs_private *priv); |
bca61f8a HS |
101 | |
102 | int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, | |
103 | s16 *maxlevel); | |
104 | ||
105 | int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val); | |
106 | ||
107 | int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val); | |
108 | ||
109 | ||
bca61f8a HS |
110 | /* Commands only used in wext.c, assoc. and scan.c */ |
111 | ||
112 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, | |
113 | int8_t p1, int8_t p2); | |
114 | ||
115 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | |
116 | int8_t p2, int usesnr); | |
117 | ||
118 | int lbs_set_data_rate(struct lbs_private *priv, u8 rate); | |
6ce4fd2a | 119 | |
85319f93 JC |
120 | int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, |
121 | uint16_t cmd_action); | |
bca61f8a | 122 | |
87c8c72d DW |
123 | int lbs_set_tx_power(struct lbs_private *priv, s16 dbm); |
124 | ||
bca61f8a | 125 | int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep); |
39fcf7a3 | 126 | |
1311843c AK |
127 | int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep); |
128 | ||
a45b6f4f DW |
129 | int lbs_set_monitor_mode(struct lbs_private *priv, int enable); |
130 | ||
9fb7663d DW |
131 | int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf); |
132 | ||
20d2ebe5 | 133 | int lbs_set_11d_domain_info(struct lbs_private *priv); |
cc4b9d39 | 134 | |
4c7c6e00 DW |
135 | int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value); |
136 | ||
137 | int lbs_set_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 value); | |
138 | ||
0bb64087 DW |
139 | int lbs_set_ps_mode(struct lbs_private *priv, u16 cmd_action, bool block); |
140 | ||
14e865ba | 141 | #endif /* _LBS_CMD_H */ |