|
|
| version 1.8, 2004/05/13 23:49:22 | version 1.9, 2004/05/19 22:52:54 |
|---|---|
| Line 65 static video_switch_t *vidsw_ini; | Line 65 static video_switch_t *vidsw_ini; |
| video_switch_t **vidsw = &vidsw_ini; | video_switch_t **vidsw = &vidsw_ini; |
| #ifdef FB_INSTALL_CDEV | #ifdef FB_INSTALL_CDEV |
| static struct lwkt_port *vidcdevsw_ini; | static dev_t vidcdevsw_ini; |
| static struct lwkt_port **vidcdevsw = &vidcdevsw_ini; | static dev_t *vidcdevsw = &vidcdevsw_ini; |
| #endif | #endif |
| #define ARRAY_DELTA 4 | #define ARRAY_DELTA 4 |
| Line 77 vid_realloc_array(void) | Line 77 vid_realloc_array(void) |
| video_adapter_t **new_adp; | video_adapter_t **new_adp; |
| video_switch_t **new_vidsw; | video_switch_t **new_vidsw; |
| #ifdef FB_INSTALL_CDEV | #ifdef FB_INSTALL_CDEV |
| struct lwkt_port **new_cdevsw; | dev_t *new_cdevsw; |
| #endif | #endif |
| int newsize; | int newsize; |
| int s; | int s; |
| Line 388 vfbattach(void *arg) | Line 388 vfbattach(void *arg) |
| static int fb_devsw_installed = FALSE; | static int fb_devsw_installed = FALSE; |
| if (!fb_devsw_installed) { | if (!fb_devsw_installed) { |
| cdevsw_add(&fb_cdevsw); | cdevsw_add(&fb_cdevsw, 0, 0); |
| fb_devsw_installed = TRUE; | fb_devsw_installed = TRUE; |
| } | } |
| } | } |
| Line 409 fb_attach(dev_t dev, video_adapter_t *ad | Line 409 fb_attach(dev_t dev, video_adapter_t *ad |
| return EINVAL; | return EINVAL; |
| s = spltty(); | s = spltty(); |
| reference_dev(dev); | |
| adp->va_minor = minor(dev); | adp->va_minor = minor(dev); |
| vidcdevsw[adp->va_index] = dev_dport(dev); | vidcdevsw[adp->va_index] = dev; |
| splx(s); | splx(s); |
| printf("fb%d at %s%d\n", adp->va_index, adp->va_name, adp->va_unit); | printf("fb%d at %s%d\n", adp->va_index, adp->va_name, adp->va_unit); |
| return 0; | return 0; |
| } | } |
| #if 0 /* never seems to be called */ | |
| /* | /* |
| * Note: dev represents the actual video device, not the frame buffer | * Note: dev represents the actual video device, not the frame buffer |
| */ | */ |
| Line 430 fb_detach(dev_t dev, video_adapter_t *ad | Line 430 fb_detach(dev_t dev, video_adapter_t *ad |
| return EINVAL; | return EINVAL; |
| if (adapter[adp->va_index] != adp) | if (adapter[adp->va_index] != adp) |
| return EINVAL; | return EINVAL; |
| if (vidcdevsw[adp->va_index] != port) | if (vidcdevsw[adp->va_index] != dev) |
| return EINVAL; | return EINVAL; |
| s = spltty(); | s = spltty(); |
| vidcdevsw[adp->va_index] = NULL; | vidcdevsw[adp->va_index] = NULL; |
| splx(s); | splx(s); |
| release_dev(dev); | |
| return 0; | return 0; |
| } | } |
| #endif | |
| static int | static int |
| fbopen(dev_t dev, int flag, int mode, struct thread *td) | fbopen(dev_t dev, int flag, int mode, struct thread *td) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (unit >= adapters) | if (unit >= adapters) |
| return ENXIO; | return ENXIO; |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return dev_port_dopen(vidcdevsw[unit], | return dev_dopen(fdev, flag, mode, td); |
| makedev(0, adapter[unit]->va_minor), | |
| flag, mode, td); | |
| } | } |
| static int | static int |
| fbclose(dev_t dev, int flag, int mode, struct thread *td) | fbclose(dev_t dev, int flag, int mode, struct thread *td) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return dev_port_dclose(vidcdevsw[unit], | return dev_dclose(fdev, flag, mode, td); |
| makedev(0, adapter[unit]->va_minor), | |
| flag, mode, td); | |
| } | } |
| static int | static int |
| fbread(dev_t dev, struct uio *uio, int flag) | fbread(dev_t dev, struct uio *uio, int flag) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return dev_port_dread(vidcdevsw[unit], | return dev_dread(fdev, uio, flag); |
| makedev(0, adapter[unit]->va_minor), | |
| uio, flag); | |
| } | } |
| static int | static int |
| fbwrite(dev_t dev, struct uio *uio, int flag) | fbwrite(dev_t dev, struct uio *uio, int flag) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return dev_port_dwrite(vidcdevsw[unit], | return dev_dwrite(fdev, uio, flag); |
| makedev(0, adapter[unit]->va_minor), | |
| uio, flag); | |
| } | } |
| static int | static int |
| fbioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td) | fbioctl(dev_t dev, u_long cmd, caddr_t arg, int flag, struct thread *td) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return dev_port_dioctl(vidcdevsw[unit], | return dev_dioctl(fdev, cmd, arg, flag, td); |
| makedev(0, adapter[unit]->va_minor), | |
| cmd, arg, flag, td); | |
| } | } |
| static int | static int |
| fbmmap(dev_t dev, vm_offset_t offset, int nprot) | fbmmap(dev_t dev, vm_offset_t offset, int nprot) |
| { | { |
| int unit; | int unit; |
| dev_t fdev; | |
| unit = FB_UNIT(dev); | unit = FB_UNIT(dev); |
| if (vidcdevsw[unit] == NULL) | if ((fdev = vidcdevsw[unit]) == NULL) |
| return ENXIO; | return ENXIO; |
| return (dev_port_dmmap(vidcdevsw[unit], | return (dev_dmmap(fdev, offset, nprot)); |
| makedev(0, adapter[unit]->va_minor), | |
| offset, nprot)); | |
| } | } |
| #if experimental | #if experimental |