1 #ifndef P54_H 2 #define P54_H 3 4 /* 5 * Shared defines for all mac80211 Prism54 code 6 * 7 * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net> 8 * 9 * Based on the islsm (softmac prism54) driver, which is: 10 * Copyright 2004-2006 Jean-Baptiste Note <jbnote@gmail.com>, et al. 11 * 12 * This program is free software; you can redistribute it and/or modify 13 * it under the terms of the GNU General Public License version 2 as 14 * published by the Free Software Foundation. 15 */ 16 17 enum p54_control_frame_types { 18 P54_CONTROL_TYPE_SETUP = 0, 19 P54_CONTROL_TYPE_SCAN, 20 P54_CONTROL_TYPE_TRAP, 21 P54_CONTROL_TYPE_DCFINIT, 22 P54_CONTROL_TYPE_RX_KEYCACHE, 23 P54_CONTROL_TYPE_TIM, 24 P54_CONTROL_TYPE_PSM, 25 P54_CONTROL_TYPE_TXCANCEL, 26 P54_CONTROL_TYPE_TXDONE, 27 P54_CONTROL_TYPE_BURST, 28 P54_CONTROL_TYPE_STAT_READBACK, 29 P54_CONTROL_TYPE_BBP, 30 P54_CONTROL_TYPE_EEPROM_READBACK, 31 P54_CONTROL_TYPE_LED, 32 P54_CONTROL_TYPE_GPIO, 33 P54_CONTROL_TYPE_TIMER, 34 P54_CONTROL_TYPE_MODULATION, 35 P54_CONTROL_TYPE_SYNTH_CONFIG, 36 P54_CONTROL_TYPE_DETECTOR_VALUE, 37 P54_CONTROL_TYPE_XBOW_SYNTH_CFG, 38 P54_CONTROL_TYPE_CCE_QUIET, 39 P54_CONTROL_TYPE_PSM_STA_UNLOCK, 40 P54_CONTROL_TYPE_PCS, 41 P54_CONTROL_TYPE_BT_BALANCER = 28, 42 P54_CONTROL_TYPE_GROUP_ADDRESS_TABLE = 30, 43 P54_CONTROL_TYPE_ARPTABLE = 31, 44 P54_CONTROL_TYPE_BT_OPTIONS = 35 45 }; 46 47 #define P54_HDR_FLAG_CONTROL BIT(15) 48 #define P54_HDR_FLAG_CONTROL_OPSET (BIT(15) + BIT(0)) 49 50 struct p54_hdr { 51 __le16 flags; 52 __le16 len; 53 __le32 req_id; 54 __le16 type; /* enum p54_control_frame_types */ 55 u8 rts_tries; 56 u8 tries; 57 u8 data[0]; 58 } __attribute__ ((packed)); 59 60 #define FREE_AFTER_TX(skb) \ 61 ((((struct p54_hdr *) ((struct sk_buff *) skb)->data)-> \ 62 flags) == cpu_to_le16(P54_HDR_FLAG_CONTROL_OPSET)) 63 64 struct p54_edcf_queue_param { 65 __le16 aifs; 66 __le16 cwmin; 67 __le16 cwmax; 68 __le16 txop; 69 } __attribute__ ((packed)); 70 71 struct p54_rssi_linear_approximation { 72 s16 mul; 73 s16 add; 74 s16 longbow_unkn; 75 s16 longbow_unk2; 76 }; 77 78 #define EEPROM_READBACK_LEN 0x3fc 79 80 #define ISL38XX_DEV_FIRMWARE_ADDR 0x20000 81 82 #define FW_FMAC 0x464d4143 83 #define FW_LM86 0x4c4d3836 84 #define FW_LM87 0x4c4d3837 85 #define FW_LM20 0x4c4d3230 86 87 struct p54_common { 88 struct ieee80211_hw *hw; 89 u32 rx_start; 90 u32 rx_end; 91 struct sk_buff_head tx_queue; 92 void (*tx)(struct ieee80211_hw *dev, struct sk_buff *skb); 93 int (*open)(struct ieee80211_hw *dev); 94 void (*stop)(struct ieee80211_hw *dev); 95 int mode; 96 u16 rx_mtu; 97 u8 headroom; 98 u8 tailroom; 99 struct mutex conf_mutex; 100 u8 mac_addr[ETH_ALEN]; 101 u8 bssid[ETH_ALEN]; 102 struct pda_iq_autocal_entry *iq_autocal; 103 unsigned int iq_autocal_len; 104 struct pda_channel_output_limit *output_limit; 105 unsigned int output_limit_len; 106 struct pda_pa_curve_data *curve_data; 107 struct p54_rssi_linear_approximation rssical_db[IEEE80211_NUM_BANDS]; 108 unsigned int filter_flags; 109 bool use_short_slot; 110 u16 rxhw; 111 u8 version; 112 unsigned int tx_hdr_len; 113 unsigned int fw_var; 114 unsigned int fw_interface; 115 unsigned int output_power; 116 u32 tsf_low32; 117 u32 tsf_high32; 118 u64 basic_rate_mask; 119 u16 wakeup_timer; 120 u16 aid; 121 struct ieee80211_tx_queue_stats tx_stats[8]; 122 struct p54_edcf_queue_param qos_params[8]; 123 struct ieee80211_low_level_stats stats; 124 struct delayed_work work; 125 struct sk_buff *cached_beacon; 126 int noise; 127 void *eeprom; 128 struct completion eeprom_comp; 129 u8 privacy_caps; 130 u8 rx_keycache_size; 131 }; 132 133 int p54_rx(struct ieee80211_hw *dev, struct sk_buff *skb); 134 void p54_free_skb(struct ieee80211_hw *dev, struct sk_buff *skb); 135 int p54_parse_firmware(struct ieee80211_hw *dev, const struct firmware *fw); 136 int p54_read_eeprom(struct ieee80211_hw *dev); 137 struct ieee80211_hw *p54_init_common(size_t priv_data_len); 138 void p54_free_common(struct ieee80211_hw *dev); 139 140 #endif /* P54_H */ 141