|
@@ -69,6 +69,9 @@ enum carl9170fw_feature_list {
|
|
|
/* Firmware RX filter | CARL9170_CMD_RX_FILTER */
|
|
|
CARL9170FW_RX_FILTER,
|
|
|
|
|
|
+ /* Wake up on WLAN */
|
|
|
+ CARL9170FW_WOL,
|
|
|
+
|
|
|
/* KEEP LAST */
|
|
|
__CARL9170FW_FEATURE_NUM
|
|
|
};
|
|
@@ -78,6 +81,7 @@ enum carl9170fw_feature_list {
|
|
|
#define FIX_MAGIC "FIX\0"
|
|
|
#define DBG_MAGIC "DBG\0"
|
|
|
#define CHK_MAGIC "CHK\0"
|
|
|
+#define TXSQ_MAGIC "TXSQ"
|
|
|
#define LAST_MAGIC "LAST"
|
|
|
|
|
|
#define CARL9170FW_SET_DAY(d) (((d) - 1) % 31)
|
|
@@ -88,8 +92,10 @@ enum carl9170fw_feature_list {
|
|
|
#define CARL9170FW_GET_MONTH(m) ((((m) / 31) % 12) + 1)
|
|
|
#define CARL9170FW_GET_YEAR(y) ((y) / 372 + 10)
|
|
|
|
|
|
+#define CARL9170FW_MAGIC_SIZE 4
|
|
|
+
|
|
|
struct carl9170fw_desc_head {
|
|
|
- u8 magic[4];
|
|
|
+ u8 magic[CARL9170FW_MAGIC_SIZE];
|
|
|
__le16 length;
|
|
|
u8 min_ver;
|
|
|
u8 cur_ver;
|
|
@@ -170,6 +176,16 @@ struct carl9170fw_chk_desc {
|
|
|
#define CARL9170FW_CHK_DESC_SIZE \
|
|
|
(sizeof(struct carl9170fw_chk_desc))
|
|
|
|
|
|
+#define CARL9170FW_TXSQ_DESC_MIN_VER 1
|
|
|
+#define CARL9170FW_TXSQ_DESC_CUR_VER 1
|
|
|
+struct carl9170fw_txsq_desc {
|
|
|
+ struct carl9170fw_desc_head head;
|
|
|
+
|
|
|
+ __le32 seq_table_addr;
|
|
|
+} __packed;
|
|
|
+#define CARL9170FW_TXSQ_DESC_SIZE \
|
|
|
+ (sizeof(struct carl9170fw_txsq_desc))
|
|
|
+
|
|
|
#define CARL9170FW_LAST_DESC_MIN_VER 1
|
|
|
#define CARL9170FW_LAST_DESC_CUR_VER 2
|
|
|
struct carl9170fw_last_desc {
|
|
@@ -189,8 +205,8 @@ struct carl9170fw_last_desc {
|
|
|
}
|
|
|
|
|
|
static inline void carl9170fw_fill_desc(struct carl9170fw_desc_head *head,
|
|
|
- u8 magic[4], __le16 length,
|
|
|
- u8 min_ver, u8 cur_ver)
|
|
|
+ u8 magic[CARL9170FW_MAGIC_SIZE],
|
|
|
+ __le16 length, u8 min_ver, u8 cur_ver)
|
|
|
{
|
|
|
head->magic[0] = magic[0];
|
|
|
head->magic[1] = magic[1];
|
|
@@ -204,7 +220,7 @@ static inline void carl9170fw_fill_desc(struct carl9170fw_desc_head *head,
|
|
|
|
|
|
#define carl9170fw_for_each_hdr(desc, fw_desc) \
|
|
|
for (desc = fw_desc; \
|
|
|
- memcmp(desc->magic, LAST_MAGIC, 4) && \
|
|
|
+ memcmp(desc->magic, LAST_MAGIC, CARL9170FW_MAGIC_SIZE) && \
|
|
|
le16_to_cpu(desc->length) >= CARL9170FW_DESC_HEAD_SIZE && \
|
|
|
le16_to_cpu(desc->length) < CARL9170FW_DESC_MAX_LENGTH; \
|
|
|
desc = (void *)((unsigned long)desc + le16_to_cpu(desc->length)))
|
|
@@ -218,8 +234,8 @@ static inline bool carl9170fw_supports(__le32 list, u8 feature)
|
|
|
}
|
|
|
|
|
|
static inline bool carl9170fw_desc_cmp(const struct carl9170fw_desc_head *head,
|
|
|
- const u8 descid[4], u16 min_len,
|
|
|
- u8 compatible_revision)
|
|
|
+ const u8 descid[CARL9170FW_MAGIC_SIZE],
|
|
|
+ u16 min_len, u8 compatible_revision)
|
|
|
{
|
|
|
if (descid[0] == head->magic[0] && descid[1] == head->magic[1] &&
|
|
|
descid[2] == head->magic[2] && descid[3] == head->magic[3] &&
|