kern_conf.c (201145) | kern_conf.c (201223) |
---|---|
1/*- 2 * Copyright (c) 1999-2002 Poul-Henning Kamp 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 1999-2002 Poul-Henning Kamp 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/kern/kern_conf.c 201145 2009-12-28 22:56:30Z antoine $"); | 28__FBSDID("$FreeBSD: head/sys/kern/kern_conf.c 201223 2009-12-29 21:51:28Z rnoland $"); |
29 30#include <sys/param.h> 31#include <sys/kernel.h> 32#include <sys/systm.h> 33#include <sys/bus.h> 34#include <sys/bio.h> 35#include <sys/lock.h> 36#include <sys/mutex.h> --- 260 unchanged lines hidden (view full) --- 297 298/* Default methods if driver does not specify method */ 299 300#define null_open (d_open_t *)nullop 301#define null_close (d_close_t *)nullop 302#define no_read (d_read_t *)enodev 303#define no_write (d_write_t *)enodev 304#define no_ioctl (d_ioctl_t *)enodev | 29 30#include <sys/param.h> 31#include <sys/kernel.h> 32#include <sys/systm.h> 33#include <sys/bus.h> 34#include <sys/bio.h> 35#include <sys/lock.h> 36#include <sys/mutex.h> --- 260 unchanged lines hidden (view full) --- 297 298/* Default methods if driver does not specify method */ 299 300#define null_open (d_open_t *)nullop 301#define null_close (d_close_t *)nullop 302#define no_read (d_read_t *)enodev 303#define no_write (d_write_t *)enodev 304#define no_ioctl (d_ioctl_t *)enodev |
305#define no_mmap (d_mmap2_t *)enodev | 305#define no_mmap (d_mmap_t *)enodev |
306#define no_kqfilter (d_kqfilter_t *)enodev 307#define no_mmap_single (d_mmap_single_t *)enodev 308 309static void 310no_strategy(struct bio *bp) 311{ 312 313 biofinish(bp, NULL, ENODEV); --- 150 unchanged lines hidden (view full) --- 464 mtx_lock(&Giant); 465 retval = dsw->d_gianttrick->d_kqfilter(dev, kn); 466 mtx_unlock(&Giant); 467 dev_relthread(dev); 468 return (retval); 469} 470 471static int | 306#define no_kqfilter (d_kqfilter_t *)enodev 307#define no_mmap_single (d_mmap_single_t *)enodev 308 309static void 310no_strategy(struct bio *bp) 311{ 312 313 biofinish(bp, NULL, ENODEV); --- 150 unchanged lines hidden (view full) --- 464 mtx_lock(&Giant); 465 retval = dsw->d_gianttrick->d_kqfilter(dev, kn); 466 mtx_unlock(&Giant); 467 dev_relthread(dev); 468 return (retval); 469} 470 471static int |
472giant_mmap(struct cdev *dev, vm_offset_t offset, vm_paddr_t *paddr, int nprot, | 472giant_mmap(struct cdev *dev, vm_ooffset_t offset, vm_paddr_t *paddr, int nprot, |
473 vm_memattr_t *memattr) 474{ 475 struct cdevsw *dsw; 476 int retval; 477 478 dsw = dev_refthread(dev); 479 if (dsw == NULL) 480 return (ENXIO); 481 mtx_lock(&Giant); | 473 vm_memattr_t *memattr) 474{ 475 struct cdevsw *dsw; 476 int retval; 477 478 dsw = dev_refthread(dev); 479 if (dsw == NULL) 480 return (ENXIO); 481 mtx_lock(&Giant); |
482 if (dsw->d_gianttrick->d_flags & D_MMAP2) 483 retval = dsw->d_gianttrick->d_mmap2(dev, offset, paddr, nprot, 484 memattr); 485 else 486 retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot); | 482 retval = dsw->d_gianttrick->d_mmap(dev, offset, paddr, nprot, 483 memattr); |
487 mtx_unlock(&Giant); 488 dev_relthread(dev); 489 return (retval); 490} 491 492static int 493giant_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_size_t size, 494 vm_object_t *object, int nprot) --- 95 unchanged lines hidden (view full) --- 590 } else 591 dsw2 = NULL; 592 if (devsw->d_flags & D_INIT) { 593 if (dsw2 != NULL) 594 cdevsw_free_devlocked(dsw2); 595 return; 596 } 597 | 484 mtx_unlock(&Giant); 485 dev_relthread(dev); 486 return (retval); 487} 488 489static int 490giant_mmap_single(struct cdev *dev, vm_ooffset_t *offset, vm_size_t size, 491 vm_object_t *object, int nprot) --- 95 unchanged lines hidden (view full) --- 587 } else 588 dsw2 = NULL; 589 if (devsw->d_flags & D_INIT) { 590 if (dsw2 != NULL) 591 cdevsw_free_devlocked(dsw2); 592 return; 593 } 594 |
598 if (devsw->d_version != D_VERSION_01 && 599 devsw->d_version != D_VERSION_02) { | 595 if (devsw->d_version != D_VERSION_03) { |
600 printf( 601 "WARNING: Device driver \"%s\" has wrong version %s\n", 602 devsw->d_name == NULL ? "???" : devsw->d_name, 603 "and is disabled. Recompile KLD module."); 604 devsw->d_open = dead_open; 605 devsw->d_close = dead_close; 606 devsw->d_read = dead_read; 607 devsw->d_write = dead_write; 608 devsw->d_ioctl = dead_ioctl; 609 devsw->d_poll = dead_poll; 610 devsw->d_mmap = dead_mmap; | 596 printf( 597 "WARNING: Device driver \"%s\" has wrong version %s\n", 598 devsw->d_name == NULL ? "???" : devsw->d_name, 599 "and is disabled. Recompile KLD module."); 600 devsw->d_open = dead_open; 601 devsw->d_close = dead_close; 602 devsw->d_read = dead_read; 603 devsw->d_write = dead_write; 604 devsw->d_ioctl = dead_ioctl; 605 devsw->d_poll = dead_poll; 606 devsw->d_mmap = dead_mmap; |
607 devsw->d_mmap_single = dead_mmap_single; |
|
611 devsw->d_strategy = dead_strategy; 612 devsw->d_dump = dead_dump; 613 devsw->d_kqfilter = dead_kqfilter; 614 } | 608 devsw->d_strategy = dead_strategy; 609 devsw->d_dump = dead_dump; 610 devsw->d_kqfilter = dead_kqfilter; 611 } |
615 if (devsw->d_version == D_VERSION_01) 616 devsw->d_mmap_single = NULL; | |
617 618 if (devsw->d_flags & D_NEEDGIANT) { 619 if (devsw->d_gianttrick == NULL) { 620 memcpy(dsw2, devsw, sizeof *dsw2); 621 devsw->d_gianttrick = dsw2; | 612 613 if (devsw->d_flags & D_NEEDGIANT) { 614 if (devsw->d_gianttrick == NULL) { 615 memcpy(dsw2, devsw, sizeof *dsw2); 616 devsw->d_gianttrick = dsw2; |
622 devsw->d_flags |= D_MMAP2; | |
623 dsw2 = NULL; 624 } 625 } 626 627#define FIXUP(member, noop, giant) \ 628 do { \ 629 if (devsw->member == NULL) { \ 630 devsw->member = noop; \ --- 4 unchanged lines hidden (view full) --- 635 636 FIXUP(d_open, null_open, giant_open); 637 FIXUP(d_fdopen, NULL, giant_fdopen); 638 FIXUP(d_close, null_close, giant_close); 639 FIXUP(d_read, no_read, giant_read); 640 FIXUP(d_write, no_write, giant_write); 641 FIXUP(d_ioctl, no_ioctl, giant_ioctl); 642 FIXUP(d_poll, no_poll, giant_poll); | 617 dsw2 = NULL; 618 } 619 } 620 621#define FIXUP(member, noop, giant) \ 622 do { \ 623 if (devsw->member == NULL) { \ 624 devsw->member = noop; \ --- 4 unchanged lines hidden (view full) --- 629 630 FIXUP(d_open, null_open, giant_open); 631 FIXUP(d_fdopen, NULL, giant_fdopen); 632 FIXUP(d_close, null_close, giant_close); 633 FIXUP(d_read, no_read, giant_read); 634 FIXUP(d_write, no_write, giant_write); 635 FIXUP(d_ioctl, no_ioctl, giant_ioctl); 636 FIXUP(d_poll, no_poll, giant_poll); |
643 FIXUP(d_mmap2, no_mmap, giant_mmap); | 637 FIXUP(d_mmap, no_mmap, giant_mmap); |
644 FIXUP(d_strategy, no_strategy, giant_strategy); 645 FIXUP(d_kqfilter, no_kqfilter, giant_kqfilter); 646 FIXUP(d_mmap_single, no_mmap_single, giant_mmap_single); 647 648 if (devsw->d_dump == NULL) devsw->d_dump = no_dump; 649 650 LIST_INIT(&devsw->d_devs); 651 --- 512 unchanged lines hidden --- | 638 FIXUP(d_strategy, no_strategy, giant_strategy); 639 FIXUP(d_kqfilter, no_kqfilter, giant_kqfilter); 640 FIXUP(d_mmap_single, no_mmap_single, giant_mmap_single); 641 642 if (devsw->d_dump == NULL) devsw->d_dump = no_dump; 643 644 LIST_INIT(&devsw->d_devs); 645 --- 512 unchanged lines hidden --- |