|
|
1.1 ! root 1: /* $Header: /usr/src/sys/ldrv/RCS/dmalock.c,v 1.1 89/06/30 16:29:52 src Exp $ ! 2: * ! 3: * The information contained herein is a trade secret of INETCO ! 4: * Systems, Ltd, and is confidential information. It is provided ! 5: * under a license agreement, and may be copied or disclosed only ! 6: * under the terms of that agreement. Any reproduction or ! 7: * disclosure of this material without the express written ! 8: * authorization of INETCO Systems, Ltd. or persuant to the license ! 9: * agreement is unlawful. ! 10: * ! 11: * Copyright (c) 1989 ! 12: * An unpublished work by INETCO Systems, Ltd. ! 13: * All rights reserved. ! 14: * ! 15: * $Description: $ ! 16: * Routines to lock/unlock the DMA controller chip from a loadable driver. ! 17: * ! 18: * $Author: src $ ! 19: * ! 20: * $Creation: June 29, 1989 $ ! 21: * ! 22: * $Log: /usr/src/sys/ldrv/RCS/dmalock.c,v $ ! 23: * Revision 1.1 89/06/30 16:29:52 src ! 24: * Initial revision ! 25: * ! 26: */ ! 27: ! 28: #include <sys/coherent.h> ! 29: ! 30: typedef void (* vfp_t)(); /* Void function pointer type. */ ! 31: ! 32: /* ! 33: * External functions. ! 34: */ ! 35: extern void Kdmalock(); ! 36: extern void Kdmaunlock(); ! 37: extern void Kldtimcall(); ! 38: extern saddr_t getcs(); ! 39: ! 40: /* ! 41: * int ! 42: * dmalock( tp, fun, arg ) ! 43: * TIM * tp; ! 44: * vfp_t fun; ! 45: * int arg; ! 46: * ! 47: * Inputs: tp = Deferred function structure pointer. ! 48: * fun = Function to call if request is deferred. ! 49: * arg = Argument to pass to function. ! 50: * ! 51: * Action: Calls kernel dmalock() routine. ! 52: * ! 53: * Return: 0 = Lock granted or -1 = Lock deferred. ! 54: * ! 55: * Notes: DMA controller locking was introduced to cure a bug on the ! 56: * NCR DMA controller, where overlapped DMA caused problems. ! 57: * No action is taken if DMA locking is disabled. ! 58: */ ! 59: ! 60: int ! 61: dmalock( tp, fun, arg ) ! 62: register TIM * tp; ! 63: vfp_t fun; ! 64: int arg; ! 65: { ! 66: /* ! 67: * Define loadable driver interface. ! 68: * Kldtimcall will be invoked when a deferred function is executed. ! 69: * It will in turn invoke FP_SEL(tp->t_ldrv):4 (the calling drivers ! 70: * function call entry point), passing FP_OFF(tp->t_ldrv) (the function ! 71: * to call) in AX. ! 72: */ ! 73: FP_SEL(tp->t_ldrv) = getcs(); ! 74: FP_OFF(tp->t_ldrv) = fun; ! 75: return( kcall( Kdmalock, tp, Kldtimcall, arg ) ); ! 76: } ! 77: ! 78: /* ! 79: * void ! 80: * dmaunlock( tp ) ! 81: * TIM * tp; ! 82: * ! 83: * Inputs: tp = Deferred function structure pointer. ! 84: * ! 85: * Action: Calls the kernel dmaunlock(). ! 86: */ ! 87: ! 88: void ! 89: dmaunlock( tp ) ! 90: register TIM * tp; ! 91: { ! 92: kcall( Kdmaunlock, tp ); ! 93: } ! 94:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.