diff options
Diffstat (limited to 'drivers/net/wireless/libertas/cmd.h')
-rw-r--r-- | drivers/net/wireless/libertas/cmd.h | 120 |
1 files changed, 92 insertions, 28 deletions
diff --git a/drivers/net/wireless/libertas/cmd.h b/drivers/net/wireless/libertas/cmd.h index bf7c421c7a53..7c44cc94a25b 100644 --- a/drivers/net/wireless/libertas/cmd.h +++ b/drivers/net/wireless/libertas/cmd.h | |||
@@ -6,8 +6,27 @@ | |||
6 | #include "host.h" | 6 | #include "host.h" |
7 | #include "dev.h" | 7 | #include "dev.h" |
8 | 8 | ||
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 | |||
9 | /* lbs_cmd() infers the size of the buffer to copy data back into, from | 28 | /* lbs_cmd() infers the size of the buffer to copy data back into, from |
10 | the size of the target of the pointer. Since the command to be sent | 29 | the size of the target of the pointer. Since the command to be sent |
11 | may often be smaller, that size is set in cmd->size by the caller.*/ | 30 | may often be smaller, that size is set in cmd->size by the caller.*/ |
12 | #define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg) ({ \ | 31 | #define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg) ({ \ |
13 | uint16_t __sz = le16_to_cpu((cmd)->hdr.size); \ | 32 | uint16_t __sz = le16_to_cpu((cmd)->hdr.size); \ |
@@ -18,6 +37,11 @@ | |||
18 | #define lbs_cmd_with_response(priv, cmdnr, cmd) \ | 37 | #define lbs_cmd_with_response(priv, cmdnr, cmd) \ |
19 | lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd)) | 38 | lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd)) |
20 | 39 | ||
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 | |||
21 | void lbs_cmd_async(struct lbs_private *priv, uint16_t command, | 45 | void lbs_cmd_async(struct lbs_private *priv, uint16_t command, |
22 | struct cmd_header *in_cmd, int in_cmd_size); | 46 | struct cmd_header *in_cmd, int in_cmd_size); |
23 | 47 | ||
@@ -31,62 +55,102 @@ struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv, | |||
31 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), | 55 | int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *), |
32 | unsigned long callback_arg); | 56 | unsigned long callback_arg); |
33 | 57 | ||
34 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, | 58 | int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, |
35 | int8_t p1, int8_t p2); | 59 | struct cmd_header *resp); |
36 | 60 | ||
37 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | 61 | int lbs_allocate_cmd_buffer(struct lbs_private *priv); |
38 | int8_t p2, int usesnr); | 62 | int lbs_free_cmd_buffer(struct lbs_private *priv); |
39 | 63 | ||
40 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, | 64 | int lbs_execute_next_command(struct lbs_private *priv); |
41 | int8_t p1, int8_t p2); | 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); | ||
42 | 68 | ||
43 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | ||
44 | int8_t p2, int usesnr); | ||
45 | 69 | ||
46 | int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra, | 70 | /* From cmdresp.c */ |
47 | struct cmd_header *resp); | ||
48 | 71 | ||
49 | int lbs_update_hw_spec(struct lbs_private *priv); | 72 | void lbs_mac_event_disconnected(struct lbs_private *priv); |
50 | 73 | ||
51 | int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, | ||
52 | struct cmd_ds_mesh_access *cmd); | ||
53 | 74 | ||
54 | int lbs_set_data_rate(struct lbs_private *priv, u8 rate); | 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); | ||
55 | 84 | ||
56 | int lbs_get_channel(struct lbs_private *priv); | 85 | int lbs_get_channel(struct lbs_private *priv); |
86 | |||
57 | int lbs_set_channel(struct lbs_private *priv, u8 channel); | 87 | int lbs_set_channel(struct lbs_private *priv, u8 channel); |
58 | 88 | ||
89 | int lbs_update_channel(struct lbs_private *priv); | ||
90 | |||
91 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, | ||
92 | struct wol_config *p_wol_config); | ||
93 | |||
94 | int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action, | ||
95 | struct sleep_params *sp); | ||
96 | |||
97 | void lbs_ps_sleep(struct lbs_private *priv, int wait_option); | ||
98 | |||
99 | void lbs_ps_wakeup(struct lbs_private *priv, int wait_option); | ||
100 | |||
101 | void lbs_ps_confirm_sleep(struct lbs_private *priv); | ||
102 | |||
103 | int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on); | ||
104 | |||
105 | void lbs_set_mac_control(struct lbs_private *priv); | ||
106 | |||
107 | int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, | ||
108 | s16 *maxlevel); | ||
109 | |||
110 | int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val); | ||
111 | |||
112 | int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val); | ||
113 | |||
114 | |||
115 | /* Mesh related */ | ||
116 | |||
117 | int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action, | ||
118 | struct cmd_ds_mesh_access *cmd); | ||
119 | |||
59 | int lbs_mesh_config_send(struct lbs_private *priv, | 120 | int lbs_mesh_config_send(struct lbs_private *priv, |
60 | struct cmd_ds_mesh_config *cmd, | 121 | struct cmd_ds_mesh_config *cmd, |
61 | uint16_t action, uint16_t type); | 122 | uint16_t action, uint16_t type); |
123 | |||
62 | int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan); | 124 | int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan); |
63 | 125 | ||
64 | int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria, | 126 | |
65 | struct wol_config *p_wol_config); | 127 | /* Commands only used in wext.c, assoc. and scan.c */ |
66 | int lbs_suspend(struct lbs_private *priv); | 128 | |
67 | void lbs_resume(struct lbs_private *priv); | 129 | int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0, |
130 | int8_t p1, int8_t p2); | ||
131 | |||
132 | int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1, | ||
133 | int8_t p2, int usesnr); | ||
134 | |||
135 | int lbs_set_data_rate(struct lbs_private *priv, u8 rate); | ||
68 | 136 | ||
69 | int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, | 137 | int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv, |
70 | uint16_t cmd_action); | 138 | uint16_t cmd_action); |
139 | |||
71 | int lbs_cmd_802_11_inactivity_timeout(struct lbs_private *priv, | 140 | int lbs_cmd_802_11_inactivity_timeout(struct lbs_private *priv, |
72 | uint16_t cmd_action, uint16_t *timeout); | 141 | uint16_t cmd_action, uint16_t *timeout); |
73 | int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action, | 142 | |
74 | struct sleep_params *sp); | ||
75 | int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action, | 143 | int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action, |
76 | struct assoc_request *assoc); | 144 | struct assoc_request *assoc); |
145 | |||
77 | int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, uint16_t cmd_action, | 146 | int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, uint16_t cmd_action, |
78 | uint16_t *enable); | 147 | uint16_t *enable); |
148 | |||
79 | int lbs_cmd_802_11_key_material(struct lbs_private *priv, uint16_t cmd_action, | 149 | int lbs_cmd_802_11_key_material(struct lbs_private *priv, uint16_t cmd_action, |
80 | struct assoc_request *assoc); | 150 | struct assoc_request *assoc); |
81 | 151 | ||
82 | int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel, | ||
83 | s16 *maxlevel); | ||
84 | int lbs_set_tx_power(struct lbs_private *priv, s16 dbm); | 152 | int lbs_set_tx_power(struct lbs_private *priv, s16 dbm); |
85 | 153 | ||
86 | int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on); | 154 | int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep); |
87 | |||
88 | int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val); | ||
89 | |||
90 | int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val); | ||
91 | 155 | ||
92 | #endif /* _LBS_CMD_H */ | 156 | #endif /* _LBS_CMD_H */ |