⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dpc.c

📁 newos is new operation system
💻 C
字号:
/* ** Copyright 2002, Thomas Kurschel. All rights reserved.** Distributed under the terms of the NewOS License.*/#include "xpt_internal.h"#include "dpc.h"#include <kernel/heap.h>#include <string.h>int xpt_alloc_dpc( xpt_dpc_info **dpc ){	SHOW_FLOW0( 3, "" );	*dpc = kmalloc( sizeof( **dpc ));		if( *dpc == NULL )		return ERR_NO_MEMORY;	memset( *dpc, 0, sizeof( **dpc ));		return NO_ERROR;}int xpt_free_dpc( xpt_dpc_info *dpc ){	kfree( dpc );		return NO_ERROR;}int xpt_schedule_dpc( xpt_bus_info *bus, xpt_dpc_info *dpc, /*int flags,*/	void (*func)( void *arg ), void *arg ){	SHOW_FLOW( 3, "bus=%p, dpc=%p", bus, dpc );	acquire_spinlock_irq( &bus->dpc_lock );		dpc->func = func;	dpc->arg = arg;		if( !dpc->registered ) {		dpc->registered = true;		dpc->next = bus->dpc_list;		bus->dpc_list = dpc;	} else		SHOW_FLOW0( 3, "already registered - ignored" );	release_spinlock_irq( &bus->dpc_lock );		sem_release( bus->start_service, 1 );		return NO_ERROR;}bool xpt_check_exec_dpc( xpt_bus_info *bus ){	SHOW_FLOW( 3, "bus=%p, dpc_list=%p", bus, bus->dpc_list );	acquire_spinlock_irq( &bus->dpc_lock );	if( bus->dpc_list ) {		xpt_dpc_info *dpc;		void (*dpc_func)( void * );		void *dpc_arg;				dpc = bus->dpc_list;		bus->dpc_list = dpc->next;				dpc_func = dpc->func;		dpc_arg = dpc->arg;		dpc->registered = false;		release_spinlock_irq( &bus->dpc_lock );				dpc_func( dpc_arg );				return true;	} 		release_spinlock_irq( &bus->dpc_lock );		return false;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -