Lines Matching refs:scrq

3859 				   struct ibmvnic_sub_crq_queue *scrq)
3863 if (!scrq) {
3864 netdev_dbg(adapter->netdev, "Invalid scrq reset.\n");
3868 if (scrq->irq) {
3869 free_irq(scrq->irq, scrq);
3870 irq_dispose_mapping(scrq->irq);
3871 scrq->irq = 0;
3874 if (scrq->msgs) {
3875 memset(scrq->msgs, 0, 4 * PAGE_SIZE);
3876 atomic_set(&scrq->used, 0);
3877 scrq->cur = 0;
3878 scrq->ind_buf.index = 0;
3880 netdev_dbg(adapter->netdev, "Invalid scrq reset\n");
3884 rc = h_reg_sub_crq(adapter->vdev->unit_address, scrq->msg_token,
3885 4 * PAGE_SIZE, &scrq->crq_num, &scrq->hw_irq);
3916 struct ibmvnic_sub_crq_queue *scrq,
3929 scrq->crq_num);
3935 scrq->crq_num, rc);
3941 scrq->ind_buf.indir_arr,
3942 scrq->ind_buf.indir_dma);
3944 dma_unmap_single(dev, scrq->msg_token, 4 * PAGE_SIZE,
3946 free_pages((unsigned long)scrq->msgs, 2);
3947 free_cpumask_var(scrq->affinity_mask);
3948 kfree(scrq);
3955 struct ibmvnic_sub_crq_queue *scrq;
3958 scrq = kzalloc(sizeof(*scrq), GFP_KERNEL);
3959 if (!scrq)
3962 scrq->msgs =
3964 if (!scrq->msgs) {
3968 if (!zalloc_cpumask_var(&scrq->affinity_mask, GFP_KERNEL))
3971 scrq->msg_token = dma_map_single(dev, scrq->msgs, 4 * PAGE_SIZE,
3973 if (dma_mapping_error(dev, scrq->msg_token)) {
3978 rc = h_reg_sub_crq(adapter->vdev->unit_address, scrq->msg_token,
3979 4 * PAGE_SIZE, &scrq->crq_num, &scrq->hw_irq);
3991 scrq->adapter = adapter;
3992 scrq->size = 4 * PAGE_SIZE / sizeof(*scrq->msgs);
3993 scrq->ind_buf.index = 0;
3995 scrq->ind_buf.indir_arr =
3998 &scrq->ind_buf.indir_dma,
4001 if (!scrq->ind_buf.indir_arr)
4004 spin_lock_init(&scrq->lock);
4008 scrq->crq_num, scrq->hw_irq, scrq->irq);
4010 return scrq;
4016 scrq->crq_num);
4019 dma_unmap_single(dev, scrq->msg_token, 4 * PAGE_SIZE,
4022 free_cpumask_var(scrq->affinity_mask);
4024 free_pages((unsigned long)scrq->msgs, 2);
4026 kfree(scrq);
4085 struct ibmvnic_sub_crq_queue *scrq)
4091 H_DISABLE_VIO_INTERRUPT, scrq->hw_irq, 0, 0);
4093 dev_err(dev, "Couldn't disable scrq irq 0x%lx. rc=%ld\n",
4094 scrq->hw_irq, rc);
4101 static void ibmvnic_xics_eoi(struct device *dev, struct ibmvnic_sub_crq_queue *scrq)
4103 u64 val = 0xff000000 | scrq->hw_irq;
4116 struct ibmvnic_sub_crq_queue *scrq)
4119 ibmvnic_xics_eoi(dev, scrq);
4123 struct ibmvnic_sub_crq_queue *scrq)
4128 if (scrq->hw_irq > 0x100000000ULL) {
4129 dev_err(dev, "bad hw_irq = %lx\n", scrq->hw_irq);
4135 ibmvnic_clear_pending_interrupt(dev, scrq);
4139 H_ENABLE_VIO_INTERRUPT, scrq->hw_irq, 0, 0);
4141 dev_err(dev, "Couldn't enable scrq irq 0x%lx. rc=%ld\n",
4142 scrq->hw_irq, rc);
4147 struct ibmvnic_sub_crq_queue *scrq)
4158 while (pending_scrq(adapter, scrq)) {
4159 unsigned int pool = scrq->pool_index;
4164 next = ibmvnic_next_scrq(adapter, scrq);
4196 /* remove tx_comp scrq*/
4199 txq = netdev_get_tx_queue(adapter->netdev, scrq->pool_index);
4202 if (atomic_sub_return(num_entries, &scrq->used) <=
4205 scrq->pool_index)) {
4209 scrq->pool_index);
4212 scrq->pool_index);
4218 enable_scrq_irq(adapter, scrq);
4220 if (pending_scrq(adapter, scrq)) {
4221 disable_scrq_irq(adapter, scrq);
4230 struct ibmvnic_sub_crq_queue *scrq = instance;
4231 struct ibmvnic_adapter *adapter = scrq->adapter;
4233 disable_scrq_irq(adapter, scrq);
4234 ibmvnic_complete_tx(adapter, scrq);
4241 struct ibmvnic_sub_crq_queue *scrq = instance;
4242 struct ibmvnic_adapter *adapter = scrq->adapter;
4250 adapter->rx_stats_buffers[scrq->scrq_num].interrupts++;
4252 if (napi_schedule_prep(&adapter->napi[scrq->scrq_num])) {
4253 disable_scrq_irq(adapter, scrq);
4254 __napi_schedule(&adapter->napi[scrq->scrq_num]);
4263 struct ibmvnic_sub_crq_queue *scrq;
4270 scrq = adapter->tx_scrq[i];
4271 scrq->irq = irq_create_mapping(NULL, scrq->hw_irq);
4273 if (!scrq->irq) {
4279 snprintf(scrq->name, sizeof(scrq->name), "ibmvnic-%x-tx%d",
4281 rc = request_irq(scrq->irq, ibmvnic_interrupt_tx,
4282 0, scrq->name, scrq);
4286 scrq->irq, rc);
4287 irq_dispose_mapping(scrq->irq);
4295 scrq = adapter->rx_scrq[i];
4296 scrq->irq = irq_create_mapping(NULL, scrq->hw_irq);
4297 if (!scrq->irq) {
4302 snprintf(scrq->name, sizeof(scrq->name), "ibmvnic-%x-rx%d",
4304 rc = request_irq(scrq->irq, ibmvnic_interrupt_rx,
4305 0, scrq->name, scrq);
4308 scrq->irq, rc);
4309 irq_dispose_mapping(scrq->irq);
4568 struct ibmvnic_sub_crq_queue *scrq)
4570 union sub_crq *entry = &scrq->msgs[scrq->cur];
4584 struct ibmvnic_sub_crq_queue *scrq)
4589 spin_lock_irqsave(&scrq->lock, flags);
4590 entry = &scrq->msgs[scrq->cur];
4592 if (++scrq->cur == scrq->size)
4593 scrq->cur = 0;
4597 spin_unlock_irqrestore(&scrq->lock, flags);
6602 ret += 4 * PAGE_SIZE; /* the scrq message queue */