blob: b9ab85cc7913c236db616eee54873b26148f93aa [file] [log] [blame]
Dan Williams14e865b2007-12-10 15:11:23 -05001/* Copyright (C) 2007, Red Hat, Inc. */
2
3#ifndef _LBS_CMD_H_
4#define _LBS_CMD_H_
5
6#include "hostcmd.h"
7#include "dev.h"
8
David Woodhousef15ebb62007-12-19 13:03:19 +00009/* 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
11 may often be smaller, that size is set in cmd->size by the caller.*/
12#define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg) ({ \
13 uint16_t __sz = le16_to_cpu((cmd)->hdr.size); \
14 (cmd)->hdr.size = cpu_to_le16(sizeof(*(cmd))); \
15 __lbs_cmd(priv, cmdnr, &(cmd)->hdr, __sz, cb, cb_arg); \
16})
Dan Williams14e865b2007-12-10 15:11:23 -050017
David Woodhouse689442d2007-12-12 16:00:42 -050018#define lbs_cmd_with_response(priv, cmdnr, cmd) \
19 lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd))
David Woodhouse7e226272007-12-14 22:53:41 -050020
David Woodhouse3399ea52007-12-15 03:09:33 -050021/* __lbs_cmd() will free the cmdnode and return success/failure.
22 __lbs_cmd_async() requires that the callback free the cmdnode */
23struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv, uint16_t command,
24 struct cmd_header *in_cmd, int in_cmd_size,
25 int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *),
26 unsigned long callback_arg);
Dan Williams7ad994d2007-12-11 12:33:30 -050027int __lbs_cmd(struct lbs_private *priv, uint16_t command,
David Woodhouse7e226272007-12-14 22:53:41 -050028 struct cmd_header *in_cmd, int in_cmd_size,
Dan Williams7ad994d2007-12-11 12:33:30 -050029 int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *),
Dan Williams14e865b2007-12-10 15:11:23 -050030 unsigned long callback_arg);
31
Dan Williamsa8bdcd72007-12-11 12:40:35 -050032int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra,
33 struct cmd_header *resp);
34
Dan Williams6e66f032007-12-11 12:42:16 -050035int lbs_update_hw_spec(struct lbs_private *priv);
36
David Woodhouse301eacb2007-12-11 15:23:59 -050037int lbs_mesh_access(struct lbs_private *priv, uint16_t cmd_action,
38 struct cmd_ds_mesh_access *cmd);
39
Dan Williams8e3c91b2007-12-11 15:50:59 -050040int lbs_get_data_rate(struct lbs_private *priv);
41int lbs_set_data_rate(struct lbs_private *priv, u8 rate);
42
Dan Williams2dd4b262007-12-11 16:54:15 -050043int lbs_get_channel(struct lbs_private *priv);
44int lbs_set_channel(struct lbs_private *priv, u8 channel);
45
David Woodhouse86062132007-12-13 00:32:36 -050046int lbs_mesh_config(struct lbs_private *priv, uint16_t enable, uint16_t chan);
David Woodhouse23a397a2007-12-11 18:56:42 -050047
David Woodhouse506e9022007-12-12 20:06:06 -050048int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria);
David Woodhouseab25eca2007-12-12 17:38:56 -050049int lbs_suspend(struct lbs_private *priv);
50int lbs_resume(struct lbs_private *priv);
David Woodhouse6ce4fd22007-12-12 15:19:29 -050051
David Woodhouse6e5cc4f2007-12-17 23:04:37 -050052int lbs_cmd_802_11_inactivity_timeout(struct lbs_private *priv,
53 uint16_t cmd_action, uint16_t *timeout);
David Woodhouse3fbe1042007-12-17 23:48:31 -050054int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action,
55 struct sleep_params *sp);
David Woodhousef70dd452007-12-18 00:18:05 -050056int lbs_cmd_802_11_set_wep(struct lbs_private *priv, uint16_t cmd_action,
57 struct assoc_request *assoc);
David Woodhouse4f59abf2007-12-18 00:47:17 -050058int lbs_cmd_802_11_enable_rsn(struct lbs_private *priv, uint16_t cmd_action,
59 uint16_t *enable);
David Woodhouse6e5cc4f2007-12-17 23:04:37 -050060
Dan Williams14e865b2007-12-10 15:11:23 -050061#endif /* _LBS_CMD_H */