Lines Matching refs:udev
66 static void qedi_reset_uio_rings(struct qedi_uio_dev *udev);
139 struct qedi_uio_dev *udev = uinfo->priv;
140 struct qedi_ctx *qedi = udev->qedi;
145 if (udev->uio_dev != -1)
149 udev->uio_dev = iminor(inode);
150 qedi_reset_uio_rings(udev);
159 struct qedi_uio_dev *udev = uinfo->priv;
160 struct qedi_ctx *qedi = udev->qedi;
162 udev->uio_dev = -1;
168 static void __qedi_free_uio_rings(struct qedi_uio_dev *udev)
170 if (udev->uctrl) {
171 free_page((unsigned long)udev->uctrl);
172 udev->uctrl = NULL;
175 if (udev->ll2_ring) {
176 free_page((unsigned long)udev->ll2_ring);
177 udev->ll2_ring = NULL;
180 if (udev->ll2_buf) {
181 free_pages((unsigned long)udev->ll2_buf, 2);
182 udev->ll2_buf = NULL;
186 static void __qedi_free_uio(struct qedi_uio_dev *udev)
188 uio_unregister_device(&udev->qedi_uinfo);
190 __qedi_free_uio_rings(udev);
192 pci_dev_put(udev->pdev);
193 kfree(udev);
196 static void qedi_free_uio(struct qedi_uio_dev *udev)
198 if (!udev)
201 list_del_init(&udev->list);
202 __qedi_free_uio(udev);
205 static void qedi_reset_uio_rings(struct qedi_uio_dev *udev)
210 qedi = udev->qedi;
211 uctrl = udev->uctrl;
219 memset(udev->ll2_ring, 0, udev->ll2_ring_size);
220 memset(udev->ll2_buf, 0, udev->ll2_buf_size);
224 static int __qedi_alloc_uio_rings(struct qedi_uio_dev *udev)
228 if (udev->ll2_ring || udev->ll2_buf)
232 udev->uctrl = (void *)get_zeroed_page(GFP_KERNEL);
233 if (!udev->uctrl)
237 udev->ll2_ring_size = QEDI_PAGE_SIZE;
238 udev->ll2_ring = (void *)get_zeroed_page(GFP_KERNEL | __GFP_COMP);
239 if (!udev->ll2_ring) {
245 udev->ll2_buf_size = TX_RX_RING * qedi_ll2_buf_size;
246 udev->ll2_buf_size = QEDI_PAGE_ALIGN(udev->ll2_buf_size);
247 udev->ll2_buf = (void *)__get_free_pages(GFP_KERNEL | __GFP_COMP |
249 if (!udev->ll2_buf) {
256 free_page((unsigned long)udev->ll2_ring);
257 udev->ll2_ring = NULL;
264 struct qedi_uio_dev *udev = NULL;
267 list_for_each_entry(udev, &qedi_udev_list, list) {
268 if (udev->pdev == qedi->pdev) {
269 udev->qedi = qedi;
270 if (__qedi_alloc_uio_rings(udev)) {
271 udev->qedi = NULL;
274 qedi->udev = udev;
279 udev = kzalloc(sizeof(*udev), GFP_KERNEL);
280 if (!udev) {
285 udev->uio_dev = -1;
287 udev->qedi = qedi;
288 udev->pdev = qedi->pdev;
290 rc = __qedi_alloc_uio_rings(udev);
294 list_add(&udev->list, &qedi_udev_list);
296 pci_dev_get(udev->pdev);
297 qedi->udev = udev;
299 udev->tx_pkt = udev->ll2_buf;
300 udev->rx_pkt = udev->ll2_buf + qedi_ll2_buf_size;
304 kfree(udev);
311 struct qedi_uio_dev *udev = qedi->udev;
315 if (!udev)
318 uinfo = &udev->qedi_uinfo;
320 uinfo->mem[0].addr = (unsigned long)udev->uctrl;
324 uinfo->mem[1].addr = (unsigned long)udev->ll2_ring;
325 uinfo->mem[1].size = udev->ll2_ring_size;
328 uinfo->mem[2].addr = (unsigned long)udev->ll2_buf;
329 uinfo->mem[2].size = udev->ll2_buf_size;
339 if (udev->uio_dev == -1) {
341 uinfo->priv = udev;
343 ret = uio_register_device(&udev->pdev->dev, uinfo);
740 struct qedi_uio_dev *udev = NULL;
754 udev = qedi->udev;
755 uctrl = udev->uctrl;
760 pkt = udev->rx_pkt + (prod * qedi_ll2_buf_size);
771 p_rxbd = (struct qedi_rx_bd *)udev->ll2_ring;
787 uio_event_notify(&udev->qedi_uinfo);
2480 qedi_free_uio(qedi->udev);
2820 qedi_free_uio(qedi->udev);