vxworks_pci函数注释

船里的河 船里的河     2022-08-24     448

关键词:

/***********************************************
PCI设备查找程序
vendorId:设备厂商号;
deviceId:设备号;
index:索引号;
*pBusNo:返回的总线号;
*pDeviceNo;返回的设备号;
*pFuncNo:返回的功能号;
************************************************/

STATUS pciFindDevice
    (
    int    vendorId,	/* vendor ID */
    int    deviceId,	/* device ID */
    int    index,	/* desired instance of device */
    int *  pBusNo,	/* bus number */
    int *  pDeviceNo,	/* device number */
    int *  pFuncNo	/* function number */
    )
    {
    STATUS status = ERROR;/*初始化状态为error*/
    BOOL   cont   = TRUE;/*定义cont为TRUE*/
    int    busNo;
    int    deviceNo;
    int    funcNo;
    UINT32 device;
    UINT32 vendor;
    UINT8  header;

    if (pciLibInitStatus != OK)			/* sanity check 检查初始化状态*/
        cont = FALSE;

    for (busNo = 0; cont == TRUE && busNo <= pciMaxBus; busNo++)/*查找总线号*/
        for (deviceNo = 0;
	     ((cont == TRUE) && (deviceNo < PCI_MAX_DEV));
	     ++deviceNo)											/*查找设备号*/
            for (funcNo = 0; cont == TRUE && funcNo < PCI_MAX_FUNC; funcNo++)/*查找功能号*/
		{
		/* avoid a special bus cycle 避免一个特殊的总线循环*/

		if ((deviceNo == 0x1f) && (funcNo == 0x07))
		    continue;/*结束当前循环开始下一个循环*/

		pciConfigInLong (busNo, deviceNo, funcNo, PCI_CFG_VENDOR_ID,
				 &vendor);

		/*
		 * If nonexistent device, skip to next, only look at
		 * vendor ID field for existence check
		 */

		if (((vendor & 0x0000ffff) == 0x0000FFFF) && (funcNo == 0))
		    break;

		device  = vendor >> 16;/*右移16位得到设备名*/
		device &= 0x0000FFFF;
		vendor &= 0x0000FFFF;/*厂商名等于低16位*/
		if ((vendor == (UINT32)vendorId) &&
		    (device == (UINT32)deviceId) &&
		    (index-- == 0))
		    {
		    *pBusNo	= busNo;
		    *pDeviceNo	= deviceNo;
		    *pFuncNo	= funcNo;
		    status	= OK;
		    cont	= FALSE;	/* terminate all loops */
		    continue;
		    }

		/* goto next if current device is single function */

		pciConfigInByte (busNo, deviceNo, funcNo, PCI_CFG_HEADER_TYPE, 
				 &header);
		if ((header & PCI_HEADER_MULTI_FUNC) != PCI_HEADER_MULTI_FUNC &&
		    funcNo == 0)
		    break;
		}

    return (status);
    }
	
	
	
	/*************************************************
	PCI读取函数
	busNo:总线号;
	deviceNo:设备号;
	funcNo:功能号;
	offset:偏移量;
	*pData:返回的数据;
	**************************************************/
	STATUS pciConfigInLong
    (
    int	busNo,     /* bus number */
    int	deviceNo,  /* device number */
    int	funcNo,    /* function number */
    int	offset,    /* offset into the configuration space */
    UINT32 * pData /* data read from the offset */
    )
    {
    int		 key;
    STATUS retStat = ERROR;
    UINT32 retval = 0;

    /* check for library initialization or unaligned access */

#ifdef PCI_CONFIG_OFFSET_NOCHECK
    if (pciLibInitStatus != OK)
	{
        return (retStat);
	}
#else
    if ((pciLibInitStatus != OK) || ((offset & (int)0x3) > 0) )
	{
        return (retStat);
	}
#endif

    key = intLock ();				/* mutual exclusion start 屏蔽中断互斥开始*/

    switch (pciConfigMech)
	{

        case PCI_MECHANISM_0:
            if (pciConfigRead (busNo, deviceNo, funcNo, offset, 4,
                                (void *)&retval) == ERROR)
		{
                retval = 0xffffffff;
		}
	    else
		{
		retStat = OK;
		}
            break;


	case PCI_MECHANISM_1:
	    PCI_OUT_LONG (pciConfigAddr0, 
		          pciConfigBdfPack (busNo, deviceNo, funcNo) |
		          (offset & 0xfc) | 0x80000000);
	    retval = PCI_IN_LONG (pciConfigAddr1);
	    retStat = OK;
	    break;

	case PCI_MECHANISM_2:
	    PCI_OUT_BYTE (pciConfigAddr0, 0xf0 | (funcNo << 1));
	    PCI_OUT_BYTE (pciConfigAddr1, busNo);
	    retval = PCI_IN_LONG (pciConfigAddr2 | ((deviceNo & 0x000f) << 8) |
				  (offset & 0xfc));
	    PCI_OUT_BYTE (pciConfigAddr0, 0);
	    retStat = OK;
	    break;

	default:
	    break;
	}

    intUnlock (key);				/* mutual exclusion stop 解除中断锁*/

    *pData = retval;

    return (retStat);
    }

  

golang注释规范(代码片段)

...成的文档的质量。下面从包注释、结构体(接口)注释、函数(方法)注释、代码逻辑注释以及注释规范方面进行说明。包注释每个包都应该有一个包注释,一个位于package子句之前行注释包注释应该包含下面基本信息//@Title请填... 查看详情

vscode自动生成文件头部注释和函数注释(代码片段)

...,然后输入“fileheader”,文件头部注释:Fileheader:customMade函数注释:Fileheader:cursorMode随便点击哪个"在setting.json"中编辑,输入以下设置后保存,然后重启vscode更新设置://文件头部注释"fileheader.customMade": 查看详情

vscode自动生成文件头部注释和函数注释(代码片段)

主动学习VsCode自动生成文件头部注释和函数注释扩展应用商店里安装koroFileHeader必须的基础配置:头部注释模板与函数注释模板复制:复制下面给出的模板插入:插入模板到全局设置(setting.json)中。简单的更改:比如把... 查看详情

Doxygen -- 多个函数的单个注释块

】Doxygen--多个函数的单个注释块【英文标题】:Doxygen--SingleCommentBlockforMultipleFunctions【发布时间】:2016-09-1401:00:43【问题描述】:你能用一个注释块来注释doxygen中的多个函数吗?下面是一个不起作用的简单示例。我可以做类似的... 查看详情

vscode自动生成文件注释和函数注释插件使用指南(代码片段)

Vscode自动生成文件注释和函数注释插件使用指南一、插件安装插件名:koroFileHeader插件安装二、插件配置打开配置文件添加配置配置参考://函数注释"fileheader.cursorMode":"Function":"","Description":""... 查看详情

如何注释采用可变长度元组的函数? (可变元组类型注释)

】如何注释采用可变长度元组的函数?(可变元组类型注释)【英文标题】:Howtoannotatefunctionthattakesatupleofvariablelength?(variadictupletypeannotation)【发布时间】:2019-07-1120:03:18【问题描述】:我有一个函数,它接受一个不同长度的元... 查看详情

意义模糊的函数签名……文档注释

...gGetSubstring(stringstr,intstartIndex,intlength)文档注释,通常写到函数体外,用于描述函数体外的代码在函数体外///就能弹出一段代码书写注释 查看详情

具有两个或多个返回参数的函数注释

】具有两个或多个返回参数的函数注释【英文标题】:Functionannotationwithtwoormorereturnparameters【发布时间】:2019-09-2415:24:39【问题描述】:当我为返回一个参数的函数编写注释时,我没有问题。deffunc()->str:return"ok"但是,当我编写... 查看详情

R中的函数注释约定

】R中的函数注释约定【英文标题】:FunctioncommentingconventionsinR【发布时间】:2011-09-1313:15:05【问题描述】:我是R的新手,我一直在脚本文件中定义一些我自己的函数。我打算让其他人稍后重新使用它们,我找不到任何关于R函数... 查看详情

spring3.2注释自动装配多个构造函数(代码片段)

Spring文档:每个类只能标记一个带注释的构造函数,但可以注释多个非必需的构造函数。如果我有一个自动装配的构造函数,一切都很好。如果我有两个或更多autowired,但required=false注释构造函数,一切都很好。但是如果我以某... 查看详情

Python3 的“函数注释”有啥好的用途?

】Python3的“函数注释”有啥好的用途?【英文标题】:WhataregoodusesforPython3\'s"FunctionAnnotations"?Python3的“函数注释”有什么好的用途?【发布时间】:2011-03-0313:19:36【问题描述】:函数注释:PEP-3107我遇到了一段演示Python3... 查看详情

是否有任何 JS 函数可以取消注释,已经注释了 HTML [重复]

】是否有任何JS函数可以取消注释,已经注释了HTML[重复]【英文标题】:IsthereanyJSfunctiontoUncomment,alreadycommentedHTML[duplicate]【发布时间】:2018-07-0705:51:16【问题描述】:<divid="div1">bar</div>JQueryfunctioncomment(element)element.wrap(func... 查看详情

python中的函数注释

】python中的函数注释【英文标题】:functionannotationsinpython【发布时间】:2016-07-2000:14:28【问题描述】:我刚刚发现了python3(https://www.python.org/dev/peps/pep-3107/)的函数注释,它似乎非常适合记录参数或返回类型。它还在我的pycharmIDE中... 查看详情

visualstudio+vassistx自动添加函数头文件头注释(代码片段)

...操作起来也很简单,具体方法和步骤如下:1.增加函数头注释之后注释模板中编辑自己需要的注释内容:编辑好注释模板之后将输入光标定位到需要添加注释的C++函数,然后右 查看详情

go函数

函数声明和注释1、函数声明:func函数名字(参数列表)(返回值列表){}2.注释,两种注释,单行注释://和多行注释/**/3、一个.go文件初始化,先执行全局变量,再执行init()函数,init()函数自动调用4、多个包引用,如果引用顺序是mai... 查看详情

休眠注释:实体没有默认构造函数

】休眠注释:实体没有默认构造函数【英文标题】:HibernateAnnotations:Nodefaultconstructorforentity【发布时间】:2014-10-1614:28:20【问题描述】:我正在尝试持久化JAXB生成的对象。这是示例结构:@Column(name="reporting_identifier")privateStringrepor... 查看详情

返回 lambda 的函数的类型注释

】返回lambda的函数的类型注释【英文标题】:Typeannotationforfunctionreturningalambda【发布时间】:2018-12-1522:11:33【问题描述】:我非常喜欢在Python中使用类型注释的想法。我知道如何在这个简单的例子中这样做:deffoo(bar:int,lol:int)->... 查看详情

navicatpremium的mysql函数注释怎么添加

...个表,选择“设计表”,快捷键是ctrl+d 参考技术B定义完函数后可以通过comment添加注释CREATEDEFINER=CURRENT_USERFUNCTION`NewProc`()RETURNSintegerCOMMENT'这里给函数添加注释'BEGIN#Routinebodygoeshere...RETURN0;END;函数决定性请参考链接:https://blog... 查看详情