Hi Marco, On Wed, Aug 27, 2003 at 08:52:42PM +0200, Marco Gerards wrote: > Hi, > > "Peter 'p2' De Schrijver" <[EMAIL PROTECTED]> writes: > > > struct syncinfo { > > enum { SPLIT_SYNC, CSYNC, SYNC_ON_COLOR } type; > > union { > > struct { > > polarity hsync_pol; > > polarity vsync_pol; > > } split_sync; > > struct { > > polarity csync_pol; > > } csync; > > struct { > > polarity pol; > > enum {RED, GREEN, BLUE} color; > > } sync_on_color; > > } sync_parameters; > > }; > > > > typedef unsigned int display_flags; > > > > #define DISPLAY_FLAGS_LACE (1<<0) > > #define DISPLAY_FLAGS_EXTSYNC (1<<1) > > #define DISPLAY_FLAGS_DOUBLE (1<<2) > > Ah, thanks. I've updated the interfaces to use this. I've changed it a > bit and added some comments, can you have a look at the new interfaces > if this update was sane? >
Ok. > [...] > > > I wuould rather have : > > error_t (*set_horiz_timings) (unsigned xres, unsigned left, unsigned > > right, unsigned hslen); > > > > /* set number of visible horizontal pixels to xres, > > set number of left margin pixels to left, > > set number of right margin pixels to right, > > set horizontal sync pulse width to hslen */ > > Yes, that is much better. I will update the interfaces soon. I haven't > done this because it requires that all modelines will be updated (yes, > I'm lazy :)). > Ok. I guess fb.modes has all knowledge on how to do this. > [...] > > > error_t (*set_syncinfo) (struct syncinfo *si); > > > > error_t (*get_syncinfo) (struct syncinfo *si); > > > > error_t (*set_options) (display_flags flags); > > > > error_t (*get_options) (display_flags *flags); > > I've added these too. Thanks. > > Thanks, > Marco > > > The new interfaces: > > /* video-driver.h - Video driver interfaces. > Copyright (C) 2003 Free Software Foundation, Inc. > Written by Marco Gerards. > > This file is part of the GNU Hurd. > > The GNU Hurd is free software; you can redistribute it and/or > modify it under the terms of the GNU General Public License as > published by the Free Software Foundation; either version 2, or (at > your option) any later version. > > The GNU Hurd is distributed in the hope that it will be useful, but > WITHOUT ANY WARRANTY; without even the implied warranty of > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > General Public License for more details. > > You should have received a copy of the GNU General Public License > along with this program; if not, write to the Free Software > Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA. */ > > /* The powermodes that can be used to configure the power state of the > monitor. */ > > #ifndef _VIDEO_DRIVER_H_ > #define _VIDEO_DRIVER_H_ 1 > > /* DPMS powermodes. */ > enum powermode > { > /* Normal operation. */ > PM_ON, > PM_STANDBY, > PM_SUSPEND, > /* Turn the screen off. */ > PM_OFF > }; > > typedef enum powermode powermode_t; > > /* Use polarity to use for syncing. */ > typedef enum polarity > { > POLARITY_LOW, > POLARITY_HIGH > } polarity_t; > > /* The kind of sync signal that should be used. */ > typedef struct syncinfo > { I would change line(s) to signal(s). Seems a bit more clear to me. > enum > { > /* The videocard use the HSYNC and VSYNC lines to inform the > monitor of the sync. */ > SPLIT_SYNC, > /* The monitor uses only one line for both HSYNC and VSYNC. */ > CSYNC, > /* The monitor uses no seperate line for the sync; it uses one > of the color lines instead. */ > SYNC_ON_COLOR > } type; > union > { > struct > { > polarity_t hsync_pol; > polarity_t vsync_pol; > } split_sync; > struct > { > polarity_t csync_pol; > } csync; > struct > { > polarity_t pol; > /* The color line that is used for syncing. */ > enum > { > RED, > GREEN, > BLUE > } color; > } sync_on_color; > } sync_parameters; > } syncinfo_t; > > typedef unsigned int display_flags_t; > > /* Use interlacing. */ > #define DISPLAY_FLAGS_LACE (1 << 0); > /* Use a pixelclock from an external source (genlock?) */ > #define DISPLAY_FLAGS_EXTSYNC (1 << 1); > /* Use doublescan. Every line is shown twice, used for low resolution > modes. */ > #define DISPLAY_FLAGS_DOUBLE (1 << 2); > > /* Information and interfaces for a video driver. */ > struct video_driver > { > /* Name of driver name. */ > const char *driver_name; > > /* Name of videocard or videochipset. This information is available > after initialisation with init. It can be set to NULL when it is > not relevant. */ > char *card_sub_name; > > /* Maximum allowed values. XXX: Are more maximum values > required? */ > int max_hdisplay_end; > int max_hsync_start; > int max_hblank_start; > int max_htotal; > int max_vdisplay_end; > int max_vsync_start; > int max_vblank_start; > int max_vtotal; > > /* Initialise video driver. If the hardware is not available or > usable ENODEV is returned. */ > error_t (*init) (void); > > /* Deinitialize the driver. */ > error_t (*fini) (void); > > /* Set the last visible pixel on the display to END. Set the first > pixel of the horizontal retrace to SYNC_START and its last pixel > to SYNC_END. Set the last pixel of the screen to TOTAL, after > this the new line will begin. END, SYNC_START, SYNC_END and > TOTAL must be multiples of 8. Return EOVERFLOW when the hardware > can't setup the hardware registers without overflowing them, in > that case the videomode is not available. */ > error_t (*set_horiz_timings) (int xres, int sync_start, int sync_end, > int total); > > /* Return in END the last visible pixel on the screen, in SYNC_START > the pixel on which the horizontal retrace starts, in SYNC_END the > pixel on which the horizontal retrace ends and in TOTAL the last > pixel of the screen. Never return values that are not usable > with set_horiz_timings. */ > error_t (*get_horiz_timings) (int *xres, int *sync_start, int *sync_end, > int *total); > > /* Set the last visible scanline on the display to END. Set the > first scanline of the horizontal retrace to SYNC_START and its > last scanline to SYNC_END. Set the last scanline of the screen > to TOTAL, after this the new vertical period will begin. Return > EOVERFLOW when the hardware can't setup the hardware registers > without overflowing them, in that case the videomode is not > available. */ > error_t (*set_vert_timings) (int yres, int sync_start, int sync_end, > int total); > > /* Return in END the last visible scanline on the screen, in > SYNC_START the scanline on which the horizontal retrace starts, > in SYNC_END the scanline on which the horizontal retrace ends and > in TOTAL the last scanline of the screen. Never return values > that are not usable with set_vert_timings. */ > error_t (*get_vert_timings) (int *yres, int *sync_start, int *sync_end, > int *total); > > /* Set the timer to FREQUENCY Khz, the frequency used by the > hardware may be DEVIATION Hhz more or less than FREQUENCY. If > the pixelclock cannot be set to FREQUENCY with the deviation > DEVIATION return EINVAL. */ > error_t (*set_pixclock) (long frequency, int deviation); > > /* Test if there is a pixelclock with FREQUENCY Khz available, the > frequency used by the hardware may be DEVIATION Khz more or less > than FREQUENCY. Return 1 if a clock is available, return 0 > otherwise. */ > int (*test_pixclock) (long frequency, int deviation); > > /* Set the powermode of the monitor connected to this card to > POWERMODE. If this mode is not supported, return EINVAL. */ > error_t (*set_powermode) (powermode_t powermode); > > /* Get the current powermode, it is guaranteed that the returned > powermode is setable with set_powermode. */ > powermode_t (*get_powermode) (void); > > /* Set the kind of syncronisation used to SI. */ > error_t (*set_syncinfo) (syncinfo_t *si); > > /* Get the kind of syncronisation that is used. Return the > information in *SI. SI should have been allocated by the > caller. */ > error_t (*get_syncinfo) (syncinfo_t *si); > > /* Use the options in FLAGS for producing display output. */ > error_t (*set_options) (display_flags_t flags); > > /* Get the currently used options and return them in FLAGS. */ > error_t (*get_options) (display_flags_t *flags); > }; > > typedef struct video_driver *video_driver_t; > > > /* Available video drivers. */ > > /* The video driver that is used. This is one of the drivers > below. */ > video_driver_t video_driver; > > /* The VGA driver. It only supports the minimal VGA hardware, a 25 > and 28 Mhz clock. This driver is also used by other drivers for > SVGA cards. */ > extern const video_driver_t video_driver_vga; > > /* The driver for S3 videochips. Only the S3 Trio is currently > supported, this chipset has a programmable clock. */ > extern const video_driver_t video_driver_s3; > Cheers, Peter. _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd