回型标志使用规范

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

回型标志使用规范
TLP_V3_POINT_PUT(msdData->tlp_type, 0x49);
TLP_V3_VERSION_PUT(msdData->tlp_type, 0x00);
TLP_V3_FORMAT_PUT(msdData->tlp_type, 0x01);
if (req->addrcs & VGUEST_MSI_64BIT_ADDR_TAG) {
TLP_V3_TC_PUT(msdData->tlp_type, TLP_V3_TC_MEM_WR_64); } else {
TLP_V3_TC_PUT(msdData->tlp_type, TLP_V3_TC_MEM_WR_32); }
TLP_V3_ATTR_PUT(msdData->tlp_type, 0x00);
TLP_V3_LENGTH_PUT(msdData->tlp_type, 0x00, 0x04);
TLP_V3_CD_PUT(msdData->tlp_type, 0x00);
TLP_V3_TD_PUT(msdData->tlp_type, 0x00);
msdData->addr_lo = req->addrlo;
msdData->addr_hi = req->addrhi;
/* 记录长度 */
msdData->length = req->length;
msdData->bdf = bdf;
MSIMsgData.msiData = msdData;
return msdData;
}
static inline uint8_t pcm2vgacha(const uint8_t pcm)
{
return (pcm >> VGUEST_MSI_VCHAR_SHIFT) &
VGUEST_MSI_VCHAR_MASK;
}
/* 用以计算介质访问设备中坏块数据,
* 那么就对于虚拟主机来说也可以用该功能来计算设备中的损坏的msi * @param req - msi请求结构
* @param msdData - 中断处理返回的MSI数据结构
*/
int vgGuestCHDHandle(MsiRequest *req, MsiData *msdData)
{
uint8_t cha;
#if 0
/* 由于msi地址信息存储的只是某个设备的请求部分,
* 那么要查询某个msi-address记录是属于哪个设备,还需要去查询对应的MSI处理域
* 其中包含请求是属于哪个设备,那么这里通过查询设备bdf来获取其介质访问控制器id
*/
uint8_t pcm = qemuAnd24hGetPCMFromBDF(msdData->bdf);
if (pcm == 0x00) {
return 0;
}
/* 接着获取其介质访问控制器中CHA号 */
cha = pcm2vgacha(pcm);
#endif
cha = msdData->cha;
/* 查询记录并更新到介质访问设备 */
return qemuAnd24hCHDRetry(cha);
}
/**
* @brief vgGuestMSIHandle - msi中断处理函数
*
* @param req - 中断请求结构
*
* @return MsiData*
*/
MsiData* vgGuestMSIHandle(MsiRequest *req)
{
uint8_t bdf;
MsiData *msdData;
/* 由于msi数据存储此处无法获知是属于那个设备的是msi * 那么需要根据配置文件中的配置信息来确定
*/
bdf = qemuGetBDFFromDirector(req->vector);
if (bdf == 0x00)
return NULL;
msdData = vgGuestGetMSIRequest(req, bdf);
return MSIMsgData.msiData;
}
/**
* @brief vgGuestMSIConfig - msi虚拟中断配置函数 *
* @param handler - msi中断处理函数
*
* @return
*/
void vgGuestMSIConfig(msi_request_t handler)
{
if (handler == NULL)
return;
/* 注册处理函数 */
MSIMsgData.handler = handler;
}。

相关文档
最新文档