Lines Matching full:trans
11 #include "iwl-trans.h"
23 struct iwl_trans *trans; in iwl_trans_alloc() local
28 trans = devm_kzalloc(dev, sizeof(*trans) + priv_size, GFP_KERNEL); in iwl_trans_alloc()
29 if (!trans) in iwl_trans_alloc()
32 trans->trans_cfg = cfg_trans; in iwl_trans_alloc()
35 lockdep_init_map(&trans->sync_cmd_lockdep_map, "sync_cmd_lockdep_map", in iwl_trans_alloc()
39 trans->dev = dev; in iwl_trans_alloc()
40 trans->ops = ops; in iwl_trans_alloc()
41 trans->num_rx_queues = 1; in iwl_trans_alloc()
45 if (trans->trans_cfg->gen2) { in iwl_trans_alloc()
46 trans->txqs.tfd.addr_size = 64; in iwl_trans_alloc()
47 trans->txqs.tfd.max_tbs = IWL_TFH_NUM_TBS; in iwl_trans_alloc()
48 trans->txqs.tfd.size = sizeof(struct iwl_tfh_tfd); in iwl_trans_alloc()
50 trans->txqs.tfd.addr_size = 36; in iwl_trans_alloc()
51 trans->txqs.tfd.max_tbs = IWL_NUM_OF_TBS; in iwl_trans_alloc()
52 trans->txqs.tfd.size = sizeof(struct iwl_tfd); in iwl_trans_alloc()
54 trans->max_skb_frags = IWL_TRANS_MAX_FRAGS(trans); in iwl_trans_alloc()
56 return trans; in iwl_trans_alloc()
59 int iwl_trans_init(struct iwl_trans *trans) in iwl_trans_init() argument
63 if (!trans->trans_cfg->gen2) { in iwl_trans_init()
66 } else if (trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_AX210) { in iwl_trans_init()
78 if (WARN_ON(trans->trans_cfg->gen2 && txcmd_size >= txcmd_align)) in iwl_trans_init()
81 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) in iwl_trans_init()
82 trans->txqs.bc_tbl_size = in iwl_trans_init()
84 else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) in iwl_trans_init()
85 trans->txqs.bc_tbl_size = in iwl_trans_init()
88 trans->txqs.bc_tbl_size = sizeof(struct iwlagn_scd_bc_tbl); in iwl_trans_init()
94 if (trans->trans_cfg->gen2) { in iwl_trans_init()
95 trans->txqs.bc_pool = dmam_pool_create("iwlwifi:bc", trans->dev, in iwl_trans_init()
96 trans->txqs.bc_tbl_size, in iwl_trans_init()
98 if (!trans->txqs.bc_pool) in iwl_trans_init()
103 WARN_ON(trans->txqs.tfd.addr_size != in iwl_trans_init()
104 (trans->trans_cfg->gen2 ? 64 : 36)); in iwl_trans_init()
106 snprintf(trans->dev_cmd_pool_name, sizeof(trans->dev_cmd_pool_name), in iwl_trans_init()
107 "iwl_cmd_pool:%s", dev_name(trans->dev)); in iwl_trans_init()
108 trans->dev_cmd_pool = in iwl_trans_init()
109 kmem_cache_create(trans->dev_cmd_pool_name, in iwl_trans_init()
112 if (!trans->dev_cmd_pool) in iwl_trans_init()
115 trans->txqs.tso_hdr_page = alloc_percpu(struct iwl_tso_hdr_page); in iwl_trans_init()
116 if (!trans->txqs.tso_hdr_page) { in iwl_trans_init()
117 kmem_cache_destroy(trans->dev_cmd_pool); in iwl_trans_init()
122 init_waitqueue_head(&trans->wait_command_queue); in iwl_trans_init()
127 void iwl_trans_free(struct iwl_trans *trans) in iwl_trans_free() argument
131 if (trans->txqs.tso_hdr_page) { in iwl_trans_free()
134 per_cpu_ptr(trans->txqs.tso_hdr_page, i); in iwl_trans_free()
140 free_percpu(trans->txqs.tso_hdr_page); in iwl_trans_free()
143 kmem_cache_destroy(trans->dev_cmd_pool); in iwl_trans_free()
146 int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) in iwl_trans_send_cmd() argument
151 test_bit(STATUS_RFKILL_OPMODE, &trans->status))) in iwl_trans_send_cmd()
163 if (unlikely(trans->system_pm_mode == IWL_PLAT_PM_MODE_D3 && in iwl_trans_send_cmd()
167 if (unlikely(test_bit(STATUS_FW_ERROR, &trans->status))) in iwl_trans_send_cmd()
170 if (unlikely(trans->state != IWL_TRANS_FW_ALIVE)) { in iwl_trans_send_cmd()
171 IWL_ERR(trans, "%s bad state = %d\n", __func__, trans->state); in iwl_trans_send_cmd()
180 lock_map_acquire_read(&trans->sync_cmd_lockdep_map); in iwl_trans_send_cmd()
182 if (trans->wide_cmd_header && !iwl_cmd_groupid(cmd->id)) { in iwl_trans_send_cmd()
187 ret = iwl_trans_txq_send_hcmd(trans, cmd); in iwl_trans_send_cmd()
190 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_trans_send_cmd()
216 const char *iwl_get_cmd_string(struct iwl_trans *trans, u32 id) in iwl_get_cmd_string() argument
226 if (!trans->command_groups || grp >= trans->command_groups_size || in iwl_get_cmd_string()
227 !trans->command_groups[grp].arr) in iwl_get_cmd_string()
230 arr = &trans->command_groups[grp]; in iwl_get_cmd_string()
238 int iwl_cmd_groups_verify_sorted(const struct iwl_trans_config *trans) in iwl_cmd_groups_verify_sorted() argument
243 for (i = 0; i < trans->command_groups_size; i++) { in iwl_cmd_groups_verify_sorted()
244 arr = &trans->command_groups[i]; in iwl_cmd_groups_verify_sorted()