Commit | Line | Data |
---|---|---|
14e865ba DW |
1 | /* Copyright (C) 2007, Red Hat, Inc. */ |
2 | ||
3 | #ifndef _LBS_CMD_H_ | |
4 | #define _LBS_CMD_H_ | |
5 | ||
9e66e701 | 6 | #include "host.h" |
14e865ba DW |
7 | #include "dev.h" |
8 | ||
bca61f8a HS |
9 | |
10 | /* Command & response transfer between host and card */ | |
11 | ||
12 | struct cmd_ctrl_node { | |
13 | struct list_head list; | |
14 | int result; | |
15 | /* command response */ | |
16 | int (*callback)(struct lbs_private *, | |
17 | unsigned long, | |
18 | struct cmd_header *); | |
19 | unsigned long callback_arg; | |
20 | /* command data */ | |
21 | struct cmd_header *cmdbuf; | |
22 | /* wait queue */ | |
23 | u16 cmdwaitqwoken; | |
24 | wait_queue_head_t cmdwait_q; | |
25 | }; | |
26 | ||
27 | ||
f15ebb63 | 28 | /* lbs_cmd() infers the size of the buffer to copy data back into, from |
bca61f8a | 29 | the size of the target of the pointer. Since the command to be sent |
f15ebb63 DW |
30 | may often be smaller, that size is set in cmd->size by the caller.*/ |
31 | #define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg) ({ \ | |
32 | uint16_t __sz = le16_to_cpu((cmd)->hdr.size); \ | |
33 | (cmd)->hdr.size = cpu_to_le16(sizeof(*(cmd))); \ | |
34 | __lbs_cmd(priv, cmdnr, &(cmd)->hdr, __sz, cb, cb_arg); \ | |
35 | }) | |
14e865ba | 36 | |
689442dc DW |
37 | #define lbs_cmd_with_response(priv, cmdnr, cmd) \ |
38 | lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd)) | |
7e226272 | 39 | |
bca61f8a HS |
40 | int lbs_prepare_and_send_command(struct lbs_private *priv, |
41 | u16 cmd_no, | |
42 | u16 cmd_action, | |
43 | u16 wait_option, u32 cmd_oid, void *pdata_buf); | |
44 | ||
8db4a2b9 HS |
45 | void lbs_cmd_async(struct lbs_private *priv, uint16_t command, |
46 | struct cmd_header *in_cmd, int in_cmd_size); | |
47 | ||
7ad994de | 48 | int __lbs_cmd(struct lbs_private *priv, uint16_t command, |
7e226272 | 49 | struct cmd_header *in_cmd, int in_cmd_size, |
7ad994de | 50 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), |
14e865ba DW |
51 | unsigned long callback_arg); |
52 | ||
6d898b19 HS |
53 | struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv, |
54 | uint16_t command, struct cmd_header *in_cmd, int in_cmd_size, | |
55 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), | |
56 | unsigned long callback_arg); | |
57 | ||
bca61f8a HS |
58 | int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, |
59 | struct cmd_header *resp); | |
0112c9e9 | 60 | |
bca61f8a HS |
61 | int lbs_allocate_cmd_buffer(struct lbs_private *priv); |
62 | int lbs_free_cmd_buffer(struct lbs_private *priv); | |
0112c9e9 | 63 | |
bca61f8a HS |
64 | int lbs_execute_next_command(struct lbs_private *priv); |
65 | void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd, | |
66 | int result); | |
67 | int lbs_process_command_response(struct lbs_private *priv, u8 *data, u32 len); | |
3ed6e080 | 68 | |
3ed6e080 | 69 | |
bca61f8a | 70 | /* From cmdresp.c */ |
a8bdcd71 | 71 | |
bca61f8a | 72 | void lbs_mac_event_disconnected(struct lbs_private *priv); |
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 | ||
95 | void lbs_ps_sleep(struct lbs_private *priv, int wait_option); | |
96 | ||
97 | void lbs_ps_wakeup(struct lbs_private *priv, int wait_option); | |
98 | ||
99 | void lbs_ps_confirm_sleep(struct lbs_private *priv); | |
100 | ||
101 | int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on); | |
102 | ||
103 | void lbs_set_mac_control(struct lbs_private *priv); | |
104 | ||
105 | int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, | |
106 | s16 *maxlevel); | |
107 | ||
108 | int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val); | |
109 | ||
110 | int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val); | |
111 | ||
112 | ||
bca61f8a HS |
113 | /* Commands only used in wext.c, assoc. and scan.c */ |
114 | ||
115 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, | |
116 | int8_t p1, int8_t p2); | |
117 | ||
118 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | |
119 | int8_t p2, int usesnr); | |
120 | ||
121 | int lbs_set_data_rate(struct lbs_private *priv, u8 rate); | |
6ce4fd2a | 122 | |
85319f93 JC |
123 | int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, |
124 | uint16_t cmd_action); | |
bca61f8a | 125 | |
87c8c72d DW |
126 | int lbs_set_tx_power(struct lbs_private *priv, s16 dbm); |
127 | ||
bca61f8a | 128 | int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep); |
39fcf7a3 | 129 | |
1311843c AK |
130 | int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep); |
131 | ||
14e865ba | 132 | #endif /* _LBS_CMD_H */ |