busresolve 设备配置子例程

用途

为 I/O 总线上的适配器分配总线资源。

语法

#include <cf.h>
#include <sys/cfgodm.h>
#include <sys/cfgdb.h>
int busresolve
(
logname, flag, conf_list,
not_res_list, busname)
char *  logname;
int   flags;
char *  conf_list;
char *   not_res_list;
char *  busname;

参数

描述
logname 指定设备逻辑名。
标志 指定引导阶段 0 或指定 0。
配置列表 指向包含至少 512 个字符的数组。
not_res_list 指向包含至少 512 个字符的数组。
总线名称 指定该总线的逻辑名。

描述

布萨里 设备配置子例程由设备的配置方法调用,以便为具有预定义总线资源属性的所有设备分配总线资源。 它还由总线配置方法调用,以解析处于 "已定义" 状态的所有设备的属性。

此子例程首先查询 "定制属性" 和 "预定义属性" 对象类,以检索当前总线资源属性设置的列表以及每个属性的可能设置的列表。 为了解决分配给已可用设备的值与当前设备的值之间的冲突,子例程调整处于 "已定义" 状态的设备的属性值。 例如, 布萨里 子例程确保在运行时调用当前设备时,没有为当前设备分配与已可用的设备相同的中断级别。 这些值将在定制属性对象类中更新。

布萨里 子例程从不修改已处于 "可用" 状态的设备的属性。 它会忽略处于 "已定义" 状态的设备chgstatus"定制设备" 对象类中的字段指示缺少这些设备。

日志名称 参数设置为设备的逻辑名时,如果需要解决与已处于 "可用" 状态的设备的任何冲突,那么 布萨里 子例程将调整指定设备的总线资源属性。 设备的 "配置" 方法必须调用 布萨里 子例程,以确保在运行时配置设备时正确分配其总线资源。 "配置" 方法在作为系统引导的一部分运行时不需要执行此操作,因为总线设备的 "配置" 方法已执行此操作。

如果 日志名称 参数设置为空字符串,那么 布萨里 子例程会将总线资源分配给所有尚未处于 "可用" 状态的设备。 在系统引导期间,总线设备的配置方法以这种方式调用 布萨里 子例程。

对于系统引导阶段 1 , 标志 参数设置为 1; 对于 2 引导阶段 2 ,设置为 2; 2 运行时期间调用 布萨里 子例程时, 0 为 0。 只能调用 布萨里 子例程以解析特定设备的总线资源 (在运行时)。 即,当 日志名称 参数指定设备逻辑名时, 标志 参数必须是 0。

资源处于繁忙状态 值指示 布萨里 子例程无法解决所有的冲突。 在此情况下, 配置列表 参数将包含已成功解析其属性的设备的逻辑名的列表。 not_res_list 参数还包含它无法成功解析其所有属性的设备的逻辑名列表。 名称显示在 not_res_list 参数中的设备不得配置为 "可用" 状态。

当您为具有总线资源的设备编写 "配置" 方法时,如果 布萨里 子例程不返回 确定 值,请确保该方法失败并返回值 资源处于繁忙状态

注: 如果 配置列表not_res_list 字符串不至少为 512 个字符,那么可能没有足够的空间来存放设备名称。

返回值

描述
确定 指示已成功解析和分配所有总线资源。
E_ARGS 指出 布萨里 子例程的参数无效。 例如, 日志名称 参数指定了设备逻辑名,但对于运行时, 标志 参数 0 设置为 0。
MALLOC 指示 马洛克 操作 (如果需要内存存储) 失败。
E_NOCuDv 指示对于其逻辑名由 总线名称 参数指定的总线设备,没有定制设备数据。
ODMGET 指示从配置数据库检索数据时发生 ODM 错误。
E_PARENTSTATE 指示由 总线名称 参数指定其名称的总线设备未处于 "可用" 状态。
E_BUSRESOLVE 指示设备的总线资源没有解析。 日志名称 参数可以标识特定的设备。 但是,如果此参数为空,那么 E_BUSRESOLVE 值指示未解析系统中某些未指定设备的总线资源。

文件

描述
/usr/lib/libcfg.a 设备配置子例程的归档。