Fix initialization from incompatible pointer type in the initialization of the field dev_name_list in i386/i386at/conf.c.
This patch has one questionable addition, that is the cast from io_req_t to a pointer to uio struct in the function kdread(). * device/conf.h: Include sys/types.h. Include mach/port.h. Include mach/vm_prot.h. Use forward structure declaration for io_req_t to avoid inclusion loop. (dev_ops): Modify so that correct return and argument types are listed. (nulldev_open, nulldev_close, nulldev_read, nulldev_getstat, nulldev_setstat, nulldev_portdeath): Add prototypes. (nomap): Modify argument and return types. * device/dev_name.c (nulldev_open, nulldev_close, nulldev_read, nulldev_getstat, nulldev_setstat, nulldev_portdeath): New functions. (nomap): Modify argument and return types. * device/ds_routines.c (*device->dev_ops->d_close): New parameter to the call. * device/kmsg.c (kmsgclose): Modify argument and return types and drop the D_SUCCESS return value. * device/kmsg.h (kmsgclose): Modify argument and return types. * i386/i386at/com.c (comopen, comclose, comread): Modify argument and return types and drop the zero return value. * i386/i386at/com.h (comopen, comclose, comread): Modify argument and return types. * i386/i386at/conf.c (dev_name_list): Modify field initialization. * i386/i386at/kd.c (kdread, kdmmap): Modify argument and return types and cast from io_req_t to a pointer to uio struct. * i386/i386at/kd.h (kdread, kdmmap): Modify argument and return types. * i386/i386at/kd_event.c (kbdopen, kbdclose): Modify argument and return types. * i386/i386at/kd_event.h (kbdopen, kbdclose): Likewise. * i386/i386at/kd_mouse.c (mouseopen, mouseclose): Modify argument types. * i386/i386at/kd_mouse.h (mouseopen, mouseclose): Likewise. * i386/i386at/lpr.c (lpropen, lprread): Likewise. * i386/i386at/lpr.h (lpropen, lprread): Likewise. * i386/i386at/mem.c (memmmap): Likewise. * i386/i386at/mem.h (memmmap): Likewise. * i386/i386at/model_dep.c (timemmap): Likewise. * i386/i386at/model_dep.h (timemmap): Likewise. * kern/mach_clock.c (timeopen, timeclose): Modify argument and return types and drop the zero return value. * kern/mach_clock.h: Include sys/types.h. Use forward structure declaration for io_req_t to avoid inclusion loop. (timeopen, timeclose): Modify argument and return types. --- device/conf.h | 34 ++++++++++++++++++++++++---------- device/dev_name.c | 37 ++++++++++++++++++++++++++++++++++--- device/ds_routines.c | 2 +- device/kmsg.c | 6 +++--- device/kmsg.h | 2 +- i386/i386at/com.c | 12 ++++++------ i386/i386at/com.h | 6 +++--- i386/i386at/conf.c | 28 ++++++++++++++-------------- i386/i386at/kd.c | 8 ++++---- i386/i386at/kd.h | 4 ++-- i386/i386at/kd_event.c | 5 +++-- i386/i386at/kd_event.h | 4 ++-- i386/i386at/kd_mouse.c | 5 +++-- i386/i386at/kd_mouse.h | 4 ++-- i386/i386at/lpr.c | 4 ++-- i386/i386at/lpr.h | 4 ++-- i386/i386at/mem.c | 4 ++-- i386/i386at/mem.h | 2 +- i386/i386at/model_dep.c | 4 ++-- i386/i386at/model_dep.h | 2 +- kern/mach_clock.c | 6 +++--- kern/mach_clock.h | 7 +++++-- 22 files changed, 120 insertions(+), 70 deletions(-) diff --git a/device/conf.h b/device/conf.h index e91e099..921e53b 100644 --- a/device/conf.h +++ b/device/conf.h @@ -32,22 +32,30 @@ #define _DEVICE_CONF_H_ #include <mach/machine/vm_types.h> +#include <sys/types.h> +#include <mach/port.h> +#include <mach/vm_prot.h> + +struct io_req; +typedef struct io_req *io_req_t; + +typedef int io_return_t; /* * Operations list for major device types. */ struct dev_ops { - char * d_name; /* name for major device */ - int (*d_open)(); /* open device */ - int (*d_close)(); /* close device */ - int (*d_read)(); /* read */ + char * d_name; /* name for major device */ + int (*d_open)(dev_t, int, io_req_t); /* open device */ + void (*d_close)(int, int); /* close device */ + int (*d_read)(dev_t, io_req_t); /* read */ int (*d_write)(); /* write */ - int (*d_getstat)(); /* get status/control */ - int (*d_setstat)(); /* set status/control */ - vm_offset_t (*d_mmap)(); /* map memory */ + io_return_t (*d_getstat)(dev_t, int, int *, natural_t *); /* get status/control */ + io_return_t (*d_setstat)(dev_t, int, int *, natural_t); /* set status/control */ + int (*d_mmap)(dev_t, off_t, vm_prot_t); /* map memory */ int (*d_async_in)();/* asynchronous input setup */ int (*d_reset)(); /* reset device */ - int (*d_port_death)(); + int (*d_port_death)(dev_t, mach_port_t); /* clean up reply ports */ int d_subdev; /* number of sub-devices per unit */ @@ -58,9 +66,15 @@ typedef struct dev_ops *dev_ops_t; /* * Routines for null entries. */ -extern int nulldev(); /* no operation - OK */ +extern int nulldev(void); /* no operation - OK */ +extern int nulldev_open(dev_t dev, int flag, io_req_t ior); /* no operation - OK */ +extern void nulldev_close(int dev, int flag); /* no operation - OK */ +extern int nulldev_read(dev_t dev, io_req_t ior); /* no operation - OK */ +extern io_return_t nulldev_getstat(dev_t dev, int flavor, int *data, natural_t *count); /* no operation - OK */ +extern io_return_t nulldev_setstat(dev_t dev, int flavor, int *data, natural_t count); /* no operation - OK */ +extern int nulldev_portdeath(dev_t dev, mach_port_t port); /* no operation - OK */ extern int nodev(); /* no operation - error */ -extern vm_offset_t nomap(); /* no operation - error */ +extern int nomap(dev_t dev, off_t off, int prot); /* no operation - error */ /* * Flavor constants for d_dev_info routine diff --git a/device/dev_name.c b/device/dev_name.c index de9e360..3f37533 100644 --- a/device/dev_name.c +++ b/device/dev_name.c @@ -39,7 +39,38 @@ /* * Routines placed in empty entries in the device tables */ -int nulldev() +int nulldev(void) +{ + return (D_SUCCESS); +} + +int nulldev_open(dev_t dev, int flag, io_req_t ior) +{ + return (D_SUCCESS); +} + +void nulldev_close(int dev, int flag) +{ + return; +} + +int nulldev_read(dev_t dev, io_req_t ior) +{ + return (D_SUCCESS); +} + + +io_return_t nulldev_getstat(dev_t dev, int flavor, int *data, natural_t *count) +{ + return (D_SUCCESS); +} + +io_return_t nulldev_setstat(dev_t dev, int flavor, int *data, natural_t count) +{ + return (D_SUCCESS); +} + +int nulldev_portdeath(dev_t dev, mach_port_t port) { return (D_SUCCESS); } @@ -49,8 +80,8 @@ int nodev() return (D_INVALID_OPERATION); } -vm_offset_t -nomap() +int +nomap(dev_t dev, off_t off, int prot) { return (D_INVALID_OPERATION); } diff --git a/device/ds_routines.c b/device/ds_routines.c index ee575e5..cc24add 100644 --- a/device/ds_routines.c +++ b/device/ds_routines.c @@ -639,7 +639,7 @@ device_close(device) /* * Close the device */ - (*device->dev_ops->d_close)(device->dev_number); + (*device->dev_ops->d_close)(device->dev_number, 0); /* * Finally mark it closed. If someone else is trying diff --git a/device/kmsg.c b/device/kmsg.c index c8bd897..586db24 100644 --- a/device/kmsg.c +++ b/device/kmsg.c @@ -77,14 +77,14 @@ kmsgopen (dev_t dev, int flag, io_req_t ior) } /* Kernel Message Close Handler */ -io_return_t -kmsgclose (dev_t dev, int flag) +void +kmsgclose (int dev, int flag) { simple_lock (&kmsg_lock); kmsg_in_use = 0; simple_unlock (&kmsg_lock); - return D_SUCCESS; + return; } static boolean_t kmsg_read_done (io_req_t ior); diff --git a/device/kmsg.h b/device/kmsg.h index b8c1f36..8d8526b 100644 --- a/device/kmsg.h +++ b/device/kmsg.h @@ -8,7 +8,7 @@ #include <device/io_req.h> io_return_t kmsgopen (dev_t dev, int flag, io_req_t ior); -io_return_t kmsgclose (dev_t dev, int flag); +void kmsgclose (int dev, int flag); io_return_t kmsgread (dev_t dev, io_req_t ior); io_return_t kmsggetstat (dev_t dev, int flavor, int *data, unsigned int *count); diff --git a/i386/i386at/com.c b/i386/i386at/com.c index 7b184e3..2e4acb5 100644 --- a/i386/i386at/com.c +++ b/i386/i386at/com.c @@ -318,8 +318,8 @@ boolean_t com_reprobe( return FALSE; } -io_return_t comopen( - int dev, +int comopen( + dev_t dev, int flag, io_req_t ior) { @@ -398,7 +398,7 @@ io_return_t comopen( return result; } -io_return_t comclose(dev, flag) +void comclose(dev, flag) int dev; int flag; { @@ -414,11 +414,11 @@ int flag; if (comfifo[minor(dev)] != 0) outb(INTR_ID(addr), 0x00); /* Disable fifos */ } - return 0; + return; } -io_return_t comread(dev, ior) -int dev; +int comread(dev, ior) +dev_t dev; io_req_t ior; { return char_read(&com_tty[minor(dev)], ior); diff --git a/i386/i386at/com.h b/i386/i386at/com.h index ae9434d..3762c1f 100644 --- a/i386/i386at/com.h +++ b/i386/i386at/com.h @@ -71,9 +71,9 @@ comsetstat( int *data, natural_t count); -extern io_return_t comopen(int dev, int flag, io_req_t ior); -extern io_return_t comclose(int dev, int flag); -extern io_return_t comread(int dev, io_req_t ior); +extern int comopen(dev_t dev, int flag, io_req_t ior); +extern void comclose(int dev, int flag); +extern int comread(dev_t dev, io_req_t ior); extern io_return_t comwrite(int dev, io_req_t ior); extern io_return_t comportdeath(dev_t dev, mach_port_t port); diff --git a/i386/i386at/conf.c b/i386/i386at/conf.c index 4fcd81e..eea2d1f 100644 --- a/i386/i386at/conf.c +++ b/i386/i386at/conf.c @@ -81,9 +81,9 @@ struct dev_ops dev_name_list[] = /* We don't assign a console here, when we find one via cninit() we stick something appropriate here through the indirect list */ - { "cn", nulldev, nulldev, nulldev, - nulldev, nulldev, nulldev, nomap, - nodev, nulldev, nulldev, 0, + { "cn", nulldev_open, nulldev_close, nulldev_read, + nulldev, nulldev_getstat, nulldev_setstat, nomap, + nodev, nulldev, nulldev_portdeath, 0, nodev }, #ifndef MACH_HYP @@ -93,9 +93,9 @@ struct dev_ops dev_name_list[] = nodev }, #endif /* MACH_HYP */ - { timename, timeopen, timeclose, nulldev, - nulldev, nulldev, nulldev, timemmap, - nodev, nulldev, nulldev, 0, + { timename, timeopen, timeclose, nulldev_read, + nulldev, nulldev_getstat, nulldev_setstat, timemmap, + nodev, nulldev, nulldev_portdeath, 0, nodev }, #ifndef MACH_HYP @@ -114,25 +114,25 @@ struct dev_ops dev_name_list[] = #endif { mousename, mouseopen, mouseclose, mouseread, - nodev, mousegetstat, nulldev, nomap, - nodev, nulldev, nulldev, 0, + nodev, mousegetstat, nulldev_setstat, nomap, + nodev, nulldev, nulldev_portdeath, 0, nodev }, { kbdname, kbdopen, kbdclose, kbdread, nodev, kbdgetstat, kbdsetstat, nomap, - nodev, nulldev, nulldev, 0, + nodev, nulldev, nulldev_portdeath, 0, nodev }, - { memname, nulldev, nulldev, nodev, - nodev, nodev, nodev, memmmap, - nodev, nulldev, nulldev, 0, + { memname, nulldev_open, nulldev_close, nulldev_read, + nodev, nulldev_getstat, nulldev_setstat, memmmap, + nodev, nulldev, nulldev_portdeath, 0, nodev }, #endif /* MACH_HYP */ #ifdef MACH_KMSG { kmsgname, kmsgopen, kmsgclose, kmsgread, - nodev, kmsggetstat, nodev, nomap, - nodev, nulldev, nulldev, 0, + nodev, kmsggetstat, nulldev_setstat, nomap, + nodev, nulldev, nulldev_portdeath, 0, nodev }, #endif diff --git a/i386/i386at/kd.c b/i386/i386at/kd.c index 5605257..b8b0e71 100644 --- a/i386/i386at/kd.c +++ b/i386/i386at/kd.c @@ -525,14 +525,14 @@ int flag; /*ARGSUSED*/ int kdread(dev, uio) -int dev; -struct uio *uio; +dev_t dev; +io_req_t uio; { struct tty *tp; tp = &kd_tty; tp->t_state |= TS_CARR_ON; - return((*linesw[kd_tty.t_line].l_read)(tp, uio)); + return((*linesw[kd_tty.t_line].l_read)(tp, (struct uio *)uio)); } @@ -565,7 +565,7 @@ int kdmmap(dev, off, prot) dev_t dev; off_t off; - int prot; + vm_prot_t prot; { if ((u_int) off >= (128*1024)) return(-1); diff --git a/i386/i386at/kd.h b/i386/i386at/kd.h index d97fdd5..fa3e7d4 100644 --- a/i386/i386at/kd.h +++ b/i386/i386at/kd.h @@ -750,7 +750,7 @@ extern void kdb_kintr(void); extern int kdopen(dev_t dev, int flag, io_req_t ior); extern void kdclose(int dev, int flag); -extern int kdread(int dev, struct uio *uio); +extern int kdread(dev_t dev, io_req_t uio); extern int kdwrite(int dev, struct uio *uio); extern io_return_t kdgetstat( @@ -766,7 +766,7 @@ extern io_return_t kdsetstat( natural_t count); extern int kdportdeath(dev_t dev, mach_port_t port); -extern int kdmmap(dev_t dev, off_t off, int prot); +extern int kdmmap(dev_t dev, off_t off, vm_prot_t prot); boolean_t kdcheckmagic(Scancode scancode); diff --git a/i386/i386at/kd_event.c b/i386/i386at/kd_event.c index db14225..425afb1 100644 --- a/i386/i386at/kd_event.c +++ b/i386/i386at/kd_event.c @@ -110,9 +110,10 @@ kbdinit() /*ARGSUSED*/ int -kbdopen(dev, flags) +kbdopen(dev, flags, ior) dev_t dev; int flags; + io_req_t ior; { spl_t o_pri = spltty(); kdinit(); @@ -131,7 +132,7 @@ kbdopen(dev, flags) /*ARGSUSED*/ void kbdclose(dev, flags) - dev_t dev; + int dev; int flags; { spl_t s = SPLKD(); diff --git a/i386/i386at/kd_event.h b/i386/i386at/kd_event.h index f1295cb..5298567 100644 --- a/i386/i386at/kd_event.h +++ b/i386/i386at/kd_event.h @@ -30,8 +30,8 @@ extern void X_kdb_enter (void); extern void X_kdb_exit (void); -extern int kbdopen(dev_t dev, int flags); -extern void kbdclose(dev_t dev, int flags); +extern int kbdopen(dev_t dev, int flags, io_req_t ior); +extern void kbdclose(int dev, int flags); extern int kbdread(dev_t dev, io_req_t ior); extern io_return_t kbdgetstat( diff --git a/i386/i386at/kd_mouse.c b/i386/i386at/kd_mouse.c index 5a80474..178c470 100644 --- a/i386/i386at/kd_mouse.c +++ b/i386/i386at/kd_mouse.c @@ -147,9 +147,10 @@ int track_man[10]; /*ARGSUSED*/ int -mouseopen(dev, flags) +mouseopen(dev, flags, ior) dev_t dev; int flags; + io_req_t ior; { if (mouse_in_use) return (D_ALREADY_OPEN); @@ -238,7 +239,7 @@ kd_mouse_open(dev, mouse_pic) */ void mouseclose(dev, flags) - dev_t dev; + int dev; int flags; { switch (mouse_type) { diff --git a/i386/i386at/kd_mouse.h b/i386/i386at/kd_mouse.h index ad07c6c..ec4fe7a 100644 --- a/i386/i386at/kd_mouse.h +++ b/i386/i386at/kd_mouse.h @@ -54,8 +54,8 @@ extern void mouse_packet_mouse_system_mouse (u_char *mousebuf); extern void mouse_packet_ibm_ps2_mouse (u_char *mousebuf); -extern int mouseopen(dev_t dev, int flags); -extern void mouseclose(dev_t dev, int flags); +extern int mouseopen(dev_t dev, int flags, io_req_t ior); +extern void mouseclose(int dev, int flags); extern int mouseread(dev_t dev, io_req_t ior); extern io_return_t mousegetstat( diff --git a/i386/i386at/lpr.c b/i386/i386at/lpr.c index 3942335..8e065c2 100644 --- a/i386/i386at/lpr.c +++ b/i386/i386at/lpr.c @@ -106,7 +106,7 @@ void lprattach(struct bus_device *dev) int lpropen(dev, flag, ior) -int dev; +dev_t dev; int flag; io_req_t ior; { @@ -151,7 +151,7 @@ u_short addr = (u_short) lprinfo[unit]->address; int lprread(dev, ior) -int dev; +dev_t dev; io_req_t ior; { return char_read(&lpr_tty[minor(dev)], ior); diff --git a/i386/i386at/lpr.h b/i386/i386at/lpr.h index 820d0ab..0ca862a 100644 --- a/i386/i386at/lpr.h +++ b/i386/i386at/lpr.h @@ -57,9 +57,9 @@ lprsetstat( void lprpr_addr(unsigned short addr); -extern int lpropen(int dev, int flag, io_req_t ior); +extern int lpropen(dev_t dev, int flag, io_req_t ior); extern void lprclose(int dev, int flag); -extern int lprread(int dev, io_req_t ior); +extern int lprread(dev_t dev, io_req_t ior); extern int lprwrite(int dev, io_req_t ior); extern int lprportdeath(dev_t dev, mach_port_t port); diff --git a/i386/i386at/mem.c b/i386/i386at/mem.c index 5e51676..64a5f0b 100644 --- a/i386/i386at/mem.c +++ b/i386/i386at/mem.c @@ -32,8 +32,8 @@ /*ARGSUSED*/ int memmmap(dev, off, prot) -int dev; -vm_offset_t off; +dev_t dev; +off_t off; vm_prot_t prot; { if (off == 0) diff --git a/i386/i386at/mem.h b/i386/i386at/mem.h index 3d6a96c..5444cc5 100644 --- a/i386/i386at/mem.h +++ b/i386/i386at/mem.h @@ -19,6 +19,6 @@ #ifndef _MEM_H_ #define _MEM_H_ -extern int memmmap(int dev, vm_offset_t off, vm_prot_t prot); +extern int memmmap(dev_t dev, off_t off, vm_prot_t prot); #endif /* _MEM_H_ */ diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c index 1f1785e..93b0127 100644 --- a/i386/i386at/model_dep.c +++ b/i386/i386at/model_dep.c @@ -616,8 +616,8 @@ void c_boot_entry(vm_offset_t bi) int timemmap(dev, off, prot) - int dev; - int off; + dev_t dev; + off_t off; vm_prot_t prot; { extern time_value_t *mtime; diff --git a/i386/i386at/model_dep.h b/i386/i386at/model_dep.h index 7357314..2d2d342 100644 --- a/i386/i386at/model_dep.h +++ b/i386/i386at/model_dep.h @@ -21,7 +21,7 @@ #include <mach/vm_prot.h> -extern int timemmap(int dev, int off, vm_prot_t prot); +extern int timemmap(dev_t dev, off_t off, vm_prot_t prot); /* * Halt a cpu. diff --git a/kern/mach_clock.c b/kern/mach_clock.c index 29a14c9..8190cea 100644 --- a/kern/mach_clock.c +++ b/kern/mach_clock.c @@ -499,13 +499,13 @@ void mapable_time_init() update_mapped_time(&time); } -int timeopen() +int timeopen(dev_t dev, int flag, io_req_t ior) { return(0); } -int timeclose() +void timeclose(int dev, int flag) { - return(0); + return; } /* diff --git a/kern/mach_clock.h b/kern/mach_clock.h index 72189af..f3698c1 100644 --- a/kern/mach_clock.h +++ b/kern/mach_clock.h @@ -29,7 +29,10 @@ #include <mach/time_value.h> #include <kern/host.h> #include <kern/queue.h> +#include <sys/types.h> +struct io_req; +typedef struct io_req *io_req_t; /* Timers in kernel. */ extern unsigned long elapsed_ticks; /* number of ticks elapsed since bootup */ @@ -104,7 +107,7 @@ extern void mapable_time_init (void); extern void timeout(timer_func_t *fcn, void *param, int interval); extern boolean_t untimeout(timer_func_t *fcn, void *param); -extern int timeopen(void); -extern int timeclose(void); +extern int timeopen(dev_t dev, int flag, io_req_t ior); +extern void timeclose(int dev, int flag); #endif /* _KERN_MACH_CLOCK_H_ */ -- 1.8.1.4