git: 7ed5694dd9b9 - main - man: Remove obsolete meteor.4
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 18 Dec 2021 14:00:32 UTC
The branch main has been updated by marius: URL: https://cgit.FreeBSD.org/src/commit/?id=7ed5694dd9b9d91e6afd7442b04b602041650354 commit 7ed5694dd9b9d91e6afd7442b04b602041650354 Author: Marius Strobl <marius@FreeBSD.org> AuthorDate: 2021-12-18 13:56:16 +0000 Commit: Marius Strobl <marius@FreeBSD.org> CommitDate: 2021-12-18 13:56:16 +0000 man: Remove obsolete meteor.4 The corresponding interface has been deorbited as part of daba5ace03e83a930c128ae644afd186e1fe4341. --- ObsoleteFiles.inc | 3 + share/man/man4/Makefile | 1 - share/man/man4/meteor.4 | 873 ------------------------------------------------ 3 files changed, 3 insertions(+), 874 deletions(-) diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc index 323995b76bf8..fa7c895e0b92 100644 --- a/ObsoleteFiles.inc +++ b/ObsoleteFiles.inc @@ -40,6 +40,9 @@ # xargs -n1 | sort | uniq -d; # done +# 20211218 meteor.4 removed, see also 20200301 entry below +OLD_FILES+=usr/share/man/man4/meteor.4.gz + # 20211125 Old SCSI drivers removed OLD_FILES+=usr/share/man/man4/amr.4.gz OLD_FILES+=usr/share/man/man4/esp.4.gz diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index b082475fecf6..d1a3258094c4 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -296,7 +296,6 @@ MAN= aac.4 \ mdio.4 \ me.4 \ mem.4 \ - meteor.4 \ mfi.4 \ ${_mgb.4} \ miibus.4 \ diff --git a/share/man/man4/meteor.4 b/share/man/man4/meteor.4 deleted file mode 100644 index c9381733a863..000000000000 --- a/share/man/man4/meteor.4 +++ /dev/null @@ -1,873 +0,0 @@ -.\" -.\" $FreeBSD$ -.\" -.Dd August 15, 1995 -.Dt METEOR 4 -.Os -.Sh NAME -.Nm meteor -.Nd "video capture driver interface" -.Sh DESCRIPTION -The -.Nm -driver defined a video capture interface. -The -.Nm -driver is no longer in the tree, but other devices support this interface -so the interface portion is documented here. -.Ss Meteor Capture Modes -The -.Nm -capture driver has three modes of capture operation. -.Bl -enum -.It -Conventional -.Xr read 2 -interface. -.Pp -This mode is the easiest and slowest to use. -This mode is great for -capturing a single field at little programming cost. -.Pp -In this mode, the user opens the device, sets the capture mode -and size (see: -.Dv METEORSETGEO -.Xr ioctl 2 -call), and uses the -.Xr read 2 -system -call to load the data into a buffer. -.Pp -.Pa meteor_read.c ; -read 400x300 RGB24 into a viewable PPM file -.Bd -literal -#include <sys/fcntl.h> -#include <machine/ioctl_meteor.h> - -extern int errno; -#define ROWS 300 -#define COLS 400 -#define SIZE (ROWS * COLS * 4) -main() -{ - struct meteor_geomet geo; - char buf[SIZE],b[4],header[16],*p; - int i,o,c; - - if ((i = open("/dev/meteor0", O_RDONLY)) < 0) { - printf("open failed: %d\\n", errno); - exit(1); - } - /* set up the capture type and size */ - geo.rows = ROWS; - geo.columns = COLS; - geo.frames = 1; - geo.oformat = METEOR_GEO_RGB24 ; - - if (ioctl(i, METEORSETGEO, &geo) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - c = METEOR_FMT_NTSC; - - if (ioctl(i, METEORSFMT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - c = METEOR_INPUT_DEV0; - - if (ioctl(i, METEORSINPUT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - if ((c=read(i, &buf[0], SIZE)) < SIZE) { - printf("read failed %d %d %d\\n", c, i, errno); - close(i); - exit(1); - } - close(i); - - if ((o = open("rgb24.ppm", O_WRONLY | O_CREAT, 0644)) < 0) { - printf("ppm open failed: %d\\n", errno); - exit(1); - } - - /* make PPM header and save to file */ - strcpy(&header[0], "P6 400 300 255 "); - header[2] = header[6] = header[10] = header[14] = '\\n'; - write (o, &header[0], 15); - /* save the RGB data to PPM file */ - for (p = &buf[0]; p < &buf[SIZE]; ) { - b[2] = *p++; /* blue */ - b[1] = *p++; /* green */ - b[0] = *p++; /* red */ - *p++; /* NULL byte */ - write(o,&b[0], 3); /* not very efficient */ - } - close(o); - exit(0); -} -.Ed -.It -Memory mapped single capture or unsynchronized continuous capture. -.Pp -The single capture mode is designed for conferencing tools such as -.Nm nv . -These tools need to control the starting of the image capture and also -need several frames a second. -The continuous capture mode is designed -for applications that want free-running data. -.Pp -In this mode, the user opens the device, sets the capture mode -and size (see: -.Dv METEORSETGEO -.Xr ioctl 2 -call), -.Xr mmap 2 Ns s -the frame buffer -memory into the user process space, and issues either the -single-capture or the continuous capture call (see: -.Dv METEORCAPTUR -.Xr ioctl 2 -call) to load the data into the memory mapped buffer. -.Pp -As explained in the -.Dv METEORCAPTUR -.Xr ioctl 2 -call, the single frame capture -.Xr ioctl 2 -will block until the capture is complete, the continuous capture -will return immediately. -.Pp -.Pa meteor_mmap_single_continuous.c -.Bd -literal -#include <sys/types.h> -#include <sys/mman.h> -#include <sys/fcntl.h> -#include <machine/ioctl_meteor.h> - -extern int errno; -#define ROWS 480 -#define COLS 640 -#define SIZE (ROWS * COLS * 2) -main() -{ - struct meteor_geomet geo; - char buf[SIZE]; - char *mmbuf; - int i,c; - - if ((i = open("/dev/meteor0", O_RDONLY)) < 0) { - printf("open failed\\n"); - exit(1); - } - - geo.rows = ROWS; - geo.columns = COLS; - geo.frames = 1; - geo.oformat = METEOR_GEO_RGB16 ; - - if (ioctl(i, METEORSETGEO, &geo) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - c = METEOR_FMT_NTSC; - - if (ioctl(i, METEORSFMT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - c = METEOR_INPUT_DEV0; - - if (ioctl(i, METEORSINPUT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - mmbuf=(char *)mmap((caddr_t)0, SIZE, PROT_READ, - MAP_SHARED, i, (off_t)0); - -#ifdef SINGLE_MODE - /* single frame capture */ - c = METEOR_CAP_SINGLE ; - ioctl(i, METEORCAPTUR, &c); /* wait for the frame */ - - /* directly access the frame buffer array data in mmbuf */ -#else - /* continuous frame capture */ - c = METEOR_CAP_CONTINOUS ; - ioctl(i, METEORCAPTUR, &c); /* returns immediately */ - - /* directly access the frame buffer array data in mmbuf */ - - c = METEOR_CAP_STOP_CONT ; - ioctl(i, METEORCAPTUR, &c); /* close will also stop capture */ -#endif - - close(i); - exit(0); -} -.Ed -.It -Memory mapped, multi-frame ring buffer synchronize capture. -.Pp -This continuous capture mode is synchronized with the application that -processes up to 32 frames. -This gives the advantages of both single and -continuous capture modes. -.Pp -The kernel notifies the application of a new data by raising an -application defined signal. -The driver also shares a structure with -the application that allows them to communicate which frame has been -written by the kernel and which frame has been read by the application. -.Pp -The shared structure starts on the first page after your data. -The -structure address can be found by calculation: -.Pp -.Dl "(number_rows * number_columns * pixel_depth + 4095) & 0xfffff000" -or -.Dl "((number_rows * number_columns * pixel_depth + 4095)/4096) * 4096" -.Pp -The shared structure is of type -.Va struct meteor_mem . -The two most -important fields are called -.Va active -and -.Va num_active_buf . -.Va active -is a bitmap of frames written by the kernel. -.Va num_active_bufs -is -a count of frames marked in the -.Va active -field. -When a frame is read -in by the driver, the -.Va num_active_bufs -count is tested, if this -count is below the threshold of number of active frames (value -in -.Va meteor_mem Ns 's -.Va hiwat -variable), the bit representing frame -number in the buffer is stored in the -.Va active -variable, the -.Va num_active_bufs -is incremented, the kernel then raises the specified -signal to activate the user application. -The user application's -responsibility when getting the signal is to check the active bitmap -to determine the lowest active frame, use the data as the application -desires, clear the bitmap entry for that frame, and decrement the -.Va num_active_bufs . -If the threshold of number of active frames -.Pq Va hiwat -has been exceeded, no new frames or signal from the kernel will occur -until the -.Va num_active_bufs -is less than or equal to -.Va lowat . -.Pp -The driver loads the frames in a round-robin fashion. -It is expected -that the user removes them in the same order. -The driver does not -check to see if the frame is already active. -.Pp -The -.Va frame_size -and number of frames in the buffer are also provided -to the -.Va meteor_mem -structure, but changing these fields in the -application will not change the operation of the driver. -.Pp -In programming for this mode, the user opens the device, sets the -geometry, -.Xr mmap 2 Ns s -the data/common control structure, then starts the -continuous capture mode. -A special signal catcher is required to -process the frames as they are read by the kernel. -.Pp -When specifying the geometry (see: -.Dv METEORSETGEO -.Xr ioctl 2 -call), -it -is important that the number of frames is set greater than 1. -.Pp -.Pa skeleton_capture_n.c -.Bd -literal -#include <sys/types.h> -#include <sys/mman.h> -#include <sys/fcntl.h> -#include <sys/signal.h> -#include <machine/ioctl_meteor.h> - -int video; /* made global if you wish to stop capture in signal handler */ -caddr_t data_frames; -struct meteor_mem *common_mem; -extern int errno; - -#define FRAME_MAX - -void -usr2_catcher() -{ -#ifdef SIGNAL_STOP - struct meteor_capframe capframe; /* for ioctl */ -#endif - char *frame; - - /* find frame */ - frame = (char *) (data_frames + sig_cnt * common_mem->frame_size) ; - - /* add frame processing here */ - /* deactivate frame */ - common_mem->active &= ~(1 << (sig_cnt % 16)); - common_mem->num_active_bufs--; - - /* process next frame on next interrupt */ - sig_cnt = ((sig_cnt+1) % FRAME_MAX); - -#ifdef SIGNAL_STOP - if (some_condition_requiring_stopping) { - capframe.command=METEOR_CAP_STOP_FRAMES; - - if (ioctl(i, METEORCAPFRM, &capframe) < 0) { - printf("METEORCAPFRM failed %d\\n", errno); - exit(1); - } - } -#endif -} - -main() -{ - struct meteor_geomet geo; - int height, width, depth, frames, size; - struct meteor_capframe capframe; - - if ((i = open("/dev/meteor0", O_RDONLY)) < 0) { - printf("open failed\\n"); - exit(1); - } - printf("test %d %d\\n", errno, i); - - height = geo.rows = 120; - width= geo.columns = 320; - frames = geo.frames = FRAME_MAX; - depth = 2; /* 2 bytes per pixel for RGB*/ - - - geo.oformat = METEOR_GEO_RGB16; - - if (ioctl(i, METEORSETGEO, &geo) < 0) { - printf("METEORSETGEO failed %d\\n", errno); - exit(1); - } - - c = METEOR_FMT_NTSC; - - if (ioctl(i, METEORSFMT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - c = METEOR_INPUT_DEV0; - - if (ioctl(i, METEORSINPUT, &c) < 0) { - printf("ioctl failed: %d\\n", errno); - exit(1); - } - - size = ((width*height*depth*frames+4095)/4096)*4096; - /* add one page after data for meteor_mem */ - data_frames = mmap((caddr_t)0, size + 4096, PROT_READ | PROT_WRITE, - MAP_SHARED, i, (off_t)0); - - if (data_frames == (caddr_t) MAP_FAILED) return (0); - - /* common_mem is located at page following data */ - common_mem = (struct meteor_mem *) (y + size); - - signal(SIGUSR2, usr2_catcher); /* catch new frame message */ - - capframe.command=METEOR_CAP_N_FRAMES; - capframe.signal=SIGUSR2; - capframe.lowat=12; /* must be < hiwat */ - capframe.hiwat=14; /* must be < FRAME_MAX */ - - /* start the sync capture */ - if (ioctl(i, METEORCAPFRM, &capframe) < 0) { - printf("METEORCAPFRM failed %d\\n", errno); - exit(1); - } - - /* this is the background working area, or you can sleep */ - - - /* to stop capture */ - capframe.command=METEOR_CAP_STOP_FRAMES; - - if (ioctl(i, METEORCAPFRM, &capframe) < 0) { - printf("METEORCAPFRM failed %d\\n", errno); - exit(1); - } -} -.Ed -.El -.Ss Meteor IOCTL Call and Parameters -The -.Nm -capture driver has -.Xr ioctl 2 -requests for capturing, reading card -status, for setting and reading the geometry, and for setting and reading the -attributes. -.Pp -.Bf -symbolic -IT IS VERY IMPORTANT TO CHECK FOR ERRORS ON THESE RETURNING IOCTLs. -.Ef -Errors indicate that something is very wrong with the -.Xr ioctl 2 -and the -application should not attempt to proceed further with capturing. -The -.Nm -capture driver still makes attempts to stop the next capture step if -an error occurred in a previous step but was ignored by the application -programmer. -.Bl -enum -.It -.Xr ioctl 2 -requests -.Dv METEORSETGEO -and -.Dv METEORGETGEO -.Pp -.Dv METEORSETGEO -and -.Dv METEORGETGEO -are used to set and read the input -size, input device, and output format for frame capture. -.Pp -These -.Xr ioctl 2 -routines use the -.Va meteor_geomet -structure that has the -following entries: -.Bl -tag -width columns -.It Va rows -number of rows (lines high) in output image -.It Va columns -number of pixels in a row (width) in output image -.It Va frames -number of frames in buffer. -Should be 1, unless using -the multi-framed synchronous capture mode -.Pq Dv METEORCAPFRM -which REQUIRES frames to be larger than 1. -.Pp -Note: if -.Va rows , columns -or -.Va frames -is not changed, then -the existing values are used. -The system defaults -is 640x480x1. -.It Va oformat -you may choose one of the following output format: -.Bl -tag -width METEOR_GEO_YUV_PACKED -.It Dv METEOR_GEO_RGB16 -(RGB 16 bits xrrrrrgg gggbbbbb default) -.It Dv METEOR_GEO_RGB24 -(RGB 24 bits packed in 32 bits: -00000000 rrrrrrrr gggggggg bbbbbbbb) -.It Dv METEOR_GEO_YUV_PACKED -(4-2-2 YUV 16 bits packed byte format: -u0 y0 v0 y1 u1 y2 v1 y3 ...) -.It Dv METEOR_GEO_YUV_PLANER -(4-2-2 YUV 16 bits planer format: -rows * columns bytes of y -rows * column / 4 bytes of even u -rows * column / 4 bytes of even v -rows * column / 4 bytes of odd u -rows * column / 4 bytes of odd v) -.El -.El -.Pp -The -.Dv METEORSETGEO -.Xr ioctl 2 -will fail if more than one entry from a category -is selected. -It is highly recommended that a -.Dv METEORSETGEO -is done -before capturing data because you cannot guarantee the initial mode -the card. -.Pp -The -.Dv METEORSETGEO -will also attempt to reallocate a new contiguous -kernel buffer if the new geometry exceeds the old geometry. -On the -other hand, if the new geometry will fit in the existing buffer, -the existing buffer is used. -.Pp -If -.Dv METEORSETGEO -fails the -.Xr ioctl 2 -will return a value of -1 and the -external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid -.Va meteor_geomet -structure pointer, -.Va rows , columns , frames -were invalid. -.It Bq Er ENOMEM -could not allocate the contiguous block. -.El -.It -.Xr ioctl 2 -requests -.Dv METEORSFMT -and -.Dv METEORGFMT -.Pp -.Dv METEORSFMT -and -.Dv METEORGFMT -are used to set and read the camera input -standard format. -.Pp -Possible formats are: -.Pp -.Bl -tag -width METEOR_FMT_AUTOMODE -compact -.It Dv METEOR_FMT_NTSC -NTSC (default mode) -.It Dv METEOR_FMT_PAL -PAL -.It Dv METEOR_FMT_SECAM -SECAM -.It Dv METEOR_FMT_AUTOMODE -Autodetect. -.El -.It -.Xr ioctl 2 -requests -.Dv METEORSINPUT -and -.Dv METEORGINPUT -.Pp -.Dv METEORSINPUT -and -.Dv METEORGINPUT -are used to set and read the camera -input device. -Using the DB9 connector on the -.Tn Meteor -card, 4 input -devices can be connected and an input camera can be selected with this -.Xr ioctl 2 . -.Pp -Possible formats are: -.Pp -.Bl -tag -width METEOR_INPUT_DEV_SVIDEO -compact -.It Dv METEOR_INPUT_DEV0 -(default if none specified) -.It Dv METEOR_INPUT_DEV_RCA -(same as METEOR_INPUT_DEV0) -.It Dv METEOR_INPUT_DEV1 -.It Dv METEOR_INPUT_DEV2 -.It Dv METEOR_INPUT_DEV_SVIDEO -(same as METEOR_INPUT_DEV2) -.El -.It -.Xr ioctl 2 -request -.Dv METEORSTATUS -.Pp -.Dv METEORSTATUS -is used to read the status of the -.Tn Meteor -capture card -and returns the following information: -.Bl -column "METEOR_STATUS_ID_MASK" "\&" -.It Dv METEOR_STATUS_ID_MASK " 4 bit ID of the SAA7196 scaler chip." -.Pp -.It Dv METEOR_STATUS_DIR " 0 = scaler uses internal source." -.It " 1 = scaler uses external data of expansion bus." -.Pp -.It Dv METEOR_STATUS_OEF " 0 = even field detected." -.It " 1 = odd field detected." -.Pp -.It Dv METEOR_STATUS_SVP " VRAM Port state:" -.It " 0 = inputs HFL and INCADDR inactive." -.It " 1 = inputs HFL and INCADDR active." -.Pp -.It Dv METEOR_STATUS_STTC " 0 = TV horizontal time constant (slow)." -.It " 1 = VCR horizontal time constant (fast)." -.Pp -.It Dv METEOR_STATUS_HCLK " 0 = Horizontal Phase Lock Loop locked." -.It " 1 = Horizontal Phase Lock Loop unlocked." -.Pp -.It Dv METEOR_STATUS_FIDT " 0 = 50 Hz Field detected." -.It " 1 = 60 Hz Field detected." -.Pp -.It Dv METEOR_STATUS_ALTD " 0 = no line alternating color burst detected." -.It " 1 = line alternating color burst detected (PAL/SECAM)." -.Pp -.It Dv METEOR_STATUS_CODE " 0 = no color information detected." -.It " 1 = color information detected." -.El -.It -.Xr ioctl 2 -request -.Dv METEORCAPTUR -.Pp -.Dv METEORCAPTUR -is used to single frame capture or unsynchronized -continuous capture. -.Pp -The single frame capture -.Xr ioctl 2 -request will return only after a -frame has been captured and transferred to the frame buffer. -.Pp -The unsynchronized continuous capture will return immediately and -data is directly deposited into the buffer when it is available. -Since this is unsynchronized, it is possible the data is being -written by the kernel while being read by the application. -.Pp -These -.Xr ioctl 2 -routines use the following settings: -.Pp -.Bl -tag -width METEOR_CAP_CONTINOUS -compact -.It Dv METEOR_CAP_SINGLE -capture one frame -.It Dv METEOR_CAP_CONTINOUS -unsynchronized continuous capture -.It Dv METEOR_CAP_STOP_CONT -stop the unsynchronized continuous -capture -.El -.Pp -If -.Dv METEORCAPTUR -fails the -.Xr ioctl 2 -will return a value of -1 and the -external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid capture command value -.It Bq Er ENXIO -there is not internal buffer to hold the frame. -This indicates the previous set geometry -.Xr ioctl 2 -failed. -.It Bq Er EIO -card is already capturing. -.El -.It -.Xr ioctl 2 -request -.Dv METEORCAPFRM -.Pp -.Dv METEORCAPFRM -is used for synchronous capture of multiple frames. -.Pp -This -.Xr ioctl 2 -routine uses the -.Va meteor_capture -structure that has the -following entries: -.Bl -tag -width command -.It Va command -possible values for -.Va command -are: -.Bl -tag -width METEOR_CAP_STOP_FRAMES -.It Dv METEOR_CAP_STOP_FRAMES -stop the capture; does not use the -other variable in structure. -.It Dv METEOR_CAP_N_FRAMES -start the capture using the other -variables in the structure as inputs -.El -.It Va signal -signal to send to application when a new -frame has been captured. -This signal will -only be raised if the captured frame is saved. -.It Va lowat -see below -.It Va hiwat -see below -.El -.Pp -When a new frame is completed, the driver checks the current unread -frame count stored in shared variable (the shared variable is stored -in the -.Va meteor_mem -structure) -.Va num_active_buf ; -if the count is larger -than -.Va hiwat , -the driver will not store any new frames and will not -send capture signal to the user application until the -.Va num_active_buf -is lower than -.Va lowat . -.Pp -If -.Dv METEORCAPFRM -fails the -.Xr ioctl 2 -will return a value of -1 and the -external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid meteor_geomet structure pointer or bad command. -.It Bq Er ENXIO -there is not internal buffer to hold the frame. -This indicates the previous set geometry -.Xr ioctl 2 -failed. -.It Bq Er EIO -card is already capturing. -.El -.It -.Xr ioctl 2 -requests -.Dv METEORSCHCV -and -.Dv METEORGCHCV -.Pp -.Dv METEORSCHCV -and -.Dv METEORGCHCV -are used to set and get the chrominance -gain control and effects the UV output amplitude. -.Pp -If -.Dv METEORSCHCV -or -.Dv METEORGCHCV -fails the -.Xr ioctl 2 -will return a value -of -1 and the external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid unsigned char pointer. -.El -.It -.Xr ioctl 2 -requests -.Dv METEORGHUE -and -.Dv METEORSHUE -.Pp -.Dv METEORGHUE -and -.Dv METEORSHUE -are used to get and set the hue. -The -signed character has legal values are from +127 which represent -+178.6 degrees to -128 which represents -180 degrees. -.Pp -If -.Dv METEORGHUE -or -.Dv METEORSHUE -fails the -.Xr ioctl 2 -will return a value of --1 and the external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid signed char pointer. -.El -.It -.Xr ioctl 2 -requests -.Dv METEORSCOUNT -and -.Dv METEORGCOUNT -.Pp -.Dv METEORGCOUNT -is used to get the count of frame errors, DMA errors and -count of the number of frames captured that have occurred since -the device was opened. -.Dv METEORSCOUNT -can be used to reinitialize the -counters. -.Pp -This -.Xr ioctl 2 -routines use the -.Va meteor_counts -structure that has the -following entries: -.Bl -tag -width frame_count -.It Va fifo_errors -number of FIFO errors since device was opened. -.It Va dma_errors -number of DMA errors since device was opened. -.It Va frame_count -number of frames captured since device was opened. -.El -.Pp -If -.Dv METEORSCOUNT -or -.Dv METEORGCOUNT -fails the -.Xr ioctl 2 -will return a value -of -1 and the external variable -.Va errno -will be set to: -.Bl -tag -width Er -.It Bq Er EINVAL -invalid meteor_counts structure pointer. -.El -.El -.Sh AUTHORS -.An Jim Lowe Aq Mt james@miller.cs.uwm.edu -.An Mark Tinguely Aq Mt tinguely@plains.nodak.edu -.Sh BUGS -The -.Nm -driver no longer works at all.