X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fnet%2Fwireless%2Fiwlwifi%2Fiwl-core.h;h=7193d97630dce3b3ad068667181e34c71bc48975;hb=2e5a3eaca386ce026f240c7b21e5c4958fcea946;hp=64f4df53986c8d66bb9b8e78633543dac7bd6912;hpb=3bb5da3837cc1aa17736b05139c9a22c3794851a;p=linux-2.6 diff --git a/drivers/net/wireless/iwlwifi/iwl-core.h b/drivers/net/wireless/iwlwifi/iwl-core.h index 64f4df5398..7193d97630 100644 --- a/drivers/net/wireless/iwlwifi/iwl-core.h +++ b/drivers/net/wireless/iwlwifi/iwl-core.h @@ -82,6 +82,9 @@ struct iwl_cmd; #define IWL_SKU_A 0x2 #define IWL_SKU_N 0x8 +struct iwl_hcmd_ops { + int (*rxon_assoc)(struct iwl_priv *priv); +}; struct iwl_hcmd_utils_ops { int (*enqueue_hcmd)(struct iwl_priv *priv, struct iwl_host_cmd *cmd); }; @@ -89,19 +92,35 @@ struct iwl_hcmd_utils_ops { struct iwl_lib_ops { /* iwlwifi driver (priv) init */ int (*init_drv)(struct iwl_priv *priv); + /* set hw dependant perameters */ + int (*set_hw_params)(struct iwl_priv *priv); + + void (*txq_update_byte_cnt_tbl)(struct iwl_priv *priv, + struct iwl4965_tx_queue *txq, + u16 byte_cnt); + /* nic init */ + int (*hw_nic_init)(struct iwl_priv *priv); + /* alive notification */ + int (*alive_notify)(struct iwl_priv *priv); + /* check validity of rtc data address */ + int (*is_valid_rtc_data_addr)(u32 addr); + /* 1st ucode load */ + int (*load_ucode)(struct iwl_priv *priv); + /* rfkill */ + void (*radio_kill_sw)(struct iwl_priv *priv, int disable_radio); /* eeprom operations (as defined in iwl-eeprom.h) */ struct iwl_eeprom_ops eeprom_ops; - void (*radio_kill_sw)(struct iwl_priv *priv, int disable_radio); }; struct iwl_ops { const struct iwl_lib_ops *lib; + const struct iwl_hcmd_ops *hcmd; const struct iwl_hcmd_utils_ops *utils; }; struct iwl_mod_params { int disable; /* def: 0 = enable radio */ - int hw_crypto; /* def: 0 = using software encryption */ + int sw_crypto; /* def: 0 = using hardware encryption */ int debug; /* def: 0 = minimal debug log messages */ int disable_hw_scan; /* def: 0 = use h/w scan */ int num_of_queues; /* def: HW dependent */ @@ -148,6 +167,63 @@ int iwl_send_cmd_pdu_async(struct iwl_priv *priv, u8 id, u16 len, int (*callback)(struct iwl_priv *priv, struct iwl_cmd *cmd, struct sk_buff *skb)); +/*************** DRIVER STATUS FUNCTIONS *****/ + +#define STATUS_HCMD_ACTIVE 0 /* host command in progress */ +#define STATUS_HCMD_SYNC_ACTIVE 1 /* sync host command in progress */ +#define STATUS_INT_ENABLED 2 +#define STATUS_RF_KILL_HW 3 +#define STATUS_RF_KILL_SW 4 +#define STATUS_INIT 5 +#define STATUS_ALIVE 6 +#define STATUS_READY 7 +#define STATUS_TEMPERATURE 8 +#define STATUS_GEO_CONFIGURED 9 +#define STATUS_EXIT_PENDING 10 +#define STATUS_IN_SUSPEND 11 +#define STATUS_STATISTICS 12 +#define STATUS_SCANNING 13 +#define STATUS_SCAN_ABORTING 14 +#define STATUS_SCAN_HW 15 +#define STATUS_POWER_PMI 16 +#define STATUS_FW_ERROR 17 +#define STATUS_CONF_PENDING 18 + + +static inline int iwl_is_ready(struct iwl_priv *priv) +{ + /* The adapter is 'ready' if READY and GEO_CONFIGURED bits are + * set but EXIT_PENDING is not */ + return test_bit(STATUS_READY, &priv->status) && + test_bit(STATUS_GEO_CONFIGURED, &priv->status) && + !test_bit(STATUS_EXIT_PENDING, &priv->status); +} + +static inline int iwl_is_alive(struct iwl_priv *priv) +{ + return test_bit(STATUS_ALIVE, &priv->status); +} + +static inline int iwl_is_init(struct iwl_priv *priv) +{ + return test_bit(STATUS_INIT, &priv->status); +} + +static inline int iwl_is_rfkill(struct iwl_priv *priv) +{ + return test_bit(STATUS_RF_KILL_HW, &priv->status) || + test_bit(STATUS_RF_KILL_SW, &priv->status); +} + +static inline int iwl_is_ready_rf(struct iwl_priv *priv) +{ + + if (iwl_is_rfkill(priv)) + return 0; + + return iwl_is_ready(priv); +} + enum iwlcore_card_notify { IWLCORE_INIT_EVT = 0, @@ -158,4 +234,13 @@ enum iwlcore_card_notify { int iwlcore_low_level_notify(struct iwl_priv *priv, enum iwlcore_card_notify notify); +extern int iwl_send_statistics_request(struct iwl_priv *priv, u8 flags); +int iwl_send_lq_cmd(struct iwl_priv *priv, + struct iwl_link_quality_cmd *lq, u8 flags); + +static inline int iwl_send_rxon_assoc(struct iwl_priv *priv) +{ + return priv->cfg->ops->hcmd->rxon_assoc(priv); +} + #endif /* __iwl_core_h__ */