Lines Matching defs:ppt

54 #include "ppt.h"
169 DEFINE_CLASS_0(ppt, ppt_driver, ppt_methods, 0);
170 DRIVER_MODULE(ppt, pci, ppt_driver, ppt_devclass, NULL, NULL);
190 ppt_unmap_mmio(struct vm *vm, struct pptdev *ppt)
196 seg = &ppt->mmio[i];
205 ppt_teardown_msi(struct pptdev *ppt)
211 if (ppt->msi.num_msgs == 0)
214 for (i = 0; i < ppt->msi.num_msgs; i++) {
215 rid = ppt->msi.startrid + i;
216 res = ppt->msi.res[i];
217 cookie = ppt->msi.cookie[i];
220 bus_teardown_intr(ppt->dev, res, cookie);
223 bus_release_resource(ppt->dev, SYS_RES_IRQ, rid, res);
225 ppt->msi.res[i] = NULL;
226 ppt->msi.cookie[i] = NULL;
229 if (ppt->msi.startrid == 1)
230 pci_release_msi(ppt->dev);
232 ppt->msi.num_msgs = 0;
236 ppt_teardown_msix_intr(struct pptdev *ppt, int idx)
242 rid = ppt->msix.startrid + idx;
243 res = ppt->msix.res[idx];
244 cookie = ppt->msix.cookie[idx];
247 bus_teardown_intr(ppt->dev, res, cookie);
250 bus_release_resource(ppt->dev, SYS_RES_IRQ, rid, res);
252 ppt->msix.res[idx] = NULL;
253 ppt->msix.cookie[idx] = NULL;
257 ppt_teardown_msix(struct pptdev *ppt)
261 if (ppt->msix.num_msgs == 0)
264 for (i = 0; i < ppt->msix.num_msgs; i++)
265 ppt_teardown_msix_intr(ppt, i);
267 if (ppt->msix.msix_table_res) {
268 bus_release_resource(ppt->dev, SYS_RES_MEMORY,
269 ppt->msix.msix_table_rid,
270 ppt->msix.msix_table_res);
271 ppt->msix.msix_table_res = NULL;
272 ppt->msix.msix_table_rid = 0;
275 free(ppt->msix.res, M_PPTMSIX);
276 free(ppt->msix.cookie, M_PPTMSIX);
277 free(ppt->msix.arg, M_PPTMSIX);
279 pci_release_msi(ppt->dev);
281 ppt->msix.num_msgs = 0;
301 struct pptdev *ppt;
305 ppt = &pptdevs[n];
306 if (ppt->vm != vm)
310 seg = &ppt->mmio[i];
324 struct pptdev *ppt;
326 ppt = ppt_find(bus, slot, func);
327 if (ppt != NULL) {
332 if (ppt->vm != NULL && ppt->vm != vm)
335 ppt->vm = vm;
345 struct pptdev *ppt;
347 ppt = ppt_find(bus, slot, func);
348 if (ppt != NULL) {
352 if (ppt->vm != vm)
354 ppt_unmap_mmio(vm, ppt);
355 ppt_teardown_msi(ppt);
356 ppt_teardown_msix(ppt);
358 ppt->vm = NULL;
389 struct pptdev *ppt;
391 ppt = ppt_find(bus, slot, func);
392 if (ppt != NULL) {
393 if (ppt->vm != vm)
397 seg = &ppt->mmio[i];
416 struct pptdev *ppt;
420 ppt = pptarg->pptdev;
423 if (ppt->vm != NULL)
424 (void) lapic_set_intr(ppt->vm, pptarg->vcpu, vec);
436 if (ppt->msi.startrid == 0)
448 struct pptdev *ppt;
455 ppt = ppt_find(bus, slot, func);
456 if (ppt == NULL)
458 if (ppt->vm != vm) /* Make sure we own this device */
462 ppt_teardown_msi(ppt);
468 msi_count = pci_msi_count(ppt->dev);
489 error = pci_alloc_msi(ppt->dev, &tmp);
493 pci_release_msi(ppt->dev);
500 ppt->msi.startrid = startrid;
506 ppt->msi.num_msgs = i + 1;
507 ppt->msi.cookie[i] = NULL;
510 ppt->msi.res[i] = bus_alloc_resource_any(ppt->dev, SYS_RES_IRQ,
512 if (ppt->msi.res[i] == NULL)
515 ppt->msi.arg[i].pptdev = ppt;
516 ppt->msi.arg[i].vec = vector + i;
517 ppt->msi.arg[i].vcpu = destcpu;
519 error = bus_setup_intr(ppt->dev, ppt->msi.res[i],
521 pptintr, NULL, &ppt->msi.arg[i],
522 &ppt->msi.cookie[i]);
528 ppt_teardown_msi(ppt);
539 struct pptdev *ppt;
544 ppt = ppt_find(bus, slot, func);
545 if (ppt == NULL)
547 if (ppt->vm != vm) /* Make sure we own this device */
550 dinfo = device_get_ivars(ppt->dev);
558 * Set up some variables in ppt->msix
560 if (ppt->msix.num_msgs == 0) {
561 numvec = pci_msix_count(ppt->dev);
565 ppt->msix.startrid = 1;
566 ppt->msix.num_msgs = numvec;
568 res_size = numvec * sizeof(ppt->msix.res[0]);
569 cookie_size = numvec * sizeof(ppt->msix.cookie[0]);
570 arg_size = numvec * sizeof(ppt->msix.arg[0]);
572 ppt->msix.res = malloc(res_size, M_PPTMSIX, M_WAITOK | M_ZERO);
573 ppt->msix.cookie = malloc(cookie_size, M_PPTMSIX,
575 ppt->msix.arg = malloc(arg_size, M_PPTMSIX, M_WAITOK | M_ZERO);
578 ppt->msix.msix_table_res = bus_alloc_resource_any(ppt->dev,
581 if (ppt->msix.msix_table_res == NULL) {
582 ppt_teardown_msix(ppt);
585 ppt->msix.msix_table_rid = rid;
588 error = pci_alloc_msix(ppt->dev, &alloced);
590 ppt_teardown_msix(ppt);
597 ppt_teardown_msix_intr(ppt, idx);
600 ppt->msix.cookie[idx] = NULL;
601 rid = ppt->msix.startrid + idx;
602 ppt->msix.res[idx] = bus_alloc_resource_any(ppt->dev, SYS_RES_IRQ,
604 if (ppt->msix.res[idx] == NULL)
607 ppt->msix.arg[idx].pptdev = ppt;
608 ppt->msix.arg[idx].vec = msg & 0xFF;
609 ppt->msix.arg[idx].vcpu = (addr >> 12) & 0xFF;
612 error = bus_setup_intr(ppt->dev, ppt->msix.res[idx],
614 pptintr, NULL, &ppt->msix.arg[idx],
615 &ppt->msix.cookie[idx]);
618 bus_teardown_intr(ppt->dev, ppt->msix.res[idx], ppt->msix.cookie[idx]);
619 bus_release_resource(ppt->dev, SYS_RES_IRQ, rid, ppt->msix.res[idx]);
620 ppt->msix.cookie[idx] = NULL;
621 ppt->msix.res[idx] = NULL;
626 ppt_teardown_msix_intr(ppt, idx);