Lines Matching refs:hp_ctrl

69 static void octep_hp_enable_pdev(struct octep_hp_controller *hp_ctrl,  in octep_hp_enable_pdev()  argument
72 guard(mutex)(&hp_ctrl->slot_lock); in octep_hp_enable_pdev()
80 hp_slot->hp_pdev = pci_scan_single_device(hp_ctrl->pdev->bus, in octep_hp_enable_pdev()
82 pci_bus_assign_resources(hp_ctrl->pdev->bus); in octep_hp_enable_pdev()
89 static void octep_hp_disable_pdev(struct octep_hp_controller *hp_ctrl, in octep_hp_disable_pdev() argument
92 guard(mutex)(&hp_ctrl->slot_lock); in octep_hp_disable_pdev()
94 pci_dbg(hp_ctrl->pdev, "Slot %s is already disabled\n", in octep_hp_disable_pdev()
132 octep_hp_register_slot(struct octep_hp_controller *hp_ctrl, in octep_hp_register_slot() argument
143 hp_slot->ctrl = hp_ctrl; in octep_hp_register_slot()
150 ret = pci_hp_register(&hp_slot->slot, hp_ctrl->pdev->bus, in octep_hp_register_slot()
160 list_add_tail(&hp_slot->list, &hp_ctrl->slot_list); in octep_hp_register_slot()
161 octep_hp_disable_pdev(hp_ctrl, hp_slot); in octep_hp_register_slot()
169 struct octep_hp_controller *hp_ctrl = hp_slot->ctrl; in octep_hp_deregister_slot() local
172 octep_hp_enable_pdev(hp_ctrl, hp_slot); in octep_hp_deregister_slot()
189 static void octep_hp_cmd_handler(struct octep_hp_controller *hp_ctrl, in octep_hp_cmd_handler() argument
198 list_for_each_entry(hp_slot, &hp_ctrl->slot_list, list) { in octep_hp_cmd_handler()
202 pci_info(hp_ctrl->pdev, "Received %s command for slot %s\n", in octep_hp_cmd_handler()
208 octep_hp_enable_pdev(hp_ctrl, hp_slot); in octep_hp_cmd_handler()
211 octep_hp_disable_pdev(hp_ctrl, hp_slot); in octep_hp_cmd_handler()
221 struct octep_hp_controller *hp_ctrl; in octep_hp_work_handler() local
225 hp_ctrl = container_of(work, struct octep_hp_controller, work); in octep_hp_work_handler()
228 spin_lock_irqsave(&hp_ctrl->hp_cmd_lock, flags); in octep_hp_work_handler()
229 while (!list_empty(&hp_ctrl->hp_cmd_list)) { in octep_hp_work_handler()
230 hp_cmd = list_first_entry(&hp_ctrl->hp_cmd_list, in octep_hp_work_handler()
233 spin_unlock_irqrestore(&hp_ctrl->hp_cmd_lock, flags); in octep_hp_work_handler()
235 octep_hp_cmd_handler(hp_ctrl, hp_cmd); in octep_hp_work_handler()
238 spin_lock_irqsave(&hp_ctrl->hp_cmd_lock, flags); in octep_hp_work_handler()
240 spin_unlock_irqrestore(&hp_ctrl->hp_cmd_lock, flags); in octep_hp_work_handler()
258 struct octep_hp_controller *hp_ctrl = data; in octep_hp_intr_handler() local
259 struct pci_dev *pdev = hp_ctrl->pdev; in octep_hp_intr_handler()
264 type = octep_hp_intr_type(hp_ctrl->intr, irq); in octep_hp_intr_handler()
271 intr_val = readq(hp_ctrl->base + OCTEP_HP_INTR_OFFSET(type)); in octep_hp_intr_handler()
272 writeq(intr_val, hp_ctrl->base + OCTEP_HP_INTR_OFFSET(type)); in octep_hp_intr_handler()
282 spin_lock(&hp_ctrl->hp_cmd_lock); in octep_hp_intr_handler()
283 list_add_tail(&hp_cmd->list, &hp_ctrl->hp_cmd_list); in octep_hp_intr_handler()
284 spin_unlock(&hp_ctrl->hp_cmd_lock); in octep_hp_intr_handler()
285 schedule_work(&hp_ctrl->work); in octep_hp_intr_handler()
292 struct octep_hp_controller *hp_ctrl = data; in octep_hp_irq_cleanup() local
294 pci_free_irq_vectors(hp_ctrl->pdev); in octep_hp_irq_cleanup()
295 flush_work(&hp_ctrl->work); in octep_hp_irq_cleanup()
298 static int octep_hp_request_irq(struct octep_hp_controller *hp_ctrl, in octep_hp_request_irq() argument
301 struct pci_dev *pdev = hp_ctrl->pdev; in octep_hp_request_irq()
309 intr = &hp_ctrl->intr[type]; in octep_hp_request_irq()
315 IRQF_SHARED, intr->name, hp_ctrl); in octep_hp_request_irq()
319 struct octep_hp_controller *hp_ctrl) in octep_hp_controller_setup() argument
329 hp_ctrl->base = pcim_iomap_region(pdev, 0, OCTEP_HP_DRV_NAME); in octep_hp_controller_setup()
330 if (IS_ERR(hp_ctrl->base)) in octep_hp_controller_setup()
331 return dev_err_probe(dev, PTR_ERR(hp_ctrl->base), in octep_hp_controller_setup()
335 pci_set_drvdata(pdev, hp_ctrl); in octep_hp_controller_setup()
337 INIT_LIST_HEAD(&hp_ctrl->slot_list); in octep_hp_controller_setup()
338 INIT_LIST_HEAD(&hp_ctrl->hp_cmd_list); in octep_hp_controller_setup()
339 mutex_init(&hp_ctrl->slot_lock); in octep_hp_controller_setup()
340 spin_lock_init(&hp_ctrl->hp_cmd_lock); in octep_hp_controller_setup()
341 INIT_WORK(&hp_ctrl->work, octep_hp_work_handler); in octep_hp_controller_setup()
342 hp_ctrl->pdev = pdev; in octep_hp_controller_setup()
350 ret = devm_add_action(&pdev->dev, octep_hp_irq_cleanup, hp_ctrl); in octep_hp_controller_setup()
355 ret = octep_hp_request_irq(hp_ctrl, type); in octep_hp_controller_setup()
368 struct octep_hp_controller *hp_ctrl; in octep_hp_pci_probe() local
374 hp_ctrl = devm_kzalloc(&pdev->dev, sizeof(*hp_ctrl), GFP_KERNEL); in octep_hp_pci_probe()
375 if (!hp_ctrl) in octep_hp_pci_probe()
378 ret = octep_hp_controller_setup(pdev, hp_ctrl); in octep_hp_pci_probe()
393 hp_slot = octep_hp_register_slot(hp_ctrl, tmp_pdev, slot_number); in octep_hp_pci_probe()