[PATCH] multiseat with several videocards

Laércio de Sousa lbsousajr at gmail.com
Tue Mar 11 03:39:48 PDT 2014


Hi Oleg!

Could you please re-submit this patch without the xf86Bus.c part? I've
already submitted that patch previously and it's currently under review by
David Arilie and Hans de Goede.

Thanks!

CANTATE DOMINO CANTICUM NOVUM
QUIA MIRABILIA FECIT

Laércio


2013-09-28 17:56 GMT-03:00 Oleg Samarin <osamarin68 at gmail.com>:

> Added capability of specifying "MatchSeat" option in the ServerLayout, the
> Device and the Screen sections for selecting default sections for the seat
> ---
>  hw/xfree86/common/xf86Bus.c    |  4 ++--
>  hw/xfree86/common/xf86Config.c | 33 +++++++++++++++++++++++++--------
>  hw/xfree86/parser/Device.c     |  6 ++++++
>  hw/xfree86/parser/Layout.c     |  6 ++++++
>  hw/xfree86/parser/Screen.c     |  6 ++++++
>  hw/xfree86/parser/xf86Parser.h |  3 +++
>  hw/xfree86/parser/xf86tokens.h |  1 +
>  7 files changed, 49 insertions(+), 10 deletions(-)
>
> diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c
> index e101537..91af72f 100644
> --- a/hw/xfree86/common/xf86Bus.c
> +++ b/hw/xfree86/common/xf86Bus.c
> @@ -81,7 +81,7 @@ xf86CallDriverProbe(DriverPtr drv, Bool detect_only)
>      if (drv->platformProbe != NULL) {
>          foundScreen = xf86platformProbeDev(drv);
>      }
> -    if (ServerIsNotSeat0())
> +    if (ServerIsNotSeat0() && foundScreen)
>          return foundScreen;
>  #endif
>
> @@ -201,7 +201,7 @@ xf86BusProbe(void)
>  {
>  #ifdef XSERVER_PLATFORM_BUS
>      xf86platformProbe();
> -    if (ServerIsNotSeat0())
> +    if (ServerIsNotSeat0() && xf86_num_platform_devices > 0)
>          return;
>  #endif
>  #ifdef XSERVER_LIBPCIACCESS
> diff --git a/hw/xfree86/common/xf86Config.c
> b/hw/xfree86/common/xf86Config.c
> index 74d5ed3..9ed8b02 100644
> --- a/hw/xfree86/common/xf86Config.c
> +++ b/hw/xfree86/common/xf86Config.c
> @@ -232,6 +232,17 @@ xf86ValidateFontPath(char *path)
>      return tmp_path;
>  }
>
> +#define FIND_SUITABLE(pointertype, listhead, ptr)
>       \
> +    {
>       \
> +        pointertype l, p;
>       \
> +
>        \
> +        for (l = listhead, p = NULL; !p && l; l = (pointertype)
> l->list.next) { \
> +            if (! l->match_seat || SeatId &&
> xf86nameCompare(l->match_seat, SeatId) == 0) \
> +                p = l;
>        \
> +        }
>       \
> +        ptr = p;
>        \
> +    }
> +
>  /*
>   * use the datastructure that the parser provides and pick out the parts
>   * that we need at this point
> @@ -1578,8 +1589,11 @@ configLayout(serverLayoutPtr servlayoutp,
> XF86ConfLayoutPtr conf_layout,
>       * config file, or - if it is NULL - configScreen autogenerates one
> for
>       * us */
>      if (!count) {
> +        XF86ConfScreenPtr screen;
> +
> +        FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst,
> screen);
>          slp[0].screen = xnfcalloc(1, sizeof(confScreenRec));
> -        if (!configScreen(slp[0].screen, xf86configptr->conf_screen_lst,
> +        if (!configScreen(slp[0].screen, screen,
>                            0, X_CONFIG)) {
>              free(slp[0].screen);
>              free(slp);
> @@ -1819,7 +1833,7 @@ configScreen(confScreenPtr screenp,
> XF86ConfScreenPtr conf_screen, int scrnum,
>       * set it to NULL so that the section can be autoconfigured later */
>      screenp->device = xnfcalloc(1, sizeof(GDevRec));
>      if ((!conf_screen->scrn_device) && (xf86configptr->conf_device_lst)) {
> -        conf_screen->scrn_device = xf86configptr->conf_device_lst;
> +        FIND_SUITABLE (XF86ConfDevicePtr, xf86configptr->conf_device_lst,
> conf_screen->scrn_device);
>          xf86Msg(X_DEFAULT, "No device specified for screen \"%s\".\n"
>                  "\tUsing the first device section listed.\n",
> screenp->id);
>      }
> @@ -2429,12 +2443,15 @@ xf86HandleConfigFile(Bool autoconfig)
>      /* First check if a layout section is present, and if it is valid. */
>
>      if (xf86configptr->conf_layout_lst == NULL || xf86ScreenName != NULL)
> {
> +        XF86ConfScreenPtr screen;
> +
>          if (xf86ScreenName == NULL) {
>              xf86Msg(X_DEFAULT,
>                      "No Layout section.  Using the first Screen
> section.\n");
>          }
> +        FIND_SUITABLE (XF86ConfScreenPtr, xf86configptr->conf_screen_lst,
> screen);
>          if (!configImpliedLayout(&xf86ConfigLayout,
> -                                 xf86configptr->conf_screen_lst,
> +                                 screen,
>                                   xf86configptr)) {
>              xf86Msg(X_ERROR, "Unable to determine the screen layout\n");
>              return CONFIG_PARSE_ERROR;
> @@ -2442,6 +2459,9 @@ xf86HandleConfigFile(Bool autoconfig)
>          implicit_layout = TRUE;
>      }
>      else {
> +        XF86ConfLayoutPtr layout;
> +
> +        FIND_SUITABLE(XF86ConfLayoutPtr, xf86configptr->conf_layout_lst,
> layout);
>          if (xf86configptr->conf_flags != NULL) {
>              char *dfltlayout = NULL;
>              pointer optlist = xf86configptr->conf_flags->flg_option_lst;
> @@ -2449,16 +2469,13 @@ xf86HandleConfigFile(Bool autoconfig)
>              if (optlist && xf86FindOption(optlist, "defaultserverlayout"))
>                  dfltlayout =
>                      xf86SetStrOption(optlist, "defaultserverlayout",
> NULL);
> -            if (!configLayout
> -                (&xf86ConfigLayout, xf86configptr->conf_layout_lst,
> -                 dfltlayout)) {
> +            if (!configLayout(&xf86ConfigLayout, layout, dfltlayout)) {
>                  xf86Msg(X_ERROR, "Unable to determine the screen
> layout\n");
>                  return CONFIG_PARSE_ERROR;
>              }
>          }
>          else {
> -            if (!configLayout(&xf86ConfigLayout,
> xf86configptr->conf_layout_lst,
> -                              NULL)) {
> +            if (!configLayout(&xf86ConfigLayout, layout, NULL)) {
>                  xf86Msg(X_ERROR, "Unable to determine the screen
> layout\n");
>                  return CONFIG_PARSE_ERROR;
>              }
> diff --git a/hw/xfree86/parser/Device.c b/hw/xfree86/parser/Device.c
> index bb1ba88..1f7ffdb 100644
> --- a/hw/xfree86/parser/Device.c
> +++ b/hw/xfree86/parser/Device.c
> @@ -72,6 +72,7 @@ xf86ConfigSymTabRec DeviceTab[] = {
>      {RAMDAC, "ramdac"},
>      {DACSPEED, "dacspeed"},
>      {CLOCKS, "clocks"},
> +    {MATCHSEAT, "matchseat"},
>      {OPTION, "option"},
>      {VIDEORAM, "videoram"},
>      {BIOSBASE, "biosbase"},
> @@ -217,6 +218,11 @@ xf86parseDeviceSection(void)
>                  Error(NUMBER_MSG, "TextClockFreq");
>              ptr->dev_textclockfreq = (int) (val.realnum * 1000.0 + 0.5);
>              break;
> +        case MATCHSEAT:
> +            if (xf86getSubToken(&(ptr->dev_comment)) != STRING)
> +                Error(QUOTE_MSG, "MatchSeat");
> +            ptr->match_seat = val.str;
> +            break;
>          case OPTION:
>              ptr->dev_option_lst = xf86parseOption(ptr->dev_option_lst);
>              break;
> diff --git a/hw/xfree86/parser/Layout.c b/hw/xfree86/parser/Layout.c
> index cbd8d24..e838a7c 100644
> --- a/hw/xfree86/parser/Layout.c
> +++ b/hw/xfree86/parser/Layout.c
> @@ -71,6 +71,7 @@ static xf86ConfigSymTabRec LayoutTab[] = {
>      {ENDSECTION, "endsection"},
>      {SCREEN, "screen"},
>      {IDENTIFIER, "identifier"},
> +    {MATCHSEAT, "matchseat"},
>      {INACTIVE, "inactive"},
>      {INPUTDEVICE, "inputdevice"},
>      {OPTION, "option"},
> @@ -110,6 +111,11 @@ xf86parseLayoutSection(void)
>              ptr->lay_identifier = val.str;
>              has_ident = TRUE;
>              break;
> +        case MATCHSEAT:
> +            if (xf86getSubToken(&(ptr->lay_comment)) != STRING)
> +                Error(QUOTE_MSG, "MatchSeat");
> +            ptr->match_seat = val.str;
> +            break;
>          case INACTIVE:
>          {
>              XF86ConfInactivePtr iptr;
> diff --git a/hw/xfree86/parser/Screen.c b/hw/xfree86/parser/Screen.c
> index f294ec4..009c4e9 100644
> --- a/hw/xfree86/parser/Screen.c
> +++ b/hw/xfree86/parser/Screen.c
> @@ -199,6 +199,7 @@ xf86parseDisplaySubSection(void)
>  static xf86ConfigSymTabRec ScreenTab[] = {
>      {ENDSECTION, "endsection"},
>      {IDENTIFIER, "identifier"},
> +    {MATCHSEAT, "matchseat"},
>      {OBSDRIVER, "driver"},
>      {MDEVICE, "device"},
>      {MONITOR, "monitor"},
> @@ -237,6 +238,11 @@ xf86parseScreenSection(void)
>                  Error(ONLY_ONE_MSG, "Identifier or Driver");
>              has_ident = TRUE;
>              break;
> +        case MATCHSEAT:
> +            if (xf86getSubToken(&(ptr->scrn_comment)) != STRING)
> +                Error(QUOTE_MSG, "MatchSeat");
> +            ptr->match_seat = val.str;
> +            break;
>          case OBSDRIVER:
>              if (xf86getSubToken(&(ptr->scrn_comment)) != STRING)
>                  Error(QUOTE_MSG, "Driver");
> diff --git a/hw/xfree86/parser/xf86Parser.h
> b/hw/xfree86/parser/xf86Parser.h
> index e7210e8..bb41c99 100644
> --- a/hw/xfree86/parser/xf86Parser.h
> +++ b/hw/xfree86/parser/xf86Parser.h
> @@ -224,6 +224,7 @@ typedef struct {
>      int dev_screen;
>      XF86OptionPtr dev_option_lst;
>      char *dev_comment;
> +    char *match_seat;
>  } XF86ConfDeviceRec, *XF86ConfDevicePtr;
>
>  typedef struct {
> @@ -275,6 +276,7 @@ typedef struct {
>      XF86OptionPtr scrn_option_lst;
>      char *scrn_comment;
>      int scrn_virtualX, scrn_virtualY;
> +    char *match_seat;
>  } XF86ConfScreenRec, *XF86ConfScreenPtr;
>
>  typedef struct {
> @@ -366,6 +368,7 @@ typedef struct {
>      XF86ConfInactivePtr lay_inactive_lst;
>      XF86ConfInputrefPtr lay_input_lst;
>      XF86OptionPtr lay_option_lst;
> +    char *match_seat;
>      char *lay_comment;
>  } XF86ConfLayoutRec, *XF86ConfLayoutPtr;
>
> diff --git a/hw/xfree86/parser/xf86tokens.h
> b/hw/xfree86/parser/xf86tokens.h
> index f751b7b..5c01ce7 100644
> --- a/hw/xfree86/parser/xf86tokens.h
> +++ b/hw/xfree86/parser/xf86tokens.h
> @@ -87,6 +87,7 @@ typedef enum {
>      VENDOR,
>      DASH,
>      COMMA,
> +    MATCHSEAT,
>      OPTION,
>      COMMENT,
>
> --
> 1.8.3.1
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.x.org/archives/xorg-devel/attachments/20140311/cc0fc974/attachment-0001.html>


More information about the xorg-devel mailing list