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 | |
bca61f8a | 71 | void lbs_mac_event_disconnected(struct lbs_private *priv); |
6e66f03f | 72 | |
301eacbf | 73 | |
bca61f8a HS |
74 | |
75 | /* Events */ | |
76 | ||
77 | int lbs_process_event(struct lbs_private *priv, u32 event); | |
78 | ||
79 | ||
80 | /* Actual commands */ | |
81 | ||
82 | int lbs_update_hw_spec(struct lbs_private *priv); | |
8e3c91bb | 83 | |
2dd4b262 DW |
84 | int lbs_set_channel(struct lbs_private *priv, u8 channel); |
85 | ||
bca61f8a HS |
86 | int lbs_update_channel(struct lbs_private *priv); |
87 | ||
88 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, | |
89 | struct wol_config *p_wol_config); | |
90 | ||
91 | int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action, | |
92 | struct sleep_params *sp); | |
93 | ||
bca61f8a HS |
94 | void lbs_ps_confirm_sleep(struct lbs_private *priv); |
95 | ||
96 | int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on); | |
97 | ||
98 | void lbs_set_mac_control(struct lbs_private *priv); | |
871fc09f | 99 | int lbs_set_mac_control_sync(struct lbs_private *priv); |
bca61f8a HS |
100 | |
101 | int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, | |
102 | s16 *maxlevel); | |
103 | ||
104 | int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val); | |
105 | ||
106 | int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val); | |
107 | ||
108 | ||
bca61f8a HS |
109 | /* Commands only used in wext.c, assoc. and scan.c */ |
110 | ||
111 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, | |
112 | int8_t p1, int8_t p2); | |
113 | ||
114 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | |
115 | int8_t p2, int usesnr); | |
116 | ||
117 | int lbs_set_data_rate(struct lbs_private *priv, u8 rate); | |
6ce4fd2a | 118 | |
85319f93 JC |
119 | int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, |
120 | uint16_t cmd_action); | |
bca61f8a | 121 | |
87c8c72d DW |
122 | int lbs_set_tx_power(struct lbs_private *priv, s16 dbm); |
123 | ||
bca61f8a | 124 | int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep); |
39fcf7a3 | 125 | |
1311843c AK |
126 | int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep); |
127 | ||
a45b6f4f DW |
128 | int lbs_set_monitor_mode(struct lbs_private *priv, int enable); |
129 | ||
9fb7663d DW |
130 | int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf); |
131 | ||
20d2ebe5 | 132 | int lbs_set_11d_domain_info(struct lbs_private *priv); |
cc4b9d39 | 133 | |
4c7c6e00 DW |
134 | int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value); |
135 | ||
136 | int lbs_set_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 value); | |
137 | ||
0bb64087 DW |
138 | int lbs_set_ps_mode(struct lbs_private *priv, u16 cmd_action, bool block); |
139 | ||
14e865ba | 140 | #endif /* _LBS_CMD_H */ |