代码拉取完成,页面将自动刷新
同步操作将从 bbingo/qboot 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#include <stddef.h>
#include "bios.h"
#include "pci.h"
#include "processor-flags.h"
#define PCI_FUNC_NOT_SUPPORTED 0x81
#define PCI_BAD_VENDOR_ID 0x83
#define PCI_DEVICE_NOT_FOUND 0x86
#define PCI_BUFFER_TOO_SMALL 0x89
/*
* The PCIBIOS handler must be position independent. To read a flat pointer,
* we use the instruction pointer to retrieve the address corresponding to
* physical address 0 (i.e., what Linux calls PAGE_OFFSET).
*/
static inline void *from_flat_ptr(void *p)
{
return p + pic_base();
}
#define FLAT_VAR(x) (*(typeof(&(x))) from_flat_ptr(&(x)))
#pragma GCC optimize("no-jump-tables")
bioscall void pcibios_handler(struct bios32regs *args)
{
switch (args->eax) {
/* discovery */
case 0xb101:
args->eax = 0x01;
args->ebx = 0x210;
args->ecx = FLAT_VAR(max_bus);
args->edx = 0x20494350;
goto success;
/* config space access */
case 0xb108:
args->ecx = pci_config_readb(args->ebx, args->edi);
goto success;
case 0xb109:
args->ecx = pci_config_readw(args->ebx, args->edi);
goto success;
case 0xb10a:
args->ecx = pci_config_readl(args->ebx, args->edi);
goto success;
case 0xb10b:
pci_config_writeb(args->ebx, args->edi, args->ecx);
goto success;
case 0xb10c:
pci_config_writew(args->ebx, args->edi, args->ecx);
goto success;
case 0xb10d:
pci_config_writel(args->ebx, args->edi, args->ecx);
goto success;
/* find device id, find class code */
case 0xb102:
case 0xb103:
args->eax &= ~0xff00;
args->eax |= PCI_DEVICE_NOT_FOUND << 8;
break;
default:
args->eax &= ~0xff00;
args->eax |= PCI_FUNC_NOT_SUPPORTED << 8;
break;
}
args->eflags |= X86_EFLAGS_CF;
return;
success:
/* On entry, CF=0 */
args->eax &= ~0xff00; /* clear ah */
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。