static XF86ConfDevicePtr configureDeviceSection (int screennum) { char identifier[16]; OptionInfoPtr p; int i = 0; #ifdef DO_FBDEV_PROBE Bool foundFBDEV = FALSE; #endif parsePrologue (XF86ConfDevicePtr, XF86ConfDeviceRec) /* Move device info to parser structure */ sprintf(identifier, "Card%d", screennum); ptr->dev_identifier = strdup(identifier); /* ptr->dev_identifier = DevToConfig[screennum].GDev.identifier;*/ ptr->dev_vendor = DevToConfig[screennum].GDev.vendor; ptr->dev_board = DevToConfig[screennum].GDev.board; ptr->dev_chipset = DevToConfig[screennum].GDev.chipset; ptr->dev_busid = DevToConfig[screennum].GDev.busID; ptr->dev_driver = DevToConfig[screennum].GDev.driver; ptr->dev_ramdac = DevToConfig[screennum].GDev.ramdac; for (i = 0; (i < MAXDACSPEEDS) && (i < CONF_MAXDACSPEEDS); i++) ptr->dev_dacSpeeds[i] = DevToConfig[screennum].GDev.dacSpeeds[i]; ptr->dev_videoram = DevToConfig[screennum].GDev.videoRam; ptr->dev_textclockfreq = DevToConfig[screennum].GDev.textClockFreq; ptr->dev_bios_base = DevToConfig[screennum].GDev.BiosBase; ptr->dev_mem_base = DevToConfig[screennum].GDev.MemBase; ptr->dev_io_base = DevToConfig[screennum].GDev.IOBase; ptr->dev_clockchip = DevToConfig[screennum].GDev.clockchip; for (i = 0; (i < MAXCLOCKS) && (i < DevToConfig[screennum].GDev.numclocks); i++) ptr->dev_clock[i] = DevToConfig[screennum].GDev.clock[i]; ptr->dev_clocks = i; ptr->dev_chipid = DevToConfig[screennum].GDev.chipID; ptr->dev_chiprev = DevToConfig[screennum].GDev.chipRev; ptr->dev_irq = DevToConfig[screennum].GDev.irq; /* Make sure older drivers don't segv */ if (DevToConfig[screennum].GDev.options) { /* Fill in the available driver options for people to use */ const char *descrip = " ### Available Driver options are:-\n" " ### Values: <i>: integer, <f>: float, " "<bool>: \"True\"/\"False\",\n" " ### <string>: \"String\", <freq>: \"<f> Hz/kHz/MHz\"\n" " ### [arg]: arg optional\n"; ptr->dev_comment = xstrdup(descrip); if (ptr->dev_comment) { for (p = DevToConfig[screennum].GDev.options; p->name != NULL; p++) { char *p_e; const char *prefix = " #Option "; const char *middle = " \t# "; const char *suffix = "\n"; const char *opttype = optionTypeToSting(p->type); char *optname; int len = strlen(ptr->dev_comment) + strlen(prefix) + strlen(middle) + strlen(suffix) + 1; optname = xalloc(strlen(p->name) + 2 + 1); if (!optname) break; sprintf(optname, "\"%s\"", p->name); len += max(20, strlen(optname)); len += strlen(opttype); ptr->dev_comment = xrealloc(ptr->dev_comment, len); if (!ptr->dev_comment) break; p_e = ptr->dev_comment + strlen(ptr->dev_comment); sprintf(p_e, "%s%-20s%s%s%s", prefix, optname, middle, opttype, suffix); xfree(optname); } } } #ifdef DO_FBDEV_PROBE /* Crude mechanism to auto-detect fbdev (os dependent) */ /* Skip it for now. Options list it anyway, and we can't * determine which screen/driver this belongs too anyway. */ { int fd; fd = open("/dev/fb0", 0); if (fd != -1) { foundFBDEV = TRUE; close(fd); } } if (foundFBDEV) { XF86OptionPtr fbdev; fbdev = xf86confmalloc(sizeof(XF86OptionRec)); memset((XF86OptionPtr)fbdev,0,sizeof(XF86OptionRec)); fbdev->opt_name = "UseFBDev"; fbdev->opt_val = "ON"; ptr->dev_option_lst = (XF86OptionPtr)xf86addListItem( (glp)ptr->dev_option_lst, (glp)fbdev); } #endif return ptr; }
static XF86ConfDevicePtr configureDeviceSection (int screennum) { char identifier[16]; OptionInfoPtr p; int i = 0; parsePrologue (XF86ConfDevicePtr, XF86ConfDeviceRec) /* Move device info to parser structure */ sprintf(identifier, "Card%d", screennum); ptr->dev_identifier = strdup(identifier); /* ptr->dev_identifier = DevToConfig[screennum].GDev.identifier;*/ ptr->dev_vendor = DevToConfig[screennum].GDev.vendor; ptr->dev_board = DevToConfig[screennum].GDev.board; ptr->dev_chipset = DevToConfig[screennum].GDev.chipset; ptr->dev_busid = DevToConfig[screennum].GDev.busID; ptr->dev_driver = DevToConfig[screennum].GDev.driver; ptr->dev_ramdac = DevToConfig[screennum].GDev.ramdac; for (i = 0; (i < MAXDACSPEEDS) && (i < CONF_MAXDACSPEEDS); i++) ptr->dev_dacSpeeds[i] = DevToConfig[screennum].GDev.dacSpeeds[i]; ptr->dev_videoram = DevToConfig[screennum].GDev.videoRam; ptr->dev_textclockfreq = DevToConfig[screennum].GDev.textClockFreq; ptr->dev_bios_base = DevToConfig[screennum].GDev.BiosBase; ptr->dev_mem_base = DevToConfig[screennum].GDev.MemBase; ptr->dev_io_base = DevToConfig[screennum].GDev.IOBase; ptr->dev_clockchip = DevToConfig[screennum].GDev.clockchip; for (i = 0; (i < MAXCLOCKS) && (i < DevToConfig[screennum].GDev.numclocks); i++) ptr->dev_clock[i] = DevToConfig[screennum].GDev.clock[i]; ptr->dev_clocks = i; ptr->dev_chipid = DevToConfig[screennum].GDev.chipID; ptr->dev_chiprev = DevToConfig[screennum].GDev.chipRev; ptr->dev_irq = DevToConfig[screennum].GDev.irq; /* Make sure older drivers don't segv */ if (DevToConfig[screennum].GDev.options) { /* Fill in the available driver options for people to use */ const char *descrip = " ### Available Driver options are:-\n" " ### Values: <i>: integer, <f>: float, " "<bool>: \"True\"/\"False\",\n" " ### <string>: \"String\", <freq>: \"<f> Hz/kHz/MHz\"\n" " ### [arg]: arg optional\n"; ptr->dev_comment = xstrdup(descrip); if (ptr->dev_comment) { for (p = DevToConfig[screennum].GDev.options; p->name != NULL; p++) { char *p_e; const char *prefix = " #Option "; const char *middle = " \t# "; const char *suffix = "\n"; const char *opttype = optionTypeToSting(p->type); char *optname; int len = strlen(ptr->dev_comment) + strlen(prefix) + strlen(middle) + strlen(suffix) + 1; optname = xalloc(strlen(p->name) + 2 + 1); if (!optname) break; sprintf(optname, "\"%s\"", p->name); len += max(20, strlen(optname)); len += strlen(opttype); ptr->dev_comment = xrealloc(ptr->dev_comment, len); if (!ptr->dev_comment) break; p_e = ptr->dev_comment + strlen(ptr->dev_comment); sprintf(p_e, "%s%-20s%s%s%s", prefix, optname, middle, opttype, suffix); xfree(optname); } } } return ptr; }