diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-5000.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 45 |
1 files changed, 10 insertions, 35 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c index e81000cdcbc5..ee3613db3132 100644 --- a/drivers/net/wireless/iwlwifi/iwl-5000.c +++ b/drivers/net/wireless/iwlwifi/iwl-5000.c | |||
@@ -721,11 +721,9 @@ static int iwl5000_alive_notify(struct iwl_priv *priv) | |||
721 | iwl_write_targ_mem(priv, a, 0); | 721 | iwl_write_targ_mem(priv, a, 0); |
722 | 722 | ||
723 | iwl_write_prph(priv, IWL50_SCD_DRAM_BASE_ADDR, | 723 | iwl_write_prph(priv, IWL50_SCD_DRAM_BASE_ADDR, |
724 | (priv->shared_phys + | 724 | priv->scd_bc_tbls.dma >> 10); |
725 | offsetof(struct iwl5000_shared, queues_bc_tbls)) >> 10); | ||
726 | iwl_write_prph(priv, IWL50_SCD_QUEUECHAIN_SEL, | 725 | iwl_write_prph(priv, IWL50_SCD_QUEUECHAIN_SEL, |
727 | IWL50_SCD_QUEUECHAIN_SEL_ALL( | 726 | IWL50_SCD_QUEUECHAIN_SEL_ALL(priv->hw_params.max_txq_num)); |
728 | priv->hw_params.max_txq_num)); | ||
729 | iwl_write_prph(priv, IWL50_SCD_AGGR_SEL, 0); | 727 | iwl_write_prph(priv, IWL50_SCD_AGGR_SEL, 0); |
730 | 728 | ||
731 | /* initiate the queues */ | 729 | /* initiate the queues */ |
@@ -788,6 +786,8 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv) | |||
788 | } | 786 | } |
789 | 787 | ||
790 | priv->hw_params.max_txq_num = priv->cfg->mod_params->num_of_queues; | 788 | priv->hw_params.max_txq_num = priv->cfg->mod_params->num_of_queues; |
789 | priv->hw_params.scd_bc_tbls_size = | ||
790 | IWL50_NUM_QUEUES * sizeof(struct iwl5000_scd_bc_tbl); | ||
791 | priv->hw_params.max_stations = IWL5000_STATION_COUNT; | 791 | priv->hw_params.max_stations = IWL5000_STATION_COUNT; |
792 | priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID; | 792 | priv->hw_params.bcast_sta_id = IWL5000_BROADCAST_ID; |
793 | priv->hw_params.max_data_size = IWL50_RTC_DATA_SIZE; | 793 | priv->hw_params.max_data_size = IWL50_RTC_DATA_SIZE; |
@@ -853,28 +853,6 @@ static int iwl5000_hw_set_hw_params(struct iwl_priv *priv) | |||
853 | return 0; | 853 | return 0; |
854 | } | 854 | } |
855 | 855 | ||
856 | static int iwl5000_alloc_shared_mem(struct iwl_priv *priv) | ||
857 | { | ||
858 | priv->shared_virt = pci_alloc_consistent(priv->pci_dev, | ||
859 | sizeof(struct iwl5000_shared), | ||
860 | &priv->shared_phys); | ||
861 | if (!priv->shared_virt) | ||
862 | return -ENOMEM; | ||
863 | |||
864 | memset(priv->shared_virt, 0, sizeof(struct iwl5000_shared)); | ||
865 | |||
866 | return 0; | ||
867 | } | ||
868 | |||
869 | static void iwl5000_free_shared_mem(struct iwl_priv *priv) | ||
870 | { | ||
871 | if (priv->shared_virt) | ||
872 | pci_free_consistent(priv->pci_dev, | ||
873 | sizeof(struct iwl5000_shared), | ||
874 | priv->shared_virt, | ||
875 | priv->shared_phys); | ||
876 | } | ||
877 | |||
878 | /** | 856 | /** |
879 | * iwl5000_txq_update_byte_cnt_tbl - Set up entry in Tx byte-count array | 857 | * iwl5000_txq_update_byte_cnt_tbl - Set up entry in Tx byte-count array |
880 | */ | 858 | */ |
@@ -882,7 +860,7 @@ static void iwl5000_txq_update_byte_cnt_tbl(struct iwl_priv *priv, | |||
882 | struct iwl_tx_queue *txq, | 860 | struct iwl_tx_queue *txq, |
883 | u16 byte_cnt) | 861 | u16 byte_cnt) |
884 | { | 862 | { |
885 | struct iwl5000_shared *shared_data = priv->shared_virt; | 863 | struct iwl5000_scd_bc_tbl *scd_bc_tbl = priv->scd_bc_tbls.addr; |
886 | int write_ptr = txq->q.write_ptr; | 864 | int write_ptr = txq->q.write_ptr; |
887 | int txq_id = txq->q.id; | 865 | int txq_id = txq->q.id; |
888 | u8 sec_ctl = 0; | 866 | u8 sec_ctl = 0; |
@@ -911,17 +889,17 @@ static void iwl5000_txq_update_byte_cnt_tbl(struct iwl_priv *priv, | |||
911 | 889 | ||
912 | bc_ent = cpu_to_le16((len & 0xFFF) | (sta_id << 12)); | 890 | bc_ent = cpu_to_le16((len & 0xFFF) | (sta_id << 12)); |
913 | 891 | ||
914 | shared_data->queues_bc_tbls[txq_id].tfd_offset[write_ptr] = bc_ent; | 892 | scd_bc_tbl[txq_id].tfd_offset[write_ptr] = bc_ent; |
915 | 893 | ||
916 | if (txq->q.write_ptr < TFD_QUEUE_SIZE_BC_DUP) | 894 | if (txq->q.write_ptr < TFD_QUEUE_SIZE_BC_DUP) |
917 | shared_data->queues_bc_tbls[txq_id]. | 895 | scd_bc_tbl[txq_id]. |
918 | tfd_offset[TFD_QUEUE_SIZE_MAX + write_ptr] = bc_ent; | 896 | tfd_offset[TFD_QUEUE_SIZE_MAX + write_ptr] = bc_ent; |
919 | } | 897 | } |
920 | 898 | ||
921 | static void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv, | 899 | static void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv, |
922 | struct iwl_tx_queue *txq) | 900 | struct iwl_tx_queue *txq) |
923 | { | 901 | { |
924 | struct iwl5000_shared *shared_data = priv->shared_virt; | 902 | struct iwl5000_scd_bc_tbl *scd_bc_tbl = priv->scd_bc_tbls.addr; |
925 | int txq_id = txq->q.id; | 903 | int txq_id = txq->q.id; |
926 | int read_ptr = txq->q.read_ptr; | 904 | int read_ptr = txq->q.read_ptr; |
927 | u8 sta_id = 0; | 905 | u8 sta_id = 0; |
@@ -933,11 +911,10 @@ static void iwl5000_txq_inval_byte_cnt_tbl(struct iwl_priv *priv, | |||
933 | sta_id = txq->cmd[read_ptr]->cmd.tx.sta_id; | 911 | sta_id = txq->cmd[read_ptr]->cmd.tx.sta_id; |
934 | 912 | ||
935 | bc_ent = cpu_to_le16(1 | (sta_id << 12)); | 913 | bc_ent = cpu_to_le16(1 | (sta_id << 12)); |
936 | shared_data->queues_bc_tbls[txq_id]. | 914 | scd_bc_tbl[txq_id].tfd_offset[read_ptr] = bc_ent; |
937 | tfd_offset[read_ptr] = bc_ent; | ||
938 | 915 | ||
939 | if (txq->q.write_ptr < TFD_QUEUE_SIZE_BC_DUP) | 916 | if (txq->q.write_ptr < TFD_QUEUE_SIZE_BC_DUP) |
940 | shared_data->queues_bc_tbls[txq_id]. | 917 | scd_bc_tbl[txq_id]. |
941 | tfd_offset[TFD_QUEUE_SIZE_MAX + read_ptr] = bc_ent; | 918 | tfd_offset[TFD_QUEUE_SIZE_MAX + read_ptr] = bc_ent; |
942 | } | 919 | } |
943 | 920 | ||
@@ -1450,8 +1427,6 @@ static struct iwl_hcmd_utils_ops iwl5000_hcmd_utils = { | |||
1450 | 1427 | ||
1451 | static struct iwl_lib_ops iwl5000_lib = { | 1428 | static struct iwl_lib_ops iwl5000_lib = { |
1452 | .set_hw_params = iwl5000_hw_set_hw_params, | 1429 | .set_hw_params = iwl5000_hw_set_hw_params, |
1453 | .alloc_shared_mem = iwl5000_alloc_shared_mem, | ||
1454 | .free_shared_mem = iwl5000_free_shared_mem, | ||
1455 | .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl, | 1430 | .txq_update_byte_cnt_tbl = iwl5000_txq_update_byte_cnt_tbl, |
1456 | .txq_inval_byte_cnt_tbl = iwl5000_txq_inval_byte_cnt_tbl, | 1431 | .txq_inval_byte_cnt_tbl = iwl5000_txq_inval_byte_cnt_tbl, |
1457 | .txq_set_sched = iwl5000_txq_set_sched, | 1432 | .txq_set_sched = iwl5000_txq_set_sched, |