Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/iwi/if_iwi.c
Show First 20 Lines • Show All 154 Lines • ▼ Show 20 Lines | |||||
static void iwi_free_tx_ring(struct iwi_softc *, struct iwi_tx_ring *); | static void iwi_free_tx_ring(struct iwi_softc *, struct iwi_tx_ring *); | ||||
static int iwi_alloc_rx_ring(struct iwi_softc *, struct iwi_rx_ring *, | static int iwi_alloc_rx_ring(struct iwi_softc *, struct iwi_rx_ring *, | ||||
int); | int); | ||||
static void iwi_reset_rx_ring(struct iwi_softc *, struct iwi_rx_ring *); | static void iwi_reset_rx_ring(struct iwi_softc *, struct iwi_rx_ring *); | ||||
static void iwi_free_rx_ring(struct iwi_softc *, struct iwi_rx_ring *); | static void iwi_free_rx_ring(struct iwi_softc *, struct iwi_rx_ring *); | ||||
static struct ieee80211_node *iwi_node_alloc(struct ieee80211vap *, | static struct ieee80211_node *iwi_node_alloc(struct ieee80211vap *, | ||||
const uint8_t [IEEE80211_ADDR_LEN]); | const uint8_t [IEEE80211_ADDR_LEN]); | ||||
static void iwi_node_free(struct ieee80211_node *); | static void iwi_node_free(struct ieee80211_node *); | ||||
static void iwi_media_status(struct ifnet *, struct ifmediareq *); | static void iwi_media_status(if_t, struct ifmediareq *); | ||||
static int iwi_newstate(struct ieee80211vap *, enum ieee80211_state, int); | static int iwi_newstate(struct ieee80211vap *, enum ieee80211_state, int); | ||||
static void iwi_wme_init(struct iwi_softc *); | static void iwi_wme_init(struct iwi_softc *); | ||||
static int iwi_wme_setparams(struct iwi_softc *); | static int iwi_wme_setparams(struct iwi_softc *); | ||||
static int iwi_wme_update(struct ieee80211com *); | static int iwi_wme_update(struct ieee80211com *); | ||||
static uint16_t iwi_read_prom_word(struct iwi_softc *, uint8_t); | static uint16_t iwi_read_prom_word(struct iwi_softc *, uint8_t); | ||||
static void iwi_frame_intr(struct iwi_softc *, struct iwi_rx_data *, int, | static void iwi_frame_intr(struct iwi_softc *, struct iwi_rx_data *, int, | ||||
struct iwi_frame *); | struct iwi_frame *); | ||||
static void iwi_notification_intr(struct iwi_softc *, struct iwi_notif *); | static void iwi_notification_intr(struct iwi_softc *, struct iwi_notif *); | ||||
▲ Show 20 Lines • Show All 743 Lines • ▼ Show 20 Lines | iwi_cvtrate(int iwirate) | ||||
return 0; | return 0; | ||||
} | } | ||||
/* | /* | ||||
* The firmware automatically adapts the transmit speed. We report its current | * The firmware automatically adapts the transmit speed. We report its current | ||||
* value here. | * value here. | ||||
*/ | */ | ||||
static void | static void | ||||
iwi_media_status(struct ifnet *ifp, struct ifmediareq *imr) | iwi_media_status(if_t ifp, struct ifmediareq *imr) | ||||
{ | { | ||||
struct ieee80211vap *vap = ifp->if_softc; | struct ieee80211vap *vap = if_getsoftc(ifp); | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
struct iwi_softc *sc = ic->ic_softc; | struct iwi_softc *sc = ic->ic_softc; | ||||
struct ieee80211_node *ni; | struct ieee80211_node *ni; | ||||
/* read current transmission rate from adapter */ | /* read current transmission rate from adapter */ | ||||
ni = ieee80211_ref_node(vap->iv_bss); | ni = ieee80211_ref_node(vap->iv_bss); | ||||
ni->ni_txrate = | ni->ni_txrate = | ||||
iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE)); | iwi_cvtrate(CSR_READ_4(sc, IWI_CSR_CURRENT_TX_RATE)); | ||||
▲ Show 20 Lines • Show All 1,886 Lines • ▼ Show 20 Lines | iwi_set_sensitivity(struct iwi_softc *sc, int8_t rssi_dbm) | ||||
sens.rssi = htole16(rssi_dbm); | sens.rssi = htole16(rssi_dbm); | ||||
return iwi_cmd(sc, IWI_CMD_SET_SENSITIVITY, &sens, sizeof sens); | return iwi_cmd(sc, IWI_CMD_SET_SENSITIVITY, &sens, sizeof sens); | ||||
} | } | ||||
static int | static int | ||||
iwi_auth_and_assoc(struct iwi_softc *sc, struct ieee80211vap *vap) | iwi_auth_and_assoc(struct iwi_softc *sc, struct ieee80211vap *vap) | ||||
{ | { | ||||
struct ieee80211com *ic = vap->iv_ic; | struct ieee80211com *ic = vap->iv_ic; | ||||
struct ifnet *ifp = vap->iv_ifp; | if_t ifp = vap->iv_ifp; | ||||
struct ieee80211_node *ni; | struct ieee80211_node *ni; | ||||
struct iwi_configuration config; | struct iwi_configuration config; | ||||
struct iwi_associate *assoc = &sc->assoc; | struct iwi_associate *assoc = &sc->assoc; | ||||
uint16_t capinfo; | uint16_t capinfo; | ||||
uint32_t data; | uint32_t data; | ||||
int error, mode; | int error, mode; | ||||
IWI_LOCK_ASSERT(sc); | IWI_LOCK_ASSERT(sc); | ||||
▲ Show 20 Lines • Show All 130 Lines • ▼ Show 20 Lines | #endif | ||||
if (ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) | if (ni->ni_capinfo & IEEE80211_CAPINFO_SHORT_SLOTTIME) | ||||
capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME; | capinfo |= IEEE80211_CAPINFO_SHORT_SLOTTIME; | ||||
assoc->capinfo = htole16(capinfo); | assoc->capinfo = htole16(capinfo); | ||||
assoc->lintval = htole16(ic->ic_lintval); | assoc->lintval = htole16(ic->ic_lintval); | ||||
assoc->intval = htole16(ni->ni_intval); | assoc->intval = htole16(ni->ni_intval); | ||||
IEEE80211_ADDR_COPY(assoc->bssid, ni->ni_bssid); | IEEE80211_ADDR_COPY(assoc->bssid, ni->ni_bssid); | ||||
if (vap->iv_opmode == IEEE80211_M_IBSS) | if (vap->iv_opmode == IEEE80211_M_IBSS) | ||||
IEEE80211_ADDR_COPY(assoc->dst, ifp->if_broadcastaddr); | IEEE80211_ADDR_COPY(assoc->dst, if_getbroadcastaddr(ifp)); | ||||
else | else | ||||
IEEE80211_ADDR_COPY(assoc->dst, ni->ni_bssid); | IEEE80211_ADDR_COPY(assoc->dst, ni->ni_bssid); | ||||
DPRINTF(("%s bssid %6D dst %6D channel %u policy 0x%x " | DPRINTF(("%s bssid %6D dst %6D channel %u policy 0x%x " | ||||
"auth %u capinfo 0x%x lintval %u bintval %u\n", | "auth %u capinfo 0x%x lintval %u bintval %u\n", | ||||
assoc->type == IWI_HC_IBSS_START ? "Start" : "Join", | assoc->type == IWI_HC_IBSS_START ? "Start" : "Join", | ||||
assoc->bssid, ":", assoc->dst, ":", | assoc->bssid, ":", assoc->dst, ":", | ||||
assoc->chan, le16toh(assoc->policy), assoc->auth, | assoc->chan, le16toh(assoc->policy), assoc->auth, | ||||
▲ Show 20 Lines • Show All 640 Lines • Show Last 20 Lines |