From 25322855d58fdf27412f41ee9897cc84043a947b Mon Sep 17 00:00:00 2001 From: Reyk Floeter Date: Mon, 12 Mar 2007 01:04:53 +0000 Subject: add some HAL functions (again) inspired by the changes from the madwifi-old-openhal project. this was backed out the last time because it was too close to the release and i didn't respect the ABI/API lock. --- sys/dev/ic/ar5212.c | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 75 insertions(+), 2 deletions(-) (limited to 'sys/dev/ic/ar5212.c') diff --git a/sys/dev/ic/ar5212.c b/sys/dev/ic/ar5212.c index f25e577eed7..87a47163c9d 100644 --- a/sys/dev/ic/ar5212.c +++ b/sys/dev/ic/ar5212.c @@ -1,7 +1,7 @@ -/* $OpenBSD: ar5212.c,v 1.38 2007/03/12 00:41:32 reyk Exp $ */ +/* $OpenBSD: ar5212.c,v 1.39 2007/03/12 01:04:52 reyk Exp $ */ /* - * Copyright (c) 2004, 2005 Reyk Floeter + * Copyright (c) 2004, 2005, 2006, 2007 Reyk Floeter * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -172,6 +172,22 @@ ar5k_ar5212_fill(struct ath_hal *hal) AR5K_HAL_FUNCTION(hal, ar5212, eeprom_is_busy); AR5K_HAL_FUNCTION(hal, ar5212, eeprom_read); AR5K_HAL_FUNCTION(hal, ar5212, eeprom_write); + + /* + * Unused functions or functions not implemented + */ + AR5K_HAL_FUNCTION(hal, ar5212, set_bssid_mask); + AR5K_HAL_FUNCTION(hal, ar5212, get_tx_queueprops); + AR5K_HAL_FUNCTION(hal, ar5212, num_tx_pending); + AR5K_HAL_FUNCTION(hal, ar5212, phy_disable); + AR5K_HAL_FUNCTION(hal, ar5212, set_txpower_limit); + AR5K_HAL_FUNCTION(hal, ar5212, set_def_antenna); + AR5K_HAL_FUNCTION(hal, ar5212, get_def_antenna); +#ifdef notyet + AR5K_HAL_FUNCTION(hal, ar5212, set_capability); + AR5K_HAL_FUNCTION(hal, ar5212, proc_mib_event); + AR5K_HAL_FUNCTION(hal, ar5212, get_tx_inter_queue); +#endif } struct ath_hal * @@ -407,6 +423,13 @@ ar5k_ar5212_detach(struct ath_hal *hal) free(hal, M_DEVBUF); } +HAL_BOOL +ar5k_ar5212_phy_disable(struct ath_hal *hal) +{ + AR5K_REG_WRITE(AR5K_AR5212_PHY_ACTIVE, AR5K_AR5212_PHY_DISABLE); + return (AH_TRUE); +} + HAL_BOOL ar5k_ar5212_reset(struct ath_hal *hal, HAL_OPMODE op_mode, HAL_CHANNEL *channel, HAL_BOOL change_channel, HAL_STATUS *status) @@ -791,6 +814,18 @@ ar5k_ar5212_reset(struct ath_hal *hal, HAL_OPMODE op_mode, HAL_CHANNEL *channel, return (AH_TRUE); } +void +ar5k_ar5212_set_def_antenna(struct ath_hal *hal, u_int ant) +{ + AR5K_REG_WRITE(AR5K_AR5212_DEFAULT_ANTENNA, ant); +} + +u_int +ar5k_ar5212_get_def_antenna(struct ath_hal *hal) +{ + return AR5K_REG_READ(AR5K_AR5212_DEFAULT_ANTENNA); +} + void ar5k_ar5212_set_opmode(struct ath_hal *hal) { @@ -977,6 +1012,15 @@ ar5k_ar5212_setup_tx_queueprops(struct ath_hal *hal, int queue, return (AH_TRUE); } +HAL_BOOL +ar5k_ar5212_get_tx_queueprops(struct ath_hal *hal, int queue, + HAL_TXQ_INFO *queue_info) +{ + AR5K_ASSERT_ENTRY(queue, hal->ah_capabilities.cap_queues.q_tx_num); + bcopy(&hal->ah_txq[queue], queue_info, sizeof(HAL_TXQ_INFO)); + return (AH_TRUE); +} + HAL_BOOL ar5k_ar5212_release_tx_queue(struct ath_hal *hal, u_int queue) { @@ -1196,6 +1240,13 @@ ar5k_ar5212_put_tx_buf(struct ath_hal *hal, u_int queue, u_int32_t phys_addr) return (AH_TRUE); } +u_int32_t +ar5k_ar5212_num_tx_pending(struct ath_hal *hal, u_int queue) +{ + AR5K_ASSERT_ENTRY(queue, hal->ah_capabilities.cap_queues.q_tx_num); + return (AR5K_AR5212_QCU_STS(queue) & AR5K_AR5212_QCU_STS_FRMPENDCNT); +} + HAL_BOOL ar5k_ar5212_tx_start(struct ath_hal *hal, u_int queue) { @@ -1925,6 +1976,20 @@ ar5k_ar5212_set_associd(struct ath_hal *hal, const u_int8_t *bssid, ar5k_ar5212_enable_pspoll(hal, NULL, 0); } +HAL_BOOL +ar5k_ar5212_set_bssid_mask(struct ath_hal *hal, const u_int8_t* mask) +{ + u_int32_t low_id, high_id; + + low_id = AR5K_LOW_ID(mask); + high_id = 0x0000ffff & AR5K_HIGH_ID(mask); + + AR5K_REG_WRITE(AR5K_AR5212_BSS_IDM0, low_id); + AR5K_REG_WRITE(AR5K_AR5212_BSS_IDM1, high_id); + + return (AH_TRUE); +} + HAL_BOOL ar5k_ar5212_set_gpio_output(struct ath_hal *hal, u_int32_t gpio) { @@ -2882,3 +2947,11 @@ ar5k_ar5212_txpower(struct ath_hal *hal, HAL_CHANNEL *channel, u_int txpower) return (AH_TRUE); } +HAL_BOOL +ar5k_ar5212_set_txpower_limit(struct ath_hal *hal, u_int power) +{ + HAL_CHANNEL *channel = &hal->ah_current_channel; + + AR5K_PRINTF("changing txpower to %d\n", power); + return (ar5k_ar5212_txpower(hal, channel, power)); +} -- cgit v1.2.3