Merge branch 'master' of git+ssh://git.freedesktop.org/git/xorg/xserver into input-hotplug
This commit is contained in:
commit
672ca156bf
|
@ -2474,44 +2474,25 @@ xf86LoaderCheckSymbol(const char *name)
|
||||||
return LoaderSymbol(name) != NULL;
|
return LoaderSymbol(name) != NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* These two are just ABI stubs, they don't do anything in dlloader world */
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
xf86LoaderReqSymLists(const char **list0, ...)
|
xf86LoaderReqSymLists(const char **list0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, list0);
|
|
||||||
LoaderVReqSymLists(list0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
xf86LoaderReqSymbols(const char *sym0, ...)
|
xf86LoaderReqSymbols(const char *sym0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, sym0);
|
|
||||||
LoaderVReqSymbols(sym0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
xf86LoaderRefSymLists(const char **list0, ...)
|
xf86LoaderRefSymLists(const char **list0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, list0);
|
|
||||||
LoaderVRefSymLists(list0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
xf86LoaderRefSymbols(const char *sym0, ...)
|
xf86LoaderRefSymbols(const char *sym0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, sym0);
|
|
||||||
LoaderVRefSymbols(sym0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -15,15 +15,6 @@
|
||||||
|
|
||||||
static const OptionInfoRec *DDCAvailableOptions(void *unused);
|
static const OptionInfoRec *DDCAvailableOptions(void *unused);
|
||||||
|
|
||||||
const char *i2cSymbols[] = {
|
|
||||||
"xf86CreateI2CDevRec",
|
|
||||||
"xf86I2CDevInit",
|
|
||||||
"xf86I2CWriteRead",
|
|
||||||
"xf86I2CFindDev",
|
|
||||||
"xf86DestroyI2CDevRec",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static MODULESETUPPROTO(ddcSetup);
|
static MODULESETUPPROTO(ddcSetup);
|
||||||
|
|
||||||
static XF86ModuleVersionInfo ddcVersRec =
|
static XF86ModuleVersionInfo ddcVersRec =
|
||||||
|
@ -58,12 +49,6 @@ ddcSetup(pointer module, pointer opts, int *errmaj, int *errmin)
|
||||||
if (!setupDone) {
|
if (!setupDone) {
|
||||||
setupDone = TRUE;
|
setupDone = TRUE;
|
||||||
xf86AddModuleInfo(&DDC, module);
|
xf86AddModuleInfo(&DDC, module);
|
||||||
/*
|
|
||||||
* Tell the loader about symbols from other modules that this module
|
|
||||||
* might refer to.
|
|
||||||
*/
|
|
||||||
LoaderRefSymLists(i2cSymbols, NULL);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* The return value must be non-NULL on success even though there
|
* The return value must be non-NULL on success even though there
|
||||||
|
@ -348,8 +333,6 @@ DDCRead_DDC2(int scrnIndex, I2CBusPtr pBus, int start, int len)
|
||||||
unsigned char *R_Buffer;
|
unsigned char *R_Buffer;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
xf86LoaderReqSymLists(i2cSymbols, NULL);
|
|
||||||
|
|
||||||
if (!(dev = xf86I2CFindDev(pBus, 0x00A0))) {
|
if (!(dev = xf86I2CFindDev(pBus, 0x00A0))) {
|
||||||
dev = xf86CreateI2CDevRec();
|
dev = xf86CreateI2CDevRec();
|
||||||
dev->DevName = "ddc2";
|
dev->DevName = "ddc2";
|
||||||
|
|
|
@ -68,32 +68,6 @@ static ExtensionModule XF86DRIExt =
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *drmSymbols[] = {
|
|
||||||
"drmAddContextTag",
|
|
||||||
"drmAddMap",
|
|
||||||
"drmAuthMagic",
|
|
||||||
"drmAvailable",
|
|
||||||
"drmClose",
|
|
||||||
"drmCreateContext",
|
|
||||||
"drmCreateDrawable",
|
|
||||||
"drmDelContextTag",
|
|
||||||
"drmDestroyContext",
|
|
||||||
"drmDestroyDrawable",
|
|
||||||
"drmFreeReservedContextList",
|
|
||||||
"drmGetContextTag",
|
|
||||||
"drmGetLock",
|
|
||||||
"drmGetReservedContextList",
|
|
||||||
"drmInstallSIGIOHandler",
|
|
||||||
"drmMap",
|
|
||||||
"drmOpen",
|
|
||||||
"drmRemoveSIGIOHandler",
|
|
||||||
"drmSetBusid",
|
|
||||||
"drmSetContextFlags",
|
|
||||||
"drmUnlock",
|
|
||||||
"drmUnmap",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
_X_EXPORT XF86ModuleData driModuleData = { &VersRec, driSetup, NULL };
|
_X_EXPORT XF86ModuleData driModuleData = { &VersRec, driSetup, NULL };
|
||||||
|
|
||||||
static pointer
|
static pointer
|
||||||
|
@ -110,10 +84,7 @@ driSetup(pointer module, pointer opts, int *errmaj, int *errmin)
|
||||||
|
|
||||||
if (!drm) {
|
if (!drm) {
|
||||||
if (errmaj) *errmaj = LDR_NOSUBENT;
|
if (errmaj) *errmaj = LDR_NOSUBENT;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
LoaderReqSymLists(drmSymbols, NULL);
|
|
||||||
LoaderRefSymbols("noPanoramiXExtension", NULL);
|
|
||||||
LoadExtension(&XF86DRIExt, FALSE);
|
LoadExtension(&XF86DRIExt, FALSE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -97,22 +97,6 @@ static int refCount[MAX_HANDLE];
|
||||||
*/
|
*/
|
||||||
static int moduleseq = 0;
|
static int moduleseq = 0;
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int num;
|
|
||||||
const char **list;
|
|
||||||
} symlist;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* List of symbols that may be referenced, and which are allowed to be
|
|
||||||
* unresolved providing that they don't appear on the "reqired" list.
|
|
||||||
*/
|
|
||||||
static symlist refList = { 0, NULL };
|
|
||||||
|
|
||||||
/* List of symbols that must not be unresolved */
|
|
||||||
static symlist reqList = { 0, NULL };
|
|
||||||
|
|
||||||
static int fatalReqSym = 0;
|
|
||||||
|
|
||||||
/* Prototypes for static functions. */
|
/* Prototypes for static functions. */
|
||||||
static loaderPtr _LoaderListPush(void);
|
static loaderPtr _LoaderListPush(void);
|
||||||
static loaderPtr _LoaderListPop(int);
|
static loaderPtr _LoaderListPop(int);
|
||||||
|
@ -300,165 +284,25 @@ _LoaderModuleToName(int module)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* These four are just ABI stubs */
|
||||||
* Add a list of symbols to the referenced list.
|
|
||||||
*/
|
|
||||||
|
|
||||||
static void
|
|
||||||
AppendSymbol(symlist * list, const char *sym)
|
|
||||||
{
|
|
||||||
list->list = xnfrealloc(list->list, (list->num + 1) * sizeof(char **));
|
|
||||||
/* copy the symbol, since it comes from a module
|
|
||||||
that can be unloaded later */
|
|
||||||
list->list[list->num] = xnfstrdup(sym);
|
|
||||||
list->num++;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
AppendSymList(symlist * list, const char **syms)
|
|
||||||
{
|
|
||||||
while (*syms) {
|
|
||||||
AppendSymbol(list, *syms);
|
|
||||||
syms++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
SymInList(symlist * list, char *sym)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < list->num; i++)
|
|
||||||
if (strcmp(list->list[i], sym) == 0)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
LoaderVRefSymbols(const char *sym0, va_list args)
|
|
||||||
{
|
|
||||||
const char *s;
|
|
||||||
|
|
||||||
if (sym0 == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
s = sym0;
|
|
||||||
do {
|
|
||||||
AppendSymbol(&refList, s);
|
|
||||||
s = va_arg(args, const char *);
|
|
||||||
} while (s != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
LoaderRefSymbols(const char *sym0, ...)
|
LoaderRefSymbols(const char *sym0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, sym0);
|
|
||||||
LoaderVRefSymbols(sym0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
LoaderVRefSymLists(const char **list0, va_list args)
|
|
||||||
{
|
|
||||||
const char **l;
|
|
||||||
|
|
||||||
if (list0 == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
l = list0;
|
|
||||||
do {
|
|
||||||
AppendSymList(&refList, l);
|
|
||||||
l = va_arg(args, const char **);
|
|
||||||
} while (l != NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
LoaderRefSymLists(const char **list0, ...)
|
LoaderRefSymLists(const char **list0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, list0);
|
|
||||||
LoaderVRefSymLists(list0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
LoaderVReqSymLists(const char **list0, va_list args)
|
|
||||||
{
|
|
||||||
const char **l;
|
|
||||||
|
|
||||||
if (list0 == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
l = list0;
|
|
||||||
do {
|
|
||||||
AppendSymList(&reqList, l);
|
|
||||||
l = va_arg(args, const char **);
|
|
||||||
} while (l != NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
LoaderReqSymLists(const char **list0, ...)
|
LoaderReqSymLists(const char **list0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, list0);
|
|
||||||
LoaderVReqSymLists(list0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
LoaderVReqSymbols(const char *sym0, va_list args)
|
|
||||||
{
|
|
||||||
const char *s;
|
|
||||||
|
|
||||||
if (sym0 == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
s = sym0;
|
|
||||||
do {
|
|
||||||
AppendSymbol(&reqList, s);
|
|
||||||
s = va_arg(args, const char *);
|
|
||||||
} while (s != NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
_X_EXPORT void
|
_X_EXPORT void
|
||||||
LoaderReqSymbols(const char *sym0, ...)
|
LoaderReqSymbols(const char *sym0, ...)
|
||||||
{
|
{
|
||||||
va_list ap;
|
|
||||||
|
|
||||||
va_start(ap, sym0);
|
|
||||||
LoaderVReqSymbols(sym0, ap);
|
|
||||||
va_end(ap);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* _LoaderHandleUnresolved() decides what to do with an unresolved
|
|
||||||
* symbol. Symbols that are not on the "referenced" or "required" lists
|
|
||||||
* get a warning if they are unresolved. Symbols that are on the "required"
|
|
||||||
* list generate a fatal error if they are unresolved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
_LoaderHandleUnresolved(char *symbol, char *module)
|
|
||||||
{
|
|
||||||
int fatalsym = 0;
|
|
||||||
|
|
||||||
if (xf86ShowUnresolved && !fatalsym) {
|
|
||||||
if (SymInList(&reqList, symbol)) {
|
|
||||||
fatalReqSym = 1;
|
|
||||||
ErrorF("Required symbol %s from module %s is unresolved!\n",
|
|
||||||
symbol, module);
|
|
||||||
}
|
|
||||||
if (!SymInList(&refList, symbol)) {
|
|
||||||
ErrorF("Symbol %s from module %s is unresolved!\n",
|
|
||||||
symbol, module);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return (fatalsym);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Public Interface to the loader. */
|
/* Public Interface to the loader. */
|
||||||
|
@ -578,15 +422,11 @@ LoaderSymbol(const char *sym)
|
||||||
return (DLFindSymbol(sym));
|
return (DLFindSymbol(sym));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* more stub */
|
||||||
_X_EXPORT int
|
_X_EXPORT int
|
||||||
LoaderCheckUnresolved(int delay_flag)
|
LoaderCheckUnresolved(int delay_flag)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
return 0;
|
||||||
|
|
||||||
if (fatalReqSym)
|
|
||||||
FatalError("Some required symbols were unresolved\n");
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
|
@ -103,11 +103,6 @@ ModuleDescPtr AddSibling(ModuleDescPtr head, ModuleDescPtr new);
|
||||||
void LoaderSetPath(const char *path);
|
void LoaderSetPath(const char *path);
|
||||||
void LoaderSortExtensions(void);
|
void LoaderSortExtensions(void);
|
||||||
|
|
||||||
void LoaderVReqSymLists(const char **, va_list args);
|
|
||||||
void LoaderVReqSymbols(const char *, va_list args);
|
|
||||||
void LoaderVRefSymLists(const char **, va_list args);
|
|
||||||
void LoaderVRefSymbols(const char *, va_list args);
|
|
||||||
|
|
||||||
void LoaderShowStack(void);
|
void LoaderShowStack(void);
|
||||||
void *LoaderSymbolHandle(const char *, int);
|
void *LoaderSymbolHandle(const char *, int);
|
||||||
int LoaderUnload(int);
|
int LoaderUnload(int);
|
||||||
|
|
|
@ -39,11 +39,6 @@
|
||||||
static unsigned char * vbeReadEDID(vbeInfoPtr pVbe);
|
static unsigned char * vbeReadEDID(vbeInfoPtr pVbe);
|
||||||
static Bool vbeProbeDDC(vbeInfoPtr pVbe);
|
static Bool vbeProbeDDC(vbeInfoPtr pVbe);
|
||||||
|
|
||||||
const char *vbe_ddcSymbols[] = {
|
|
||||||
"xf86InterpretEDID",
|
|
||||||
NULL
|
|
||||||
};
|
|
||||||
|
|
||||||
static const char vbeVersionString[] = "VBE2";
|
static const char vbeVersionString[] = "VBE2";
|
||||||
|
|
||||||
vbeInfoPtr
|
vbeInfoPtr
|
||||||
|
@ -327,8 +322,6 @@ vbeDoEDID(vbeInfoPtr pVbe, pointer pDDCModule)
|
||||||
xf86LoadSubModule(xf86Screens[pVbe->pInt10->scrnIndex], "ddc");
|
xf86LoadSubModule(xf86Screens[pVbe->pInt10->scrnIndex], "ddc");
|
||||||
if (!pModule)
|
if (!pModule)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
xf86LoaderReqSymLists(vbe_ddcSymbols, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DDC_data = vbeReadEDID(pVbe);
|
DDC_data = vbeReadEDID(pVbe);
|
||||||
|
|
|
@ -6,8 +6,6 @@
|
||||||
#include "xf86str.h"
|
#include "xf86str.h"
|
||||||
#include "vbe.h"
|
#include "vbe.h"
|
||||||
|
|
||||||
extern const char *vbe_ddcSymbols[];
|
|
||||||
|
|
||||||
static MODULESETUPPROTO(vbeSetup);
|
static MODULESETUPPROTO(vbeSetup);
|
||||||
|
|
||||||
static XF86ModuleVersionInfo vbeVersRec =
|
static XF86ModuleVersionInfo vbeVersRec =
|
||||||
|
@ -29,19 +27,5 @@ _X_EXPORT XF86ModuleData vbeModuleData = { &vbeVersRec, vbeSetup, NULL };
|
||||||
static pointer
|
static pointer
|
||||||
vbeSetup(pointer module, pointer opts, int *errmaj, int *errmin)
|
vbeSetup(pointer module, pointer opts, int *errmaj, int *errmin)
|
||||||
{
|
{
|
||||||
static Bool setupDone = FALSE;
|
|
||||||
|
|
||||||
if (!setupDone) {
|
|
||||||
setupDone = TRUE;
|
|
||||||
LoaderRefSymLists(vbe_ddcSymbols,NULL);
|
|
||||||
/*
|
|
||||||
* Tell the loader about symbols from other modules that this module
|
|
||||||
* might refer to.
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
* The return value must be non-NULL on success even though there
|
|
||||||
* is no TearDownProc.
|
|
||||||
*/
|
|
||||||
return (pointer)1;
|
return (pointer)1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue