コード例 #1
0
ファイル: vpn_pro100.c プロジェクト: imgits/rkanalyzer
// 新しいデバイスの発見
void pro100_new(struct pci_device *dev)
{
	PRO100_CTX *ctx = SeZeroMalloc(sizeof(PRO100_CTX));

	printf ("pro100_new\n");

#ifdef VTD_TRANS
        if (iommu_detected) {
                add_remap(dev->address.bus_no ,dev->address.device_no ,dev->address.func_no,
                          vmm_start_inf() >> 12, (vmm_term_inf()-vmm_start_inf()) >> 12, PERM_DMA_RW) ;
        }
#endif // of VTD_TRANS

	ctx->dev = dev;
	ctx->lock = SeNewLock();
	dev->host = ctx;

	pro100_alloc_recv_buffer(ctx);

	if (pro100_ctx == NULL)
	{
		pro100_ctx = ctx;
	}
	else
	{
		printf("Error: Two or more pro100 devices found.\n");
		pro100_beep(1234, 5000);
	}
}
コード例 #2
0
ファイル: SeKernel.c プロジェクト: anbangr/bitvisor-dev
// 新しい ETH の作成
SE_ETH *SeEthNew(SE_HANDLE nic_handle, UINT nic_type, SE_ETH_RECV_CALLBACK *recv_callback, void *recv_callback_param)
{
	SE_ETH *e;
	// 引数チェック
	if (nic_handle == NULL || recv_callback == NULL)
	{
		return NULL;
	}

	e = SeZeroMalloc(sizeof(SE_ETH));
	e->NicHandle = nic_handle;
	e->RecvCallback = recv_callback;
	e->RecvCallbackParam = recv_callback_param;
	e->NicType = nic_type;
	e->SenderMacList = SeNewList(NULL);
	e->SenderMacListLock = SeNewLock();
	e->RecvQueue = SeNewQueue();
	e->RecvQueueLock = SeNewLock();
	e->SendQueue = SeNewQueue();
	e->IsPromiscusMode = true;

	SeEthGenRandMacAddress(e->MyMacAddress, NULL, 0);

	if (e->NicType == SE_NIC_PHYSICAL)
	{
		SeSysGetPhysicalNicInfo(nic_handle, &e->Info);
		SeSysSetPhysicalNicRecvCallback(nic_handle, SeEthNicCallback, e);
	}
	else
	{
		SeSysGetVirtualNicInfo(nic_handle, &e->Info);
		SeSysSetVirtualNicRecvCallback(nic_handle, SeEthNicCallback, e);
	}

	return e;
}
コード例 #3
0
ファイル: SeKernel.c プロジェクト: anbangr/bitvisor-dev
// タイマの新規作成
SE_TIMER *SeTimerNew(SE_TIMER_CALLBACK *callback, void *callback_param)
{
	SE_TIMER *t;
	// 引数チェック
	if (callback == NULL)
	{
		return NULL;
	}

	t = SeZeroMalloc(sizeof(SE_TIMER));

	t->TimerHandle = SeSysNewTimer(SeTimerCallback, t);
	t->TimerEntryList = SeNewList(SeTimerEntryCompare);

	t->TimerCallback = callback;
	t->TimerCallbackParam = callback_param;

	t->TimerEntryLock = SeNewLock();

	return t;
}
コード例 #4
0
ファイル: SeKernel.c プロジェクト: anbangr/bitvisor-dev
// カーネル系ライブラリの初期化
void SeInitKernel()
{
	rt->TickLock = SeNewLock();

	rt->StartTick64 = SeTick64Internal();
}