📄 ipw2200.h
字号:
u16 next_packet_duration; u16 next_frag_len; u16 back_off_counter; //////txop; u8 retrylimit; u16 cwcurrent; u8 reserved3; /* 802.11 MAC Header */ union { struct tx_tfd_24 tfd_24; struct tx_tfd_26 tfd_26; struct tx_tfd_30 tfd_30; struct tx_tfd_32 tfd_32; } tfd; /* Payload DMA info */ u32 num_chunks; u32 chunk_ptr[NUM_TFD_CHUNKS]; u16 chunk_len[NUM_TFD_CHUNKS];} __attribute__ ((packed));struct txrx_control_flags { u8 message_type; u8 rx_seq_num; u8 control_bits; u8 reserved;} __attribute__ ((packed));#define TFD_SIZE 128#define TFD_CMD_IMMEDIATE_PAYLOAD_LENGTH (TFD_SIZE - sizeof(struct txrx_control_flags))struct tfd_frame { struct txrx_control_flags control_flags; union { struct tfd_data data; struct tfd_command cmd; u8 raw[TFD_CMD_IMMEDIATE_PAYLOAD_LENGTH]; } u;} __attribute__ ((packed));typedef void destructor_func(const void *);/** * Tx Queue for DMA. Queue consists of circular buffer of * BD's and required locking structures. */struct clx2_tx_queue { struct clx2_queue q; struct tfd_frame *bd; struct ieee80211_txb **txb;};/* * RX related structures and functions */#define RX_FREE_BUFFERS 32#define RX_LOW_WATERMARK 8#define SUP_RATE_11A_MAX_NUM_CHANNELS 8#define SUP_RATE_11B_MAX_NUM_CHANNELS 4#define SUP_RATE_11G_MAX_NUM_CHANNELS 12// Used for passing to driver number of successes and failures per ratestruct rate_histogram { union { u32 a[SUP_RATE_11A_MAX_NUM_CHANNELS]; u32 b[SUP_RATE_11B_MAX_NUM_CHANNELS]; u32 g[SUP_RATE_11G_MAX_NUM_CHANNELS]; } success; union { u32 a[SUP_RATE_11A_MAX_NUM_CHANNELS]; u32 b[SUP_RATE_11B_MAX_NUM_CHANNELS]; u32 g[SUP_RATE_11G_MAX_NUM_CHANNELS]; } failed;} __attribute__ ((packed));/* statistics command response */struct ipw_cmd_stats { u8 cmd_id; u8 seq_num; u16 good_sfd; u16 bad_plcp; u16 wrong_bssid; u16 valid_mpdu; u16 bad_mac_header; u16 reserved_frame_types; u16 rx_ina; u16 bad_crc32; u16 invalid_cts; u16 invalid_acks; u16 long_distance_ina_fina; u16 dsp_silence_unreachable; u16 accumulated_rssi; u16 rx_ovfl_frame_tossed; u16 rssi_silence_threshold; u16 rx_ovfl_frame_supplied; u16 last_rx_frame_signal; u16 last_rx_frame_noise; u16 rx_autodetec_no_ofdm; u16 rx_autodetec_no_barker; u16 reserved;} __attribute__ ((packed));struct notif_channel_result { u8 channel_num; struct ipw_cmd_stats stats; u8 uReserved;} __attribute__ ((packed));#define SCAN_COMPLETED_STATUS_COMPLETE 1#define SCAN_COMPLETED_STATUS_ABORTED 2struct notif_scan_complete { u8 scan_type; u8 num_channels; u8 status; u8 reserved;} __attribute__ ((packed));struct notif_frag_length { u16 frag_length; u16 reserved;} __attribute__ ((packed));struct notif_beacon_state { u32 state; u32 number;} __attribute__ ((packed));struct notif_tgi_tx_key { u8 key_state; u8 security_type; u8 station_index; u8 reserved;} __attribute__ ((packed));struct notif_link_deterioration { struct ipw_cmd_stats stats; u8 rate; u8 modulation; struct rate_histogram histogram; u8 reserved1; u16 reserved2;} __attribute__ ((packed));struct notif_association { u8 state;} __attribute__ ((packed));struct notif_authenticate { u8 state; struct machdr24 addr; u16 status;} __attribute__ ((packed));struct notif_calibration { u8 data[104];} __attribute__ ((packed));struct notif_noise { u32 value;} __attribute__ ((packed));struct ipw_rx_notification { u8 reserved[8]; u8 subtype; u8 flags; u16 size; union { struct notif_association assoc; struct notif_authenticate auth; struct notif_channel_result channel_result; struct notif_scan_complete scan_complete; struct notif_frag_length frag_len; struct notif_beacon_state beacon_state; struct notif_tgi_tx_key tgi_tx_key; struct notif_link_deterioration link_deterioration; struct notif_calibration calibration; struct notif_noise noise; u8 raw[0]; } u;} __attribute__ ((packed));struct ipw_rx_frame { u32 reserved1; u8 parent_tsf[4]; // fw_use[0] is boolean for OUR_TSF_IS_GREATER u8 received_channel; // The channel that this frame was received on. // Note that for .11b this does not have to be // the same as the channel that it was sent. // Filled by LMAC u8 frameStatus; u8 rate; u8 rssi; u8 agc; u8 rssi_dbm; u16 signal; u16 noise; u8 antennaAndPhy; u8 control; // control bit should be on in bg u8 rtscts_rate; // rate of rts or cts (in rts cts sequence rate // is identical) u8 rtscts_seen; // 0x1 RTS seen ; 0x2 CTS seen u16 length; u8 data[0];} __attribute__ ((packed));struct ipw_rx_header { u8 message_type; u8 rx_seq_num; u8 control_bits; u8 reserved;} __attribute__ ((packed));struct ipw_rx_packet { struct ipw_rx_header header; union { struct ipw_rx_frame frame; struct ipw_rx_notification notification; } u;} __attribute__ ((packed));#define IPW_RX_NOTIFICATION_SIZE sizeof(struct ipw_rx_header) + 12#define IPW_RX_FRAME_SIZE (unsigned int)(sizeof(struct ipw_rx_header) + \ sizeof(struct ipw_rx_frame))struct ipw_rx_mem_buffer { dma_addr_t dma_addr; struct ipw_rx_buffer *rxb; struct sk_buff *skb; struct list_head list;}; /* Not transferred over network, so not __attribute__ ((packed)) */struct ipw_rx_queue { struct ipw_rx_mem_buffer pool[RX_QUEUE_SIZE + RX_FREE_BUFFERS]; struct ipw_rx_mem_buffer *queue[RX_QUEUE_SIZE]; u32 processed; /* Internal index to last handled Rx packet */ u32 read; /* Shared index to newest available Rx buffer */ u32 write; /* Shared index to oldest written Rx packet */ u32 free_count; /* Number of pre-allocated buffers in rx_free */ /* Each of these lists is used as a FIFO for ipw_rx_mem_buffers */ struct list_head rx_free; /* Own an SKBs */ struct list_head rx_used; /* No SKB allocated */ spinlock_t lock;}; /* Not transferred over network, so not __attribute__ ((packed)) */struct alive_command_responce { u8 alive_command; u8 sequence_number; u16 software_revision; u8 device_identifier; u8 reserved1[5]; u16 reserved2; u16 reserved3; u16 clock_settle_time; u16 powerup_settle_time; u16 reserved4; u8 time_stamp[5]; /* month, day, year, hours, minutes */ u8 ucode_valid;} __attribute__ ((packed));#define IPW_MAX_RATES 12struct ipw_rates { u8 num_rates; u8 rates[IPW_MAX_RATES];} __attribute__ ((packed));struct command_block { unsigned int control; u32 source_addr; u32 dest_addr; unsigned int status;} __attribute__ ((packed));#define CB_NUMBER_OF_ELEMENTS_SMALL 64struct fw_image_desc { unsigned long last_cb_index; unsigned long current_cb_index; struct command_block cb_list[CB_NUMBER_OF_ELEMENTS_SMALL]; void *v_addr; unsigned long p_addr; unsigned long len;};struct ipw_sys_config { u8 bt_coexistence; u8 reserved1; u8 answer_broadcast_ssid_probe; u8 accept_all_data_frames; u8 accept_non_directed_frames; u8 exclude_unicast_unencrypted; u8 disable_unicast_decryption; u8 exclude_multicast_unencrypted; u8 disable_multicast_decryption; u8 antenna_diversity; u8 pass_crc_to_host; u8 dot11g_auto_detection; u8 enable_cts_to_self; u8 enable_multicast_filtering; u8 bt_coexist_collision_thr; u8 reserved2; u8 accept_all_mgmt_bcpr; u8 accept_all_mgtm_frames; u8 pass_noise_stats_to_host; u8 reserved3;} __attribute__ ((packed));struct ipw_multicast_addr { u8 num_of_multicast_addresses; u8 reserved[3]; u8 mac1[6]; u8 mac2[6]; u8 mac3[6]; u8 mac4[6];} __attribute__ ((packed));#define DCW_WEP_KEY_INDEX_MASK 0x03 /* bits [0:1] */#define DCW_WEP_KEY_SEC_TYPE_MASK 0x30 /* bits [4:5] */#define DCW_WEP_KEY_SEC_TYPE_WEP 0x00#define DCW_WEP_KEY_SEC_TYPE_CCM 0x20#define DCW_WEP_KEY_SEC_TYPE_TKIP 0x30#define DCW_WEP_KEY_INVALID_SIZE 0x00 /* 0 = Invalid key */#define DCW_WEP_KEY64Bit_SIZE 0x05 /* 64-bit encryption */#define DCW_WEP_KEY128Bit_SIZE 0x0D /* 128-bit encryption */#define DCW_CCM_KEY128Bit_SIZE 0x10 /* 128-bit key *///#define DCW_WEP_KEY128BitIV_SIZE 0x10 /* 128-bit key and 128-bit IV */struct ipw_wep_key { u8 cmd_id; u8 seq_num; u8 key_index; u8 key_size; u8 key[16];} __attribute__ ((packed));struct ipw_tgi_tx_key { u8 key_id; u8 security_type; u8 station_index; u8 flags; u8 key[16]; u32 tx_counter[2];} __attribute__ ((packed));#define IPW_SCAN_CHANNELS 54struct ipw_scan_request { u8 scan_type; u16 dwell_time; u8 channels_list[IPW_SCAN_CHANNELS]; u8 channels_reserved[3];} __attribute__ ((packed));enum { IPW_SCAN_PASSIVE_TILL_FIRST_BEACON_SCAN = 0, IPW_SCAN_PASSIVE_FULL_DWELL_SCAN, IPW_SCAN_ACTIVE_DIRECT_SCAN, IPW_SCAN_ACTIVE_BROADCAST_SCAN, IPW_SCAN_ACTIVE_BROADCAST_AND_DIRECT_SCAN, IPW_SCAN_TYPES};struct ipw_scan_request_ext { u32 full_scan_index; u8 channels_list[IPW_SCAN_CHANNELS]; u8 scan_type[IPW_SCAN_CHANNELS / 2]; u8 reserved; u16 dwell_time[IPW_SCAN_TYPES];} __attribute__ ((packed));extern inline u8 ipw_get_scan_type(struct ipw_scan_request_ext *scan, u8 index){ if (index % 2) return scan->scan_type[index / 2] & 0x0F; else return (scan->scan_type[index / 2] & 0xF0) >> 4;}extern inline void ipw_set_scan_type(struct ipw_scan_request_ext *scan, u8 index, u8 scan_type){ if (index % 2) scan->scan_type[index / 2] = (scan->scan_type[index / 2] & 0xF0) | (scan_type & 0x0F); else scan->scan_type[index / 2] = (scan->scan_type[index / 2] & 0x0F) | ((scan_type & 0x0F) << 4);}struct ipw_associate { u8 channel; u8 auth_type:4, auth_key:4; u8 assoc_type; u8 reserved; u16 policy_support; u8 preamble_length; u8 ieee_mode; u8 bssid[ETH_ALEN]; u32 assoc_tsf_msw; u32 assoc_tsf_lsw; u16 capability; u16 listen_interval; u16 beacon_interval; u8 dest[ETH_ALEN]; u16 atim_window; u8 smr; u8 reserved1; u16 reserved2;} __attribute__ ((packed));struct ipw_supported_rates { u8 ieee_mode; u8 num_rates; u8 purpose; u8 reserved; u8 supported_rates[IPW_MAX_RATES];} __attribute__ ((packed));struct ipw_rts_threshold { u16 rts_threshold; u16 reserved;} __attribute__ ((packed));struct ipw_frag_threshold { u16 frag_threshold; u16 reserved;} __attribute__ ((packed));struct ipw_retry_limit { u8 short_retry_limit; u8 long_retry_limit; u16 reserved;} __attribute__ ((packed));struct ipw_dino_config { u32 dino_config_addr; u16 dino_config_size; u8 dino_response; u8 reserved;} __attribute__ ((packed));struct ipw_aironet_info { u8 id; u8 length; u16 reserved;} __attribute__ ((packed));struct ipw_rx_key { u8 station_index; u8 key_type; u8 key_id; u8 key_flag; u8 key[16]; u8 station_address[6]; u8 key_index; u8 reserved;} __attribute__ ((packed));struct ipw_country_channel_info { u8 first_channel; u8 no_channels; s8 max_tx_power;} __attribute__ ((packed));struct ipw_country_info { u8 id; u8 length; u8 country_str[3]; struct ipw_country_channel_info groups[7];} __attribute__ ((packed));struct ipw_channel_tx_power { u8 channel_number; s8 tx_power;} __attribute__ ((packed));#define SCAN_ASSOCIATED_INTERVAL (HZ)#define SCAN_INTERVAL (HZ / 10)#define MAX_A_CHANNELS 37
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -