cmd.h 4.2 KB
Newer Older
1 2 3 4 5
/* Copyright (C) 2007, Red Hat, Inc. */

#ifndef _LBS_CMD_H_
#define _LBS_CMD_H_

6 7
#include <net/cfg80211.h>

8
#include "host.h"
9 10
#include "dev.h"

H
Holger Schurig 已提交
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

/* Command & response transfer between host and card */

struct cmd_ctrl_node {
	struct list_head list;
	int result;
	/* command response */
	int (*callback)(struct lbs_private *,
			unsigned long,
			struct cmd_header *);
	unsigned long callback_arg;
	/* command data */
	struct cmd_header *cmdbuf;
	/* wait queue */
	u16 cmdwaitqwoken;
	wait_queue_head_t cmdwait_q;
};


30
/* lbs_cmd() infers the size of the buffer to copy data back into, from
H
Holger Schurig 已提交
31
   the size of the target of the pointer. Since the command to be sent
32 33 34 35 36 37
   may often be smaller, that size is set in cmd->size by the caller.*/
#define lbs_cmd(priv, cmdnr, cmd, cb, cb_arg)	({		\
	uint16_t __sz = le16_to_cpu((cmd)->hdr.size);		\
	(cmd)->hdr.size = cpu_to_le16(sizeof(*(cmd)));		\
	__lbs_cmd(priv, cmdnr, &(cmd)->hdr, __sz, cb, cb_arg);	\
})
38

39 40
#define lbs_cmd_with_response(priv, cmdnr, cmd)	\
	lbs_cmd(priv, cmdnr, cmd, lbs_cmd_copyback, (unsigned long) (cmd))
41

42 43 44
void lbs_cmd_async(struct lbs_private *priv, uint16_t command,
	struct cmd_header *in_cmd, int in_cmd_size);

45
int __lbs_cmd(struct lbs_private *priv, uint16_t command,
46
	      struct cmd_header *in_cmd, int in_cmd_size,
47
	      int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *),
48 49
	      unsigned long callback_arg);

50 51 52 53 54
struct cmd_ctrl_node *__lbs_cmd_async(struct lbs_private *priv,
	uint16_t command, struct cmd_header *in_cmd, int in_cmd_size,
	int (*callback)(struct lbs_private *, unsigned long, struct cmd_header *),
	unsigned long callback_arg);

H
Holger Schurig 已提交
55 56
int lbs_cmd_copyback(struct lbs_private *priv, unsigned long extra,
		     struct cmd_header *resp);
57

H
Holger Schurig 已提交
58 59
int lbs_allocate_cmd_buffer(struct lbs_private *priv);
int lbs_free_cmd_buffer(struct lbs_private *priv);
60

H
Holger Schurig 已提交
61
int lbs_execute_next_command(struct lbs_private *priv);
62 63
void __lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd,
			    int result);
H
Holger Schurig 已提交
64 65 66
void lbs_complete_command(struct lbs_private *priv, struct cmd_ctrl_node *cmd,
			  int result);
int lbs_process_command_response(struct lbs_private *priv, u8 *data, u32 len);
67 68


H
Holger Schurig 已提交
69
/* From cmdresp.c */
70

H
Holger Schurig 已提交
71
void lbs_mac_event_disconnected(struct lbs_private *priv);
72

73

H
Holger Schurig 已提交
74 75 76 77 78 79 80 81 82

/* Events */

int lbs_process_event(struct lbs_private *priv, u32 event);


/* Actual commands */

int lbs_update_hw_spec(struct lbs_private *priv);
83

84 85
int lbs_set_channel(struct lbs_private *priv, u8 channel);

H
Holger Schurig 已提交
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
int lbs_update_channel(struct lbs_private *priv);

int lbs_host_sleep_cfg(struct lbs_private *priv, uint32_t criteria,
		struct wol_config *p_wol_config);

int lbs_cmd_802_11_sleep_params(struct lbs_private *priv, uint16_t cmd_action,
				struct sleep_params *sp);

void lbs_ps_confirm_sleep(struct lbs_private *priv);

int lbs_set_radio(struct lbs_private *priv, u8 preamble, u8 radio_on);

void lbs_set_mac_control(struct lbs_private *priv);

int lbs_get_tx_power(struct lbs_private *priv, s16 *curlevel, s16 *minlevel,
		     s16 *maxlevel);

int lbs_set_snmp_mib(struct lbs_private *priv, u32 oid, u16 val);

int lbs_get_snmp_mib(struct lbs_private *priv, u32 oid, u16 *out_val);


/* Commands only used in wext.c, assoc. and scan.c */

int lbs_set_power_adapt_cfg(struct lbs_private *priv, int enable, int8_t p0,
		int8_t p1, int8_t p2);

int lbs_set_tpc_cfg(struct lbs_private *priv, int enable, int8_t p0, int8_t p1,
		int8_t p2, int usesnr);

int lbs_set_data_rate(struct lbs_private *priv, u8 rate);
117

118 119
int lbs_cmd_802_11_rate_adapt_rateset(struct lbs_private *priv,
				      uint16_t cmd_action);
H
Holger Schurig 已提交
120

121 122
int lbs_set_tx_power(struct lbs_private *priv, s16 dbm);

H
Holger Schurig 已提交
123
int lbs_set_deep_sleep(struct lbs_private *priv, int deep_sleep);
124

125 126
int lbs_set_host_sleep(struct lbs_private *priv, int host_sleep);

127 128
int lbs_set_monitor_mode(struct lbs_private *priv, int enable);

D
Dan Williams 已提交
129 130
int lbs_get_rssi(struct lbs_private *priv, s8 *snr, s8 *nf);

131 132 133 134
int lbs_set_11d_domain_info(struct lbs_private *priv,
			    struct regulatory_request *request,
			    struct ieee80211_supported_band **bands);

135 136 137 138
int lbs_get_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 *value);

int lbs_set_reg(struct lbs_private *priv, u16 reg, u16 offset, u32 value);

139 140
int lbs_set_ps_mode(struct lbs_private *priv, u16 cmd_action, bool block);

141
#endif /* _LBS_CMD_H */